即时战略游戏的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的使用 四、…

操作系统(简答题)

注意&#xff01;&#xff01;&#xff01;下列只是“一些&#xff08;or 一部分&#xff09;” 如果想要都会click this 选择、填空、判断click this 1. 操作系统的基本特性有哪些?什么是实时系统&#xff1f; 操作系统的基本特性有&#xff1a; 并发&#xff08;Concurre…

python 工具代码

可以使用 Python 标准库中的 shutil 模块中的 copytree 函数来实现复制目录及其子目录中的所有文件。具体操作步骤如下&#xff1a; import shutil# 复制 src 目录及其子目录中的所有文件到 dst 目录中 shutil.copytree(src, dst)其中&#xff0c;src 表示要复制的源目录&…

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 列共…

boost.hana学习笔记之map

Hana是C元编程的头文件库&#xff0c;适用于类型和值的计算。 它提供的功能是成熟的Boost.MPL和Boost.Fusion库提供的功能的超集。 通过利用C11/14实现技术和习惯用法&#xff0c;Hana拥有比以前的元编程库更快的编译时间和运行时性能&#xff0c;同时显着提高了过程中的表达能…

2024Flutter岗位面试题总结

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

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

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

git 使用场景 cherry-pick发生冲突时 ☞ 解决冲突/撤销cherry-pick

cherry-pick过程中代码冲突 cherry pick操作过程中发生代码冲突&#xff0c;Cherry pick会停下来&#xff0c;让用户决定如何继续操作# 解决冲突 1. 用户解决代码冲突 2. git add . 将修改的文件重新加入暂存区 3. git cherry-pick --continue 让 …

居中面试问题

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

美易官方《盘前:道指期货涨0.1% 美国12月CPI即将揭晓》

盘前&#xff1a;道指期货涨0.1% 美国12月CPI即将揭晓 随着市场对美国12月CPI数据的期待升温&#xff0c;道指期货在盘前微幅上涨0.1%。市场普遍预期该数据将显示通胀压力温和&#xff0c;这可能为美联储在接下来的货币政策会议上提供更多灵活性。在此背景下&#xff0c;投资者…

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

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

内存溢出原因和解决办法

内存泄漏&#xff1a; 原因&#xff1a; 内存泄漏是由于程序中存在未正确释放内存的情况&#xff0c;导致内存不断累积&#xff0c;最终导致内存溢出。 解决方法&#xff1a; 使用内存泄漏检测工具&#xff08;如valgrind&#xff09;来检测和修复代码中的内存泄漏问题。 …

抖音百科怎么创建?头条百科的规则和技巧

在玩抖音的时候&#xff0c;不知道注意到抖音的搜索结果没有&#xff0c;有时候会去搜索框搜索一个品牌或人物名称&#xff0c;搜索框下面翻几下大概率就会出现百科词条&#xff0c;这个词条就是抖音百科。抖音的百科属于头条百科&#xff0c;因为这两个平台都属于字节跳动旗下…

钉钉逐浪AI Agent

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

Pinsker’s inequality 与 Kullback-Leibler (KL) divergence / KL散度

文章目录 Pinsker’s inequalityKullback-Leibler (KL) divergenceKL散度在matlab中的计算 KL散度在隐蔽通信概率推导中的应用 Pinsker’s inequality Pinsker’s Inequality是信息论中的一个不等式&#xff0c;通常用于量化两个概率分布之间的差异。这个不等式是由苏联数学家…