- jednoduchá implementace GA eoSGA
neimplementuje elitismus
- použijeme eoEeasyEA
- prohléďněte si kód eoEasyEA
-
eoEasyEA gga(checkpoint,
eval,
select,
transform,
replace);
- checkpoint : kritérium pro zastavení +
statistiky
- eval : vyhodnocení fitness
- select : selekce (zapouzdření, narozdíl od
oeSGA vybírá rovnou dané procento jedinců)
// SELECT
// The selection
eoProportionalSelect selectOne;
// is now encapsulated in a eoSelectPerc
eoSelectPerc select(selectOne); // by default rate==1 (100%)
- transform: zapouzdření selekce a mutace
// CROSSOVER
// 1-point crossover for bitstring
eo1PtBitXover< Indi> xover;
// MUTATION
// standard bit-flip mutation for bitstring
eoBitMutation< Indi> mutation(P_MUT_PER_BIT);
// The operators are encapsulated into an eoTRansform object
eoSGATransform<Indi> transform(xover, CROSS_RATE, mutation, MUT_RATE);
- replecament : mechanismus vytvoření nové
populace z rodičů (staré populace) a potomků
- stejného efektu jako s eoSGA dosáhneme s eoGenerationalReplecament
- elitu implementujeme pomocí tzv. Survive and Die replacement:
eoDeterministicSaDReplecement(elita_percentage,1.0-elita_percentage);
- tzv. slabý eletismus lze pomocí
eoWeakElitistReplacement
// REPLACE
// the same generational replacement at the moment :-)
eoGenerationalReplacement<Indi> replace_main;
// weak elitism
eoWeakElitistReplacement<Indi> replace(replace_main);
- pokud chcete, stáhněte si gui.zip , a instanci
třídy myGui přidejte do objektu checkpoint (musite prilinkovat knihovny tk a tcl,
t.j. do Makefilu na vhodne misto pridat -ltk -ltcl)
- porovnejte průběh GA s elitou a bez elity (bez elity: pomocí eoSGA nebo
použít replacement eoGenerationalReplacement)
- jak velká elita pomáhá (kolik procent)? kolik už je moc? (vyzkoušejte)