Populační přírůstkové učení - Population-based incremental learning
v počítačová věda a strojové učení, populační přírůstkové učení (PBIL) je optimalizace algoritmus a odhad distribučního algoritmu. Toto je typ genetický algoritmus Kde genotyp celé populace (pravděpodobnost vektor ) se vyvíjí spíše než jednotliví členové.[1] Algoritmus navrhl Shumeet Baluja v roce 1994. Algoritmus je jednodušší než standardní genetický algoritmus a v mnoha případech vede k lepším výsledkům než standardní genetický algoritmus.[2][3][4]
Algoritmus
V PBIL jsou geny reprezentovány jako skutečné hodnoty v rozsahu [0,1], což naznačuje pravděpodobnost, že některý konkrétní alela v tom se objeví gen.
Algoritmus PBIL je následující:
- Populace je generována z vektoru pravděpodobnosti.
- Kondice každého člena je hodnocena a hodnocena.
- Aktualizujte genotyp populace (vektor pravděpodobnosti) na základě nejschopnějšího jedince.
- Mutovat.
- Opakujte kroky 1–4
Zdrojový kód
Toto je část zdrojového kódu implementovaná v Jáva. V článku se používá learnRate = 0,1, negLearnRate = 0,075, mutProb = 0,02 a mutShift = 0,05. N = 100 a ITER_COUNT = 1000 stačí na malý problém.
veřejnost prázdnota optimalizovat() { finále int celkem bitů = getTotalBits(); finále dvojnásobek[] probVec = Nový dvojnásobek[celkem bitů]; Pole.vyplnit(probVec, 0.5); bestCost = POZITIVNÍ_INFINITY; pro (int i = 0; i < ITER_COUNT; i++) { // Vytvoří N genů finále booleovský[][] geny = Nový [N][celkem bitů]; pro (booleovský[] gen : geny) { pro (int k = 0; k < gen.délka; k++) { -li (rand_nextDouble() < probVec[k]) gen[k] = skutečný; } } // Vypočítejte náklady finále dvojnásobek[] náklady = Nový dvojnásobek[N]; pro (int j = 0; j < N; j++) { náklady[j] = costFunc.náklady(toRealVec(geny[j], domén)); } // Najděte geny minimální a maximální ceny booleovský[] minGene = nula, maxGene = nula; dvojnásobek minCost = POZITIVNÍ_INFINITY, maxCost = NEGATIVNÍ_INFINITY; pro (int j = 0; j < N; j++) { dvojnásobek náklady = náklady[j]; -li (minCost > náklady) { minCost = náklady; minGene = geny[j]; } -li (maxCost < náklady) { maxCost = náklady; maxGene = geny[j]; } } // Porovnejte s nejlepším genem nákladů -li (bestCost > minCost) { bestCost = minCost; bestGene = minGene; } // Aktualizujte vektor pravděpodobnosti pomocí genů maximální a minimální ceny pro (int j = 0; j < celkem bitů; j++) { -li (minGene[j] == maxGene[j]) { probVec[j] = probVec[j] * (1d - learnRate) + (minGene[j] ? 1d : 0 d) * learnRate; } jiný { finále dvojnásobek learnRate2 = learnRate + negLearnRate; probVec[j] = probVec[j] * (1d - learnRate2) + (minGene[j] ? 1d : 0 d) * learnRate2; } } // Mutace pro (int j = 0; j < celkem bitů; j++) { -li (rand.dalšíDvojitý() < mutProb) { probVec[j] = probVec[j] * (1d - mutShift) + (rand.dalšíBoolean() ? 1d : 0 d) * mutShift; } } }}
Viz také
Reference
- ^ Karray, Fakhreddine O .; de Silva, Clarence (2004), Soft computing a design inteligentních systémůAddison Wesley, ISBN 0-321-11617-8
- ^ Baluja, Shumeet (1994), „Populační přírůstkové učení: metoda integrace optimalizace funkcí založených na genetickém vyhledávání a konkurenčního učení“, Technická zpráva, Pittsburgh, PA: Carnegie Mellon University (CMU – CS – 94–163), CiteSeerX 10.1.1.61.8554
- ^ Baluja, Shumeet; Caruana, Rich (1995), Odebrání genetiky ze standardního genetického algoritmu, Morgan Kaufmann Publishers, s. 38–46, CiteSeerX 10.1.1.44.5424
- ^ Baluja, Shumeet (1995), Empirické srovnání sedmi iteračních a evolučních heuristik optimalizace funkcí, CiteSeerX 10.1.1.43.1108