即时战略游戏的AI策略思考

想起来第一次玩RTS游戏,就是框住一大群兵进攻,看他们把对面消灭干净……我接触的第一款游戏是《傲世三国》那会儿是小学,后来高中接触了魔兽地图编辑器,我发现自己喜欢直接看属性而省去争论和试验的步骤——我喜欢能一眼看透的感觉。

这篇博客都是务虚的,没啥干货,全是不算成熟的想法和思考

【本篇将以“单位”来统一对实体、兵力、对象、算子等的称呼】

一、策略的描述

研究生的课题是“人机结合的智能体构建方法”,于是我回忆起了这些东西,但好像真的没认真考虑过什么是策略,怎么才能取胜(我不喜欢枯燥的练习游戏水平)。

我先是用极限法想到:是不是即时战略的兵极端抽象后就是下棋那种回合制,一种局面仅有固定的策略和解法(比如中国象棋的残局)?

还一个问题,涉及博弈论和社会关系计算的,我如何制作一个可以模拟这些过程、看到质点如何成为如此策略的平台工具?

1.行为建模

1)有限状态机

petri网络和基于有限状态机的规则推理

2)行为树

ROS机器人的操作系统中常常使用行为树

2.驱动方式

这部分我采用魔兽地图编辑器的思路来描述。

魔兽地图编辑器(以下简称WE) ,每个触发分为3个东西【事件、条件、动作】

1)时间驱动

这个是某个仿真引擎中的虚函数,它的两个触发条件就是时间和事件。

2)事件驱动

这个是最常用的,比如”任意单位被攻击“,然后条件是”被攻击的单位拥有技能【反击螺旋】“,最后动作是”随机数触发,如果触发了,选定范围形成单位组,对单位组施加伤害,被攻击的单位播放旋转动画“。

3)连锁反应的推理驱动

这个也就是经由其他触发器来引发这个触发启动的。

二、游戏和平台的构建

大战略,战役,战术小队,单兵技术……

钢铁雄心、骑马与砍杀(大地图与战场的分割,指挥下令)、魔兽争霸……在不同层面有不同的战斗表现方式,但是面面俱到的话玩家不可能学的过来而挫败。

一种战术是如何描述的?策略是如何描述和执行的?

1.环境交互

研究庙算平台后,我对这个平台做出了一些自己粗略的印象(编写规则式ai):

赋予算子反应(行动),然后再检查条件,再赋予行动。

基础的行动就是我们可以执行的指令,行动序列就是要产出的东西。

2.强化学习

智能体(Agent)

强化学习的本体,作为学习者或者决策者。

{

  策略(Policy)策略是从状态到动作的一个映射,智能体根据策略来选取动作。

  价值函数 (Value Function)用价值函数来评估当前状态的好坏程度。

  模型(Model)智能体对环境的建模,即对环境的动力学进行建模。

        {状态转移概率、奖励函数}

}

环境

强化学习智能体以外的一切,主要由状态集合组成。

状态(环境、智能体、信息)

一个表示环境的数据,状态集则是环境中所有可能的状态。

动作

智能体可以做出的动作,动作集则是智能体可以做出的所有动作。

奖励

智能体在执行一个动作后,获得的正/负反馈信号,奖励集则是智能体可以获得的所有反馈信息。

目标

智能体自动寻找在连续时间序列里的最优策略,而最优策略通常指最大化长期累积奖励。

因此,强化学习实际上是智能体在与环境进行交互的过程中,学会最佳决策序列。

序列决策

按时间顺序进行一系列决策,是一种动态的决策方式,可用于随机性或不确定性动态系统最优化。 马尔可夫决策问题就属于序列决策问题。

另起一个,智能体分类

1、根据智能体的学习内容,我们可以把智能体分为如下三类:

  • 基于策略(policy based)的智能体 直接学习策略,不需要学习价值函数。
  • 基于价值(value based)的智能体 学习价值函数,通过价值函数隐式地得到策略。
  • 演员-评论家(Actor Critic)的智能体 是基于策略和基于价值的结合,既学习策略,也学习价值函数。

2、根据智能体是否需要对环境动力学进行建模,可以把智能体分为如下两类:

  • 基于模型(model based)的智能体 通过对环境进行建模,以此来学习策略或价值函数。
  • 不于模型(model free)的智能体 不需要对环境建模,通过学习价值函数和策略函数进行决策。

第一讲 强化学习介绍 - 知乎 (zhihu.com)

3.炼丹(深度学习拟合)

对于可以清楚描述的数学问题不需要炼丹,对于尚不清楚的只能炼丹让ai帮我们试。

三、从玩家角度入手

我想到了如下几个东西。

1.术语

  • 快攻:牺牲经济和科技的发展,尽可能在初期就全力建造部队击败对手;为了加快速度,经常需要把产兵建筑偷偷造在对手的基地附近,还可以派出部分甚至所有农民来协助进攻。
  • Timing一波:预测对手的兵力薄弱期,通过固定的运营策略,在这些时间点集结出尽可能强大的兵力发动总攻,并且往往伴随着关键科技的恰巧升级完成。
  • 压制:派出部队前压,占对手的一些便宜或者把对手压在家里无法开矿,而自己则趁机扩张。
  • 骚扰:派出高机动单位、空中单位或者运输局运载部队,尽量避开敌方主力而去击杀对方的农民,从而打击他的经济。
  • 控图:处于均势时,在战线上四处游走,进行充分的侦查,了解敌方主力位置和构成,等待时机进攻或者骚扰。
  • 偷经济:认为敌方不会细致侦查时,偷偷在较远的位置开出分矿,铤而走险来获得经济优势。
  • 偷科技:牺牲兵力或者经济,从而提早研发关键科技,来获得进攻Timing的提前
  • 大后期:前中期侧重于防守和扩张,并构筑大量防守建筑来稳定战线,最终在良好的经济和科技支撑下,造出大量高级部队来蚕食消灭对手。这样一局比赛往往要很久,比如“城市化”战术甚至有打过7个多小时的...
  • 换家:在正面对抗能力不如对手时,充分发挥游击战的思想,避开敌方部队的锋芒,在对方进攻时绕到他家中进行互拆,这个战术最能体现出星际2的复杂性和选手的应变能力。

以上战术的术语来自:AlphaStar的游戏——星际争霸2 AI综述_星际 op ai-CSDN博客

2.熟练的玩家

打王者荣耀多了就会发现,即使是moba也可以看成是“回合制”,由于对英雄的操控已经十分熟悉,影响较大的因素(除非超常的反应)是技能cd和自己在打团时的位置了。抛开发育和补兵之类的,只聚焦于团战,那就是一个策略游戏了。

除此之外,我看到一篇sky对魔兽争霸3的评价,在熟悉游戏后,只要游戏没有更新,打法和策略都会趋向于固定的几种。这个就很像我理解中的机器学习搜索出的博弈论中的纳什均衡。

3.boss怪的套路、脚本外挂

想到这个是因为想起了《只狼》这种游戏的boss,一般都是有固定套路的,boss只要能动起来,别太机制就行。

星际争霸2因为谷歌的DeepMind与暴雪开源了人工智能研究环境of星际争霸2,这样才诞生出的第一个战胜职业玩家的AI——AlphaStar。

PySC2 GitHub 链接

暴雪星际争霸 API

我想搞点事情,但是没找到合适的开源项目,我的想法是【如果改变了属性和游戏规则,比如虽然都是黑白棋,但是”围棋“和”五子棋“规则下训练出的AI一定不一样】

嗯……我觉得我可以试着单独做一个rts游戏(交互层和显示层分离,专门提供给机器学习;自定义技能和行为组合;以及自驱动的智能体单位) ,但是策略加入多了就变成了slg游戏,如何做好过渡……又是一个问题。

四、如何让玩家更好的操控局面

有一个基础想法作为公理:身经百战的高排名大神玩家的总结一定是有价值的,因为事实证明小白玩家是打不过大神玩家的。(人肉机器学习)

1.把人嵌入到过程中

我先想到的还是“下令”,这是最基础的想法,编写程序从汇编写到最后,也就到了一个函数执行、命令行执行脚本的状态。我有理由相信这就是人机交互的最稳固形式。

从游戏来说,骑马与砍杀中就有梗“f1,f3”,就是下令“全体士兵,冲锋!”。在古代战争电影中也是将帅下令来进行战争活动。

把人带入过程,这么想来,回合制是最方便的方式。但是由于实际的反应速度和局面信息差而不可能是真正的回合制,只能接近于这种“理想状态”。

2.行动的构建

从基础的行动单元(移动、攻击),到一些基础指令的组合扩展(走A),再到复杂的技能操作组成的连招(比如魔兽世界的宏)——这些是计策之外的东西。

计策,回到最开始,就是一个残局的求解。从残局逆推,以我的粗略见解,一整局的斗争行为,无非是扩充了局面的形成过程以及其中的博弈行为。涉及了很多东西,发育-出装-技巧-团战等。

五、游戏之外

科技是第一生产力,降本增效靠的不是单纯的压榨人(加班),应该是优化人力结构(安排对的人到对的事)的这种小幅提升,以及根本的基础实现方式(置换反应制铝变成电解反应、电子管到晶体管)的大幅度突破。

这些东西怎么从游戏这个模拟的世界的镜子来让我们自己看清楚当下最该做什么呢?

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

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

相关文章

【LeetCode:49. 字母异位词分组 | 哈希表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

ARCGIS PRO SDK 设置UI控件状态:启用/禁用

举例&#xff1a; 第一步&#xff1a;添加两个 Button 分别命名为Connect、Disconnect 第二步&#xff1a;nfig.daml添加状态和条件&#xff1a;在 DAML 中定义条件。请记住&#xff0c;条件存在于模块标记<modules>之外&#xff0c;下代码定义&#xff1a;Disconnected_…

AIGC大模型必备知识——LLM ,你知道它是如何训练的吗?小白必读深度好文

Look&#xff01;&#x1f440;我们的大模型商业化落地产品&#x1f4d6;更多AI资讯请&#x1f449;&#x1f3fe;关注Free三天集训营助教在线为您火热答疑&#x1f469;&#x1f3fc;‍&#x1f3eb; 近年来&#xff0c;人工智能&#xff08;AI&#xff09;领域经历了令人瞩目…

Pyhton基础学习系列14——函数

文章目录 一、函数的定义二、函数的分类1.系统函数2.标准库函数和第三方库函数3.自定义函数 三、函数的使用1.基本语法2.函数使用案例和说明文档1.函数的说明文档2.输入两个正整数&#xff0c;计算它们的最大公约数和最小公倍数 3.from和import的区别4.return和print的使用 四、…

String有没有最大长度限制?

大家都用过String字符串&#xff0c;有的人可能还不知道它的长度在某些方面是有一些限制。 public String(byte bytes[], int offset, int length);这是java.lang.String中的一个构造函数&#xff0c;可以看到它的长度是int类型&#xff0c;int的最大取值是2^31-1.但是我们却不…

3. seaborn-可视化数据分布

在处理一组数据时&#xff0c;通常想做的第一件事就是了解变量的分布情况。这一章将简要介绍 seaborn 中用于检查单变量和双变量分布的一些工具。 import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from scipy import stats im…

【算法】七夕祭

题目 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子。 于是 TYVJ 今年举办了一次线下七夕祭。 Vani 同学今年成功邀请到了 cl 同学陪他来共度七夕&#xff0c;于是他们决定去 TYVJ 七夕祭游玩。 TYVJ 七夕祭和 11 区的夏祭的形式很像。 矩形的祭典会场由 N 排 M 列共…

2024Flutter岗位面试题总结

StatelessWidget和StatefulWidget的区别是什么&#xff1f; StatelessWidget是一个不可变的类&#xff0c;充当UI布局中某些部分的蓝图&#xff0c;当某个组件在显示期间不需要改变&#xff0c;或者说没有状态&#xff08;State&#xff09;&#xff0c;你可以使用它。 Statef…

压缩编码之变换的选择之离散余弦变换(DCT)和离散傅立叶变换(DFT)——数字图像处理

原理 变换的选择是一个关键的考量因素&#xff0c;它决定了数据是如何被压缩的。选择变换时考虑以下几个重要原则&#xff1a; 数据去关联性&#xff1a;变换的目的之一是减少数据中的相关性。例如&#xff0c;在图像压缩中&#xff0c;像素间往往高度相关。通过适当的变换&a…

居中面试问题

前端常问居中面试问题 css文本居中 文本水平居中 <div class"father"><div class"child"><div> <div>子类元素为行内元素&#xff0c;则给父类元素定义text-align:center 如果子元素是块元素&#xff0c;则给子元素定义margin&…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第十天-Linux下mplayer音乐播放器练习题(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

钉钉逐浪AI Agent

文&#xff5c;郝 鑫 编&#xff5c;刘雨琦 “大公司代表落后生产力&#xff0c;是慢半拍的”&#xff0c;“小创新靠大厂&#xff0c;大创新仍然要靠小厂”&#xff0c;这是以李彦宏和王小川为代表的创业老炮&#xff0c;在2023年总结出来的创新规律&#xff0c;从移动互…

批量查询顺丰快递信息:固乔快递查询助手的实用指南

随着电商和物流行业的飞速发展&#xff0c;对于物流信息的查询需求也日益增长。固乔快递查询助手是一款高效、便捷的软件&#xff0c;能够帮助用户批量查询顺丰快递信息&#xff0c;大大提高了物流信息的管理和查询效率。 一、下载安装 首先&#xff0c;用户需要从固乔科技网站…

统计学-R语言-2.1

文章目录 前言安装过程总结 前言 上篇文章介绍了统计学-R语言的介绍&#xff0c;本篇文章介绍如何安装R软件。 安装过程 可以登录官网&#xff0c;https://www.r-project.org/&#xff0c;点击此处跳转。 点进去下滑找到China,之后找任意一个链接地址进行下载即可。 我点的是…

【Harmony OS - 消息通知】

应用可以通过接口发送通知消息&#xff0c;提醒用户关注应用中的变化。用户可以在通知栏查看和操作通知内容&#xff0c;通常用于当应用处于后台时&#xff0c;发送&#xff0c;本文主要来介绍在Harmony OS中的三种消息通知。 基础通知 总体流程有三步&#xff1a; 导入noti…

确定了!软考中级「集成」、「监理」新版教程有哪些变化?

新版教程改了哪些内容&#xff1f;2024上半年软考应该如何备考&#xff1f; 准备考24年上集成的朋友们&#xff0c;先不要慌&#xff01;备考脚步不要乱&#xff0c;改版可能还是好事呢&#xff0c;难度可能会降点&#xff1f; 2024年教程改版科目&#xff1a; ✔软考中级-集…

由于找不到msvcp140.dll无法继续执行代码原因及解决教程分享

在计算机打开软件过程&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“由于找不到msvcp140.dll无法继续执行代码”。这个错误通常发生在使用Microsoft Visual C 2015或更高版本编译的程序运行时。那么&#xff0c;什么是msvcp140.dll文件&#xff1f;为什么会…

59.螺旋矩阵II

class Solution { public:vector<vector<int>> generateMatrix(int n) {//二维数组初始化 // int dis[4][4]{{-1,0},{1,0},{0,-1},{0,1}};int dis[4][4]{{0,1},{1,0},{0,-1},{-1,0}};//右下左上 0,1,2,3//cout<< dis[0][0]<<" "<<dis…

定制耐酸碱移液吸头PFA移液枪头可重复使用

移液枪是移液器的一种&#xff0c;常用于实验室少量或微量液体的移取&#xff0c;规格不同&#xff0c;不同规格的移液枪配套使用不同大小的枪头&#xff0c;不同生产厂家生产的形状也略有不同&#xff0c;但工作原理及操作方法基本一致。移液枪属精密仪器&#xff0c;使用及存…

电脑可以连接网络但浏览器无法访问部分或全部网页

啾咪&#xff01;离大谱了&#xff0c;电脑一段时间没有用&#xff0c;最近打开却发现可以连接网络但是无法访问部分网页&#xff08;如CSDN&#xff09;&#xff0c;显示如下&#xff1a; 有三种解决方法&#xff1a; &#xff08;1&#xff09;清除DNS缓存 步骤&#xff1a;…