8

我必须做一个关于遗传算法的学期项目,并且我有调整第一人称射击机器人的特征(即要使用的武器等)的想法。例如,我将以字符串的形式表示特征,前 10 位表示选择武器 1 的概率,接下来的 10 位表示选择武器 2 的概率,等等。因此我将获得最佳字符串,从而能够弄清楚我应该使用什么最佳武器。

我面临的一个明显问题是如何找到适应值。我的想法是,如果我想找到一个字符串的适应度,我会强制机器人使用相应的武器并与它进行游戏,并使用机器人的最终得分作为适应度。问题是我需要玩大量的游戏。

有什么我可以做的模拟吗?例如,我能否以某种方式获得一个函数 f,我将在其中输入机器人的特征(例如:武器等)并返回相应的适应度值?开源 FPS 游戏是否提供这样的库?

另一种选择是进入游戏的源代码,然后继续模拟各种场景并记录每个场景的分数。我不希望进入游戏源代码的额外复杂性,因为这是一个短(1 个月)的项目。

谢谢。

4

4 回答 4

4

我认为您的项目对于一个月的项目来说非常复杂。

这不是很令人兴奋,但也许你可以看看棋盘游戏或纸牌游戏的策略。这是一个更简单的情况,并且可以轻松快速地模拟许多游戏,从而允许您使用遗传算法找到一个好的游戏策略。它将教您遗传算法的原理,而无需您了解模拟第一人称射击游戏所需的大量源代码。

于 2010-10-10T09:18:02.457 回答
2

我同意 Mark Byers 的观​​点,对于一个为期 1 个月的项目来说,这有点过于雄心勃勃了。

无论如何,您可能想查看NERO(神经进化机器人操作员),这是一款基于 Ken Stanley 的算法NEAT(增强拓扑的神经进化)的游戏。

您可能还想看看 Stanley 的论文:

NEAT 的几种实现适用于不同的语言,所以这可能是一个开始。

于 2010-10-10T10:00:46.303 回答
0

你的适应度函数可以是一个给定的机器人对一个坐着的鸭子对手造成多少 DPS。例如让机器人攻击玩家,不要反击。

您可以记住适应度,因此不必重新测试重复的个体。


或者,您可以通过将 2 个人放在对立的团队中并查看谁杀了谁来实现适者生存。

因为从技术上讲,您不需要适应度函数,只是一种比较个体的方法。

为了减少比较次数,可以通过锦标赛来比较每一代的个体,例如

A 
  }-> A
B
        }-> C
C
  }-> C
D

这表明前两个人是C,然后是A。

于 2010-10-10T09:51:01.210 回答
0

如果有可用的并且可能的话,您可以使用现有的机器人来生成数据。

或者,您可以使用 Autohotkey(搜索 google)生成一系列按键和鼠标按下,并使机器人以某种方式以愚蠢的方式自动播放。

于 2010-10-10T09:53:07.413 回答