stringtranslate.com

Aprendizaje incremental basado en la población

En informática y aprendizaje automático , el aprendizaje incremental basado en la 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 desarrolla el genotipo de una población completa ( vector de probabilidad ) en lugar de los miembros individuales. [1] El algoritmo fue propuesto por Shumeet Baluja en 1994. El algoritmo es más simple que un algoritmo genético estándar y, en muchos casos, conduce a mejores resultados que un algoritmo genético estándar. [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 cualquier alelo particular aparezca en ese gen .

El algoritmo PBIL es el siguiente:

  1. Una población se genera a partir del vector de probabilidad.
  2. Se evalúa y clasifica la aptitud física de cada miembro.
  3. Actualizar el genotipo de la población (vector de probabilidad) en función del 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 optimizar () { 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 [] costs = new double [ N ] ; for ( int j = 0 ; j < N ; j ++ ) { costs [ 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 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 para ( int j = 0 ; j < totalBits ; j ++ ) { if ( rand . nextDouble () < mutProb ) { probVec [ j ] = probVec [ j ] * ( 1d - mutShift ) + ( rand . nextBoolean ( ) 1d : 0d ) * cambiomutativo ; } } } }                                 

Véase también

Referencias

  1. ^ Karray, Fakhreddine O.; de Silva, Clarence (2004), Computación blanda y diseño de sistemas inteligentes , Addison Wesley, ISBN 0-321-11617-8
  2. ^ Baluja, Shumeet (1994), "Aprendizaje incremental basado en la población: 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: Carnegie Mellon University, 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, págs. 38-46, CiteSeerX 10.1.1.44.5424 
  4. ^ Baluja, Shumeet (1995), Una comparación empírica de siete heurísticas de optimización de funciones iterativas y evolutivas , CiteSeerX 10.1.1.43.1108