轮盘赌选择功能最小化

Mas*_*san 6 roulette-wheel-selection genetic-algorithm

这个问题回答了轮盘赌选择的伪代码.但这是最大化问题.但我的问题是最小化健身功能的价值.这意味着,具有低适应性的个体比具有高适应性的个体获得更高的被选择概率.我该如何实现呢?

提前致谢.

Lar*_*ien 5

使用相同的算法但使每个人的比例= maxfitness - fitness


use*_*ser 3

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 中减去概率。这使得较低适应度的个体具有较高的适应度(为了选择而产生的伪适应度)。现在重新计算概率。看,存在的顺序完全颠倒了。