10

我使用遗传算法创建了一个俄罗斯方块播放器,并面临一些问题。我已经阅读了很多相关的作品,但他们没有给我足够的关于 GA 的细节。

问题是我的代理似乎很快就卡住了……我使用评估函数涵盖了 4 个特征:高度、覆盖的孔、平整度和清除的行数。我读了一些使用相同评估的论文,并且能够执行数千行。

在 600 代之后,拥有 100 名智能体,最好的智能体平均只能做 260 行,这是蹩脚的。所有代理都在演奏相同的乐曲序列。

我的 GA 的详细信息:

世代:600 人口:100

基因:4 个浮点值的数组,介于 0 和 1 之间。

均匀交叉以一定的概率发生,并以一定的概率在两个父母之间交换基因。

突变以一定的概率发生,在这里我尝试了 3 种不同的方法:交换基因,用随机值替换基因,或向基因添加一些噪声值。

我有 50% 的精英率,并注意到一些优秀的特工被选中并生出更差的特工,污染了人口。

选择是轮盘赌...

如果有人能给我关于交叉和变异的最佳方法的详细信息,我很感激!

谢谢,很抱歉这么长的帖子!

4

2 回答 2

3

评估功能似乎存在一些差异。您描述了四个特征:

  1. 高度,
  2. 覆盖孔,
  3. 平整度和
  4. 清除的行数

但是,您参考的论文描述了五个特征:

代理用来确定棋盘状态效用的函数是根据状态计算的数值特征的加权线性和。Colin Fahey 的代理人使用了这些特征:桩高闭孔数量和数(Fahey 2003)。我们添加的特征是刚刚制作的行数,以及一个表示堆有多“凹凸不平”的数字。

(强调我的)

因此,您似乎缺少评估函数和基因构成中的“井”特征。

于 2011-10-14T18:26:37.327 回答
0

与论文不同,您应该实现游戏的“下一部分”方面。

在计算“效用”之前模拟所有可能的“当前部分”放置,然后是“下一个部分”。

为了性能起见,您可以缓存“下一块”展示位置以获得最佳“实用性”,这样就不需要再次将它们重新计算为“当前部分”展示位置。

虽然计算会更慢,但我相信您的代理会发展得更快/更聪明。

于 2011-10-14T13:05:27.050 回答