庙算兵棋推演AI开发初探(4-调用AI模型)
创作时间:
作者:
@小白创作中心
庙算兵棋推演AI开发初探(4-调用AI模型)
引用
CSDN
1.
https://blog.csdn.net/sinat_27382047/article/details/135167041
本文将介绍如何在庙算兵棋推演平台上调用知识型AI模型。文章详细介绍了模型的环境要求、代码结构、关键文件和函数的作用,以及模型输出如何转换为可执行动作。
前面讲了如何开展编写规则脚本型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
说明中写道
- 运行所需环境为sdk要求环境,本代码额外需要安装 pytorch,本代码pytorch的版本是2.0.1
- 本代码包括1个文件夹,2个文件,需要与 train_env 的目录同级
ai_demo 文件夹,提供示例ai智能体
train_red_demo.py 文件,提供与示例ai智能体相匹配的训练示例代码
test_red_demo.py 文件,提供与示例ai智能体相匹配的测试示例代码 - 赛道一的 ai_demo/agent.py 文件106行与136行,有2个todo需要注意;赛道二的 ai_demo/agent.py 文件102,有1个todo需要注意。
调用这个需要pytorch环境2.0.1。
PS,在自己环境上指定版本安装pytorch的命令:
pip install torch==2.0.1
然后我就奇怪,到底是哪里调用所谓的”训练模型“呢?
于是我发现了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)
热门推荐
掼蛋的精髓
1.4亿人都在打!爆火的掼蛋,有“必胜”的秘籍吗?
5G宽带为农村插上科技翅膀,助力乡村振兴
四川实现“村村通5G”:数字乡村建设迈出新步伐
千兆县、5G乡、宽带村:农村5G宽带普及加速三农发展
交通运输部发布2024年春节期间全国公路网运行研判分析报告
去世老人户籍注销全流程指南
哪所大学毕业后赚钱最多?最新排名揭晓
2025USnews美国最佳大学排名机制变化分析
洪山教师薪资揭秘:月薪过万的秘密
“最帅康熙”马浚伟转型公务员,曾是北大学霸
低空经济企业市值榜:最高近千亿元,北京和陕西总市值领跑
低空经济成就高质量发展,2025的天空等你翱翔
一线回访|低空经济持续升温:政策落地,订单多了,有企业开始抢人
盐酸丁螺环酮:镇静作用小,无依赖性,是治疗焦虑的新选择
抗抑郁药盐酸丁螺环酮并非无害,中药可作替代
盐酸丁螺环酮片治疗焦虑:适用人群、使用禁忌与副作用全解析
用心理学打造高效团队:六大维度提升团队效能
科技如何改变我们的社交方式:点赞是否真的能增进关系?
卫斯理大学:一所注重人文艺术的顶尖文理学院
1998版《鹿鼎记》:韦小宝与康熙的权力与友情博弈
《花千骨》幕后:从吻戏到特效,打造200亿流量神剧
《花千骨》里的师徒之恋:一场关于责任与爱情的抉择
移动支付普及率超86%,但三大隐患或致其走向消亡
车险浮动机制详解:六大因素影响保费定价
酒驾扣12分,超速扣6分:2024年交通违法扣分新标准
运动鞋清洗有妙招:牙膏白醋轻松去污,小苏打除臭
赵丽颖首摘百花奖,以聋哑人角色实现电影突破
赵丽颖获飞天金鹰双奖,用演技回应质疑
从纯真到妖神:赵丽颖演绎《花千骨》成演艺里程碑