gpt4 book ai didi

haskell - 为什么我的遗传算法看起来是随机的?

转载 作者:行者123 更新时间:2023-12-03 20:57:40 25 4
gpt4 key购买 nike

我正在尝试为 Iterated Prisoner's Dilemma 制定最佳策略使用基本的遗传算法(Stochastic Universal Sampling1-point crossover、Canonical GA)。我在 Haskell 中实现了这个算法,最近添加了图表输出。不幸的是,生成的图表不符合这个问题的预期模式,所以看起来我有一个错误。

我在这个问题上看到的所有适应度图都是这样的:

My friend's graph, looking normal

其他示例可见On Evolving Robust Strategies for Iterated Prisoner's Dilemma, P.J. Darwen and X. Yao (1993) p6-7

但是我的输出如下所示:

My graph looking very strange

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

Flipping between two identical values

也许暗示我的选择函数并不像我想象的那么随机,因为该图暗示了一个同质人群。

我的代码在 this git repository如果你想检查它。

现在的问题是:你们中的任何人能否建议我在 GA 实现中可能做错了什么以使图表看起来像这样?

例如我会假设它不太可能是适应度函数,因为我使用相同的适应度函数来输出它正在最大化,所以即使适应度函数在某种程度上是错误的,它仍然会最大化那个错误的函数(尽管我确定我在这里可能是错的,我对遗传算法相当陌生)

我只是想要查看哪些功能的建议,我正在努力解决这个问题。

编辑:在我的组合函数中添加了一些调试代码后,它似乎总是被相同的人传递(即使突变设置为 1),所以大概选择在某个地方出错了。

编辑:选择出错了,但这并没有导致所有问题,只是人口的同质性。

最佳答案

你有一个函数maybeFlip ,这将以给定的概率将等位基因变为相反的。因此,当突变率为 1 时,您将继续在两个对立面之间来回翻转所有等位基因。这解释了您的图表中看到的锯齿形模式。

另外,swap Data.Tuple :)

关于haskell - 为什么我的遗传算法看起来是随机的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7792456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com