En informática y aprendizaje automático , el aprendizaje incremental basado en la población ( PBIL ) es un algoritmo de optimización y una estimación del algoritmo de distribución . Este es un tipo de algoritmo genético en el que se desarrolla el genotipo de una población completa ( vector de probabilidad ) en lugar de 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 algún alelo particular aparezca en ese gen .
El algoritmo PBIL es el siguiente:
- Se genera una población a partir del vector de probabilidad.
- Se evalúa y clasifica la aptitud de cada miembro.
- Actualice el genotipo de la población (vector de probabilidad) según el individuo más apto.
- Mudar.
- Repite los pasos 1 a 4.
Código fuente
Esto es parte del código fuente implementado en Java . En el documento, se usa learnRate = 0.1, negLearnRate = 0.075, mutProb = 0.02 y mutShift = 0.05. N = 100 e ITER_COUNT = 1000 es suficiente para un pequeño problema.
public void optimizar () { final int totalBits = getTotalBits (); doble final [] probVec = nuevo doble [ totalBits ] ; Matrices . llenar ( probVec , 0,5 ); bestCost = POSITIVE_INFINITY ; for ( int i = 0 ; i < ITER_COUNT ; i ++ ) { // Crea N genes booleanos finales [] [] genes = new [ N ] [ totalBits ] ; para ( boolean [] gen : genes ) { para ( int k = 0 ; k < gen . longitud ; k ++ ) { si ( rand_nextDouble () < probVec [ k ] ) de genes [ k ] = verdadero ; } } // Calcular los costos final double [] cost = new double [ N ] ; para ( int j = 0 ; j < N ; j ++ ) { costos [ j ] = costFunc . costo ( toRealVec ( genes [ j ] , dominios )); } // Encuentra genes de costo mínimo y máximo boolean [] minGene = null , maxGene = null ; double minCost = POSITIVE_INFINITY , maxCost = NEGATIVE_INFINITY ; para ( int j = 0 ; j < N ; j ++ ) { costo doble = costos [ j ] ; if ( minCost > cost ) { minCost = cost ; minGene = genes [ j ] ; } if ( maxCost < cost ) { maxCost = cost ; maxGene = genes [ j ] ; } } // Compare con el gen de mejor costo if ( bestCost > minCost ) { bestCost = minCost ; bestGene = minGene ; } // Actualiza 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 - tasa de aprendizaje ) + ( minGene [ j ] ? 1d : 0d ) * tasa de aprendizaje ; } else { final doble 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 ) * mutShift ; } } } }
Ver también
Referencias
- ↑ Karray, Fakhreddine O .; de Silva, Clarence (2004), Soft computing y diseño de sistemas inteligentes , Addison Wesley, ISBN 0-321-11617-8
- ^ Baluja, Shumeet (1994), "Aprendizaje incremental basado en la población: un método para integrar la optimización de funciones basadas en la búsqueda genética y el aprendizaje competitivo", Informe técnico , Pittsburgh, PA: Carnegie Mellon University (CMU – CS – 94–163), CiteSeerX 10.1 .1.61.8554
- ^ Baluja, Shumeet; Caruana, Rich (1995), Removing the Genetics from the Standard Genetic Algorithm , Morgan Kaufmann Publishers, págs. 38–46, CiteSeerX 10.1.1.44.5424
- ^ 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