有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

遗传算法在Java中的轮盘赌轮选择

我正在为遗传算法实现一种轮盘赌轮选择方法。从本质上说,我的问题很简单,但我不能把注意力集中在它上面。在我的适应度函数中,如果答案非常错误,它可能会返回-3000%左右。我的问题是,当我试图为我的结果分配概率时,它们会偏向错误的答案

例如: 如果我的百分比在一个数组中,并且是[92,68,5,-4,-3546](从高到低) 我需要让指数较低的数字比指数较高的数字更有可能被选中

忽略我的适应度函数,考虑到大的负数,我如何基于此创建概率

我在另一个问题中发现了一些基本代码:

public Individual rouletteWheelSelection() { 
    double randNum = m_rand.nextDouble() * this.totalFitness; 
    int idx; 
    for (idx=0; idx<POP_SIZE && randNum>0; ++idx) { 
        randNum -= m_population[idx].getFitnessValue(); 
    } 
    return m_population[idx-1]; 
} 

(此处原始链接:GA written in Java

我让我的GA使用另一种选择方法,但现在我正试图修改这个方法。任何帮助都将不胜感激

***编辑

以下代码是我修改的轮盘赌选择:

private Chromosome rouletteWheelSelection(){
    double randNum = Math.abs(rand_num.nextDouble() * totalFitness);
    int idx;
    for (idx=0;idx<NUM_CHROMOSOMES && randNum>0;++idx){
        randNum -= Math.abs(population[idx].getFitness());
    }
    return population[NUM_CHROMOSOMES-idx];
}

以下是我的健身功能:

public double getFitness()
{
    String working = bitString;
    int x1 = Integer.parseInt(working.substring(0,6),2);
    int x2 = Integer.parseInt(working.substring(6),2);
    double result = ScratchGA.functionTest(x1,x2);
    double percentAccuracy = (1- Math.abs(((ScratchGA.getDesired() - result)/ScratchGA.getDesired())))*100;
    if (percentAccuracy <= 100)
    {
    return percentAccuracy;
    }
    else
    {
    return -percentAccuracy;
    }
}

我的想法是,一个值与我需要的值相差100%以上,我把它设为负值,然后推到排序列表的末尾


共 (0) 个答案