Luego de indagar en diferentes repositorios y páginas webs al final nos hemos encontrado la respuesta que te enseñamos a continuación.
Solución:
Use el mismo algoritmo pero haga la proporción de cada individuo = maxfitness - fitness
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();
En el ejemplo anterior, digamos Número la clase es tu clase individual, I es fitness, salto es la probabilidad de ser seleccionado como padre. Primero calculamos la probabilidad de ser seleccionado como padre como antes. En este paso, una mayor aptitud tendrá una mayor probabilidad. Luego restamos la probabilidad de 1. Esto le da al individuo de menor aptitud una mayor aptitud (pseudo aptitud por el bien de la selección). Ahora vuelve a calcular la probabilidad. Mira, el orden del ser está totalmente invertido.
La rueda de la ruleta no se puede utilizar para la minimización debido a la escala. Además, tampoco se puede utilizar cuando hay negativos o null aptitudes porque su probabilidad sería negativa o null.
Como sugirió Larry, puede usar la normalización local restando, a la aptitud máxima de su población, la aptitud de cada individuo, pero nuevamente tendrá que fijar la aptitud máxima para que no tenga un null probabilidad.
Le sugiero que utilice una selección de torneos que se haya demostrado varias veces mejor que la ruleta.
Al final de la página puedes encontrar las aclaraciones de otros administradores, tú todavía puedes mostrar el tuyo si lo deseas.