Mas*_*san 6 roulette-wheel-selection genetic-algorithm
这个问题回答了轮盘赌选择的伪代码.但这是最大化问题.但我的问题是最小化健身功能的价值.这意味着,具有低适应性的个体比具有高适应性的个体获得更高的被选择概率.我该如何实现呢?
提前致谢.
import java.util.Random;
import java.util.Arrays;
import java.util.Comparator;
class MyComparator implements Comparator
{
public int compare(Object o1, Object o2)
{
Number n1 = (Number) o1;
Number n2 = (Number) o2;
if(n1.jump > n2.jump)
{
return 1;
}
else if(n1.jump < n2.jump)
{
return -1;
}
else
{
return 0;
}
}
}
class Number
{
public double i;
public int pos;
public double jump = 0;
public Random r = new Random();
public Number(int pos)
{
this.pos = pos;
i = r.nextInt();
}
}
public class Temp
{
public static void main(String[] args)
{
Number[] n = new Number[50];
double total = 0;
for(int i=0; i<50; i++)
{
n[i] = new Number(i);
total += n[i].i;
}
for(int i=0; i<50; i++)
{
n[i].jump = n[i].i/total;
}
Arrays.sort(n, new MyComparator());
for(int i=0; i<50; i++)
{
System.out.print(n[i].pos + ", ");
}
System.out.println();
for(int i=0; i<50; i++)
{
n[i].jump = n[i].i / total;
n[i].jump = 1-n[i].jump;
}
Arrays.sort(n, new MyComparator());
for(int i=0; i<50; i++)
{
System.out.print(n[i].pos + ", ");
}
System.out.println();
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,假设Number类是你的个人类,i是适应度,jump是被选为父类的概率。首先,我们像以前一样计算被选为父母的概率。在这一步,适应度越高,获得的概率就越高。然后我们从 1 中减去概率。这使得较低适应度的个体具有较高的适应度(为了选择而产生的伪适应度)。现在重新计算概率。看,存在的顺序完全颠倒了。