我正在为遗传算法实现轮盘选择方法。从本质上讲,我的问题很简单,但我无法围绕这个问题。在我的健身功能中,如果答案是非常错误的,它可能会返回约-3000%。我的问题是,当我尝试为结果分配概率时,他们会错误地回答错误的答案。Java中遗传算法的轮盘选择
例如: 如果我的百分数都是在阵列并[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工作了不同的选择方法,但是现在我试图修改这一个而不是工作。任何帮助将不胜感激。
***编辑
下面的代码是我rouletteWheelSelection我修改:
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%以上的不同,我把它推到了排序列表的末尾。
我totalFitness,按照目前的计算是个体适应度的绝对值的总和。示例:totalFitness [20,5,-15]是40 我把randNum问题(我认为),要确保它是积极的,减去适应度的绝对值的照顾。 – Ramrod
我不推荐所有的百分比准确度都是正面的,我可以根据准确性进行排序,100%是最优的,并且试图从我期望的结果中清除超过100%的东西。 – Ramrod
我不是在解决一个特别困难的问题,但它确实似乎正在快速收敛......在四代人中......哈哈。谢谢您的帮助。 – Ramrod