庙算兵棋推演AI开发初探(4-调用AI模型)

news2024/11/25 14:45:09

前面讲了如何开展编写规则脚本型Agent(智能体)的方法,现在探究一下如何调用知识型(一般而言的训练出的模型)智能体的方法。
 

这次调用的是庙算平台的demo(网址见图)

下载了“知识+强化学习型”的压缩包,打开里面,进到【ai_demo】文件夹中是这样的:

这里面的agent.py文件也没什么大变化

import json
import os
import random

from .base_agent import BaseAgent
from .map import Map

from .feature_v1 import features as RL_FEATURE
from ai_demo import config, utils
from .model import PPO

from .select_points_fix_r_v7_2 import SelectPoint as SelectPoint

说明中写道

1. 运行所需环境为sdk要求环境,本代码额外需要安装 pytorch,本代码pytorch的版本是2.0.1

2. 本代码包括1个文件夹,2个文件,需要与 train_env 的目录同级
    ai_demo 文件夹,提供示例ai智能体
    train_red_demo.py 文件,提供与示例ai智能体相匹配的训练示例代码
    test_red_demo.py 文件,提供与示例ai智能体相匹配的测试示例代码

3. 赛道一的 ai_demo/agent.py 文件106行与136行,有2个todo需要注意;赛道二的 ai_demo/agent.py 文件102,有1个todo需要注意。

调用这个需要pytorch环境2.0.1。

PS,在自己环境上指定版本安装pytorch的命令:

123

然后我就奇怪,到底是哪里调用所谓的”训练模型“呢?

于是我发现了model.py这个文件

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim


class Critic(nn.Module):

    def __init__(self, state_dim_1, state_dim_2, hidden_dim):
        super(Critic, self).__init__()
        self.Linear11 = nn.Linear(state_dim_1, hidden_dim)
        self.Linear21 = nn.Linear(hidden_dim, hidden_dim)
        self.Linear31 = nn.Linear(hidden_dim, hidden_dim)

………………

看开头,看起来是这个东西。

里面实现了”演员-评论家“这两个类,并且实现了一个PPO类

然后我找在agnet.py文件里找PPO,发现在102行有如下内容

#### TODO 训练与测试的时候要注释掉, 提交的时候需要
#我方算子max 7
self.model = PPO(state_dim_1=1116, state_dim_2=252, hidden_dim=1024, action_dim=output_space,
gamma=config.float_gamma, lamda=config.float_lam, epochs=1000, eps=0.2, lr=config.float_lr)
self.model.load(itr=213)
###

然后发现目录”models“,里面有两个.pth 文件,原来这就是pytorch训练出的模型。

【Pytorch】一文详细介绍 pth格式 文件_pth文件-CSDN博客

转回来,看agent.py文件,这个文件是调用智能体的文件,讲规则智能体的时候我也讲到过

np_bopFeature,  np_globalFeature = self.feature.get_feature(observation)
list_ops_what_logprob_value = self.model.total_forward(np_bopFeature,  np_globalFeature, list_RedComplexActionMask)

list_ops_what_id = []
for tuple_what_prob_value in list_ops_what_logprob_value:
    list_ops_what_id.append(tuple_what_prob_value[0])
assert len(list_ops_what_id) == len(self.list_red_ops_id)

model_actions = utils.cvtModelOutputToEnvActionComplex(list_ops_what_id=list_ops_what_id,
                                                        list_red_ops_id=self.list_my_ops_id,
                                                        list_my_ops_sub_type=self.list_my_ops_sub_type,
                                                        observation=self.observation,
                                                        int_seat=self.seat,
                                                        list_MovePos=list_MovePos,
                                                        Map=self.map,
                                                        int_point_num=self.int_point_num)

这里看到函数,发现是用来接收观测状态的

self.model.total_forward()

而这个函数,就是将模型输出过滤为可执行动作用的

model_actions = utils.cvtModelOutputToEnvActionComplex(
#在utils.py文件中

def cvtModelOutputToEnvActionComplex(list_ops_what_id: tuple,
                                            list_red_ops_id, list_my_ops_sub_type,
                                            observation,
                                            int_seat,
                                            list_MovePos,
                                            Map,
                                               int_point_num) -> list:
    """
    功能:根据各个算子的动作ID等信息,计算环境可执行的动作
    用法:用于网络输出动作之后
    :param tuple_RedOperatorsID: RedAction函数的输出,红方各个算子的动作ID
    :param list_RedOperatorsIDs:
    :param list_RedOperatorsIDs:
    :param observation: 主要用于根据算子ID获取obs当前bop类,进行计算路径
    :param Map_map: core.utils.map 的 Map 类
    :return: list_total_actions 默认值为[], 若非空则内有dict类型的bq可执行动作作为list内的元素
    """

最后返回的值就从这个model_actions列表出来

total_actions += model_actions

调用完毕。


相关链接:

中国人工智能学会 (caai.cn)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1671791.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解依赖注入的三种方法以及遇到问题的解决

各位大佬光临寒舍,希望各位能赏脸给个三连,谢谢各位大佬了!!! 目录 1.三种依赖注入的方法 1.属性注入 优点 缺点 2.构造方法注入 优点 缺点 3.Setter注入 优点 缺点 4.小结 2.依赖注入常见问题的解决 1…

全国防灾减灾日主题活动投稿我可算找对了投稿方法

作为一名社区公众人员,我深知对外信息宣传的重要性。特别是在全国防灾减灾日这样的特殊时刻,我们不仅要向居民普及防灾减灾知识,还要通过媒体将社区的活动和成果展示给更多人。然而,在投稿的过程中,我最初却遭遇了诸多挑战。 起初,我采用传统的邮箱投稿方式,将精心撰写的稿件发…

网页如何集成各社区征文活动

Helllo , 我是小恒 由于我需要腾讯云社区,稀土掘金以及CSDN的征文活动RSS,找了一下没发现,所以使用GET 请求接口对网页定时进行拉取清洗,甚至无意间做了一个简单的json格式API 最终网址:hub.liheng.work API:http://hub.liheng.wo…

ubuntu server 22.04.4 系统安装详细教程

本教程使用vmware workstation 17创建虚拟机进行安装演示,安装方式和真机安装没有区别。 1、下载镜像 下载ubuntu server版本系统镜像,官网下载地址:https://cn.ubuntu.com/download/server/step1 注意:自己下载时需要确认是否是…

向银行家应用程序添加日期

● 首先我们将下面图片上的时间更换成现在的时间 const now new Date(); const day now.getDate(); const month now.getMonth() 1; const year now.getFullYear(); const hour now.getHours(); const min now.getMinutes();labelDate.textContent ${day}/${month}/$…

从头开始学Spring—01Spring介绍和IOC容器思想

目录 1.Spring介绍 1.1Spring概述 1.2特性 1.3五大功能模块 2.IOC容器 2.1IOC思想 ①获取资源的传统方式 ②反转控制方式获取资源 ③DI 2.2IOC容器在Spring中的实现 ①BeanFactory ②ApplicationContext ③ApplicationContext的主要实现类 1.Spring介绍 1.1Sprin…

ASP.NET Web Api 如何使用 Swagger 管理 API

前言 Swagger 是一个开源的框架,支持 OpenAPI 规范,可以根据 API 规范自动生成美观的、易于浏览的 API 文档页面,包括请求参数、响应示例等信息,并且,Swagger UI 提供了一个交互式的界面,可以帮助我们快速…

本来还挺喜欢……

前阵子买了个天空星开发板,到手之后发觉不对劲。 之前我们玩玩开发板都是用的面包板的,就算是ESP那种比较宽的板子用两个面包板拼一下也勉强可以用。 但是天空星它的引脚是分为两组,每组有两排,如果我们还是直接使用面包板的话&a…

Pencils Protocol 提供层次化的 Staking,品牌升级不断

Pencils Protocol 是一个 Scroll 生态中的一个综合应用平台,在全新的品牌升级后(原为 Penpad),其在原有的 LaunchPad 的基础上,进一步向收益聚合器、RWA 等板块进行全新的拓展。目前,Pencils Protocol 生态的整体功能板块包括 Lau…

Kubernetes——两万字超细致集群搭建平台规划

目录 前言——常见的K8S安装部署方式 一、Kubernetes平台规划 1.单Master集群架构 2.多Master集群架构 二、集群规划 1.服务器硬件配置推荐 2.操作系统初始化 2.1关闭防火墙 2.2关闭SElinux 2.3关闭Swap 2.4添加Hosts 2.5调整内核参数 2.5同步时间 三、集群搭建…

【每日刷题】Day39

【每日刷题】Day39 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 622. 设计循环队列 - 力扣(LeetCode) 2. 387. 字符串中的第一个唯一字符 - …

C++类细节,反汇编,面试题02

文章目录 2. 虚函数vs纯虚函数3. 重写vs重载vs隐藏3.1. 为什么C可以重载? 4. struct vs union4.1. 为什么要内存对齐? 5. static作用6. 空类vs空结构体6.1. 八个默认函数:6.2. 为什么空类占用1字节 7. const作用7.1 指针常量vs常量指针vs常量…

k8s v1.20二进制部署

目录 一、环境准备 二、操作系统初始化配置 2.1.关闭防火墙 ​编辑 2.2.关闭selinux 2.3.关闭swap 2.4.根据规划设置主机名 2.5在master添加hosts 2.6.调整内核参数 2.7.时间同步 三、部署 docker引擎 3.1.所有 node 节点部署docker引擎 四、部署 etcd 集群 4.1.…

【云计算小知识】云管理的作用是什么?

云计算已经成为推动企业数字化转型,提升运营效率的重要力量。而在这个过程中,云管理作为确保云计算环境稳定、高效运行的关键环节,其作用愈发凸显。今天我们小编就给大家详细介绍一下云管理的作用是什么? 云管理的作用是什么&…

找不到mfc140.dll是什么意思?四种高效率方法修复mfc140.dll文件

软件运行过程中的错误和问题偶尔会发生,这可能导致不便和工作效率的降低。其中一个常见的问题是“找不到 mfc140.dll”错误消息,这会阻止某些基于 Microsoft Visual Studio 2015 编写的应用程序运行。mfc140.dll 是一个重要的系统文件,今天我…

Whistle Web Debugging Proxy介绍及使用

大家好,今天继续给大家分享一款抓包工具,这款抓包工具是网页的形式,方便多人访问同时维护。Whistle Web Debugging Proxy是一个用于HTTP、HTTPS、WebSocket等网络协议的跨平台调试工具。它可以帮助开发者对网络请求进行捕捉、分析、修改和重定…

Spring Boot项目怎么集成Gitee登录

一、背景 现在的越来越多的项目,需要集成第三方系统进行登录。今天我们以Spring Boot项目集成Gitee为例,演示一下怎么使用Oauth2协议,集成第三方系统登录。 不了解oauth2的,可以看我之前的文章。Ouath2是怎么实现在第三方应用认…

Java入门基础学习笔记21——Scanner

在程序中接收用户通过键盘输入的数据: 需求: 请在程序中,提示用户通过键盘输入自己的姓名、年龄、并能在程序中收到这些信息,怎么解决? Java已经写好了实现程序,我们调用即可。 API:Applicat…

Linux---vim编辑器(续写)

5. vim正常模式命令集 插入模式 按「i」切换进入插入模式「insert mode」, 按“i”进入插入模式后是从光标当前位置开始输入文件; 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字; 按「o」进入插入模式…

APP未上架应用市场,微信商户如何快速开通APP支付

在移动互联网时代,APP作为企业服务用户的重要窗口,其支付功能的完善性直接关系到用户体验和企业的营收。然而,对于许多未上架应用市场的APP来说,如何快速开通微信APP支付功能成为了一个亟待解决的问题。本文将为您详细介绍在APP未…