Kit*_*itB 15 haskell genetic-algorithm
我正在尝试使用基本遗传算法(随机通用采样,1点交叉,Canonical GA)来演化迭代囚徒困境的最优策略.我在Haskell中实现了这个算法,并且最近添加了图表输出.不幸的是,生成的图表不符合此问题的预期模式,因此看起来我有一个错误.
我在这个问题上看到的所有拟合图都看起来像这样:

其他例子可以在关于迭代囚徒困境的演化稳健策略中看到,PJ Darwen和X. Yao(1993)p6-7
但是我的输出看起来像这样:

如果我将突变率设置为1,我得到:

或许暗示我的选择功能并不像我想象的那么随机,因为图表意味着同质人口.
如果您想检查它,我的代码就在这个git存储库中.
现在提出一个问题:你们中的任何人都可以在我的GA实现中提出我可能做错的事情,使图表看起来像这样吗?
例如,我认为它不太可能是适应度函数,因为我使用相同的适应度函数进行输出,它正在最大化,因此即使适应度函数在某种程度上是错误的,它仍然会最大化错误的函数(尽管我是我确定在这里错了,我对遗传算法很陌生)
我想要了解哪些功能的建议,我正试图解决这个问题.
编辑:在我的组合函数中添加了一些调试代码后,它似乎总是被传递给相同的个体(即使突变设置为1),所以推测选择在某处出错.
编辑:选择出错了,但这并没有引起所有问题,只是人口中的同质性.
您有一个函数maybeFlip,它将以给定的概率将等位基因更改为相反的等位基因。因此,当突变率为 1 时,您将不断地在两个相反的方向之间来回翻转所有等位基因。这解释了图表中看到的之字形图案。
另外,swap在Data.Tuple:)