» »

Digitalna evolucija

Digitalna evolucija

««
6 / 29
»»

Sergio ::

Hehe. Naredil sem program, ki vzame input število, prešteje od 1 do števila, ter ga vrne.

Input == output, z veliko šodra. Critticall je potreboval na reprezentativnem vzorcu 1000 števil točno 35 sekund, da je ugotovil, da input==output, ter skočil na 0.1% prvotne zahtevnosti. Kul kul. :)

Sicer pa se mi zdi, da sem našel bug... Program med evoluiranjem inicializira nove spremenljivke. Nato lahko kakšno od teh zavrne ter neha uporabljati, a zadeva bo še vedno v inicializacijskem postopku na vrhu programa. Bug or feature?
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

Zgodovina sprememb…

  • spremenil: Sergio ()

Thomas ::

romci ... uporabi displacement na eni tabeli! Ne na arr256, ker ni za retvar.

(Očitno bo treba povečati število tabel. Pogovarjava se samo, kako to najmanj boleče izvesti)

Sergio ... ja ... tiste deklarirane spremenljivke so čisti bonus! :D
Man muss immer generalisieren - Carl Jacobi

snow ::

Ja več tabel!

Gledam moje programe... tab[100][100][100] evol[100][12] popul[1000][20]... hm :D
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

tx-z ::

kaj je sploh to? vse to?
tx-z

Thomas ::

Zigam,

Česa ne razumeš? Kaj razumeš?

To je to, kar naslov pove.

Moja malenkost misli (je celo prepričana), da se z digitalno evolucijo lahko naredi (nadomesti) vsakršna inteligenca.

V to smer se intenzivno igramo.


;)
Man muss immer generalisieren - Carl Jacobi

snow ::

Thomas pa double tipi tudi bodo?

Na polovici poti programiranja taylorjeve vrste ln(1+x) sem se spomnil, da tu pa ne gre za cela števila. Šment!
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

Thomas ::

Bodo, ja. Ne morem reči točno kdaj - ampak morajo biti in so že stalno v načrtu. Ne tako kot več tabel, ki so prišle v plan šele danes - a bodo zelo kmalu.

:)
Man muss immer generalisieren - Carl Jacobi

Satanized ::


$dimension stevila[200]
$rinvar stevila[](0,999)
$retvar vsota

iterator=0;
konec=200;
vsota=0;
delna=0;

while (iterator<=konec) {
delna=stevila[iterator];
vsota+=delna;
iterator++;
}


Kaj je tu narobe? Cist zmeden sem.


lp, JT.
-- is it love or is it faith --

Thomas ::

> vsota+=delna;

Mora biti:

vsota=vsota+delna;

Ali pa

vsota+=5;

Strict. ;)
Man muss immer generalisieren - Carl Jacobi

Satanized ::

Thanks!

Zdele se pa pocutm omejeno. (Re)stricted.
:P

lp, JT.
-- is it love or is it faith --

romci ::

Thomas: evo originala

Trenutno sem malo prevec zaposlen - se bom pa kej med vikendom ukvarjal, ce bo cajt, pa ce ne bo kdo drug kej pogruntu :)

Vec tabel bi blo pa super ja..vsaj 2 ali 3.

Aja, pa glede na original TSP je zamenjana procedura za permutacije s tisto ki sem jo ze prej enkrat postal.

Once again - very good work :)

LP,
Roman
-- not all those who wander are lost...

Satanized ::



// The algorithm has been enhanced for 20.2484%

$DIMENSION stevila[200]
$RINVAR stevila[](0,999)
$RETVAR vsota


$BES
konec=200;
while (iterator$lt;konec) {
delna=stevila[iterator];
vsota=vsota+delna;
iterator++;
delna=stevila[iterator];
vsota=vsota+delna;
iterator++;
delna=stevila[iterator];
vsota=vsota+delna;
iterator++;
delna=stevila[iterator];
vsota=vsota+delna;
iterator++;
delna=stevila[iterator];
vsota=vsota+delna;
iterator++;
}
$EES



Zakaj je to 642 steps, medtem ko je



$dimension stevila[200]
$rinvar stevila[](0,999)
$retvar vsota

iterator=0;
konec=200;
vsota=0;
delna=0;

while (iterator<konec) {
delna=stevila[iterator];
vsota=vsota+delna;
iterator++;
}



tole 805 steps. Ne razumem. Someone enlighten me, please :)

lp, JT.
-- is it love or is it faith --

Zgodovina sprememb…

Thomas ::

Romci, bomo pogledali jutri. :)


Satanized!

Važno je, koliko linij se izvede (vključno po večkrat) - in ne koliko jih je.

:)
Man muss immer generalisieren - Carl Jacobi

Satanized ::

Ja Thomas. Ampak, ce pogledas prvo kodo vidis, da je v bistvu v tistem while stavku notri zdruzenih vec while stavkov. V teoriji. Zakaj je torej en while stavek, ki ima v sebi vec teoreticnih while stavkov, boljsi kot while stavek, ki se ponovi po normalni poti.

1. koda:

while{i=i){
i++;
i++;
i++;
i++;
}


2. koda

while{i=i){
i++;
}


1 "hitrejsa" od 2, why?
-- is it love or is it faith --

Satanized ::

Eh, nevermind. I get it. Ni preverjanja logicnega stavka v oklepaju pri while. Dddd ... Sam pol bi mogo do konca zoptimizirat. Like 200x

delna=stevila[iterator];
vsota=vsota+delna;
iterator++;


hmm?

lp, JT.
-- is it love or is it faith --

Thomas ::

Še ga goni! Zadeva ni povsem bliskovita (zaenkrat)! ;)
Man muss immer generalisieren - Carl Jacobi

Satanized ::

Yup. Evoluira ... in to popolnoma korektno in v pravi smeri. Superca. Bom kaj moje c++ kode C-ritticnno prepisal.

lp, JT.
-- is it love or is it faith --

snow ::

Na računalniških faksih bi morali začeti poučevati Critticalliščino. ;)
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

jeti51 ::

Satanized: jasno, da je prva koda hitrejša, saj druga pred vsakim inkrementiranjem i-ja preveri pogoj i==i, medtem ko prva koda to naredi le na vsake 4 inkrementiranja. če boš dobro pogledla kodo, boš najbrž nemalokrat opazil, da se ponekod razni segmenti kode (do potankosti enaki) pojavijo večkrat zapored, potem pa sledi še zanka, katere telo je spet sestavljeno iz takega identičnega segmenta kode. Takšne "umazane" finte v glavenm preprečuješ tako, da malo bolj omejiš število vrstic programa. :)

Zgodovina sprememb…

  • spremenil: jeti51 ()

Satanized ::

Zdi se mi, da je v mojem primeru compiler neprimerno hitrejsi optimizator, v primerjavi z Critticallom. Compiler namreč itak to while zanko razpelje tako, da nastane xy-krat i++, brez preverjanja pogoja. Critticall prav tako to naredi, ampak v dolgem nedolocenem casu.

Brez dvoma, Critticall je zakon!
:P
lp, JT.
-- is it love or is it faith --

Thomas ::

Nekako imamo dve vrsti optimizacije. Ena je optimizacija kode, druga je optimizacija samega algoritma.

Težko je reči, kje je meja med njima. A matter of a degree.

Compilerji imajo vgrajenih nekaj rulesov, kako se optimizira koda in po teh rulesih hitro naredijo, kar je v takem primeru narediti.

Critticall nima vgrajenih nobenih takih pravil, ampak jih kvečjemu vsakič sproti izumi. Kot recimo pri Fibonacciju. Po večih poteh pride do lahko malenkostno različnih programčkov, ker v nasprotju s compilerjem, nima vgrajenega sistema pravil, kako se najbolje kompilira.

Toda, da bi compiler precompiliral bubble sort v nekega, do sedaj nepoznanega, se compilerju ne more zgoditi. Critticallu pa lahko.

Jest mislim, da vsako kodo, ki jo Critticall da od sebe, naj še skompajla kakšen optimizacijski compiler.

:)
Man muss immer generalisieren - Carl Jacobi

romci ::

Thomas: popravljen TSP, tako da uporablja arr256 in offset

AMPAK,
se vedno mi javlja syntax error v vrstici

for (i=num0;i <= n;i=i+num1) { // fill in the numbers of nodes
arr256[i] = i;
}


ne glede na to, na kaksen nacin zapisem inkrementalni stavek (i=i+num1, i+=1, ...).

A bug or a restriction? :)
-- not all those who wander are lost...

Thomas ::

V for zanki je sintaksa za increase:

i+=num1


:)
Man muss immer generalisieren - Carl Jacobi

OwcA ::

@Thomas: ali si že kdaj razmišljal, da bi Critticall naredil kot knjižnico (z omejitvami shareware verzije, seve) in s tem omogočil, da bi večje šttevilo ljudi pisalo uporabnški umesnik in dodajalo funkcionalnsoti (ali bolje, prevajanje kode v Critticallu razumljivo). Sam bi rad videl Critticall, kot konzolno aplikacijo, brez vsakršnih bonbončkov, le (brutalna) funkcionalnost.
Otroška radovednost - gonilo napredka.

BigWhale ::

> Sam bi rad videl Critticall, kot konzolno aplikacijo, brez
> vsakršnih bonbončkov, le (brutalna) funkcionalnost.

Ja in pa seveda Linux verzija. ;)

Sicer pa, zame bo najbolj zanimiva tista verzija, ki bo znala SELECT stavke optimizirat. Ker je to, kar me v vecini casa bremza ;)

Thomas ::

OwcA,

Kar se tiče "raw power console" ... ta enkrat bo. Morda takrat, ko bo tudi self modifying. Ker sem pa prej gasilec kot piroman - tega zadnjega zunaj v divjini precej verjetno ne bo.

Whale,

Sej tele selecte se da pretvoriti v ife. A hočeš rečt, naj bo to stvar prevajalnika? Zna bit, da maš prav.

:)
Man muss immer generalisieren - Carl Jacobi

Thomas ::

Eno vprašanje - kako vam (ne) delajo optične miši? Kej dost prijavlja ene mouse errorje?

:\
Man muss immer generalisieren - Carl Jacobi

OwcA ::

@Thomas: meni dela čisto lepo (Microsoft IntelliMoues Explorer). Ali bi se dalo v prihodnji verziji naresti, da se drsniki pomikajo tudi, če ustrezno zavrtiš kolešček na mišonu?
Otroška radovednost - gonilo napredka.

snow ::

Ista miš kot owcina mi isto dela.
Bom pa sprobal še en računalnik z logitech mx300 še jutri.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

asPeteR ::

Thomas: Zakaj bi pa opticne misi delale probleme? Saj so te iste z vidika racunalnika kot kroglicne?
(isti krmilni signali)
http://blog.stegnar.com

Thomas ::

Aha hvala, potem nima optična miš nič pri vsem skupaj. Pri enmu prjatlu je ta problem, mi je povedal včeraj, samo prvotna diagnoza - optika - ni to.
Man muss immer generalisieren - Carl Jacobi

Phil ::

Tudi meni z logitechovim optičnim mišakom dela BP.
Drugače pa Thomas čestitam za critticall. Izjemna zadeva, brez dvoma.
Izgleda da je res da nas do AI omejuje samo še CPU power.
Kakšni pa so odzivi na critticall v tujini. Si že kje objavil na kakem tujem forumu?
LP

Thomas ::

Ja preden grem resno zavzemat svet, sem hotel zadevo preveriti doma.

Tole, da mora biti več arrayev je pomebna zadeva, ki smo jo spoznali medtem. Pa tudi poenotenje increasa v for in increasa sicer se mora zgoditi.

Potem bom zadevo poskusil Slashdotati in še marsikaj. V enem tednu bova ready.

Sicer smo pa na ircu govorili o tem z ljudmi, s katerimi se poznamo že od prej. Nekaterim gre mimo, drugi mislijo, da je to celo "odločilni korak".

I wonder!

Pa hvala vsem za priznanja, ki ste nama jih dali doslej!

:)
Man muss immer generalisieren - Carl Jacobi

ciki57 ::

Kdo mi verjame, da sem s critticalom razvil algoritem za množenje matrik reda O( n^2)?

:D

Zgodovina sprememb…

  • spremenil: ciki57 ()

Sergio ::

Objavi original pa optimizirano verzijo. :D
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

Thomas ::

Ja jest ti verjamem. :D

Sicer dopuščam veliko možnost, da nisi kje dobro pogledal ... ampak lahko pa da tudi si.

Kdo bi vedu! :D
Man muss immer generalisieren - Carl Jacobi

ciki57 ::

Ne morem pastati kode, ker mi ne pustu vpisati znaka "manjše". Kako se to zrihta?

Sergio ::

&lt; = <
&gt; = >
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

Zgodovina sprememb…

  • spremenil: Sergio ()

ciki57 ::

Spodaj je optimiziran algoritem. Množimo kvadratne matrike velikosti n*n. Vse tri matrike so v arrayu abcd[]. Prvih n*n polj je matrika A, nato B in na koncu C (rezultat)

Potem sem napisal še program kjer sem testiral algoritem na matrikah 3x3, 10x10 in 50x50 in zgleda da deluje pravilno saj vrne isti rezultat kot običajen alogitem.

 int abcd[10000]; int arr256[256];int num0=0;int num1=0; int num2=0;int num3=0;int off1=0; int off2=0;int off3=0;int i1=0;int i2=0; int indexc=0;int i3=0;int indexb=0; int e1=0;int temp1=0;int e2=0;int element=0; int e3=0;int temp3=0;int indexa=0;int noe=0; int critticall5=0;int critticall1=0;int critticall2=0; int critticall3=0;int critticall4=0; int critticall6=0;int critticall7=0; num0=0; num1=1; num2=2; num3=3; off1=0; off2=n*n; off3=num2*off2; i1++; indexc=off3+critticall3; indexb=off2+i2; e1=abcd[temp1]; e2=abcd[indexb]; element=e1*e2; abcd[indexc]=element; i3++; indexb=indexb+n; e1=abcd[num1]; e2=abcd[indexb]; element=e1*e2; e3=abcd[indexc]; temp3=e3+element; abcd[indexc]=temp3; i3++; if (i3 < n) { indexa=temp1^i3; indexb=indexb+n; e1=abcd[indexa]; e2=abcd[indexb]; element=e1*e2; e3=abcd[indexc]; temp3=e3+element; abcd[indexc]=temp3; } i2++; while (i2 < n) { indexc=off3+i2; i3=0; indexb=off2+i2; e1=abcd[temp1]; e2=abcd[indexb]; element=e1*e2; abcd[indexc]=element; i3++; indexb=indexb+n; e1=abcd[num1]; e2=abcd[indexb]; element=e1*e2; e3=abcd[indexc]; temp3=e3+element; abcd[indexc]=temp3; i3++; if (i3 < n) { indexb=indexb+n; e1=abcd[indexa]; e2=abcd[indexb]; element=e1*e2; temp3=temp3+element; abcd[indexc]=temp3; } i2++; } temp1=num0^n; i2=noe; indexc=off3+temp1; i3=critticall5; indexb=off2+i2; e1=abcd[temp1]; e2=abcd[indexb]; element=e1*e2; abcd[indexc]=element; i3++; indexa=temp1+i3; indexb=indexb+n; e1=abcd[indexa]; e2=abcd[indexb]; element=e1*e2; e3=abcd[indexc]; temp3=e3+element; abcd[indexc]=temp3; i3++; i2++; if (i3 < n) { indexa=temp1+i3; indexb=indexb+n; e1=abcd[indexa]; critticall5=1; e2=abcd[indexb]; element=e1*e2; e3=abcd[indexc]; temp3=e3+element; abcd[indexc]=temp3; } i1++; while (i2 < n) { indexc=off3+temp1; indexc=indexc+i2; i3=0; indexb=off2+i2; e1=abcd[temp1]; e2=abcd[indexb]; element=e1*e2; abcd[indexc]=element; i3++; while (i3 < n) { indexa=temp1+i3; indexb=indexb+n; e1=abcd[indexa]; e2=abcd[indexb]; element=e1*e2; e3=abcd[indexc]; temp3=e3+element; abcd[indexc]=temp3; i3++; } i2++; } if (i1 < n) { temp1=off2-n; i2=0; while (i2 < n) { indexc=off3+temp1; indexc=indexc|i2; i3=critticall5; indexb=off2+i2; e1=abcd[temp1]; e2=abcd[indexb]; element=e1*e2; abcd[indexc]=element; while (i3 < n) { indexa=temp1+i3; indexb=indexb+n; e1=abcd[indexa]; e2=abcd[indexb]; element=e1*e2; e3=abcd[indexc]; temp3=e3+element; abcd[indexc]=temp3; i3++; } i2++; } } 

Zgodovina sprememb…

  • spremenil: Sergio ()

Thomas ::

Če bi dal še <pre> pred source in </pre> za source, bi videli še indentacijo.

Ampak, ni bistvo.

Prav mogoče je, da je vrag vzel šalo! :P

8-)
Man muss immer generalisieren - Carl Jacobi

Sergio ::

Kakšne so bile optimizacije? Razlika od originalne kode? Kakšna je bila pohitritev?
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

ciki57 ::

razvijal sem na testnih matrikah 2*2 in 3*3, in je stvar izboljšalo za 40%.(v kakšni uri)
Potem sem stvar pognal še na matrikah 2*2 do 10*10 in je Critticall pokazal časovno zahtevnost c*n^1.8 (ter izboljšal še za 1%)

Najprej sem mislil da se je stvar optimizirala samo za 2*2 in 3*3 matrike, in sem šel še posebej testirat in stvar deluje tudi pri višjih n-jih in je dejansko hitreje:

- običajen alogritom rabi 5 sekund da 1000x zmnoži dve 50*50 matriki.
- moj to naredi v trenutnku.

Zgodovina sprememb…

  • spremenil: ciki57 ()

Thomas ::

Hja ... zdej smo v tisti fazi, ko je treba zadevo stestirat popolnoma brezobzirno, če funcjona. Na tej strani tudi zgleda, da ja!


Če bi se slučajno izkazalo da je res res, je to MAJOR prodor v računanju z matrikami. Nekako za naslovnico New York Timesa.

No kidin!

;)
Man muss immer generalisieren - Carl Jacobi

ciki57 ::

Če res deluje brezhibno, lahko daš ta algoritem na homepage critticalla kot en hud primer optimizacije.

Seveda ne pozabi omeniti, kdo je algoritem "izumil" >:D >:D >:D

Gandalfar ::

ciki57: lahko zadevo zrihtas v taki obliki, da se jo bo dalo prevesti s standarnim c prevajalnikom? Lahko objavis se osnovni algoritem? Zanima me koliksno stopnjo optimizacije ima critticall glede na optimizacijo compilerja.

ciki57 ::

Sej zgornji algoritem se da prevest samo dodaš vse skupaj v main() proceduo, določiš n ter napolneš array.

ciki57 ::

aja, navaden algoritem (zahtevnost O(n^3)) je tak:


int n;
int abcd[10000];


num0 = 0;
num1 = 1;
num2 = 2;
num3 = 3;
off1 = 0;

off2 = n*n;
off3 = num2*off2;
noe=num3*off2;

i1 = num0;
while (i1 < n) {
i2 = num0;
while (i2 < n) {

temp1 = i1*n;
indexC = off3 + temp1;
indexC = indexC +i2;
abcd[indexC] = num0;

i3 = num0;
while (i3 < n) {

temp1 = i1*n;
temp2 = i3*n;
indexA = off1 + temp1;
indexA = indexA + i3;
indexB = off2 + temp2;
indexB = indexB + i2;


e1 = abcd[indexA];
e2 = abcd[indexB];
element = e1 * e2;

e3 = abcd[indexC];
temp3 = e3 + element;
abcd[indexC] = temp3;

i3++;
}
i2++;
}
i1++;
}

Thomas ::

Seveda, da bom. Samo ne bom napisal zraven "ciki57". Sej maš kakšno krščansko ime, ane? :))
Man muss immer generalisieren - Carl Jacobi

Super Sonic ::

no ja.. jest pa programiranje:) greva skupi NE.
Zgleda da Thomas ne pise samo postov. Tudi izumlja. Ce je vse to kar si napisal do sedaj res tvoje delo, snamem svoj klobuk/kapo dol.
Vsa cast!!!
delo genija

p.s.
kar pa se vedno ne pomeni da se strinjam s teboj v primeru-vojna v iraku>:D

:)

Thomas ::

Če se izkaže za res - kaže kar dobro - potem bodo mnogi programi lahko tekli kar nekajkrat hitreje. 3D igrice vsekakor. Gotovo tudi F(@H) in še mnogi drugi!

Meni se zdi čudno kvečjemu to, da tak algoritem sploh obstaja. Da ga bo nekdo s Critticallom našel, če bi že obstajal, mi je pa logično.

:)
Man muss immer generalisieren - Carl Jacobi
««
6 / 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
905561 (4907) CaqKa
»

Petaflopsu naproti (strani: 1 2 3 )

Oddelek: Novice / Procesorji
1058872 (8872) Marjan
»

cene permutacij help please

Oddelek: Programiranje
262074 (1681) Sergio
»

kako definirtati prastevilo

Oddelek: Programiranje
143799 (3604) ooux

Več podobnih tem