» »

Digitalna evolucija

Digitalna evolucija

««
23 / 29
»»

Jst ::

Lej, a se ta slika poklapa z vsemi arrayi, ali z enim od začetno podanih?

...

Drugače je pa slika zelo zanimiva. Grafično prikaže sam potek. In romčijev sort je 1A proti prvemu.

...

+ Dodaj v Critticall možnost izrisa takšne slike dveh poljubnih konsistentnih sortov. Poleg tega, kar sem ti predlgal v ZS.
Islam is not about "I'm right, you're wrong," but "I'm right, you're dead!"
-Wole Soyinka, Literature Nobelist
|-|-|-|-|Proton decay is a tax on existence.|-|-|-|-|

Thomas ::

Kolikor sem ga pretestiral, za 100 elementov - ja.

Napreduje tko, da se testira še.

Thomas ::

> Dodaj v Critticall možnost izrisa takšne slike dveh poljubnih konsistentnih sortov. Poleg tega, kar sem ti predlgal v ZS.

To se dogaja zdej, ja ... mečkamo! :D

Thomas ::



Levi stolpec je potek Romcijevega sorta. Desno od njega je QuickSort, še bolj desno pa s Critticallom popravljen QuickSort.

Programi se pricno spodaj, v spodnji vrstici. Vsi imajo za osnovo enako razmetan isti array, ki ga na poti navzgor (vsaka vrstica enkrat izvedena linija programa v Critticall Cju) - sortajo. Zelene pike pomenijo branje iz tabele ki se sorta, rdeče pisanje vanjo. Linije brez pik pomenijo, da se primerja prebrano ali kaj drugega neobhodnega za algoritem.


Treba je reč, da Romci/Critticall sort ne potrebuje dodatnega pomnilnika, desna dva pa seveda ga.

Zgodovina sprememb…

  • zavarovalo slike: OwcA ()

Thomas ::



No, tole je pa sneak preview na $image Quick-Several Unique.

Quick je levo.

Zgodovina sprememb…

  • zavarovalo slike: OwcA ()

njok ::

Keep them coming!

Thomas ::

Hja, streznjujoče, a? :))

Algoritmi so prezapleteni za človeško glavo. Ampak tkole se nekoliko vidi, kako zadeva poteka. Pa to, da je digitalna evolucija dovolj močna, da pride do prej nezamišljenih (superiornih) oblik (algoritmov (za posamezne niše)).

njok ::

Streznjujoče je pravi izraz, ja. :)

Sploh tale SU, pri stirih razlicnih vrednostih zgleda quick cisto bogi. Do koliko vrednosti je razlika se tako ocitna in kdaj se izenacita?

Koliko casa pa je potrebno za izris takega grafa?

Thomas ::

Takle graf nardi Critticall v sekundi. Dela ga sproti, za vsako novo verijo.

No, potem sem si pa zamrral v brado, češ kaj pa če damo nekoliko zoret še QuickSorta?



Tole je pa koda:


// The algorithm has been enhanced For 69.2453%

 $DECLAREINT right left i x elemj jmleft acritticall1 

 $DIMENSION array[99] lstack[32] rstack[32]
 $MINIMIZE LINES 100
 $ENHANCING OFF
 $RINVAR array[](0,7)
 $RETVAR array[] 
 $WEIGHTS commands=1
 $IMAGE array[] 

// int array[99]; int lstack[32]; int rstack[32]; int right=0;int left=0;int i=0;int x=0;int elemj=0;int jmleft=0;int acritticall1=0;

$BES
left=99;
elemj=1;
acritticall1=left-elemj;
goto labelcritticall14;
while (elemj>x) {
    acritticall1=rstack[elemj];
    jmleft=lstack[right];
    while (jmleft<acritticall1) {
        i=acritticall1;
        elemj=i+acritticall1;
        x=lstack[right];
        i+=-1;
        labelcritticall14:;
        if (jmleft>left) {
            elemj/=2;
            right=array[elemj];
            lstack[right]=jmleft;
            elemj=array[i];
            while (elemj>right) {
                i+=-1;
                elemj=array[i];
            }
            left=array[jmleft];
            while (left<right) {
                jmleft+=1;
                left=array[jmleft];
            }
            array[i]=left;
            array[jmleft]=elemj;
            i+=-1;
            while (jmleft<=i) {
                elemj=array[i];
                while (elemj>=right) {
                    i+=-1;
                    elemj=array[i];
                }
                left=array[jmleft];
                while (left<right) {
                    jmleft+=1;
                    left=array[jmleft];
                }
                if (jmleft<i) {
                    array[i]=left;
                    array[jmleft]=elemj;
                    jmleft+=1;
                    i+=-1;
                }
            }
        }
        rstack[right]=i;
        i=acritticall1;
        while (jmleft<i) {
            elemj=array[i];
            if (elemj!=right) {
                i+=-1;
                elemj=array[i];
                while (elemj>right) {
                    i+=-1;
                    elemj=array[i];
                }
            }
            if (jmleft<i) {
                left=array[jmleft];
                array[jmleft]=elemj;
                jmleft+=1;
                if (left>right) {
                    array[i]=left;
                    i+=-1;
                    elemj=array[i];
                    while (elemj!=right) {
                        i+=-1;
                        elemj=array[i];
                    }
                }
                if (jmleft<i) {
                    left=array[jmleft];
                    array[i]=left;
                    array[jmleft]=elemj;
                    jmleft+=1;
                }
            }
        }
    }
}
$EES



Tale premaga SUja ki je na sliki desno. CuickSort, hehe .. tega bom dal potem v cirkulacijo, da ga še kaj zboljšajo.

Vesoljc ::

@thomas
a z kompresijo si se že kaj igral?
Abnormal behavior of abnormal brain makes me normal...

Thomas ::

Ja, s kompresijo sem se igral že back in 1999, ko sem imel tale tool še bolj user _un_friendly kot je zdej. Takrat so eni mislili, da sem primeren da naredim en kompres za eno 100 kB RAM kartico, da bo šlo gori 441 kb podatkov. Zip je bil seveda (precej) preslab.

Nakar naredimo evolucijo predictorja za tisti fajl. Če zadane byte, pišemo bitno 1, če ne pišemo bitno 0 pa cel byte za njo. Predictor type kompres, ki bi bil same bitne 1, če bi zadel vse. 1:8 torej. Pol gremo pa še drugi krog, spet 1:8 maximalno.

Na enih 30 računalnikih je evolucija predictorja tekla cel vikend, in rezultat je bil 16 ukazov enega pseudoassemblerja. Kompres pa 1:10.

Pol pa greva z enim tipčkom to pretipkavat iz mojga pseudoassemblerja v C++. Naneslo je ene 20 vrstic C++ in dosti pripomb od tistega modrijana, kako on ve, da sem se v resnici zmislil ta kompres jest sam, nikakor pa moj program, kar da samo nakladamm. Saj se je on v šoli učil, da to ni mogoče. Da pa to itak ni bistveno, važen je rezultat. :D

Kar ostane od te anekdote je to, da predictor type compress je možno pogruntat za vsak posamezen tip fajla. In da je lahko zelo dober. 1000 nišnih kompresov.

No, zdej sem ravno med dvema šolama se ustavil doma in tole nahitro sporočil. More later.

Vesoljc ::

no, da je vsaj 1000 različnih niš je itaq logično. mene bolj zanima kako bi jest za eno nišo prišel do enega kopresorja, ki ima dobr speed/compresion_ratio ;)

zna "C" kej pomagat?
Abnormal behavior of abnormal brain makes me normal...

McHusch ::

Mal se igram s Critticallom za prediktanje naslednjega Mersennovega praštevila. Če dam Critticallu primer s tvoje strani thomas, mi po dveh urah zapre critticall. okej, mamo unregistered verzijo. hočem zagnat critticall, da bi nadaljeval evolucijo od tam, kjer je ostal, dobim Invalid synatax, terminating... Kaj to narobe delam?

Thomas ::

McHusch,

Samo poženi znova. Ali pa pastaj kodo sem.

Vesoljc,

Kompres lahko delamo tkole:

Najprej prepisujemo iz A[] v B[] in potem iz B[] v C[].

$retvar C[]

Penaliziramo maksimalni index B[] ja, zato evolucija A[] -> B[] prepisovanja vodi v kompres, B[] -> C[] pa v dekompres.

To je general ideja, detaljno izvedbo pa že en čas delam.

Zgodovina sprememb…

  • spremenil: Thomas ()

Vesoljc ::

hudo simple praviš 8-)
Abnormal behavior of abnormal brain makes me normal...

Thomas ::

No, ni tko komplicirano, pravzaprav. Čeprav je bolj kot tale shema kaže. Je dosti podrobnosti za rešit. Recimo kako preprečiti, da kar direktno ne prepisuje iz A v C. Samo .. bo nekako.

spelic ::

Thomas

A lahko ful podrobno opišeš kako deluje crittical, sem že od par ljudi slišal da bi hoteli narediti kaj podobnega vendar ne vedo kako začeti. Mislim da je tak pristo iskanja algoritmov obetajoč in ne poznam nobenega programa, ki bi bil konkurenca tvojemu. Vsi pa vemo da je konkurenca dobrodošla.

Thomas ::

Hja, podrobnosti ne bom pojasnjeval, to moraš razumet.

Bom pa rekel nekaj drugega. Takle hec je možno narest na ene par načinov, ki so vsi enakovredni.

Zdejle enkrat (v naslednjih 10 letih) bo eden naredil Goedlovo mašino. Kaj to je piše v Leksikonu ki ga štemamo na tem forumu. V glavnem, Critticall že je _polavtomatska_ Goedlova mašina.

spelic ::

A mogoče poznaš še kakšen program, ki dela enako ali podobno kot tvoj.

Mogoče kakšne reference ali dokumentacija, kje si ti začel in kako.

Vesoljc ::

Abnormal behavior of abnormal brain makes me normal...

DixieFlatline ::

Da bi evolviranje algoritmov milo rečeno "občutno" pohitrili, predlagam, da na ST začnemo zbirat keš (1.5 milijona dolarjev), tolk bo IBM verjetno računal za BlueGene/L s 70TFlopi. Pol pa gor laufamo Critticalla.

Sam zna bit manjši problem z denarjem. :D

Še link do novice o začetku prodaje: Klik
The sky above the port was the color of television, tuned to a dead channel.

CCfly ::

Joj a bi lahko nekdo implementiral wordwrap.
"My goodness, we forgot generics!" -- Danny Kalev

Thomas ::

Myself se ukvarjam z idejo, kako pospešiti Critticall za faktor 1000.

BTW, pri urnikih (kar je esencialno ista figa) je za faktor 100 že delovalo. On the top pa še Blue Gene, zagotovo. :)

snow ::

1000x ? :)
Ideja je vredu.. pa se jo da realizirati? Poves princip?
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

njok ::

1000 procesorjev? :)

Thomas ::

Ideja je v tem, da večino programov, ki so nastali kot mutanti abortiramo že prej, preden sploh preizkusimo njihov fitnes. Tako ali tako večina mutantov ne preživi in samo zgubljamo čas z njimi.

Zanimivo je to, da v biološki evoluciji ta stvar že dela. Veliko število nosečnosti se že zelo zgodaj neha s spontanim splavom, saj materino telo ugotovi, da zarodek nima možnosti. Zapleteni mehanizmi ugotovijo, da so reči toliko tvegane, da se (genetsko gledano) ne splača poizkušati. Bolje narediti takojšen splav in znova zanositi.

No, ta trik bomo poskusili implementirati tudi tukaj.

Seveda, ta prediktor se lahko tudi zmoti, zato je treba biti pazljiv pri tem, koliko veljave mu pravzaprav dati.

Ko človek razmišlja o šahovskih potezah, na ta isti način zmeče ven tudi skoraj vse poteze, ki bi jih vlekel Karpov.


All in all - tricky! Ta proces čaka na svojo Goedelizacijo. Naj se sam ukvarja s tem kaj je dobro in kaj ne. Pametnejši bo, bolje mu bo šlo.

No sej, to je moj stil razmišljanja. Nagrmadiš celo goro smeti, ma da zrasejo rože in se kristalizirajo diamanti, če je le kup dovolj velik.

Kaj pa je bila Zemlja 4 milijarde let nazaj? Smetišče kamnov v umazani vodi. Darwin nam je povedal vse, kar sploh moramo vedeti.

MaCoFaCo ::

Nisem prebral čisto cele teme, ker je rahlo preobsežna, zato upam da tega vprašanja še ni blo :P

Hmm, zanima me (čist iz firbca) koliko hitra je tale zverinca. Se to interpretira al delaš direkt s strojnimi ukazi? Koliko približno ukazov/vrstic kode na sekundo zmore na dani platformi in na koliko MHz tiktaka tale tvoj CPU na katerem ženeš Critticalla :)))

Vesoljc ::

požen kritikal pa boš videl...
vse lepo piše. no, lepo, piše pa :)
Abnormal behavior of abnormal brain makes me normal...

Thomas ::

Vesoljc ... hehe .. bingo! :))

MaCoFaCo ::

Pač vidim neko C kodo.
Mene bolj zanima kaj se v srčku dogaja :PPP

Thomas ::

Ej. To mava trenutno popolnoma razsuto. Kar se dogaja, se bo začelo dinamično spreminjat, glede na rezultate Critticalla. Vzel bo pač en svoj (kritični) konček kode ter ga poskusil optimizirat. Če mu bo uspelo se bo prepisal in skompajlal na novo, ter pognal svojega naslednika, sam se bo pa zaustavil.

Ad infinitum ...

Tko da ... škoda besed, trenutno.

MaCoFaCo ::

Namiguješ torej da delaš direktno s strojno kodo in ne interpretiraš?
(človek mora prav drezat da kaj dobi :PPP)

Pač malo bolj me stvar zanima, kot verjetno veliko ljudi ki bere ta thread, tako da ne zamert :)

Mogoče še en zanimiv link, ki bi želel da ga pokomentiraš - klik.

Zgodovina sprememb…

  • spremenilo: MaCoFaCo ()

nicnevem ::

...lahko bi tudi vzel ven en svoj košček, ga poslal do enga compa, tam bi se zoptimiziral in bil poslan nazaj na vašo mašino ter vgrajen v prog...Critticall@home :)

Tako bi zadovoljili potrebo po računski moči in dogajanje bi ostalo pod kontrolo - kolikor je to pač možno.

Tole čisto tako btw omenjam, da ne bi kdo...lahko je biti general po bitki (čeprav bitka sicer še traja), ker se zavedam da zadevo ni kar tako lahko narest...samo predlagam da ne bo zmanjkalo dela ;) Lahko bi tudi poslal kodo v svet, sem prepričan da bi se našlo veliko ljudi, ki bi bilo pripravljeno sodelovati...edino nadzor bi bil problem. Ni pamtno pustiti da se vsak igra z ognjem, bi pa pospešilo razvoj...

Thomas ::

Jah, jest mislim, da naj selfenhancing code NE BO javno dostopna stvar. Iz tega bi s preveliko verjetnostjo nastala kakšna velika štala.

Thomas ::

Zdej mamo en zanimiv deu. Narest progi, ki bo iskal protislovja v takemle languageu, ki je futer evolucije.



2b slo_3e_b, slo, 3e, p9, 326, h1-h7/d1+d5 h6-h8/d2

2 slo_3e, slo, 3e, p9, 326, h1-h7/d1+d5 h6-h8/d2

3 ang_3e, anj, 3e, p27, 1/403+404, h6-h8/d1 h1-h7/d2+d5

2b svz_3em_b, svz, 3e, p38, 1/tel1+tel2+tel3+tel4, h1-h8/d1-d5 lf

1 ume_3e, ume, 3e, p7, 422, h6-h8/d1 h1-h7/d2+d5

3 gop_3e, gop, 3e, p26, 1/315+316, h1-h8/d1+d5 h6-h8/d2

2b prp_3e_b, prp, 3e, p44, 421, h6-h8/d1 h1-h7/d2+d5

2 prp_3e, prp, 3e, p44, 421, h6-h8/d1 h1-h7/d2+d5

5b kuh_3e_1_b, kuh, 3e, p37+p16, k1+k2, h1-h5/d3

5b kuh_3e_2_b, kuh, 3e, p37+p16, k1+k3, h1-h5/d4

3b szb_3e_1_b, szb, 3e, p52+p48, s1+s2, h1-h3/d1



Tko, mau za občutek. Tole je script language za urnike, ki ga potem kompajla evolucija. Da pa se ne bi trudila zastonj, bomo zdaj naredili nek test neprotislovnosti zahtev.

Sicer je zgornje samo odlomek, vsega kar se potem evoluira je ene tisoč vrstic.
Te morajo biti (najmanj) neprotislovne.

Evolucija hoče dober futer.

snow ::

To maš en interpretator, ki ti potem s tega tvojega languaga naredi en c(++) program, ki se potem skompajla in se laufa al kako?


Lahko ta jezik mal razložiš?
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

DixieFlatline ::

Več al manj povzetek že povedanega v tej temi, a vseeno zanimivo branje.

Članek
The sky above the port was the color of television, tuned to a dead channel.

snow ::

Mal na hitro preletel. Nek povzetek del Goldberga, Koze, itd. ter splošen opis algoritmov.

Na koncu zanimivo vprašanje: "If something is invented with no human near, is it really an invention? Who is the inventor? And if the invention actually works, does it matter if we don’t understand how?"
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

Thomas ::

Kar ti zevoluira, je tvoje, če se seveda domoreš do tega, kar ti je zevoluiralo.

Ko ga kej pokrona, nisi odgovoren, je že odločilo neko sodišče.

---------

Sicer pa ... pravniki (še) ne slutijo, kaj tale unnatural selection pomeni in predstavlja. Konec sveta, kot ga poznamo.

Hehe ..

nicnevem ::

Jah, Koza se očitno že ne bi strinjal s tem...

"There’s no need yet for humans to feel jealous of “human competitive” software, says Koza, since the ultimate goal is simply to hand over engineering’s hardest drudge work to computers. He does foresee a time in the near future—perhaps 20 years from now—when genetic algorithms running on ultrafast computers will take over basic design tasks in fields as diverse as electronics and optics. But even then, Koza believes, human and machine intelligence will work in partnership. “We’ve never reached the place where computers have replaced people,” Koza says. “In particular narrow areas, yes—but historically, people have moved on to work on harder problems. I think that will continue to be the case.” "

Čeprav po eni strani pravi: dajmo najtežje probleme mleti compom, potem pa...da se bomo ljudje ukvarjali s težjimi problemi. Če že pri prvih EA naredi boljši design...:\ ...mogoče psihološka fora, ker noče "strašiti" ljudi kako " lahko ena ušiva mašina naredi vse boljš kot js...khrm.."

Thomas ::

V bistvu je (samo) stvar tehnike. Kako sprogramirati tako, da ti EA daje rezultate s čimmanj porabljenega CPU.

To je kar zahtevna reč.

Ostalo smo si že precej enotni.

Je pa tudi res, če lahko to tehniko evoluiraš ... si v prednosti.

snow ::

V okrivu GECCO 2005 (konferenca glede evolutionary computinga - http://www.isgec.org/gecco-2005/) bo eno zanimivo tekmovanje. In sicer z imenom physcical traveling salesman problem. TSP verjetno poznate.. gre za iskanje najkrajše poti čez vsa mesta. No tale fizični TSP ma pa en mali twist:
treba je poiskati zaporedje sil (gor, dol, levo, desno, ali brez sile.. oznake od 0-4), v skladu z fiziko. TS ima neko maso, in če ga pospešujemo pač dobi neko hitrost itd.
Pogoj je pač da obišče vsa mesta, z najmanjšim možnim zaporedjem teh sil.

Več: http://algoval.essex.ac.uk/ptsp/ptsp.html

Se gremo mal skupaj igrat? :)
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

Thomas ::

Zanimivo se sliši, zelo zanimivo.

snow ::

Aja uvodni link sem še pozabu dat: http://cswww.essex.ac.uk/staff/sml/gecco/PTSPComp.html

> The current plan is to use a 30 city problem, but the difficulty of the problem is not yet well understood, and the number of cities is subject to review.

A bi encoding kr tak vzel kot je koncni solution? Ali bi vzel pare (smersile,trajanje)? Ali kaj tretjega?

Fitness je treba pametno naštudirat. Jasno da prvotno je število obiskanih mest, alpa bi dali vsoto najbližjih oddaljenosti. Ja zabavna zadeva ni kaj :D
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

Thomas ::

Morm prespat ... ampak se mi zdi mega.

Thomas ::

Prespal. Ja, idealna naloga za EA, mogoče bomo probal kej ... later.

snow ::

In potem se človek sprašuje zakaj mu sprogramirana zadeva ne dela tako kot so primeri tam. In se ubija in debugira svoj program... nakar gre pogledat njihovo kodo in najde enega buga.

Tam na strani jim piše da se hitrost in pozicija updejta po enačbi:
v = u + at; s = ut + 1/2 at^2.
Pač klasika a ne.

V kodi majo pa:
tmp.set(vel);
tmp.mul(dt);
pos.add(tmp);

tmp.set(acc);
tmp.mul(t2);
pos.add(tmp);

// now update velocity v = u + at
tmp.set(acc);
tmp.mul(a); //po logiki bi tukaj moralo bit tmp.mul(dt);
vel.add(tmp);

Kjer so tmp pos acc in vel 2D vektorji,
static double dt = 0.1;
static double a = 1.0;
static double t2 = 0.5 * dt * dt;

Sem pisal tipsonu, pa bomo vidli kaj bo.

Če nič se bomo pa igrali bugasto verzijo :\

Čist tolk če bo kdo slučajno kaj delal glede tega, da se ne bo čohal po glavi pol noči kot jaz.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

Zgodovina sprememb…

  • spremenilo: snow ()

Thomas ::

Jest pravim, naj pofixa tale bug. Prej se ni mogoče igrati solverja.

snow ::

Pravi stric, da ostane kot je, pa da bo na strani popravu v ponedeljek. :))
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

MaCoFaCo ::

A v Critticallu bi se dalo recimo razvit strategijo za nakup "pravih delnic", ki bi prinašala čimvečji dobiček. Torej, če bi imel na razpolago zgodovino cen in bi recimo pri nakupu/prodaji upošteval še provizije.

Ne vem kako bi v tem primeru v critticallu definiral fitness.

Se da kaj takega narest v trenutni verziji?

p.s.: a nisi enkrat razvijal algoritma, ki bi služil s prodajo/nakupom tujih valut? Kaj je bilo s tega?
««
23 / 29
»»


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Najhitrejši programski jezik? (strani: 1 2 )

Oddelek: Programiranje
757750 (5570) Senitel
»

Funkcija z logičnimi operaterji.... (strani: 1 2 )

Oddelek: Programiranje
905566 (4912) CaqKa
»

Petaflopsu naproti (strani: 1 2 3 )

Oddelek: Novice / Procesorji
1058873 (8873) Marjan
»

cene permutacij help please

Oddelek: Programiranje
262076 (1683) Sergio
»

kako definirtati prastevilo

Oddelek: Programiranje
143799 (3604) ooux

Več podobnih tem