【发布时间】:2011-05-02 03:42:55
【问题描述】:
所以我为我的遗传算法编写了一个轮盘赌选择函数,如下所示:
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 终止,因为下一步涉及交叉阶段。有什么想法吗?
【问题讨论】:
-
在什么情况下你将无法从循环中的语句返回?为什么会这样?放入一些调试行并找出答案。或者使用调试器运行它。
-
如果出现最小化问题,此代码将失败。
-
我意识到我参加这个聚会有点晚了,但是使用你传递给这个函数的'fitness'值,它是所有个人适应度的总和吗?只是好奇这是如何工作的。
标签: java genetic-algorithm roulette-wheel-selection