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();
}
}
Nel precedente esempio, dicono Numero classe è la classe individuale, i è il fitness, salto è la probabilità di essere selezionato come genitore. Inizialmente calcoliamo la probabilità di essere selezionati come genitore come prima. In questa fase, una maggiore idoneità avrà una probabilità maggiore. Quindi sottraiamo la probabilità da 1. Ciò dà al fitness più basso una maggiore idoneità individuale (pseudo forma fisica per la scelta). Ora ricalcolare la probabilità. Vedi, l'ordine dell'essere è totalmente invertito.
Per problemi reali, è improbabile che conosca MAX_FITNESS come MIN_FITNESS. – user
Non avrei dovuto usare cappucci di indicazione costante. maxFitness per la ruota della roulette è il massimo della generazione attuale, dal momento che la dimensione della ruota della roulette/lotteria è la somma delle attuali generazioni di fitness. –