gpt4 book ai didi

java - 均匀交叉比单点交叉产生更差的结果?

转载 作者:行者123 更新时间:2023-11-30 11:54:51 25 4
gpt4 key购买 nike

我为我的部分作业编写了一个统一的交叉算法,但它不能正常工作。它实际上返回的结果比我的单点交叉更糟糕。我只是希望有人指出我哪里出错了,所以我可以解决它:)。我已经尝试了很长时间,这是我最后的选择!!

    private void DoUniformCrossOver(int p1id,int p2id)
{
ArrayList<Integer> p1 = population.get(p1id).GetRep();
ArrayList<Integer> p2 = population.get(p2id).GetRep();
ArrayList<Integer> c1 = new ArrayList<Integer>();
ArrayList<Integer> c2 = new ArrayList<Integer>();

for (int i=0;i<nbits;++i)
{
double selected = CS2004.UI(1,2);
if (selected ==1)
{
c1.add(p1.get(i));
c2.add(p2.get(i));
}
else
{
c1.add(p2.get(i));
c2.add(p1.get(i));
}
}

population.add(new ScalesChrome(c1));
population.add(new ScalesChrome(c2));
}

该方法将两个父对象 p1id 和 p2id 作为参数。然后创建表示的数组列表 - p1 和 p2。

在for循环中,'nbits'是数组的权重(或数组的长度)。我的单点交叉法在 for 循环中使用它,效果很好。

然后我生成 1/2 来确定 child 将从每个 parent 那里获得哪个基因。

这个算法的适应度非常非常差!!任何帮助都将不胜感激。

非常感谢。

最佳答案

好吧,首先,您正在编码什么类型的信息您想要进化什么

根据您要解决的问题,某些交叉策略会阻止您找到好的解决方案。

一个简单的例子:如果您正在寻找的解决方案具有固有的对称性(例如,白色/黑色元胞自动机多数分类器),单点交叉永远不会给您很好的结果,因为它是打破遗传算法可能偶然发现的任何对称性(例如,在多数分类器的情况下,它将非常擅长对黑色或白色进行分类,但不能同时对两者进行分类,因此它永远不会比给定的 - 相当低的 - 适合度更好).

关于java - 均匀交叉比单点交叉产生更差的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5364403/

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