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

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

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

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

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

import json
import os
import randomfrom .base_agent import BaseAgent
from .map import Mapfrom .feature_v1 import features as RL_FEATURE
from ai_demo import config, utils
from .model import PPOfrom .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 optimclass 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.mzph.cn/pingmian/11641.shtml

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

相关文章

【异常处理】(中北大学-程序设计基础(2))

目录 题目 源码 结果示例 题目 求一元二次方程式ax^2bxc0的实根&#xff0c;如果方程没有实根&#xff0c;则输入有关警告信息。要求&#xff1a;建立一元二次方程类&#xff0c;利用异常技术处理。 源码 #include <iostream> #include <cmath>using namespa…

MFC:字符串处理

例子 //多字节char* szTest "abc多字节";int nLen strlen(szTest);//9//宽字节wchar_t* szTest2 L"abc多字节";int nlen2 wcslen(szTest2);//6//测试项目配置为Unicodewchar_t* szTesz3 TEXT("abcd");//char* -> CStringCString strTes…

Kubernetes——调试小技巧

目录 前言 一、K8s调试技术的重要性 二、7个具体的K8s调试技巧 前言 Kubernetes&#xff08;K8s&#xff09;调试技术是指在使用Kubernetes集群过程中&#xff0c;用于定位和解决问题的方法和技术。Kubernetes是一个复杂的系统&#xff0c;它负责管理容器化的应用程序&…

力扣HOT100 - 763. 划分字母区间

解题思路&#xff1a; class Solution {public List<Integer> partitionLabels(String s) {int[] last new int[26];int len s.length();for (int i 0; i < len; i) {last[s.charAt(i) - a] i;//记录字母最远的下标}List<Integer> partition new ArrayList…

SketchUp Pro for Mac v2024 24.0.484 草图大师中文版

SketchUp Pro 2024 for Mac是一款功能强大的三维建模软件&#xff0c;适用于Mac电脑。其简洁易用的界面和强大的工具集使得用户可以轻松创建复杂的3D模型。 SketchUp Pro 2024 for Mac支持导入和导出多种文件格式&#xff0c;如dwG、DXF、3DS、OBJ、DEM等&#xff0c;方便用户…

(一)Spring教程——Spring框架简介

Spring框架是Java平台的一个开源的全栈应用程序框架&#xff0c;一般被称作Spring。Spring框架的核心特性是依赖注入(DI)与面向切面的编程(AOP)&#xff0c;Spring可以看成是一个控制反转的容器。 Spring框架由20多个模块组成。这些模块可以分成几个大的层次&#xff1a;核心容…

java spring boot动态数据库获得配置信息连接多数据源(数据库)

数据库 数据库文件和代码文件 https://download.csdn.net/download/qq_34631220/89304173 链接&#xff1a;https://pan.baidu.com/s/1xoh6xiSRx4nW_gKvR1QPjg 提取码&#xff1a;i7b7 –来自百度网盘超级会员V5的分享 文章位置 添加链接描述 说明&#xff1a;事务只能单库…

学习软考----数据库系统工程师32

NoSQL非关系型数据库 CAP理论和BASE特性 关系型数据库主要使用ACID理论 各种NoSQL数据 库的分类与特点

中国海洋大学整体来说值得报考吗?中国海洋大学考情分析。

中国海洋大学&#xff08;Ocean University of China&#xff09;&#xff0c;简称中国海大。位于中国青岛&#xff0c;是中华人民共和国教育部直属的综合性重点大学&#xff0c;国家“双一流”、“985工程”和“211工程”重点建设高校之一&#xff0c;入选“2011计划”、“111…

RT-Thread事件集

文章目录 前言一、RT-Thread事件集的概念二、事件集函数的使用1.创建事件集函数2.事件集发送函数3.事件集接收函数4.事件集删除函数 三、事件集使用例程总结 前言 本篇文章将给大家讲解RT-Thread中事件集的概念&#xff0c;了解什么是事件集及事件集的函数使用方法。 一、RT-…

Lesson5--二叉树(超详细版)

【本节目标】 1. 树概念及结构 2. 二叉树概念及结构 3. 二叉树顺序结构及实现 4. 二叉树链式结构及实现 1.树概念及结构 1.1树的概念 树是一种 非线性&#xff08;线性结构就是顺序表链表&#xff09; 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个…

Linux 第三十章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

ms17-010(永恒之蓝)

1.漏洞介绍: 永恒之蓝&#xff08;ms17-010&#xff09;爆发于2017年4月14日晚&#xff0c;是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限&#xff0c;以此来控制被入侵的计算机。甚至于2017年5月12日&#xff0c; 不法分子通过改造“永恒之蓝”制作了wannacry勒索病…

this.$refs 调用子组件的方法注意需要在子组件被创建之后

在Vue 2中&#xff0c;使用this.$refs来访问子组件通常需要满足以下几个条件&#xff1a; 子组件需要有一个唯一的ref属性。例如&#xff0c;<child-component ref"child" />。 父组件需要在适当的时机&#xff08;例如在mounted钩子函数中&#xff09;访问th…

国际护士节庆祝活动向媒体投稿有方法很轻松

作为一名医院职工,我肩负着医院对外信息宣传的重任。在国际护士节这个特殊的日子里,我们医院举办了一系列庆祝活动,以表彰护士们的辛勤付出和无私奉献。然而,在将这些活动信息投稿至媒体的过程中,我最初却遭遇了诸多挑战。 起初,我采用传统的邮箱投稿方式,将精心撰写的稿件发送…

RabbitMq出现Not management user问题解决

在RabbitMq登录的时候突然弹出如下图&#xff1a; 提示“当前用户不是管理员用户”进入mq控制命令台下&#xff1a; windows版本在mq安装路径下的sbin下进入cmd弹出框&#xff1b; Linux版本没有测试&#xff1b; 输入以下命令&#xff1a; rabbitmqctl list_users 查询当…

栈与队列OJ题【括号适配问题】【用队列实现栈】【用栈实现队列】【设计循环队列】

一.有效的括号 ​​​OJ链接 这一道题我们就可以用栈来解决&#xff1a; 不了解栈的可以看我的上一篇博客。 typedef char STDataType; //用数组来实现栈 typedef struct stack {STDataType* a;int capacity;int top; }ST; void STInit(ST* pst) {assert(pst);pst->a NU…

内网环境安装使用DBeaver使用第一天

之前一直使用navicat&#xff0c;现在出于某种原因不让使用了&#xff0c;于是上手了这个工具&#xff0c;说实话&#xff0c;真的&#xff0c;但是必须要用。 首先安装的时候&#xff0c;必须要选择MySQL驱动&#xff0c;如果外网直接选择以后就可以下载了&#xff0c;内网需…

字符串函数(一):strcpy(拷贝),strcat(追加),strcmp(比较),及strncpy,strncat,strncmp

字符串函数 一.strcpy&#xff08;字符串拷贝&#xff09;1.函数使用2.模拟实现 二.strcat&#xff08;字符串追加&#xff09;1.函数使用2.模拟实现 三.strcmp&#xff08;字符串比较&#xff09;1.函数使用2.模拟实现 四.strncpy1.函数使用2.模拟实现 五.strncat1.函数使用2.…

采油厂职工向媒体投稿的好方法找到了

作为一名采油厂的职工,我深知在媒体上定期投稿的重要性。这不仅是我们展示工作成果、传播企业文化的重要途径,更是上级考核我们工作表现的一项指标。然而,在投稿的过程中,我经历了不少心酸与困扰。 起初,我采用传统的邮箱投稿方式。每天,我都会花费大量时间在网络上搜索合适的媒…