我正在尝试使用基本遗传算法(Iterated Prisoner's Dilemma,Stochastic Universal Sampling,Canonical GA)为1-point crossover制定最佳策略。我在Haskell中实现了这个算法,并且最近添加了图表输出。不幸的是,生成的图表不符合此问题的预期模式,因此看起来我有一个错误。
我在这个问题上看到的所有适合度图都是这样的:
其他例子可以在On Evolving Robust Strategies for Iterated Prisoner's Dilemma, P.J. Darwen and X. Yao (1993) p6-7
中看到但是我的输出看起来像这样:
如果我将突变率设置为1,我得到:
也许暗示我的选择功能并不像我想象的那么随机,因为图表意味着同质人口。
如果您想检查,我的代码在this git repository。
现在提出一个问题:你们有没有人建议我在GA实现中做错了什么来使图表看起来像这样?
e.g。我认为它不太可能是健身功能,因为我使用相同的适应性输出功能,它正在最大化,所以即使健身功能在某种程度上是错误的,它仍然会最大化错误的功能(虽然我确定我可能在这里错了,我对遗传算法很陌生)
我想知道要查看哪些功能的建议,我正试图解决这个问题。
编辑:在我的组合函数中添加了一些调试代码后,它似乎总是被传递给相同的个体(即使将变异设置为1),所以可能选择在某处出错。编辑:选择出错了,但这并没有造成所有问题,只是人口的同质性。
答案 0 :(得分:3)
你有一个函数maybeFlip
,它会以给定的概率将等位基因改为对面。因此,当突变率为1时,您将继续在两个对立面之间来回翻转所有等位基因。这解释了图表中的锯齿形图案。
此外,swap
位于Data.Tuple
:)