Horolezecký algoritmus 10 minútová úloha na cvičenia z predmetu Evolučné algoritmy 23.3.2006 Ján Májek
Obsah prezentácie Úloha Algoritmus Meranie Výsledky Zhodnotenie Diskusia
Úloha Horolezeckým algoritmom nájsť referenčný reťazec (RR) Fitnes je počet pozícií s rovnakým znakom ako RR Štatisticky vyhodnotiť získané údaje pre rôzne dĺžky reťazca a rôzne veľkosti okolia
Algoritmus Generovanie okolia je náhodný proces Lokálne minimá sú prekonateľné Vždy nájde vrchol
Algoritmus $string = $this->generateFirst(); $maxFitnes = -1; $generation = 0; while ( $generation < $this->maxGenerations && $maxFitnes < $this->perfectFitnes ) { $generation++; $surrounding = $this->generateSurrounding($string); $newString = $this->getBestSurrounding($surrounding); if ($this->fitnes($newString)>=$this->fitnes($string)) $maxFitnes = $this->fitnes($newString); $string = $newString; }
Algoritmus function generateSurrounding($string) { $surrounding = array(); for ($a = 0; $a < $this->surroundingSize; $a++) { $mutatedString = $this->mutate($string); array_push($surrounding, $mutatedString); } return $surrounding; function getBestSurrounding($surrounding) { $bestSurrounding = ''; $maxFitnes = -1; foreach ($surrounding as $string) { $fitnes = $this->fitnes($string); if ($fitnes > $maxFitnes) { $bestSurrounding = $string; $maxFitnes = $fitnes; } return $bestSurrounding;
Algoritmus function mutate($string) { $pos = rand(0, strlen($string) - 1); $char = rand(0, strlen($this->alphabeth) - 1); $string{$pos} = $this->alphabeth{$char}; return $string; } function fitnes($string) { $fitnes = 0; for ($a = 0; $a < strlen($string); $a++) { if ($string{$a} == $this->perfectMatch{$a}) { $fitnes++; } return $fitnes;
Meranie 3 reťazce rôznej dĺžky: Abeceda: A-Z,a-z,.,?,!,medzera “Ahoj” (4) “Ahoj ako sa mas?” (16) “Ahoj ako sa mas? Ja sa mam uplne super!” (39) Abeceda: A-Z,a-z,.,?,!,medzera Veľkosť okolia: 10, 50, 100 20 behov pre najdlhší reťazec a veľkosti okolia 50 a 100 100 behov pre ostatné kombinácie
Výsledky
Výsledky
Výsledky
Výsledky Počet generácií potrebných na zvýšenie fitnes o jedna rastie smerom k vrcholu
Zhrnutie Počet generácií rastie v závislosti od dĺžky reťazca Počet generácií mierne klesá s rastúcou veľkosťou okolia Počet ohodnotení pomerne prudko rastie v závislosti od dĺžky okolia aj od veľkosti okolia
Priestor pre vaše otázky Ďakujem za pozornosť Priestor pre vaše otázky