Cartesian genetic programming - pomoc

olok

Cartesian genetic programming - pomoc
« kdy: 26. 12. 2019, 01:57:44 »
Zdravíčko vespolek, snažím se naprogramovat CGP v C++, resp. se snažím najít obvody, kde na vstupu mám vstupy v bitech a výstup taky v bitech (pravdivostní tabulka vesměs), problém je v tom, že se mi nedaří najít žádné obvody, které by fungovaly...

Když jsem zkoušel jen tak náhodně kombinovat obvody pomocí mutace/křížení, tak jsem našel i například i paritu 9 a pro 3-bit sčítačku (úplnou) jsem byl mimo jen na pár bitů z 256, problém, ale je v tom, že pokud to mám dělat podle ES algoritmu (vygenerovat lambda obvodů a z nich vybrat nejlepší a následně ho mutovat lambda-krát, opět vybrat nejlepší a ten znovu mutovat, tak dlouho dokud se nenajde obvod), takto mi "nic nefunguje" a nevím si rady.

Ideální by bylo, kdyby byl někdo ochotný se mnou prodiskutovat v čem by mohl být problém, případně se podívat na můj hovnokód  8)


Re:Cartesian genetic programming - pomoc
« Odpověď #1 kdy: 26. 12. 2019, 10:50:52 »
Nevím, jestli ti dokážu pomoct, s GA nějaké menší zkušenosti mám, ale s CGP ne. Aspoň trochu to zkusím, pokud se neobjeví někdo povolanějsí.

Pokud ti dobře rozumím, máš dobře naprogramované zakódování grafu do genotypu, jeho mutace a překlopení do fenotypu. To ti funguje. Když jsi zkoušel dělat mutace náhodně, něco ti tam vzniklo, takže jakžtakž víš, že tohle máš dobře.

Předpokládám, že tím "ES algoritmem" myslíš prostě obecně "evoluční strategii". Takže tvůj problém je v tom, že se ti nedaří dosáhnout optimalizace lepší než náhodné - nedaří se ti vyvolat ten správný evoluční tlak nebo jinými slovy: nekonverguje ti to ke kýženému řešení. Pochopil jsem to správně?

Pokud jo, tak bych prvně ověřil obecné problémy/parametry GA:

1. Mám správně sestrojenou fitness funkci? Pokud se přibližuji k řešení, opravdu roste? Není po téhle cestě chaotická? (tj. polopaticky: jdu správnou cestou, ale fitness funkce skáče nahoru a dolů) Fitness funkce je naprosto klíčová, pokud ji uděláš špatně, nemůže ti to konvergovat z principu.

2. Používám správný algoritmus mutace? Implementace můžou být různé, je asi lepší držet se něčeho ověřeného. Taky můžeš mít algoritmus jenom špatně nastavený - pokud jsou mutace moc velké/časté, tak děláš de facto random procházení prostoru, protože si "dosavadní úspěch v každé generaci rozbiješ". Tvému popisu "vezmu lambda jedinců a udělám lambda mutací" nerozumím. Vzal jsi algoritmus z nějaké literatury? Zkoušel jsi měnit jeho parametry?

3. Používám vhodnou selekci? Podobný problém jako předchozí. Oba dva by se asi daly zobecnit tak, že mutace a selekce společně vytváří tlak, který nesmí být ani příliš malý (populace se nevyvíjí), ani příliš velký (příliš brzo zahodíš jedince, kteří by po nějaké době mohli být perspektivní). Je to stejné jako u jiných optimalizačních algoritmů - můžeš uváznout v lokálním optimu nebo naopak skákat tak daleko, že "nekloužeš po křivce", což je to, co chceš. Žádná stříbrná kulka tady asi není, musíš prostě zkoušet různé parametry.

4. ...s tím souvisí třeba i jestli mám dobře udělané sledování toho, co se uvnitř děje (statistika genotypů, sledování distribuce fitness apod.). Pokud nemůžu dobře sledovat, co se děje, nemůžu dobře upravovat parametry a slepě tápu.

5. Nemám příliš velký stavový prostor? Zkoušíš to na 256-ti bitovém vstupu a 256-bitovém výstupu? To je pro začátek docela dost. Klidně bych začal třeba se 4mi bity, vyzkoušel si to, vyladil a pak zjišťoval, jak se to bude chovat na větším prostoru.

...takže tolik spíš základní, obecné rady. Nevím, jak daleko se znalostí GA jsi, možná, že tohle všechno je pro tebe úplně samozřejmý. Pokud jo, tak se omlouvám za nošení dříví do lesa a počkáme na nějakého zkušenějšího kolegu :)

P.S. Sorry, s konkrétním kódem ti asi nepomůžu. o GA jsem se zajímal už hodně let zpátky, takže posouzení konkrétního kódu by pro mě bylo teď už asi dost náročný, na to čas nemám.

olok

Re:Cartesian genetic programming - pomoc
« Odpověď #2 kdy: 26. 12. 2019, 18:22:01 »
Díky za takový "sloh" :) Nevěděl jsem jak moc konkrétně můj dotaz položit.

Ano, nedaří se mi konvergovat k řešení (párkrát ano, ale to bylo bych řekl zanedbatelné procento odhadem 5% úspěšnost třeba? a to přisuzuji spíše dobrému RNG).

O evolučních algoritmech mám pár knížek přečteno, včetně bakalářských/diplomových prací, asi bych měl zmínit, že toto dělám jako svoji bakalářku, a chtěl jsem se pohnout přes Vánoce, tudíž nechci nikoho moc otravovat a už jsem to i řešil se svým garantem. Tím nechci říct, že se v tomto oboru vyznám. Rád si zopakuji, třeba mi něco uniklo/unikne.

1. Fitness funkce mi počítá rozdílné bity. Ta by měla být v pořádku, protože jak jsem zmiňoval v prvním příspěvku, tak "něco" mi to našlo a metodu co mám i na tisk bitů, tak seděla na bit přesně (referenční vstupy-výstupy byly stejné jako moje vstupy-výstupy). Nejlepší fitness je tedy 0 (žádný rozdíl bitů), zkoušel jsem i opačný přístup, kdy počítám jestli bity sedí, ale problém přetrval.

2. Při CGP se výhradně údajně používá pouze mutace. Tento algoritmus mi byl doporučen garantem a ještě jedním člověkem na fakultě, nicméně jsem jej někde zahlédnul i v literatuře (mohu hodit odkaz na bakalářskou práci, kde je přímo popsána podobná práce a algoritmus je tam taky). Údajně občas je problém porovnání kdy ostrá rovnost nestačí, ale je potřeba dát rovno větší/menší, ale i zde jsem nenašel žádný rozdíl...

Popis tohoto "lambda algoritmu"
(mutace je 100 % jinak by to nemělo smysl, mutace tedy může být: negativní, neutrální, pozitivní)
Lambda = 5

1. Vygeneruje se lambda + 1 náhodných obvodů, ty se ohodnotí a vybere se ten nejlepší.
2. Z nejlepšího obvodu se vygeneruje lambda obvodů, provede se mutace a ohodnocení.
3. Zjištění nejlepšího obvodu z generace.
4. Pokud není dosažena ukončující podmínka, tj. našel se cílový obvod nebo se překročil maximální počet generací běhu, tak se pokračuje bodem 2.


Zkusím zhruba popsat moji implementaci, která je:

Mám třídu, která je obvod, každá takováto třída má v sobě matici buněk. Buňka je komponenta, která v sobě má vstup1, vstup2, výstup, funkce daného hradla (and, xor, nor, ...).

Pro ukázku jak vypadá zakódování:

{počet vstupů, počet výstupů, x, y matice, hradlo vstupy, hradlo výstupy, počet funkcí}([idx hradla], vstup1, vstup2, funkce) ... (výstupní hradlo - "drát")

{5,1,5,5,2,1,6}([5]3,0,2)([6]2,3,5)([7]1,3,5)([8]1,4,5)([9]0,3,1)([10]2,5,2)([11]2,7,3)([12]5,4,4)([13]6,5,4)([14]2,3,2)([15]0,2,2)([16]3,12,0)([17]7,6,0)([18]9,12,1)([19]10,8,2)([20]10,11,4)([21]5,8,3)([22]9,14,4)([23]10,10,1)([24]13,0,5)([25]20,1,0)([26]17,13,2)([27]0,10,0)([28]15,9,5)([29]16,2,5)(19)

(je to posunuto o 5, protože vstupy se berou také jako "hradla")

Evaluaci dělám tak, že jedu touto maticí vždy se podívám na vstupy a nad tím udělám danou funkci, to je můj výstup (toto se děje paralelní simulací -> bitset, který nad celým vektorem bitů udělá v jednom taktu celou funkci např. AND, díky tomuto se to velmi urychlí, kdy se nemusí dělat bit po bitu).

Fitness kouká na výstup u dané komponenty (zde 19) a porovnává s referenčním výstupem. Nula je v mém případě perfektní plně funkční obvod. (for cyklus přes všechny bity)

Mutaci mám udělanou tak, že mám nějakou šanci (0-100 %), pokud to tam "padne", tak se zmuteje 50:50 "drát" nebo funkce v hradle. Komponenta se vybírá náhodně.

Křížení je jako vstup dvou obvodů, kde se náhodně vybere bod křížení a vrátí se potomek.

Algoritmus jsem již popsal nahoře. Nejlepší obvod vybírám tak, že využívám std::min_element z C++.

Při puštění CGP si nechávám tisknout po 10 000 generací stav nejlepší fitness obvodu, kde mi to vesměs stagnuje, sem tam malý "záchvěv", ale ani po půl hodině mi není schopný najít 5 bitovou paritu. Zde počet generací byl už někde v miliardách, když "vím", že na bitovou paritu stačí řekněme maximálně pár milionů generací (povětšinou).

Teď jsem si uvědomil, že jsem nenapsal, odkud beru bity na porovnání. Mám soubor pro každý obvod co hledám (5/9 bit parita, 3/4 bit sčítačka, 4/6 násobička). Sloupce jsou vstup 1, 2, ... a výstup obdobně.

Ukázka parity:
00000 : 0
00001 : 1
01001 : 0
...

Předem děkuji a doufám, že to půjde pochopit z toho co jsem napsal a nebude to moc velký guláš :D
Případně jakýkoliv dotaz nebo nejasnost rád zodpovím.

Re:Cartesian genetic programming - pomoc
« Odpověď #3 kdy: 26. 12. 2019, 19:16:16 »
Ok, obavam se teda, ze problem bude nekde hloubeji a ze to tady asi moc nevyresime. Spis to vidim tak, ze to budes muset detailne konzultovat s vedoucim prace...

1. Fitness funkce mi počítá rozdílné bity. Ta by měla být v pořádku, protože jak jsem zmiňoval v prvním příspěvku, tak "něco" mi to našlo a metodu co mám i na tisk bitů, tak seděla na bit přesně (referenční vstupy-výstupy byly stejné jako moje vstupy-výstupy). Nejlepší fitness je tedy 0 (žádný rozdíl bitů), zkoušel jsem i opačný přístup, kdy počítám jestli bity sedí, ale problém přetrval.
To mi prijde rozumny. Lepsi metriku asi tezko vymyslis.

2. Při CGP se výhradně údajně používá pouze mutace. Tento algoritmus mi byl doporučen garantem a ještě jedním člověkem na fakultě, nicméně jsem jej někde zahlédnul i v literatuře (mohu hodit odkaz na bakalářskou práci, kde je přímo popsána podobná práce a algoritmus je tam taky). Údajně občas je problém porovnání kdy ostrá rovnost nestačí, ale je potřeba dát rovno větší/menší, ale i zde jsem nenašel žádný rozdíl...

Popis tohoto "lambda algoritmu"
(mutace je 100 % jinak by to nemělo smysl, mutace tedy může být: negativní, neutrální, pozitivní)
Lambda = 5

1. Vygeneruje se lambda + 1 náhodných obvodů, ty se ohodnotí a vybere se ten nejlepší.
2. Z nejlepšího obvodu se vygeneruje lambda obvodů, provede se mutace a ohodnocení.
3. Zjištění nejlepšího obvodu z generace.
4. Pokud není dosažena ukončující podmínka, tj. našel se cílový obvod nebo se překročil maximální počet generací běhu, tak se pokračuje bodem 2.
Tohle fakt neznam. Podle tohodle popisu nerozumim tomu, co se deje s ne-nejlepsima jedincema z predchozi generace. Zahodi se? Tj. kazda dalsi generace vychazi jenom z toho jednoho nejlepsiho jedince? To by mi prislo hodne divny a nedivil bych se, ze to nekonverguje...

Zkusím zhruba popsat moji implementaci, která je:
Popravde, z toho popisu uplne presne nerozumim tomu kodovani a nemam ted uplne cas se nad tim hloubeji zamyslet. Mas teda matici 5x5, na kazde pozici je nejaka logicka funkce a ty funkce muzou byt mezi sebou libovolne propojeny? Pricemz do nekterych obvodu vubec nevede cesta ze vstupu, coz je zamer ("geny bez exprese").  Chapu to spravne?

Pokud jo, je tohle cesta, kterou ti doporucil garant, popr. kterou jsi nasel v literature? Prijde mi to totiz (na prvni pohled) docela neprakticky - mas obrovskej stavovej prostor (relativne velkej genom), pricemz velky oblasti prostoru budou z hlediska fitness ekvivalentni (mutace v neexpresivni casti genomu). Samo tohle mi prijde, ze celkem logicky vede na strasne pomalou konvergenci. Kdybych mel tohle napsat, ciste od stolu bych zvolil kratkej genom s daleko mensim procentem neexpresivnich genu - treba dva chromozomy, v jednom seznam funkci, ve druhym seznam jejich propojeni. Krizeni pak samozrejme jenom mezi prislusnymi chromozomy. Pak by totiz treba pro tu 5-bitovou paritu stacil kratkej genom, kterej by se mel najit relativne rychle... Ten pristup s matici mi prijde zvlastni.

Ale to ber jako ciste laickej udiv, bez toho, abych mel konkretne tohle CGP nastudovany. Jestli se to pouziva, tak to urcite nejakou logiku ma. Ale mozna to ma taky svoje specificky problemy, ktery musis holt umet resit :) S tim fakt nepomuzu, to by mel ten, kdo ti to doporucil...

Při puštění CGP si nechávám tisknout po 10 000 generací stav nejlepší fitness obvodu, kde mi to vesměs stagnuje, sem tam malý "záchvěv", ale ani po půl hodině mi není schopný najít 5 bitovou paritu. Zde počet generací byl už někde v miliardách, když "vím", že na bitovou paritu stačí řekněme maximálně pár milionů generací (povětšinou).
No, to nevypada moc dobre. Na 5-ti bitovou paritu staci 4 XORy nebo tak neco, ne? (sorry, obvody fakt nejsou moje hobby ;) ) To by se fakt nemelo hledat takhle strasne dlouho.

P.S. Sorry, ze vicemene jenom tak placam, je to hodne specifickej dotaz, lip poradit nedokazu, nejlepsi by fakt asi bylo, abys to detailne probral s vedoucim prace.

olok

Re:Cartesian genetic programming - pomoc
« Odpověď #4 kdy: 26. 12. 2019, 20:24:55 »
Nevadí, i tak děkuji za vynaloženou snahu, obávám se, že mi nic jiného nezbude, než to opravdu probrat s garantem po svátcích :/

Citace
Tohle fakt neznam. Podle tohodle popisu nerozumim tomu, co se deje s ne-nejlepsima jedincema z predchozi generace. Zahodi se? Tj. kazda dalsi generace vychazi jenom z toho jednoho nejlepsiho jedince? To by mi prislo hodne divny a nedivil bych se, ze to nekonverguje...

Ano, také se mi to moc nezdá, ale pokud nevznikl někde informatický šum, tak to tak bude. Vždy se vybere nejlepší jedinec z těch řekněme 5 a ten se dál mutuje, s tím, že to stále může být ten stejný obvod, co byl jako první.

(osobně si to představuji jako, že zkouším náhodně mutovat tak dlouho až se mi to podaří na tom mém daném obvodě a najdu tak řešení. plus mínus autobus a slon k tomu :D)


Citace
Popravde, z toho popisu uplne presne nerozumim tomu kodovani a nemam ted uplne cas se nad tim hloubeji zamyslet. Mas teda matici 5x5, na kazde pozici je nejaka logicka funkce a ty funkce muzou byt mezi sebou libovolne propojeny? Pricemz do nekterych obvodu vubec nevede cesta ze vstupu, coz je zamer ("geny bez exprese").  Chapu to spravne?

Pokud jo, je tohle cesta, kterou ti doporucil garant, popr. kterou jsi nasel v literature? Prijde mi to totiz (na prvni pohled) docela neprakticky - mas obrovskej stavovej prostor (relativne velkej genom), pricemz velky oblasti prostoru budou z hlediska fitness ekvivalentni (mutace v neexpresivni casti genomu). Samo tohle mi prijde, ze celkem logicky vede na strasne pomalou konvergenci. Kdybych mel tohle napsat, ciste od stolu bych zvolil kratkej genom s daleko mensim procentem neexpresivnich genu - treba dva chromozomy, v jednom seznam funkci, ve druhym seznam jejich propojeni. Krizeni pak samozrejme jenom mezi prislusnymi chromozomy. Pak by totiz treba pro tu 5-bitovou paritu stacil kratkej genom, kterej by se mel najit relativne rychle... Ten pristup s matici mi prijde zvlastni.

Ale to ber jako ciste laickej udiv, bez toho, abych mel konkretne tohle CGP nastudovany. Jestli se to pouziva, tak to urcite nejakou logiku ma. Ale mozna to ma taky svoje specificky problemy, ktery musis holt umet resit :) S tim fakt nepomuzu, to by mel ten, kdo ti to doporucil...

https://imgur.com/IKgtvgv takto zhruba vypadá pro představu ta má matice a logické hradla. Parita 5 jde realizovat pomocí 4 hradel XOR. A stavový prostor je opravdu obrovský, zde právě CGP naráží. Při velkém počtu vstupů a výstupů už to nalézt trvá až moc dlouho a je to relativně známý problém, nicméně stále taková 3 bitová sčítačka jde najít řekněme v řádech minut, násobička v řádech nízkých desítek. Používají se i různé optimalizace, že se sleduje, tam kde se mutuje, nebo lepší zakódování, atd. (to jen tak mimo pro info).


Osobně mi tento "lambda algoritmus" taky lehce smrdí... a celou dobu jsem v hlavě měl představu spíše toho, že tam budu dělat nějaký výběr ruletou, případně elitismus apod. Ale bylo mi to tak něják doporučeno, tak jsem to přijal jako dobrou radu...


Menší odbočka a "pochlubení se" :) pokud jsem hledal náhodně, tak paritu 5 mi to našlo asi za 5 sekund v průměru, když jsem si dostatečně pohrál s parametry, jako velikost matice, mutace, výběr po křížení, ... a pro paritu 9 jsem se dostal na nízké řády desítek sekund, což mi stále dává jistý pocit, "že to už musí snad fungovat, jen to bude prkotina".


Re:Cartesian genetic programming - pomoc
« Odpověď #5 kdy: 26. 12. 2019, 20:41:39 »
Ano, také se mi to moc nezdá, ale pokud nevznikl někde informatický šum, tak to tak bude. Vždy se vybere nejlepší jedinec z těch řekněme 5 a ten se dál mutuje, s tím, že to stále může být ten stejný obvod, co byl jako první.

(osobně si to představuji jako, že zkouším náhodně mutovat tak dlouho až se mi to podaří na tom mém daném obvodě a najdu tak řešení. plus mínus autobus a slon k tomu :D)
Jenom nahodne mutace, to je slabota. To je de facto skoro nahodne prohledavani stavoveho prostoru (s tim rozdilem, ze jdes jenom po nejlepsich jedincich). Sila GA ma byt prave v tom, ze se mutace kombinuje se selekci a zaroven tam ale mas jakousi zasobarnu "potencialne nadejnych jedincu" - tj. jedincu z nejakych starsich generaci, kteri sice nebyli aktualne nejlepsi, ale zaroven potencialne nesou nejakou informaci, ktera by mohla byt hodne dobra.

Pokud tam tu zasobarnu nemas, tak mas obrovskou pravdepodobnost uvaznuti v lokalnim optimu. Predstav si, ze mas treba jedince, ktery ma dva obvody blbe - dava naprosto spatne vysledky a jednou mutaci se neposune k lepsimu. Stacily by mu ale dve mutace k tomu, aby byl absolutne nejlepsi. Ty mu vubec k tomu ale vubec nedas sanci. A to je proste blbe, to imho nemuze dobre fungovat.

https://imgur.com/IKgtvgv takto zhruba vypadá pro představu ta má matice a logické hradla.
Jj, takhle jsem si to presne predstavoval, diky. Jako obvykle, jeden obrazek vyda za tisic slov ;)

Používají se i různé optimalizace, že se sleduje, tam kde se mutuje, nebo lepší zakódování, atd. (to jen tak mimo pro info).
Kodovani je vzdycky strasne dulezity. Proto jsem prave rikal, ze bych sel spis cestou toho kratkyho genomu...

Osobně mi tento "lambda algoritmus" taky lehce smrdí... a celou dobu jsem v hlavě měl představu spíše toho, že tam budu dělat nějaký výběr ruletou, případně elitismus apod. Ale bylo mi to tak něják doporučeno, tak jsem to přijal jako dobrou radu...
Vyber ruletou delat nemusis. Standardni postup je takovy, ze z jedincu generace G vybiras do generace G+1 tak, ze cim vetsi fitness, tim vetsi sance byt vybran. K tomu nejaka pravdepodobnost krizeni a (docela mala) pravdepodobnost mutace. Ta mutace je tam vicemene jenom proto, abys mohl uniknout z lokalniho optima. Takze mi prijde fakt zvlastni mit algoritmus zalozeny jenom na mutaci... Ale jak rikam, nechci soudit, kdyz to nemam nastudovany. Jenom me to prekvapuje ve srovnani s tim, co (trochu) znam.

Menší odbočka a "pochlubení se" :) pokud jsem hledal náhodně, tak paritu 5 mi to našlo asi za 5 sekund v průměru, když jsem si dostatečně pohrál s parametry, jako velikost matice, mutace, výběr po křížení, ... a pro paritu 9 jsem se dostal na nízké řády desítek sekund, což mi stále dává jistý pocit, "že to už musí snad fungovat, jen to bude prkotina".
Hele, to mi prijde jako dost spravnej zpusob premysleni. Udelej si ruzny pokusy s ruznyma parametrama, udelej souhrn vysledku a predloz to vedoucimu prace: "prijde mi, ze tam musim mit nejakou chybu. Pri nahodnem prochazeni jsem mel vysledek za X sekund, pri aplikaci CGP za Y hodin. To znamena, ze tam mam neco evidentne hodne spatne, kdyz to dava takove vysledky".

P.S. muzes napsat, na jake skole a jakem oboru tu praci delas? vedouciho nemusis, to uz by bylo asi moc osobni :)

olok

Re:Cartesian genetic programming - pomoc
« Odpověď #6 kdy: 26. 12. 2019, 20:56:44 »
Jak říkám, taky mi ten algoritmus trochu smrdí a pořád doufám, že jej jen špatně chápu...

Uvidím jak to dopadne po novém roce, případně klidně "osobní otázky" zodpovím do PM nebo nějakou "rozumnou cestou" :)

Jinak jsem na Fakulta informatiky VUT (Brno).

Re:Cartesian genetic programming - pomoc
« Odpověď #7 kdy: 26. 12. 2019, 20:58:24 »
Ok. Hele, urcite se ozvi, jak do dopadlo, fakt me to zajima. To CGP je pristup, o kterym jsem nikdy neslysel, rad se neco novyho dozvim.

Tak preju hodne stesti :)

olok

Re:Cartesian genetic programming - pomoc
« Odpověď #8 kdy: 26. 12. 2019, 21:17:23 »
Pokud nezapomenu ( případně se stačí ozvat ;) ), tak dám vědět.

Jinak mohu doporučit nějakou četbu, i když to bude asi z velké části o GA jako takovém...

Re:Cartesian genetic programming - pomoc
« Odpověď #9 kdy: 26. 12. 2019, 21:19:03 »
Jinak mohu doporučit nějakou četbu, i když to bude asi z velké části o GA jako takovém...
Dik, ale timhle tematem jsem se zabyval asi tak 15 let zpatky. Od te doby jsem nemel moznost to vyuzit :( takze mam jiny veci, ktery bych si chtel nastudovat...

olok

Re:Cartesian genetic programming - pomoc
« Odpověď #10 kdy: 26. 12. 2019, 23:21:20 »
Jinak mohu doporučit nějakou četbu, i když to bude asi z velké části o GA jako takovém...
Dik, ale timhle tematem jsem se zabyval asi tak 15 let zpatky. Od te doby jsem nemel moznost to vyuzit :( takze mam jiny veci, ktery bych si chtel nastudovat...

a mohu vědět co je teď zájmem? Jen tak pro zajímavost, co teď "frčí" třeba, pokud to není firemní tajemství nebo něco extra "osobního" :)

Zvláštní teď jsem zkusil využít std::sort, ještě s tím, že mám počáteční generaci 1000 a už to najde paritu 5/9 do pár sekund opět... (mutování na 100 %, 5x nejlepší obvod z těch 1000) zatím snad 100 % úspěšnost

Re:Cartesian genetic programming - pomoc
« Odpověď #11 kdy: 27. 12. 2019, 08:15:06 »
a mohu vědět co je teď zájmem? Jen tak pro zajímavost, co teď "frčí" třeba, pokud to není firemní tajemství nebo něco extra "osobního" :)
Ne ze by byl duvod, ze to frci, ale shodou okolnosti jsem se dostal do oblasti embedded a IoT. A to je doslova nekonecna zasobarna veci, ktere by staly za to se naucit :)

olok

Re:Cartesian genetic programming - pomoc
« Odpověď #12 kdy: 27. 12. 2019, 09:21:54 »
Poslušně hlásím, že jsem nalezl několik 3 bit sčítaček (plné). Počáteční populace 1000 obvodů, sort na nejlepší (momentálně testuji min_element), pak ten nejlepší "rozmutuji" 5krát. Vypadá to, že problém vážně bude pouze v tlaku na populaci...

Prozatímní zjištění zdá se, že min_element nefunguje moc dobře, "něco to najde", ale je slabota. Ještě teda doufám, že jsem u různých úprav si to někde nerozbil a opravdu mi to hledá funkční obvody :D měl bych asi zkontrolovat na paritě bitový operace.