庙算兵棋推演AI开发初探(2-编写策略(上))

开始研读step()函数的编写方法。

这个是图灵网提供了一些基础的ai代码下载(浏览需要注册,下载需要审批)。

AI开发中心-人机对抗智能 (ia.ac.cn)icon-default.png?t=N7T8http://turingai.ia.ac.cn/ai_center/show


一、代码研读(BaseAgent类)

1.step函数

这段代码定义了一个 step 方法,用于根据当前的游戏状态生成行动,并返回一个包含所有行动的列表。

这是社区开发版的step函数代码,还是在注释中写解读。

step函数是RL(强化学习)环境中的一个基本方法,用于在环境中执行一个步骤,并返回相应的观察、奖励和是否结束的布尔值。在这个函数中,self表示当前环境对象,observation是一个字典,包含了当前环境的观察状态。

函数的目的是根据当前的观察状态,生成一个动作,然后将这个动作应用到环境中,得到一个新的观察状态、奖励和是否结束。最后,函数返回这些值。

函数step,主要是部署阶段管部署,其他阶段找活着的、属于自己的、能使用的行动来执行 

    def step(self, observation: dict):# 暂存一些信息#通信相关信息,communication里面找200,201的type的指令?#初始化返回值total_actions = []# observation.time.stage==1-部署阶段# 特殊处理,将"sub_type"是人员2 / 无人战车4 /发射指令if observation["time"]["stage"] == 1:actions = []for item in observation["operators"]:if item["obj_id"] in self.controllable_ops:operator = itemif operator["sub_type"] == 2 or operator["sub_type"] == 4:actions.append({"actor": self.seat,"obj_id": operator["obj_id"],"type": 303,"target_obj_id": operator["launcher"],})actions.append({"actor": self.seat,"type": 333})return actions#这里不再是部署阶段了#这行代码的目的是遍历 observation["valid_actions"] 字典中的每个键值对,#并将键(obj_id)和值(valid_actions)分别赋值给变量 obj_id 和 valid_actions。#找活着的算子for obj_id, valid_actions in observation["valid_actions"].items():#找属于自己的算子if obj_id not in self.controllable_ops:continue#找到能用的行动类型for (action_type) in self.priority:  # 'dict' is order-preserving since Python 3.6if action_type not in valid_actions:continue#====找到基于类型的动作生成方法!要改的就是这里的函数====gen_action = self.priority[action_type]action = gen_action(obj_id, valid_actions[action_type])if action:total_actions.append(action)break  # one action per bop at a timereturn total_actions

1)python语言知识

相对于C的结构体,这里的引用方式大概是这样的:

if observation["time"]["stage"] == 1:

转换为C语言的写法 

if (observation.time.stage == 1)

代码里大量的使用字典代替结构体定义,这个看懂了会很有用。 

1-字典

 observation: dict

声明observation是一个字典

使用方括号[]来获取值,例如my_dict['key']

2-列表

total_actions.append(action)

看起来代码这里一般用来当作队列使用

3-元组

代码里几乎没有用到

2)传入的参数  

1-态势( observation)定义

它接受一个字典类型的参数 observation,表示当前的游戏状态、环境信息或玩家信息等。

以下是态势( observation)最外层的数据结构以及他们代表的含义。

obs = {"actions": list, # 上一步接收到的动作"cities": [], # 各个夺控点的信息"communication": [], # 通信相关信息"jm_points": [], # 间瞄点信息"judge_info": [], # 裁决信息"landmarks": {}, # 地标信息,雷场,路障"operators": [], # 算子信息"passengers": [], # 乘员信息"role_and_grouping_info": {}, # 玩家信息和编组信息"scenario_id": 0, # 想定ID"scores": {}, # 分数"terrain_id": 0, # 地图id"time": {}, # 时间信息"valid_actions": {} # 当前态势下的可做动作信息
}

再下一层的定义在链接的4.1.1开始有说明 

 《庙算 陆战指挥官》兵棋推演平台AI开发指南 (yuque.com)

2-态势说明

将 observation 赋值给 self.observation,以便在后续步骤中使用。

State一般代表环境当前的所有状态。Observation一般情况下代表对于某个智能体可观测的态势。Observation是State的子集。

TrainEnv的step函数返回的state,表示当前环境的所有状态合集。状态合集有红方蓝方绿方态势组成:state[0]代表的是红方态势,state[1]代表的是蓝方态势,state[-1]代表的是绿方态势。

AI代码的step函数接受的参数是就是态势observation,它封装了当前时间,此AI能观测到的所有盘面信息,包括算子信息、裁决信息等。以下是态势最外层的数据结构以及他们代表的含义。

2.与其他基准ai比对

我在上方的图灵网上下载了几个基准AI,对其与默认版进行比较。

用TortiseGit进行代码比对,发现这个基准AI对step函数作了相当多的修改。

要怎么改呢……

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

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

相关文章

传感器基础:传感器使用与编程使用(三)

目录 常用传感器讲解九--雨滴传感器具体讲解电路连接代码实现 常用传感器讲解十--光传感器根据亮度安排灯具体讲解电路连接代码实现 常用传感器讲解七--light cup(KY-008)具体讲解电路连接代码实现 常用传感器讲解十二--倾斜开关传感器(KY-02…

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第六节 理解垃圾回收GC,提搞程序性能

深入浅出图解C#堆与栈 C# Heaping VS Stacking 第六节 理解垃圾回收GC,提搞程序性能 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基…

java设计模式学习之【解释器模式】

文章目录 引言解释器模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用表达式解析示例代码地址 引言 在我们的日常生活中,语言的翻译和理解是沟通的关键。每种语言都有自己的语法规则,而翻译人员和计算机程序需要理解并遵循这些规则来…

百度每天20%新增代码由AI生成,Comate SaaS服务8000家客户 采纳率超40%

12月28日,由深度学习技术及应用国家工程研究中心主办的WAVE SUMMIT深度学习开发者大会2023在北京召开。百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰现场公布了飞桨文心五载十届最新生态成果,文心一言最新用户规模破1亿,截…

BAQ压缩MATLAB仿真

本专栏目录: ​​​​​​​全球SAR卫星大盘点与回波数据处理专栏目录-CSDN博客 我们按照上一期文章的BAQ原理编写MATLAB代码,进行baq压缩与解压缩的全流程验证,并分析BAQ压缩对信号指标造成的影响。 生成3个点目标回波数据,加入高斯噪声,对回波进行BAQ压缩和解BAQ压缩,…

【数据结构】C语言实现单链表的基本操作

单链表基本操作的实现 导言一、查找操作1.1 按位查找1.1.1 按位查找的C语言实现1.1.2 按位查找的时间复杂度 1.2 按值查找1.2.1 按值查找的C语言实现1.2.2 按值查找的时间复杂度 二、插入操作2.1 后插操作2.2 前插操作 三、删除操作结语 导言 大家好,很高兴又和大家…

代码随想录 Leetcode27. 移除元素

题目&#xff1a; 代码(首刷看解析 2023年12月28日)&#xff1a; class Solution { public:int removeElement(vector<int>& nums, int val) {int n nums.size();int slowIndex 0;for(int fastIndex 0; fastIndex < n; fastIndex){if(val ! nums[fastIndex])…

中介者模式-Mediator Pattern-1

如果在一个系统中对象之间的联系呈现为网状结构&#xff0c; 对象之间存在大量的多对多联系&#xff0c;将导致系统非常复杂。 这些对象既会影响别的对象&#xff0c;也会被别的对象所影响。 这些对象称为同事对象&#xff0c;它们之间通过彼此的相互作用实现系统的行为。 在网…

java球队信息管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web球队信息管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5…

java环境配置

Java Downloads | Oracle 下载 自定义安装 D:\programFile\Java\jdk-21 配置path 右击 ”此电脑“ 属性 保存 winR 输入cmd 输入 java -version 可以看到版本信息。path配置好了。

软件测试/测试开发丨Python常用数据结构学习笔记

Python常用数据结构 list 列表 列表定义 列表是有序的可变元素的集合&#xff0c;使用中括号[]包围&#xff0c;元素之间用逗号分隔列表是动态的&#xff0c;可以随时扩展和收缩列表是异构的&#xff0c;可以同时存放不同类型的对象列表中允许出现重复元素 列表使用&#x…

记录 | ubuntu源码编译python3.7.3(指定版本)

一、安装依赖包 sudo apt-get install -y make build-essential libssl-dev zlib1g-dev sudo apt-get install -y libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm sudo apt-get install -y libncurses5-dev libncursesw5-dev xz-utils tk-dev 二、从Python网…