遗传算法在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) 个答案