[MEKRAC] 4. domaća zadaća - 2021/2022
Tompa007
Zasto mi na genetskom algoritmu toliko jako varira rjesenje s razlicitim pocetnim populacijama ? kvadratna greska mi je minimalna za ta rjesenja a toliko su razlicita. (4 zadatak labos)
napprimjer:
- [1.8594551075230257, -2.450156112139978, -3.6778627269646282, 1.1547754888624002, -0.34301607811600743]
- [0.23778191882743815, -0.05369462915239609, -0.24912500576810892, -2.7367321448894275, 0.3173651304683647]
greske za oba su manje od 0.01
micho
𝐓𝐇𝐄 𝐒𝐄𝐂𝐑𝐄𝐓 - 𝐂𝐋𝐔𝐁 Vjv jer ima više lokalnih minimuma, a inicijalizacija početne populacije je dovoljno stohastička za problem da utječe na konačan rezultat
Tompa007
M̵̧̩͑̀͝î̶͍̉ć̴̝̾́̀o̶̺̟̣͂̽ kojim parametrima bi mogao smanjiti stohasticnost bez preuranjenog konvergiranja?
Koji su inace optimalni parametri za vjerojatnost mutacije? ja koristim 10%, selection mi je 3-k turnir, pocetna populacija 200,
odnosno jel ovo sto zasad imam gdje svaki put dobijem neko novo rjesenje sa dosta malom greskom okej kao rjesenje ?
Ducky
jel smijemo koristit ga ili pygad u pajtonu?
tonkec
𝐓𝐇𝐄 𝐒𝐄𝐂𝐑𝐄𝐓 - 𝐂𝐋𝐔𝐁 prevelika populacija (probaj 50) i prevelika mutacija (probaj 1 promil)
micho
𝐓𝐇𝐄 𝐒𝐄𝐂𝐑𝐄𝐓 - 𝐂𝐋𝐔𝐁 S ovim što si rekao probaj smanjiti populaciju, makar mislim da ta raznolika rješenja nisu problem sama po sebi.
Ja sam svojevremeno radio simulacije i s populacijom od 10, pa sam opet dobivao dovoljno dobre rezultate:
# Rješenje 1. [0.3712056, -0.12289254, 3.5152062, 1.31750053, -1.32588974] (MSE = 6e-7, 1000 iteracija)
# Rješenje 2. [0.37028343, -0.11768803, 3.46963318, 1.31324859, -1.32198286] (MSE = 1e-2, 1000 iteracija)
Moja rješenja su često konvergirala u ovaj specifični minimum, ali možda zato što sam ja imao jako dobru custom mutaciju, prije nje su išle u sve i svašta.
Tompa007
jeste ko globalni optimum dobili
[0.3713013148200785, -0.1196418836174594, 3.49322171792782, 1.3132657932434397, -1.3201762288567955]
Ducky
𝐓𝐇𝐄 𝐒𝐄𝐂𝐑𝐄𝐓 - 𝐂𝐋𝐔𝐁 Da, kolko ti vrti algoritam?
Cubi
𝐓𝐇𝐄 𝐒𝐄𝐂𝐑𝐄𝐓 - 𝐂𝐋𝐔𝐁 Dobivao sam osim tog još neke minimume vjerojatno zbog periodicnosti sinusa
[0.3716098375679594, -0.12266472245630115, 3.5162387906120154, 1.3177075521853587, -1.3261765840444857] with loss: 1.6671128739085025E-7
[2.770784293503402, 0.12256865363848134, 3.5176495287161345, 1.317469740599704, -1.3253394282893025] with loss: 2.9374046879972064E-7
[-3.5124331864338245, 0.1225424381149127, 3.5177726467507826, 1.3174557388358044, -1.3249290266495395] with loss: 3.018603846283212E-7
bodilyfluids
feel_d_boot
Ja tek sad kužim da “normalni” roulette wheel selection funkcionira tako da je veća vjerojatnost da odabire jedinke s većom vrijednosti funkcije dobrote, no s obzirom da mi ovdje radimo s funkcijom kazne što je MSE, kako implementirati roulette wheel selection da zapravo uzima to u obzir?
Jaster111
iNut
new_errs = [i-np.min(errors)+0.0001 for i in errors]
probabilities = [i/np.sum(new_errs) for i in new_errs]
Gdje je varijabla errors
zapravo numpy array funkcija kazne za svaku jedinku. U probabilities
onda dobijemo da negativna vrijednost najbliža nuli dobije najveću vjerojatnost.
Jaster111
Btw jel netko može objasnit riječima ili pseudokodom kako funkcionira troturnirska selekcija za eliminacijski algoritam?Nisam ni u prezentaciji ni u knjizi baš pronašao nešto detaljno objašnjeno.
bodilyfluids
Jaster111 kao inace, ima bezbroj varijanti.
Moguce rjesenje: nasumicno odabrati 3 jedinke, ubiti onu s najlosijim fitnesom, od preostale dvije napravit novo dijete i njega ubaciti u populaciju
feel_d_boot
Dragi prijatelj strojnog učenja
Je li ispravno ako bismo m puta izbacili najgoru od 3 nasumično izabrane jedinke iz populacije pa bismo onda tek krenili s nadopunjavanjem populcije novim jedinkama?
Odnosno ako je moratlitet 50%, a veličina populacije 50 jedinki, izbacimo 25 jedinki pa onda tek krenemo s popunjavanjem da nam populacija opet ima 50 jedinki?
Rene
Dragi prijatelj strojnog učenja mene buni sto je u tom slucaju “iteracija”, tj. ako je mortalitet 50% znaci da je jedna iteracija kada 50% populacije zamjenimo s djecom pobjednika turnira?
Tj. s obzirom da cuvamo samo jednu populaciju i nju mijenjamo, moguće je npr. da dijete koje si ubacio nakon ovog turnira izaberes u sljedecem turniru i izbacis kao najlosiju jedinku od te 3?
bodilyfluids
iNut može i to
micho
iNut Tako ćeš vjerojatno dobiti manji selekcijski pritisak, i semantički je to točnije. Generalno ne želiš imati veliki selekcijski pritisak da ga ne moraš kompenzirati jakom mutacijom
bodilyfluids
Rene postoje algoritmi koji rade s dvije generacije (populacije), trenutnom i “budućom”, to su tzv. generacijski GA. Pri radu s njima jedna iteracija znači stvaranje nove generacije iz stare.
Druga vrsta bi bila steady-state GA koji rade s jednom populacijom, u njima odabereš dva roditelja koja stvore dvoje djece, roditelji se brišu, a djeca se umeču. Jedno ponavljanje navedenog je jedna iteracija. Ovo možeš i shvatiti kao ajmoreć “eliminacijski” GA jer brišeš jedinku i na njeno mjesto stavljaš novu. Ipak, bitna razlika je da eliminacijski GA briše jedinku jer ima malen fitness, dok steady-state GA briše roditelje, a oni imaju velik fitness. Dakle roditelji nastave živjeti kroz svoju djecu, dok se u eliminacijskom GA loša jedinka briše bez da prenese svoje gene.
Poanta priče, nedajte se zbuniti. Postoji puno terminologije koja je isprepletena i glavna stvar za shvatiti je da svaka komponenta GA ima više implementacija, svaka sa svojim prednostima i manama.
bodilyfluids
Rene
Da odgovorim na pitanje…
mene buni sto je u tom slucaju “iteracija”, tj. ako je mortalitet 50% znaci da je jedna iteracija kada 50% populacije zamjenimo s djecom pobjednika turnira?
Ovo je ok, možda bi imalo smisla djecu dobivenu u jednoj iteraciji držati u priručnoj strukturi koju ćeš spojiti s populacijom tek na kraju iteracije. To bi onemogućilo da dijete u istoj iteraciji bude stvoreno i eliminirano.