Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 遗传算法的轮盘选择函数_Java_Genetic Algorithm_Roulette Wheel Selection - Fatal编程技术网

Java 遗传算法的轮盘选择函数

Java 遗传算法的轮盘选择函数,java,genetic-algorithm,roulette-wheel-selection,Java,Genetic Algorithm,Roulette Wheel Selection,因此,我为我的遗传算法编写了一个轮盘选择函数,如下所示: public String tournament(float fitness, Chromosome pop[], int selection) { // roulette if (selection == 1) { Random random = new Random(); float slice = random.nextFloat() * fitness; f

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

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 "";
}
公开字符串比赛(浮动适应度、染色体pop[],整数选择)
{
//轮盘赌
如果(选择==1)
{
随机=新随机();
float slice=random.nextFloat()*适合度;
浮动电流适应度=0.0f;
对于(int i=0;i=切片)
返回pop[i].位;
}
}
返回“”;
}

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

我猜问题在于你的
健康状况
有时会低于你的
pop[i]健康状况的总和。尝试输入一个
return“错误:“+fitness+”/“+curFitnessfor
循环后的
行中,但在
if
或类似性质的内容中,然后查看返回的内容。

因此,突变函数偶尔会将我的一些位字符串置零,这导致总体包含空字符串

以前是这样的,

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 "";
}
公共字符串变异(字符串位)
{   
随机=新随机();
StringBuffer buf=新的StringBuffer(位);
对于(int i=0;i
我把它改成这样:

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();
}
公共字符串变异(字符串位)
{   
随机=新随机();
StringBuffer buf=新的StringBuffer(位);
对于(int i=0;i

粗心的错误。

在什么情况下,循环中的语句无法返回?为什么会这样?输入一些调试行并找出答案。或者使用调试器运行它。如果出现最小化问题,此代码将失败。我意识到我参加这次聚会有点晚了,但是用户要向此函数传递的“适合度”值,是所有单独适合度的总和吗?只是好奇这是怎么回事。