我正在使用遗传算法创建一个俄罗斯方块播放器,并面临一些问题。我已经阅读了很多相关的着作,但他们没有给我足够的关于GA的细节。
问题是我的代理似乎很快被卡住了...我使用评估功能采取了4个功能:高度,覆盖的孔,平整度和清除行数。我读了一些使用相同评估的论文,并且能够完成数千行。
经过600代,拥有100个代理商,最好的代理商平均只能做260行,这是蹩脚的。所有代理人都在播放相同的片段。
我的GA详情:
代:600 人口:100
genes:4个浮点值的数组,介于0和1之间。
均匀交叉以一定的概率发生,并以一定的概率在两个父母之间交换基因。
突变发生在一定的概率,这里我尝试了3种不同的方法:交换基因,用随机值替换基因,或者为基因添加一些噪音值。
我有50%的精英率,并注意到一些好的特工正在被选中并生下更糟糕的特工,污染了人口。
选择是轮盘赌......
如果有人能给我详细介绍交叉和变异的最佳方式,我很感激!
谢谢,对不起这篇长篇文章感到抱歉!
答案 0 :(得分:3)
评估功能似乎有些不同。您描述了四个功能:
但是,您引用的论文描述了五个功能:
代理用于确定电路板状态效用的函数是根据状态计算的数值特征的加权线性和。 Colin Fahey的代理使用了以下功能: 桩高 , 封闭孔 的数量,以及< strong> 井 (Fahey 2003)。我们添加的功能是刚刚制作的 行的数量 ,以及表示 堆积如何“颠簸”的数字 强>
(强调我的)
因此,您似乎错过了评估函数中的“井”特征以及基因构成。
答案 1 :(得分:0)
与论文不同,你应该实现游戏的“下一部分”。
在计算“效用”之前,模拟所有可能的“当前作品”展示位置,然后是“下一篇文章”。
为了表现,您可以缓存“下一个”展示位置以获得最佳“实用程序”,这样就不需要将它们重新计算为“当前作品”的展示位置。
虽然计算速度会慢,但我相信您的代理商会更快/更智能地发展。