【发布时间】:2015-09-25 21:27:59
【问题描述】:
我正在尝试为我创建的游戏构建(部分)人工智能。
问题描述
给定一定的可用单位池,以及敌人军队(人类玩家)的特定组成,使用进化算法从可用池中创建一个可以击败敌人军队的单位组合。
这个游戏中有几种类型的单位,它们中的大多数以 石头剪刀布 的方式相互竞争,这意味着单位类型 A 将击败 B,B 将击败 C 和 C将击败 A。最昂贵的单位并不总是最好的。如果敌人的军队是多样化的,我们也需要多样化。
单位成本是对其功率的粗略估计。 1 个 A 类单位成本 100 大约等于 10 个 B 类单位,每个单位成本 10。然而,这略微被单位的石头剪刀布特性所抵消。
约束
- 尽量减少军队。更大的军队需要更多的维持资源来进行战斗。
- 尽量减少损失,永远不要超过战斗的战利品(胜利后的战利品),至少对于正常的困难。
EA 组件
- 初始化:从可用单元池中随机创建 N 个组合。
- 健身:技术上最复杂,但已经完成:只需在我自己的游戏空间内进行模拟。
- 操作员:使用哪些基因操作员来进化每个军队的组成以可能得到改进。到目前为止,我在这方面还没有取得太大的成功。
我相信,问题的关键在于遗传算子。我尝试了不同的方法,但似乎所有方法充其量都陷入局部最优或完全随机(针对同一对手的算法每次重新运行似乎会产生截然不同的结果)。
我尝试了以下运算符,结果很差甚至没有:
- 对于每个单元,以 p 的概率将其类型从 A 更改为 B
- 对于每个单位,以 p 的概率将其替换为尽可能多的 B 类单位,因此当前成本保持不变。
- 对于每个单元,以 p 的概率将其删除而不替换
- 对于每个组合,以概率 p 向其中添加 1 个随机类型的单元
所以,我的问题是,鉴于这个问题描述,什么是体面的变异和组合运算符?我觉得我目前使用的算子都太专注于本地环境(添加 1、更改 1、删除 1),并没有充分发挥 EA 的潜力。
【问题讨论】:
-
你是如何准确计算适应度的?
-
我只是模拟战斗并比较结果。我的损失与敌人(玩家)的战利品。净总数可以是正数或负数。维护费用被添加到损失中,以集中为针对特定战斗量身定制的更小更具体的军队。否则,在压倒性胜利中由所有可能的单位组成的最大军队永远是最好的。
标签: artificial-intelligence evolutionary-algorithm