总起

本文主要基于Procedural Content Generation in Games第二章介绍PCG领域最重要的方法之一——搜索方法,而其中进化算法是我们主要使用的方法之一。

关于PCG in Games第一章的笔记可见:

读书笔记 PCG in Games 程序化内容生成 介绍 - 知乎

关于进化算法介绍可见:

Python 进化算法的简单介绍和实现 - 知乎

OK,接下来进入正题,首先我们对本章内容进行概括。

什么是基于搜索方法的程序化内容生成?

定义:方案空间中存在一个足够好的方案,我们一直进行迭代和寻找,使方案更好并把坏方案丢弃,最终会获得一个我们需要的方案。

三个核心组件:

1.搜索算法,是基于搜索方法的引擎,我们将会看到一些简单的进化算法就能运行的很好。当然使用一些先进的算法也有很多好处,例如可以考虑约束条件或专攻某些特殊的内容表示形式;

2.内容表示方式,从数组到图片到字符串。定义了(同时限制)什么内容可以被生成,并且决定了是否有可能进行有效的搜索;

3.一个或多个评估方法,用于评估备选方案的质量。开发一个可靠的评估方法往往是最为困难的任务。

本章我们将依次讨论各个核心组件,并且举几个具体的例子来针对不同的游戏生成不同的内容。

进化搜索算法

进化算法是基于达尔文进化论的自然选择启发的随机算法。

核心思想是控制一个族群,当每一代进行进化的时候,最适应的个体将能得到繁衍的机会,而最不适应的个体将从族群中移除。

一个具体的算法:µ + λ进化策略(以下简称µ + λ ES,进化策略是进化算法的一个大类,还有比较有名的是遗传算法GA)。

µ代表每次生成保留的数量,即精英;λ表示每代生成的数量。

例如,µ = λ = 50:

1.初始化µ + λ个体;

2.切洗族群,可选操作,可以防止梯度损失;

3.使用评估函数获取每个个体的适应度;

4.根据适应度进行排序;

5.移除λ个最差个体;

6.使用μ族群拷贝回λ种群生成后代;

7.突变后代;

8.如果找到足够质量的个体或者生成次数达到最大则停止,否则继续到第二步进行下一次的生成。

尽管这个算法非常简单,µ + λ ES还是非常有效的,即使简单的1 + 1 ES也能取得很好的效果。

其他的算法,比如GA,更依赖于组合而非突变。也有一些另类的算法如群体智能。具体的内容可以参考Eiben和Smith的书《进化计算导论》。

如果表达形式很简短,如数字或向量,则可使用CMA-ES;多目标算法NSGA-II。

内容表示形式

在游戏内容生成场景中,基因型可能是创建关卡的间接指令,而表现型是真正的游戏关卡。

例如,《超级马里奥兄弟》可能的几种表示形式:

1.直接的,作为一张关卡地图,基因型中的每个变量都对应表现型中的一个块(比如砖块、问号块);

2.间接一些,列出不同游戏实体的位置和属性,比如敌人、平台、裂口和山丘;

3.更间接一些,一个拥有不同可重用模式的存储库,描述他们在地图中是怎么分布的,比如山、硬币的集合通过旋转、缩放进行分布;

4.非常间接,一个可以调整的属性列表,比如间隙数量、敌人密度、硬币总量、缺口宽度等;

5.最间接,一个随机数的种子。

不同的表示形式拥有不同的搜索空间。我们理所当然的认为最直接的方式能获得最佳的细节控制,但是它容易导致“维度灾难”,即直接的表示形式产生了一个非常大的搜索空间,而越大的搜索空间,越不容易找到一个确定的解。

另一个行为准则是表示形式最好拥有良好的局部性,即基因型的一个小小改变也应该导致表现型的一个小小改变,从这个意义上来说最后一种也不适合作为搜索的首选,因为没有局部性,这种情况下搜索和随机搜索的效果一样差。

至于具体选择哪种表示形式则取决于想要解决的问题。

我们将在第九章更进一步讨论这个话题。

评估函数

评估函数的主要作用是针对每个候选方案给出一个具体的分数,根据更优的分数获取更好的方案,如果没有合适的评估函数就不可能找到合适的内容。

评估函数很难被设计,比如乐趣就很难被测量,针对这一问题可以有不同视角的回答:一些研究将乐趣视为玩家具体的行为,如赛车游戏中玩家达到的平均速度;

另一些则倾向于直接询问玩家。

由此产生了三种不同的经典评估函数:

1.直接;

2.基于模拟;

3.基于交互。

直接

根据表现型直接计算适应度,容易实现并方便计算,但有时很难设计某些方面的评估函数。

主流的两种类型:

1.理论驱动,针对玩家经验的直觉或定性的理论;

2.数值驱动,直接收集玩家的体验,比如问卷调查或生理测量。

基于模拟

通过AI代理游玩游戏内容后进行评估,统计计算代理的行为和游玩的风格还有最终的得分。

两种思路:

1.可玩性测试,比如2d平台游戏中测试是否有从起点到终点的路径;

2.增加玩家某方面体验,使AI代理模仿人类的行为,比如神经网络控制的车辆用于评估赛道。

重点需要区分方法是静态的还是动态的:

1.静态的方法在游玩过程中AI代理的行为保持一致;

2.动态的方法AI代理的行为将会在游玩过程中进行适应,动态的一般用于评估关卡是否易于学习。

基于交互

评价内容来源于人类。(这跟直接方式数值驱动的区别我认为是,基于交互的强调游戏内容在游玩中进行数据收集,是实时的)

比如Hastings的研究,基于玩家使用该武器时长和频繁度来评估武器的质量;Cardamone的研究,赛道的分数基于玩家的偏好。

显示的数据收集会打断玩家的游玩,而基于交互的可以在复杂的情况下进行数据的收集。

例子

星际争霸的地图

表示形式:地图被表示为一个实数的向量(大约100个维度),转换结果是一个二维数组,其每个单元都对应地图中的一块。

评估函数:8种不同的评估函数用于评估基地的位置、资源的摆放和基地间的路径。

算法:SMS-EMOA,一种最先进的多目标进化算法用于两个或三个目标的组合。有些目标是冲突的,所以我们不能使用所有的目标,但某些目标组合可以产生有趣且公平的地图。

赛道

表示形式:使用一些实数向量来代表贝塞尔曲线的控制点。

评估函数:训练一个神经网络(通过另一种进化过程)来使得AI游玩像个人类,然后候选的赛道使用基于模拟的方法进化,让神经网络驾驶并且进行评估其是否有挑战性且多样化。

算法:连锁精英方法 (cascading elitism)类似于μ + λ ES,但是拥有多个阶段可以确保评估多个目标。

进化得到的一连串贝塞尔曲线组成的赛道:

桌游规则

表示形式:一种桌游专用的语言使用字符串表示(一个表达式树),短短几行就可以用来描述整个游戏。

评估函数:使用一种极大极小的搜索算法评估其游戏时长、平局频率、规则使用数量。

算法:基础的遗传算法。

银河装备竞赛

表示形式:粒子武器通过神经网络进化,方法叫做NEAT。每一个粒子武器都被表示为单个神经网络用来控制其速度和颜色。

评估函数:在游玩过程中进化,越被玩家使用适应度越高。

算法:集体的分布式进化计算。

总结

在基于搜索的PCG中,进化算法或其他随机搜索/优化算法常用于游戏内容的生成,内容生成器可被视为在内容空间中搜索最佳满足评估函数的内容。

因此设计基于PCG解决方案时主要有两个问题:

1.内容表示;

2.评估函数。

内容表现型可以使用几种不同的方法在基因型中进行表示:

1.直接表示;

2.间接表示(可以有不同程度的间接形式)。

间接表示丢失了某些内容生成的细度,因此在整个内容空间中分布较为稀疏,不过它能更好的处理维度灾难问题。

三种评估函数:

1.直接;

2.基于模拟;

3.基于交互。

直接评估函数速度很快,基于模拟需要AI游玩,基于交互则需要一个人类在流程中。

基于搜索的PCG在当前学术界十分流行且有许多已发表的研究,一些完整已发布的游戏吸收并使用了这些PCG研究。

参考

《Procedural Content Generation in Games》

《人工智能与游戏》

读书笔记 PCG in Games 程序化内容生成2 基于搜索的方法相关推荐

  1. 读书笔记 PCG in Games 程序化内容生成3 构造性方法,针对地牢式关卡

    总起 本文主要基于Procedural Content Generation in Games第三章介绍构造性方法,他们的主要用途在于地牢和关卡,这些方法能在极短进行生成,并且不会进行评估或重新生成. ...

  2. 读书笔记 PCG in Games 程序化内容生成4 分型、噪声和代理,地形生成

    总起 本文主要基于Procedural Content Generation in Games第四章介绍地形生成,给游戏角色提供可以站立的地面. 关于PCG in Games之前的笔记可见: 第一章读 ...

  3. 读书笔记 PCG in Games 程序化内容生成 介绍

    总起 最近入手一本神书--<人工智能与游戏>,它介绍了AI与游戏相辅相成的关系,并且梳理了整个游戏AI的知识脉络.它可以当成游戏AI目录书籍,薄薄的一本书引用了800多篇文献. 游戏中我们 ...

  4. 文本分析软件_读书笔记:伍多库卡茨质性文本分析:方法、实践与软件使用指南...

    读书笔记:伍多·库卡茨<质性文本分析:方法.实践与软件使用指南> 一.这篇文章.这本书或这篇论文的中心思想.核心观点是什么?核心观点:质性数据如何系统化分析?三大主要方法:主题分析.评估分 ...

  5. 【读书笔记】Verilog的亚稳态现象和跨时钟域处理方法

    书※目:FPGA深度解析_第七章_樊继明著     高级FPGA设计结构.实现和优化_第六章_孟宪元译 文章目录 一.亚稳态 (1)跨时钟域的亚稳态现象 (2)亚稳态的多径传输 二.跨时钟域处理 2. ...

  6. 【读书笔记-数据挖掘概念与技术】聚类分析:基本概念和方法

    下图摘自:http://blog.163.com/qianshch@126/blog/static/48972522201092254141315/ 主要的聚类方法可以划分为以下几类: 划分方法 层次 ...

  7. 读书笔记《Outlier Analysis》 第四章 基于邻近的异常检测

    1.基本介绍 基于邻近的技术是指,当一个数据点的位置或邻近是稀疏时,则将其定义为一个离群点. 1.1 基于邻近的技术最常见的三种离群点分析的定义: 基于聚类: 使用非任何聚类中数据点的成员.其与其他聚 ...

  8. 《机器学习实战》萌新读书笔记 ② — — 第三章 决策树 内容提要、知识拓展和详细注释代码

    目录 引入: 什么是决策树? 决策树相较KNN的优势? 决策树的运作方式? 决策树模型的优缺? 决策树的构造: 构造思路 信息增益 划分数据集 递归构造决策树 绘制决策树树形图 Matplotlib注 ...

  9. python编写代码避免内存增加_读书笔记(6): 编写高质量python代码的59个有效方法-完结...

    前言 <编写高质量python代码的59个有效方法>这本书分类逐条地介绍了编写python代码的有效思路和方法,对理解python和提高编程效率有一定的帮助.本笔记简要整理其中的重要方法. ...

最新文章

  1. [转]Introduction of iSCSI Target in Windows Server 2012
  2. 配置bind主域名服务器
  3. Linux Bash终端支持中文显示
  4. Google AI 碾压集成电路设计专家,ASIC智能设计时代来了!
  5. 每日英语:Why Sit Up Straight?
  6. Vue 使用 token
  7. 拉取远程分支_git clone切换分支步骤,代理设置,作者信息设置
  8. OJ1024: 计算字母序号
  9. 陈常青老师的讲座的笔记
  10. 身份证号码(最后一位)计算。(使用 Excel 公式,计算 身份证最后一位)
  11. linux通用自启动管理,linux下通过xinetd服务管理 rsync 实现开机自启动
  12. 快排第n趟排序结果校验
  13. WSL2运行 Anbox
  14. JavaScript Json对象和Json对象字符串的关系 jsonObj-JsonString
  15. 【LVGL】roller选项列表问题
  16. CLM5.0模式移植篇——驴某人的自我救赎
  17. SAP Open SQL
  18. 华为服务器系统图标,服务器图标
  19. 基于Android企业员工绩效考评APP的设计与实现
  20. 哪些软件可以做国外问卷调查

热门文章

  1. MATLAB中波浪线的作用
  2. CORD-19数据集以及相关分析代码介绍
  3. opencv之SURF算法原理及关键点检测
  4. 微星z370安装linux系统,微星 Z370 GAMING PRO CARBON如何用u盘装系统win7
  5. 洛谷 P2853 Cow Picnic S(DFS)
  6. 【SPSS】游程检验-变量值随机性检验和两独立样本的W-W游程检验详细操作教程(附案例实战)
  7. Python入门100题之002:个税计算
  8. python提取xml格式的出参并转成dict
  9. 职场上个人的核心技术_如何打造个人职场核心竞争力
  10. 关于CSGO理财游戏的一些心得(一)