gpt4 book ai didi

c# - 遗传算法框架中的随机化不佳

转载 作者:太空狗 更新时间:2023-10-29 21:32:54 24 4
gpt4 key购买 nike

有没有人从 .Net Genetic Algorithm Framework 看到令人信服的结果? ?

我在随遗传算法框架提供的旅行商问题演示中发现随机化很差。以下调用在 x 100 种子染色体群体中生成相同的基因洗牌顺序:

chromosome.Genes.ShuffleFast();

如果我单步执行代码,基因顺序看起来是随机的,因此我怀疑 ShuffleFast() 中存在时间/Rdn() 错误,否则我会忽略设置步骤。

我试图通过对染色体基因序列进行预洗牌来解决这个问题,这在 TSP 结果中产生了微小的变化。然而,运行的控制台日志仍然显示 GAF 在 400 代种群中仅发现 4 个潜在解决方案。这与显示遗传算法实现的 GA YouTube 视频不一致,该视频采用了建议的解决方案,但抖动很大。我引用这进一步表明 GAF 在随机数生成方面存在系统性内部问题。

遗传算法框架在作者的博客中有很好的记录,因此我试图保持开放的心态。

重现步骤 = 从 nuget 下载 GAF,在创建染色体 for 循环后使用断点编译和调试默认项目,检查 population.Solutions。 Windows 7、VS2015、.Net 4.5 和 4.61。调试或发布。

最佳答案

查看反汇编程序中的代码,有两个版本的 ShuffleFast 定义为扩展方法:一个将 Random 对象作为参数,另一个创建一个新的一个使用 default constructor并使用它。它们在其他方面是相同的,执行标准的 Fisher-Yates 洗牌。

所以需要自己构造Random然后传入:

Random r = new Random();
...
chromosome.Genes.ShuffleFast(r);
otherChromosome.Genes.ShuffleFast(r);
...

这样您就只有一个随机数流,并且无论您何时运行程序,该流都会根据当前时间播种。

关于c# - 遗传算法框架中的随机化不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34530027/

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