am928 发表于 3 天前

游戏AI与理论AI的区别:游戏AI是智能假象吗?

目录

游戏AI是什么?游戏AI和理论AI

但是,值得注意的是,游戏AI和理论研究的AI存在不同之处 。

我们平时熟悉的人工智能,大多指的是理论AI ,比如深度学习 ,还有机器学习 。

游戏AI常常很少运用理论AI流行的技术,比如神经网络、深度学习等技术 。

智能的假象

游戏AI主要是由程序员预先定义编写好可能发生的行为,它不具备理论人工智能所拥有的自我“学习”特性 。

因为游戏AI主要职责是模拟出智能行为,而并非学习

请你提供一下具体需要改写的句子内容呀,这样我才能按照要求进行改写。

可以说游戏AI是智能的假象。

要是游戏功能需要进行自我学习,要是游戏功能需要尽可能做出最优策略,那就更应该使用理论AI(也就是我们熟悉的那个人工智能),通过神经网络来实现,通过深度学习等流行技术来实现。

例如:围棋AI阿法狗,DOTA2的

(更新)游戏AI和机器学习

以前觉得机器学习要应用于游戏AI,还远得很。

最近看了一些资料,之后尝试玩了玩Unity机器学习,这才发觉机器学习在游戏AI领域占据一席之地存在可能性以及发展趋势 。

这使我对游戏AI的看法产生了改变,这也使我对理论AI的看法产生了改变,所以下面的介绍会提及机器学习。

因此现在看来,理论AI可归纳为游戏AI的一部分 ,游戏AI应分为人工制作的 ,以及机器学习训练的 。

介绍一些游戏AI4X游戏AI

以《群星》《文明》《王国风云》等为代表的游戏,属于战略游戏的一种,其主要有四个游戏目的,分别是:

(探索),(扩张),(掠夺),(毁灭)。

为了使玩家在4X进程中遭遇阻碍,4X游戏AI必须足够聪慧,进而做出决策。

但同时,为了不让玩家觉得无法取得胜利,它往往不采用最优策略,而是采用更“人性化”的策略。

(例如反应延迟,走的路径稍微扭曲,模糊决策等做法)。

《求生之路》系列

《求生之路》是一款FPS游戏,很难讲其中的怪物有多智能,它们本就应是愚蠢且凶猛的。真正有技术含量的是其“导演系统”,AI是后台核心,会依据玩家在游戏里的具体表现调控游戏节奏。怪物出现的地点、数量,道具刷新位置等,再配上根据形势动态变换的音乐,给用户带来了更真实的游戏体验。

角色扮演/沙盒游戏中的NPC

在一些自由度较高的游戏里,为使玩家更好地融入这个世界,游戏会对NPC做诸多详细设定,像在《巫师》系列中,每个NPC都有自身性格设定,还有会话数据库,能让他们开展丰富动作与对话,GTA这种沙盒游戏更是如此。

游戏AI 需要学些什么?

下面列出部分游戏AI所需掌握的知识和简要介绍:

自治智能体

智能体,简单来说就是包含AI的对象物体,这些对象常常具备自治动作,也就是在特定情况下知道做出何种反应,在《看门狗》《GTA》中,街上行走的人或者行驶的汽车就是自治智能体,若主角开车冲向它们,这些自治智能体能够自行判断并做出躲避动作。

群体智能

正如其名称所示,与自治智能体相反,“群体智能”通常用于编队的人工智能或者集群的人工智能,比如在足球游戏中,人工智能操控一方的所有球员相互配合传球踢球,又如在射击游戏里,人工智能操控一支小队运用战术进攻据点。

感知

智能体获取的信息总是受限的。引入“感知”概念,模拟智能体的感官,使智能体获取一定程度的信息,用于后续的决策判断。

可参考:游戏AI之感知(1) -- 博客园

状态机(重要)

“状态机”是一种设计模式,它能表示状态,还能控制状态切换,常被用于设计某种东西的多个状态。

一个人存在站立的状态,存在跑动的状态,存在走路的状态,存在蹲下的状态,存在开火的状态等...

当它应用于游戏AI时,它能够作为AI的决策结构,以前老游戏的AI决策结构几乎都采用状态机 。

可参考:游戏设计模式——有限状态机 -- 博客园

可参考:游戏AI的决策结构,即有限状态机/行为树(2) -- 博客园

行为树(重要)

“行为树”是一种决策模式,它以树状结构来表达 ,它还是一种设计模式 。它也是现代游戏AI最常用的决策结构 。

https://img1.baidu.com/it/u=76536217,3434492805&fm=253&fmt=JPEG&app=138&f=JPEG?w=500&h=645

可参考:游戏AI之决策结构—有限状态机/行为树(2) -- 博客园

寻路/搜索/规划(重要)

“寻路”是游戏里很常见的操作,常用的算法有A*算法,若要更优化,寻路则依赖规划网格 。

可参考:A*寻路算法 -- 博客园

“搜索”实际上应当与寻路合并,只是游戏AI或许会用到图搜索。

在《群星》当中,借助一条条“航路”,千千万万个星球被连接起来,此时,每当AI进行决策派遣舰队之际 ,

需要考虑到达这张“图”的各个星球的权值和最优期望。

“规划”是对游戏进行预处理,比如提前构建路线,划分区域等,这样在游戏进行后,就能利用预先处理好的数据进行高效的算法操作。

可参考:游戏AI之路径规划(3) -- 博客园

黑板

“黑板”指的是可访问的共享数据,其作用是实现多模块间的数据共享。编写游戏AI引擎时,各模块之间的通信难以避免,而采用黑板模式是非常好的选择 。

可参考:游戏设计模式——黑板模式 -- 博客园

模糊逻辑(不常用)

要让游戏AI更加人性化,模糊逻辑是非常必要的。制作游戏AI时,通常不是要做出最优解,而是要做出类似人类的解。

在某些特定的时候,比如说,某个AI战斗结束以后,进行判断,要是子弹数量少,那就回基地去取弹药。

“子弹数量少”这个条件就可以做成一种模糊逻辑条件。

可参考:游戏AI之模糊逻辑(4) -- 博客园

杂项技巧

这里存在着各种各样的杂项技巧,还有欺骗玩家的障眼法,这也是老鸟们口中所说的“Trick” 。

运用“抖动”“平滑”等技巧,能够增强拟人性,能让AI变得像人一样愚笨 。

脚本驱动(重要)

使用脚本,能够随意编写出逻辑代码,无需再次进行编译,进而极大减少修改逻辑所需的成本。

游戏AI的逻辑修改常常十分频繁,采用脚本编写AI逻辑显然是必不可少的。

此外游戏程序最常用的脚本语言——Lua.

可参考:C++ 与 Lua 交互的配置、交互原理及示例 - 博客园

机器学习(有潜力)

机器学习训练出游戏AI的优势在于:

但缺点也是有的:

因此目前来看,机器学习训练出的AI可用于进行简单交互,比如能让类似看到人就跑的小动物来实现,更复杂一些的是,会有遵守交通规则的路人或车辆来达成 。

若对Unity的机器学习插件感兴趣,那就用Unity的ml-机器学习打造一个游戏AI吧,这里还有环境配置相关内容,来自博客园

用 Unity 借助 ml-机器学习打造一个游戏 AI,这是入门 DEMO, 博客园

游戏AI 基本设计

实际世界的智能:

一个正常的智能体,要先感知周围的事物,之后才能思考下一步该做什么,最后才能做出反应行为。

基于这个便自然而然分出以下三个模块:

感知

一般的游戏AI,首先需要获取到感知的信息。

例如:

<p><pre>    <code class="language-cpp"><code>class AgentPerception {
public:
    //进行一次感知探测
    void check();
    //访问感知目标结果
信息,获取检查结果(常量);
private:
    //...
};</code></code></pre></p>
决策

https://img1.baidu.com/it/u=3862399783,3199389646&fm=253&fmt=JPEG&app=138&f=JPEG?w=797&h=500

决策模块通常会对感知信息展开分析,接着进行计算,最后输出接下来想要做的行为所产生的结果。

例如:

可以将决策模块想象成一个大脑 ,为了进行类比 ,能够把下面的 “决策模块” 字样视作 “大脑” 。

决策模块可以获取智能体模型的感知信息,对这些信息进行分析,然后返回行动决策。

<p><pre>    <code class="language-cpp"><code>class AgentBrain{
public:
    //计算得出智能体的决策
计算决策(智能体*智能体)
      //获取感知信息
信息与信息,等于智能体调用其感知模块获取的结果 。
      
      //根据感知信息,让寄主执行行为
      if(information...){
返回决策(移动到,……),此为移动到……的决策 。
      }
      if(information...){
返回决策(攻击),此决策为攻击决策 。
      }
      //....
    }
private:
    //...
};</code></code></pre></p>
行为

一般的游戏模型要提供相应的行为接口,行为模块负责处理决策,行为模块执行对应的行为。

<p><pre>    <code class="language-cpp"><code>//一个智能体类例子
class Agent{
public:
//智能体的各种行为接口
//...
声明一个函数,函数名为moveTo ,该函数接受一个常量引用参数,参数类型为Vector3 ,参数名为pos ;
void attack();
protected:
//智能体的各种变量
//....
Vector3,这是一个变量名,mPosition,它表示当前位置 。
定义一个整型变量mAttack,用于表示攻击力。
创建一个名为ViewPerception的视野感知模块,将其命名为mPerception 。
};</code></code></pre></p>
<p><pre>    <code class="language-cpp"><code>class AgentAction{
public:
//处理决策,让智能体执行对应行为
定义一个函数,名为doAction,该函数带有两个参数,一个是Agent类型的指针,名为agent,另一个是const修饰的Decision类型的变量,名为decision;
};</code></code></pre></p>
小结

这样,一种简单基本的设计就浮现了:
页: [1]
查看完整版本: 游戏AI与理论AI的区别:游戏AI是智能假象吗?