gpt4 book ai didi

java - 遗传算法的轮盘赌选择函数

转载 作者:搜寻专家 更新时间:2023-11-01 03:29:38 24 4
gpt4 key购买 nike

所以我为我的遗传算法编写了一个轮盘赌选择函数,如下所示:

public String tournament(float fitness, Chromosome pop[], int selection)
{
// roulette
if (selection == 1)
{
Random random = new Random();
float slice = random.nextFloat() * fitness;

float curFitness = 0.0f;

for (int i = 0; i < initialPopulation; i++)
{
curFitness += pop[i].fitness;

if (curFitness >= slice)
return pop[i].bits;
}
}
return "";
}

问题是它有时会返回空字符串,这些空字符串只是为了满足返回条件而放置的。这通常不是问题,但在某些运行期间它会导致 GA 终止,因为下一步涉及交叉阶段。有什么想法吗?

最佳答案

所以事实证明变异函数偶尔会使我的一些位串为空,这导致总体包含空串。

之前,它看起来像这样:

public String mutate(String bits)
{
Random random = new Random();
StringBuffer buf = new StringBuffer(bits);
for (int i = 0; i < bits.length(); i++)
{
if (random.nextFloat() < mutationRate)
{
if (bits.charAt(i) == '1')
{
buf.setCharAt(i, '0');
return buf.toString();

}
else
{
buf.setCharAt(i, '1');
return buf.toString();
}
}
}
return "";
}

我把它改成了这样:

public String mutate(String bits)
{
Random random = new Random();
StringBuffer buf = new StringBuffer(bits);
for (int i = 0; i < bits.length(); i++)
{
if (random.nextFloat() < mutationRate)
{
if (bits.charAt(i) == '1')
{
buf.setCharAt(i, '0');
}
else
{
buf.setCharAt(i, '1');
}
}
}
return buf.toString();
}

粗心的错误。

关于java - 遗传算法的轮盘赌选择函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4047719/

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