Forum » Znanost in tehnologija » Odkrivanje matematičnih funkcij z evolucijo
Odkrivanje matematičnih funkcij z evolucijo
Phil ::
Zadnje čase se igram z iskanjem funkcij z uporabo evolucije.
Računalniku vneseš vhodne člene in pričakovane izhodne člene in računalnik poskuša najti formulo ki poveže vhode in izhode.
Programu recimo podaš tile dve tabeli števil [1,2,3,4,5] za vhode in [2,6,12,20,30] za izhode in program ugotovi funkcijo f(a)=1+(a)*(a)...
Primer formule za racunanje praštevil do 15 praštevila (lahko do poljubnega, samo se cas iskanja eksponentno veča).
f(a)=1-a+17/a*(-5)%a*(-2)*(4)-(18)%a+(-8)*(-2)/a-(-25)-a*a/(-20)*3-a-a*a+11/(-25)+a+1
, kjer se racuna od leve proti desni (prednosti *,/,% se NE upošteva) in vsem rezultatom odreže decimalke.
f(1)=2,f(2)=3,f(3)=5,f(4)=7.....
Drugi primer je izračun fibonačijevaga zaporedja do 10 števila
f(a)=1-(a)*(a)*(a)/(13)*(a)/(5)-(23)*(a)-(7)/(-29)
Se iskanje funkcij na tak način izplača? Je mogoče odkriti ali poenostaviti kaj pametnega? S tem mislim kakšno splošno funkcijo, ki ni povsem enostavna kot prvi primer.
Katere operacije se še splača vključiti (sedaj so +,-,*,/,%)?
Se je že kdo ukvarjal s podobno stvarjo?
LP
Računalniku vneseš vhodne člene in pričakovane izhodne člene in računalnik poskuša najti formulo ki poveže vhode in izhode.
Programu recimo podaš tile dve tabeli števil [1,2,3,4,5] za vhode in [2,6,12,20,30] za izhode in program ugotovi funkcijo f(a)=1+(a)*(a)...
Primer formule za racunanje praštevil do 15 praštevila (lahko do poljubnega, samo se cas iskanja eksponentno veča).
f(a)=1-a+17/a*(-5)%a*(-2)*(4)-(18)%a+(-8)*(-2)/a-(-25)-a*a/(-20)*3-a-a*a+11/(-25)+a+1
, kjer se racuna od leve proti desni (prednosti *,/,% se NE upošteva) in vsem rezultatom odreže decimalke.
f(1)=2,f(2)=3,f(3)=5,f(4)=7.....
Drugi primer je izračun fibonačijevaga zaporedja do 10 števila
f(a)=1-(a)*(a)*(a)/(13)*(a)/(5)-(23)*(a)-(7)/(-29)
Se iskanje funkcij na tak način izplača? Je mogoče odkriti ali poenostaviti kaj pametnega? S tem mislim kakšno splošno funkcijo, ki ni povsem enostavna kot prvi primer.
Katere operacije se še splača vključiti (sedaj so +,-,*,/,%)?
Se je že kdo ukvarjal s podobno stvarjo?
LP
- spremenil: Phil ()
snow ::
Nekaj malega sem bral o genetskem programiranju (GP), ampak resno se še nisem lotil tega...
Lepo da si to skupaj napravil, ni kaj! Pohvale.
Kolikor sem crittical testiral je že nekaj znal takega... samo ne tako kompleksnega. Baje sedaj tudi zna polinoma in podobne reči... sam čakamo :)
Sem pa ful podobno zadevo delal na nevronskih mrežah ampak tam ne dobiš ven neke formule ampak le rezultate... recimo če povem par točk polinoma, ti tudi natančno izračuna ostale... ampak le v tistem območju kjer si nevronsko mrežo učil.
Btw.. bi se dalo tale source dobit?
Lepo da si to skupaj napravil, ni kaj! Pohvale.
Kolikor sem crittical testiral je že nekaj znal takega... samo ne tako kompleksnega. Baje sedaj tudi zna polinoma in podobne reči... sam čakamo :)
Sem pa ful podobno zadevo delal na nevronskih mrežah ampak tam ne dobiš ven neke formule ampak le rezultate... recimo če povem par točk polinoma, ti tudi natančno izračuna ostale... ampak le v tistem območju kjer si nevronsko mrežo učil.
Btw.. bi se dalo tale source dobit?
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
Phil ::
No vsaj eden je pokomentiral . Zadevo sem zdaj izboljšal tako da lahko generira funkcije z večimi vhodnimi spremenljivkami recimo f(a,b...)=x. Mu daš par tabel podatkov pa ti poišče relacijo med njimi. Sourca zaenkrat še ne dam. Bom prej zadevo izboljšaval, dokler bo volja. Programček pa lahko dam na net, samo moram prej odpraviti še vse buge.
Crittical seveda zna delati povsem isto, pri svojem programčku upam le na večjo hitrost, ker je zadeva povsem specializirana za funkcije. Mi pa tudi vrne c++ kodo za funkcijo (praštevila):
vsota=1
vsota-=a;
vsota+=17;
vsota/=a;
vsota*=-5;
vsota%=a;
vsota*=-2;
vsota*=4;
vsota-=18;
vsota%=a;
vsota+=-8;
vsota*=-2;
vsota/=a;
vsota-=-25;
vsota-=a;
vsota*=a;
vsota/=-20;
vsota*=3;
vsota-=a;
vsota-=a;
vsota*=a;
vsota+=11;
vsota/=-25;
vsota+=a;
vsota+=1;
LP
Crittical seveda zna delati povsem isto, pri svojem programčku upam le na večjo hitrost, ker je zadeva povsem specializirana za funkcije. Mi pa tudi vrne c++ kodo za funkcijo (praštevila):
vsota=1
vsota-=a;
vsota+=17;
vsota/=a;
vsota*=-5;
vsota%=a;
vsota*=-2;
vsota*=4;
vsota-=18;
vsota%=a;
vsota+=-8;
vsota*=-2;
vsota/=a;
vsota-=-25;
vsota-=a;
vsota*=a;
vsota/=-20;
vsota*=3;
vsota-=a;
vsota-=a;
vsota*=a;
vsota+=11;
vsota/=-25;
vsota+=a;
vsota+=1;
LP
Zgodovina sprememb…
- spremenil: Phil ()
snow ::
Ja lepa zadeva ni kaj, zato pa sem pokomentiral.
Kako maš poštiman genom? Zaporedno zapisane funkcije? Ali delaš drevesno strukturo?
Kako maš poštiman genom? Zaporedno zapisane funkcije? Ali delaš drevesno strukturo?
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
Phil ::
Gandalfar: sem si zdaj pogledal. Očitno se s tem ukvarjajo že precej časa. Je dandanes že težko biti izviren pri simuliranju stvari
snow: funkcije imam zapisane zaporedno v tabeli linearnih seznamov. Nasploh je program presenetljivo enostaven.
LP
snow: funkcije imam zapisane zaporedno v tabeli linearnih seznamov. Nasploh je program presenetljivo enostaven.
LP
Thomas ::
To je v bistvu vse kar rabimo. Aja, pa še dovolj CPUja, pa premaknemo Svet s tečajev. Vprašanje je samo kdaj in kdo in s kakšnimi malimi tajnami bo sprožil kamen, ki bo sprožil plaz. Salutant!
Man muss immer generalisieren - Carl Jacobi
snow ::
Daj mi tole probaj:
Train Data:
inputs: 0 outputs: 2
inputs: 1 outputs: 6
inputs: 2 outputs: 12
inputs: 3 outputs: 20
inputs: 4 outputs: 30
inputs: 5 outputs: 42
inputs: 6 outputs: 56
Train Data:
inputs: 0 outputs: 2
inputs: 1 outputs: 6
inputs: 2 outputs: 12
inputs: 3 outputs: 20
inputs: 4 outputs: 30
inputs: 5 outputs: 42
inputs: 6 outputs: 56
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
snow ::
No nekaj podobnega res pride(+1 še vsakemu n-ju) ... pa cmana sem hotel. :)
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
Zgodovina sprememb…
- spremenilo: snow ()
Phil ::
Bom do jutri preizkusil. Program bom dal na net konec tedna. Zdaj ko sem v LJ zal nimam dostopa do interneta, razen na faksu.
LP
LP
Phil ::
Evo končno sem popravil vse buge (vsaj upam).
Zadeva še zdaleč ne deluje optimalno saj za zahtevnejše funkcije IMO porabi preveč časa. Tudi prerado se zgodi da evolucija krene napačno pot pa se iskalni čas podvajseteri.
Bi bilo najbrž najbolje poganjati več instanc programa.
Če ima kdo kakšne ideje kako bi se izognil taki situaciji se priporočam.
Podatke se vnese v datoteko in.c. Za snowov primer datoteka zgleda takole
6 // šest podatkov
1 // en argument
[0,1,2,3,4,5,6] // vhodna tabela
[2,6,12,20,30,42,56] // rezultati
rezultat: f(a)=a+(3)*a+(2)
Primer datoteke z več argumenti je
5 // pet podatkov
3 // trije arguemnti
[1,2,3,4,5] // vhodi a
[3,6,1,9,10] // vhodi b
[11,12,15,20,4] // vhodi c
[125,158,231,440,71] // izhodi
rezultat: f(a,b,c)=c*c+a+c/a+b*a-c
Funkcija je tukaj http://www.geocities.com/cman2so/fundis.... Linkanje očitno ne dela.
Predlogi, komentarji, vprašanja?
LP
Zadeva še zdaleč ne deluje optimalno saj za zahtevnejše funkcije IMO porabi preveč časa. Tudi prerado se zgodi da evolucija krene napačno pot pa se iskalni čas podvajseteri.
Bi bilo najbrž najbolje poganjati več instanc programa.
Če ima kdo kakšne ideje kako bi se izognil taki situaciji se priporočam.
Podatke se vnese v datoteko in.c. Za snowov primer datoteka zgleda takole
6 // šest podatkov
1 // en argument
[0,1,2,3,4,5,6] // vhodna tabela
[2,6,12,20,30,42,56] // rezultati
rezultat: f(a)=a+(3)*a+(2)
Primer datoteke z več argumenti je
5 // pet podatkov
3 // trije arguemnti
[1,2,3,4,5] // vhodi a
[3,6,1,9,10] // vhodi b
[11,12,15,20,4] // vhodi c
[125,158,231,440,71] // izhodi
rezultat: f(a,b,c)=c*c+a+c/a+b*a-c
Funkcija je tukaj http://www.geocities.com/cman2so/fundis.... Linkanje očitno ne dela.
Predlogi, komentarji, vprašanja?
LP
Thomas ::
Tkole dela to Critticall. Smo mu za štos nasuli praštevila od 2-29 za input in izpljunil je (eno možno) funkcijo v spodnjem delu ekrana. Jasno, enostavne funkcije lažje najde. Bil je pa to dober test. cmanu gre reči - hvala!
Man muss immer generalisieren - Carl Jacobi
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C#] do - whileOddelek: Programiranje | 1333 (1055) | garamond |
» | c napaka .c:4:1: error: expected identifier or '(' before '{' tokenOddelek: Programiranje | 1932 (1505) | MrStein |
» | Matematika - pomoč (strani: 1 2 3 )Oddelek: Šola | 26835 (23410) | daisy22 |
» | [c] char zadevaOddelek: Programiranje | 2251 (2049) | TheCyborg |
» | Generatorji praštevilOddelek: Znanost in tehnologija | 3835 (2739) | Phil |