Na tohle opravdu nemám sílu, abych to vyluštil, vždyť se to nedá číst. První díl byl super, ale tohle mě dočista odrazuje. Jestli bude i v následujících dílech podobně napsaný kód (nebo nedej bože bude navazovat na dnešní), tak to můžu rovnou zabalit. Škoda.
Názory k článku
Biologické algoritmy (2) - Evoluční algoritmy
Kvalita kódu
celé vláknoRe: Kvalita kódu
celé vláknoKvalitu kódu neovlivním, ale zapnul jsem alespoň obarvování. Snad se to tím zpřehlední.
Uprava zdrojoveho kodu
celé vláknoInformacni hodnota clanku je slusna, to ano, ale ten kod. Nejde cist. Nazvy mnohych promennych jsou krypticke. Vypocet probiha v konstruktoru (!) tridy. Navic se tam micha kreslici a vypocetni kod. Temer nic neni oddelene do samostatnych metod, napr. doCrossover(), doMutation() apod. Takhle ja si ukazkovy kod nepredstavuju. "Setreni mistem" (uspora par radku inlinovanim funkci) zde opravdu "neni na miste".
Navic mam pocit, ze SimpleGA mutuje jedince i tehdy, pokud se nekrizili, coz tenhle kod myslim nedela.
Re: Uprava zdrojoveho kodu
celé vláknoJo, uvedeny kod nedovoluje mutaci, pokud se nekrizilo.
Je to sice jen o definici SimpleGA a vuli autora, ale mnohdy je uzitecne provadet mutaci i bez krizeni. Obzvlaste kdyz krizenim hrozi rozbiti jedince (vznik nevalidniho reseni), nebo je oprava rozbiteho jedince prilis draha.
Napriklad pri krizeni (rozhodovacich) stromu s unikatnimi atributy v listech a pritom chceme zajistit, aby vysledny strom po krizeni (prohozeni nahodne vybranych podstromu) mel i nadale dane vlastnosti - urcitou hloubku, unikatni atributy v listech - tedy ze se nam nestane, ze ve 2 listech budeme mit shodny atribut apod.
Proto taky v pripadech, kdy mame v genu kodovane slozitejsi struktury nez pole cisel - napriklad uz zminene stromy, kusy zdrojoveho kodu, polynomy, atd. a mame i striktnejsi pozadavky na validitu reseni, prichazi do uvahy evolvovat misto techto struktur gramatiky poposujici pripustna reseni. Obrovskou vyhodou je, za kazda takto vznikla gramatika produkuje pouze validni reseni. Nic anm vsak nezarucuje, ze takto produkovana reseni budou lepsi, nez jina - primo nalezena pomoci GA i za cenu velmi slozitych implementaci doCross()/doMutate() s pripadnymi naslednymi opravami vzniklych zmetku.
Je tedy na kazdem, aby peclive uvazil jakou cestou jit a idealne se rovnou poucit z predchozich (ne)uspechu jinych experimentatoru.
Re: Uprava zdrojoveho kodu
celé vláknoSouhlasim. Cvicne jsem si zkusil zavest tridu Organism s tim double[9] a fitness, par radku pribylo, velikost souboru se vsak dokonce zmensila a je to samozrejme mnohem prehlednejsi. Takhle to autor utopil v polich a indexech. Pripomina mi to starou poucku, ze fortranske programy se daji psat v jakemkoli jazyce :-)
Jinak serial hezky, sice jsem se na GA vyblbnul az moc, ale cist bych o tom mohl porad. Tesim se na dalsi dil.
Re: Biologické algoritmy (2) - Evoluční algoritmy
celé vláknoja myslim, ze vytky na kod jsou temer zbytecne, vzdyt je to jen par desitek
radku, tak to snad dokaze precist kazdy.
rozsekat tenhle kousek kodu na milion ruznych metod, ktere by stejne
obsahovaly radek nebo dva radky kodu, abyste se v tom
vyznali by byl kanon na komara.
Re: Biologické algoritmy (2) - Evoluční algoritmy
celé vláknotak mohlo by se pole zaznam[][] jmenovat treba record[][] kdyz uz se vsechny ostatni promenne pojmenovavaji anglicky.... :-)
bez podrobnejsiho zkoumani treba nezjistim k cemu je vubec pole arFitness[] to se opravdu nemohlo jmenovat hur...
v celem kodu chybi mezery - okolo zavorek, znamenek, vsude
a asi nejvetsi maglajz v tom dela to proporcionalni pismo... to by se mozna jeste dalo vytunit
jasne ze se to da s trochou snahy precist a pochopit, ale autor si dela spatne PR a asi mu klesne pocet ctenaru, coz je imho skoda
Re: Biologické algoritmy (2) - Evoluční algoritmy
celé vláknoje celkem jedno jaky styl ma autor, zavorky s mezerou nebo bez, ale kdyz
je konzistentni v celem kodu tak je to v poradku.
Re: Biologické algoritmy (2) - Evoluční algoritmy
celé vláknoKdyby byl autor profesionální programátor, tak by ten kód vypadal jinak, ale autor je profesionál v něčem jiném a ten kód podle toho vypadá - a co? Když nějakého čtenáře zajímá problematika natolik, že je ochoten číst zdroják, tak beztak nejlepší způsob na pochopení je copy&paste do nějakého IDE a hrát si s tím... a může si to i cvičně zrefaktorovat ;)
Re: Biologické algoritmy (2) - Evoluční algoritmy
celé vláknoAno, kod je citelny, ale s urcitou davkou usili. Nekdy proste par radek kodu rekne vic, nez odstavec popisku. A kdyz ten kod je takto zatemnen, je to pochopeni slozitejsi.
Za me tedy vic oddelovat kod na vypocty a malovani, vystiznejsi pojmenovavani a vic odsazovani. jinak super!
Asi opravdu skoncim u toho cvicneho refaktoringu. Nebyl to nakonec autoruv cil, nedelat to ctenarum zbytecne jednoduche a zadat takhle domaci ukol :) ?
Java kniznice pre ev algoritmy
http://jgap.sourceforge.net/ - trosku horsie sa to rozsiruje a defunuje strom
http://www.epochx.org/ - celkom pekna kniznica a dobre funguje,len je to single thread
Teraz sa akurat hram z http://watchmaker.uncommons.org/
Jsem rad za priklad
Chvalim autora za to, ze ty algoritmy demonstruje na konkretnim prikladu.
jen pro nejavisty
celé vláknounzip evolucnialg-zip.zip
mkdir genetics
mv Genetics.java genetics/
javac genetics/Genetics.java
java -cp . genetics.Genetics
Re: jen pro nejavisty
celé vláknonerozbehal by som to. dakujem za postup
Použití na luštění čísel z obrázku?
celé vláknoJsou genetické algoritmy vhodné na rozlišení čísel z obrázku? Třeba 6 ciferné číslo a každá cifra má vždy pevně dané místo v obrázku.
Díky
Re: Použití na luštění čísel z obrázku?
celé vláknoskor neuronove siete
Re: Použití na luštění čísel z obrázku?
celé vláknoNa rozpoznávání číslic bych doporučil AdaBoost nebo nějakou jeho variantu. Podle mých zkušeností funguje podstatně líp než neuronové sítě. Ale dost záleží na tom, jak moc jsou ty číslice zmršené.
Re: Použití na luštění čísel z obrázku?
celé vláknoKed mas pevne dane miesto v obrazku a presny font, pricom mas cisla, tak nepotrebujes ziadne evolucne algoritmy a ani neuronove siete, lebo nie je treba ziadne prisposobovanie sa niecomu.
Podla mna je najlepsie skusit spravit na konkretnom mieste rozdiel medzi niekde zaznamenanym cislom (kludne vo forme obrazku) a aktualnym stavom. Tieto rozdiely staci nejak scitat a vratit to cislo, ktore da najmensi rozdiel. Mierne vylepsenie je, ked sa nevrati nic, ak je najmensi rozdiel prilis velky.
Toto som nejaku dobu uspesne pouzival na odcitavanie hodnot zo 7 segmentoveho displeja pomocou webkamery; stacilo na to za hodinu "ubastlit" cca 50 riadkovy kod v PHP (inde neviem tak lahko pristupovat k jednotlivym pixelom).
Ak je treba nieco na "mechanicke porovnavanie", tak odporucam taketo riesenie - urcite to funguje lepsie, nie je to treba skoro vobec ladit a skoro nie je moznost, aby sa tam vyskytla skryta chyba.
alternativa
Na takto jednoduchých geometrických tvarech bych spíš doporučil Houghova transformaci (převod do parametrického prostoru)
vysledek...
celé vláknoJsem liny si s tim hrat, ale takhle od pohledu bych nasel i lepsi vysledek.
Zajima me, co vedlo autora k pouziti normalniho rozdeleni v hodnotici funkci. Tim myslim radek:
quality += Math.exp( -(x*x) / (2.0*sigma*sigma) );
Co by se stalo, kdybych to jen tak hloupe poscital:
quality += x*x;
A pak zrejme otocil znamenko, protoze vlastne hledame maximum, takze vlastne:
quality -= x*x;
Re: vysledek...
celé vláknoZmensi se tim rozdil fitness mezi lepsim a horsim resenim. Pri selekci pak bude o neco vetsi pravdepodobnost vyberu horsich jedincu a tim o neco vetsi diverzita populace. Muze to pomoct proti predcasne konvergenci k lokalnimu minimu.
Metod pro zachovani diverzity populace je spousta a predpokladam, ze se tomu nejaky dalsi clanek bude venovat.
Bez toho by to fungovalo taky. Jak dobre, to nevim. Muselo by se to zmerit. Neexistuje zadny presny navod jak pouzivat EA.
aneb, nevis-li si rady s problemem, ...
celé vláknoU nas na pracovisti mame oblibeny bonmot: nevis-li si rady s problemem, nasroubuj na to adhoc neuronovku, nejlepe mixlou genetickym algoritmem, ant kolonii a uplne nejlip totalnim random blind-searchem ve vysocedimenzionalnim prostoru (pro jistotu ho pred hodne lidma nazyvej poradne vedecky, jako n-dimenzionalni krychle, abys nebyl za pitomecka), pak udelej nezopakovatelny experiment na pochybnych datech, ktery nejde nijak interpretovat, ale neco si vymysli ... a uspech je zarucen; tohle je oblibena kratochvile ruznych velkych ceskych IT odborniku, kvazivedcu a dalsi pakaze, ktera pumpuje prachy od statu a EU. Inu, staci se podivat na webove stranky nekterych VS u nas, kde se ,,dela informatika'', ... to je teda pekny pruser, ... to jen tak pro zamysleni.
Re: aneb, nevis-li si rady s problemem, ...
celé vláknonahod nejaky odkazy na ty VS at se zasmejeme :)
CoffeeScript
celé vláknoZkusil jsem to udělat v CoffeeScriptu:
https://gist.github.com/2367382
Taky tam mám některé názvy docela kryptické, ale psal jsem to pro sebe a až pak mě napadlo to sem hodit... F je fitness, apod...
Ke stažení i tady (nevím na jak dlouho, CloudApp si čistívám):
http://cl.ly/2S3N2s1o431e3X1x163w
Re: CoffeeScript
celé vlákno... a ještě mě láká zkusit si na to napojit Underscore a udělat to trošku funkcionálně...
Re: CoffeeScript
celé vláknoDíky, je to pěkna real time ilustrace a narozdíl od toho java kodu je psaná i čitelně..

