Articulo de referencia

Aprendizaje incremental basado en la población

En informática y aprendizaje automático , el aprendizaje incremental basado en población ( PBIL ) es un algoritmo de optimización y un algoritmo de estimación de distribución . ...

En informática y aprendizaje automático , el aprendizaje incremental basado en población ( PBIL ) es un algoritmo de optimización y un algoritmo de estimación de distribución . Se trata de un tipo de algoritmo genético en el que se evoluciona el genotipo de toda una población ( vector de probabilidad ) en lugar de los miembros individuales. [ 1 ] El algoritmo fue propuesto por Shumeet Baluja en 1994. Es más sencillo que un algoritmo genético estándar y, en muchos casos, produce mejores resultados. [ 2 ] [ 3 ] [ 4 ]

Algoritmo

En PBIL, los genes se representan como valores reales en el rango [0,1], lo que indica la probabilidad de que un alelo particular aparezca en ese gen .

El algoritmo PBIL es el siguiente:

  1. Se genera una población a partir del vector de probabilidad.
  2. Se evalúa y clasifica la condición física de cada miembro.
  3. Actualizar el genotipo de la población (vector de probabilidad) basándose en el individuo más apto.
  4. Mudar.
  5. Repita los pasos 1 a 4.

Código fuente

Esta es una parte del código fuente implementado en Java . En el artículo, se utilizan learnRate = 0.1, negLearnRate = 0.075, mutProb = 0.02 y mutShift = 0.05. N = 100 e ITER_COUNT = 1000 son suficientes para un problema pequeño.

public void optimize () { final int totalBits = getTotalBits (); final double [] probVec = new double [ totalBits ] ; Arrays . fill ( probVec , 0.5 ); bestCost = POSITIVE_INFINITY ; for ( int i = 0 ; i < ITER_COUNT ; i ++ ) { // Crea N genes final boolean [][] genes = new [ N ][ totalBits ] ; for ( boolean [] gen : genes ) { for ( int k = 0 ; k < gen . length ; k ++ ) { if ( rand_nextDouble () < probVec [ k ] ) gen [ k ] = true ; } }// Calcular costos final double [ ] costos = new double [ N ] ; for ( int j = 0 ; j < N ; j ++ ) { costos [ j ] = costFunc.cost ( toRealVec ( genes [ j ] , dominios ) ); }// Encuentra los genes de costo mínimo y máximo boolean [] minGene = null , maxGene = null ; double minCost = POSITIVE_INFINITY , maxCost = NEGATIVE_INFINITY ; for ( int j = 0 ; j < N ; j ++ ) { double cost = costs [ j ] ; if ( minCost > cost ) { minCost = cost ; minGene = genes [ j ] ; } if ( maxCost < cost ) { maxCost = cost ; maxGene = genes [ j ] ; } }// Comparar con el gen de mejor costo si ( bestCost > minCost ) { bestCost = minCost ; bestGene = minGene ; }// Actualizar el vector de probabilidad con los genes de costo máximo y mínimo para ( int j = 0 ; j < totalBits ; j ++ ) { if ( minGene [ j ] == maxGene [ j ] ) { probVec [ j ] = probVec [ j ] * ( 1d - learnRate ) + ( minGene [ j ] ? 1d : 0d ) * learnRate ; } else { final double learnRate2 = learnRate + negLearnRate ; probVec [ j ] = probVec [ j ] * ( 1d - learnRate2 ) + ( minGene [ j ] ? 1d : 0d ) * learnRate2 ; } }// Mutación for ( int j = 0 ; j < totalBits ; j ++ ) { if ( rand . nextDouble () < mutProb ) { probVec [ j ] = probVec [ j ] * ( 1d - mutShift ) + ( rand . nextBoolean () ? 1d : 0d ) * mutShift ; } } } }

Véase también

Referencias

  1. Karray, Fakhreddine O.; de Silva, Clarence (2004), Soft computing and intelligent systems design , Addison Wesley, ISBN 0-321-11617-8
  2. Baluja, Shumeet (1994), "Aprendizaje incremental basado en poblaciones: un método para integrar la optimización de funciones basada en búsqueda genética y el aprendizaje competitivo", Informe técnico , n.º CMU–CS–94–163, Pittsburgh, PA: Universidad Carnegie Mellon, CiteSeerX 10.1.1.61.8554  
  3. Baluja, Shumeet; Caruana, Rich (1995), Eliminando la genética del algoritmo genético estándar , Morgan Kaufmann Publishers, pp. 38–46 , CiteSeerX 10.1.1.44.5424  
  4. Baluja, Shumeet (1995), Una comparación empírica de siete heurísticas iterativas y evolutivas de optimización de funciones , CiteSeerX 10.1.1.43.1108