Saltar al contenido

Selección de la rueda de la ruleta para la minimización de funciones

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *