» »

Digitalna evolucija

Digitalna evolucija

««
9 / 29
»»

Thomas ::

Šlamparija naj bi bila odpravljena. Hvala za opozorila!
Man muss immer generalisieren - Carl Jacobi

Maria ::

Nevone

Moja prva prioriteta v preteklih dneh je bilo namakanje v hladni vodi. V tem času prav osvežujoče.

Kar se tiče odgovora na:

> Prihajajoča umetna inteligenca mora imeti podobne lastnosti, kot Mr. Data iz Star Trek-sov. Pure computing v dobrobit človeka.,

menim, da, ko bomo (ljudje) naredili samoohranjajoče bitje (sistem), ki bo po lastnostih kvalitetnejše - sposobnejše kot človek, bodo ta bitja (sistemi) živeli po svoje. Kar je povsem normalno.

Če je pojav zavesti iz predpostavke, da je zanjo potrebna primerja hitrost ciklov ob programski podpori, eden od temeljih podpornih kamnov za samoohranitvene sisteme (poleg mikro (o tej še nismo govorili) in nano tehnologije za, EA, ...), potem

> Moje želje so podobne tvojim, le da bi jaz rada, da bi bilo to(takšno) življenje čim daljše.

menim, da to obdobje ne bo dolgo. Niti s stališča dolžine človeškega življenja.

In, da ne bo nesporazumov. Nimam nič proti temu, da bi ljudje res spočeli nova, bolj sposobna, samodelujoča in svobodna bitja. Ker v tistem trenutku bomo lahko pokazali in dokazali moč svoje ljubezni do življenja, ljubezni, ki je po definiciji pojavnost, ko akter lahko zaradi vztrajanja na tej poziciji izgublja svojo pozicijo.

Tudi nepovratno.

Maria

Thomas ::

Čist tko me zanima. A ste kaj zastopili tanovo stran? Al bi bilo bolje, če bi bil nekoliko bolj jasen?
Man muss immer generalisieren - Carl Jacobi

njok ::

Tanovo stran razumem, algoritma pa se ne. :)

Kaj naj recem... ta criticall mi je vedno bolj vsec, ceprav si se nisem vzel casa da bi delal z njim. Ampak zgleda da bom kar kmalu segel po kakem C manualu. :)

BTW... koliko % uganjenih znakov je to? Koliko pa jih je uganili predictor zadnjic ko ste se sli tole ugibanje oz. bolje receno predvidevanje?

EDIT: shame on me, zaradi premajhne locljivosti sploh nisem opazil teksta pod algoritmom. Pa algoritem mi je sedaj tudi jasen. :)

Zgodovina sprememb…

  • spremenil: njok ()

DixieFlatline ::

Jest nism preveč dojel, moram priznat. Bi lahko v malo bolj "laični" obliki, razložil, kaj je fora cacha?

:)

Marjan ::

Thomas je o tem algoritmu že veliko govoril. In sicer s predhodnikom Critticall-a, ki se imenuje Predictor, v TEJ TEMI.
Imel je enako nalogo - predvitevati naslednji znak v nekem besedilu. Če primerjate rezultat vidite, da je razlika očitna.

Thomas ::

Tako je. Cache, predictor in kompres, so samo tri plati ene in iste medalje. Pomembno se mi zdi, da bi jih lahko kar vzgajali, s samo zadosti CPU.

Nazaj k ponku! :D
Man muss immer generalisieren - Carl Jacobi

romci ::

Hm...
Torej cachu povecas stevilo vrstic, mu vklopis pogoj za preverjanje, ce so bile VSE crke cachane in imas po nekaj uricah zevuliran "ZIP" za tocno doloceno besedilo...

Nardis to na random dati in ..... voila!

[teoreticno?]
-- not all those who wander are lost...

Zgodovina sprememb…

  • spremenil: romci ()

Thomas ::

No, tudi praktično. Dobiš data dependent kompres za kakršnokoli dato. Z več $invar stavki, ta data dependency spraviš na željeno raven.
Man muss immer generalisieren - Carl Jacobi

Vesoljc ::

Končno sem najdu nekaj, kar bi mi prav prišlo in kar bi big C lahko "zevoluiral".
Rad bi naredil objekt (v c++), ki bi se na zunaj(in v veliki večini tudi od znotraj) obnašal popolnoma enako kot std::string. kot vemo je primerjava stringov relativno počasna. zato bi torej rad prepisal (overloadal) primerjalne operatorje pri std::string-u.
tukaj vstopi critticall. rad bi "razvil" algoritm za generacijo števil (recimo int32, int64), ki bi kot vhod vzel string, ven pa bi izpljunil generirano število, ki bi se obnašal tako kot string.
kwa? recimo tkole:

string str1 = "abnormal";
string str2 = "vesoljc";

if (str1 < str2) Beep(); // ta pogoj bi bil izpolnjen

torej, recimo da naš algoritm generira števila (vhod str1, str2) 666 in 5666.
za ta dva števila veljajo isti primerjalni zakoni kot za omenjena stringa, zato bi lahko v
novih prepisanih operatorjih lahko uporabil kar to primerjajo, namesto počasne char by char.

veste kaj hočem? :)
ima kdo idejo kako zastavit algoritm?
Abnormal behavior of abnormal brain makes me normal...

Thomas ::

Če te prav razumem ... Dva arraya sta enakovredna dvema stringoma. Enakost arrayev (stringov) primerjaš byte po byte ali po več naenkrat. Kar po 8 bytov če ima 64 bitni procesor. Po 4, pri 32 bitnem. Ko (če) pride do razlike, sta različna.

Če bi pa imel CRC (ali kaj drugega podobnega) pred obema stringoma, jih gre program primerjati samo, če sta CRCa, števili enaki.

Ja, lahko bi Critticall naštudiral, kako je treba spremeniti CRC, da je zadeva učinkovitejšega ... verzja na ponku, ne še na netu.
Man muss immer generalisieren - Carl Jacobi

BigWhale ::

Hmm, naj me nekdo popravi, ce se motim ampak kakrsen koli CRC od nekega kratkega stringa je se vedno kratek string. Primerjava CRCjev oz se pred tem racunanje CRCjev je v bistvu brez veze, ker je hitreje primerjati kar dva stringa. ?

Ce je pa ta string daljsi od dolzine CRCja, potem se pa ze splaca. Seveda ce je string daljsi za ustrezno stevilo znakov, katerih primerjava bi trajala dalj casa kot racunanje CRCja.

Bi kritikal to znal 'pogruntat'?

Hmm,... al pa ce je CRC integer/long... Vseeno, bi moral presodit a se ti splaca it racunat CRC, ce ne bi bilo hitreje it primerjat kar dveh stringov. Ampak to bi moral delat v run-timeu...

Thomas ::

Ko moraš primerjati N stringov je N*N-N primerjav. Zato se splača imeti N izračunavanj CRCa, da večina primerjav sploh ne gre dlje od primerjanja CRCov. Kolikor false pozitivnih enokosti (enakih CRCov pri različnih stringih) imaš, toliko zgubljaš. Zato bi se dalo CRC optimizirat v to smer. Najbrž bi se ga.
Man muss immer generalisieren - Carl Jacobi

Vesoljc ::

brute force :)

ker std::string zadeve primerja po abecednem redu, ima torej prva črka največjo težo.

pos = string.size()

for each znak
vsota_stringa += to_int(current_znak) * 10^(pos--)

bi šlo? problem zna bit edinole velikost...
Abnormal behavior of abnormal brain makes me normal...

BigWhale ::

Ja, predvsem je pa zadeva odvisna od tega kaj zelis delat. Kadar sem delal z veliko stringi (on line text based RP games), se je vedno izkazalo, da je se vedno bolje delat z veliko stringi, kot pa kakrsno koli drugo strikanje... :)

Thomas ::

Vesoljc,

Primerjanje stringov teče kot branje iz dveh memorijskih lokacij, z vsake v svoj register, potem pa strojno primerjanje obeh registrov. Potem se obe adresi povečata in - cikel do konca. Ko naletimo na neenakost, cikel lahko zapustimo.

Tole seštevanje stringov ni najbrž nič slabše od CRCa, vendar enakost vsote NE zagotavlja enakosti stringov. Tiste z enako vsoto (CRCom) moraš primerjati še naprej po zgornjem algoritmu.

Smo enkrat primerjali na CRC sistem milijon (dobesedno) slik, da bi izločili enake ven. Presenetljivo, kolikokrat je bil CRC enak, slike pa različne!
Man muss immer generalisieren - Carl Jacobi

BigWhale ::

> Smo enkrat primerjali na CRC sistem
> milijon (dobesedno) slik, da bi izločili
> enake ven. Presenetljivo, kolikokrat je
> bil CRC enak, slike pa različne!

;) Jaz sem zaradi takih stvari opustil CRC, ker se zadeva relativno hitro ponovi, za kak ZMODEM transfer ali kaj podobnega je se ok. ;)

Thomas ::

Koliko ljudi mora biti v sobi, da sta z verjetnostjo 1/2 vsaj dva, ki praznujeta na isti dan rojstni dan? 23.

Koliko random stringov moraš imeti, da sta z verjetnostjo 1/2 vsaj dva, ki imata isti 32 bitni CRC?

To vzemite za problem za rešit, zaenkrat povem samo, da se zgledujte po prvem stavku.

Ampak potem se pa hudiči še clusterizirajo, ker niso slikce random, pač pa so še v enih čudnih žlahtah.

V tem smislu mislim, da bi se dalo zevoluirati en "CRC", ki bi dosegal bolj teoretične retultate, kot pa jih običajni, ki je občutljiv ... ne vem pravzaprav na kaj.
Man muss immer generalisieren - Carl Jacobi

Vesoljc ::

neki tacga...
edini problem je natančnost

axpReal64 Generate(const axpString& lStr)
{
axpReal64 lRetVal = 0;
axpReal64 lMax = 1e64;
axpUInt16 lPos = 0;
axpUInt16 lSize = lStr.size();
axpChar lCurrent = 0;

while (lPos < lSize)
{
lCurrent = lStr.at(lPos);
++lPos;

lRetVal += lCurrent * lMax;
lMax /= 100;
}

return(lRetVal);
}
Abnormal behavior of abnormal brain makes me normal...

(Maniac) ::

ok sem se se jest odpravil mal tole stestirat...

probal sem neko sortiranje(flashsort + insertionsort) in zadeva mi je flashsort zoptimirala za 65%, insertion sort pa za (po spominu) cca 60%.

ok, gremo tole mal stestirat.

stejem cas ki pretece da sortira tabelo integerjev. in sicer zan= 500, 50000, 500000, 5000000.

sprobam navaden(neoptimiziran) flashsort in pa zoptimiziran flashsort.
-> zadeva ne sortira cisto nic hitreje !??

casi so prakticno enaki ( v 20-h sekundah je razlike za par ms).

Kaj sploh pomeni tistih 60,65%?

Thomas ::

A lahko dobim source, da vidim v čem naj bi bil štos?
Man muss immer generalisieren - Carl Jacobi

Thomas ::

Sicer pa tistih 60% pomeni, da se izvrši 60% osnovnih ukaznih vrstic v programu manj. To vse skupaj, sumarno. Lahko prosim vidim tisti tvoj primer?
Man muss immer generalisieren - Carl Jacobi

Thomas ::

Program ki si mi ga poslal (po emailu), ne dela. Ker ti index k tabele pade na -1. Tako ga Critticall niti ne vzame, kaj šele da bi ga kaj pooptimiziral. Kakšen C ti bo pa vrnil runtime error. Če popraviš izvirni source, delamo dalje!
Man muss immer generalisieren - Carl Jacobi

(Maniac) ::

tisto kar sem ti aposlal vceraj je bila se pre-alha verzija...

dobis po mailu se danes obe verzije (crtticall in osnovno verzijo)

sicer pa je napisan v javi.

jype ::

Algoritma in izvorne kode se verjetno ne da dobit, ne?

BigWhale ::

> Algoritma in izvorne kode se verjetno ne da dobit, ne?

Se Linux verzije se ne da dobit... Oz se je ni dalo... Zdaj ne vem kaka je situacija...

Bleeh :P

Thomas ::

A to za Critticall? Ne. Tudi se je ne bo, vsaj še zelo dolgo. Mam rajš zadevo pod kontrolo, kot ne. Če mene vpraša kdo kaj, že za Linux ni pametno, da je izvorna koda dostopna vsem. Za Critticall pa še nekoliko manj. Call me paranoik! ;)
Man muss immer generalisieren - Carl Jacobi

jype ::

To da je Linux izvorna koda dostopna vsem ne pomeni, da jaz uporabljam jedro, ki ga je servisiral nekdo tretji, ampak zaupam presoji trenutnega vzdrzevalca.

Release early and often. Ce veliko programiras ti toplo priporocam prebrat eseje Erica S. Raymonda. Ma, ziher si jih ze, vidim, da znas ustvarjat kodo kot se spodobi.
Ampak vseeno bi rad videl vsaj algoritem oziroma kaksen whitepaper na to temo.

Pravzaprav me trenutno najbolj pesti en hud problem: locit pleve od zita oz. spam od moje poste. A si kdaj poskusal optimizirat bayes-like algoritme?

Zgodovina sprememb…

  • spremenilo: jype ()

DixieFlatline ::

Če damo finančno stran ob rob(si ob zaslužek), gre lahko še kaj drugega narobe?

:))

(Maniac) ::

Se enkrat sem pregledal source in sem ugotovil, da je bila napaka na MOJI strani.

Trenutno filtriram kodo, tako da jo bom se enkrat spustil cez critticall, potem bom pa sporocil rezultate.

za napako se opravicujem.

Thomas ::

Kar se tiče Jave ... lahko je vsemogoče. Security pobere večino časa, naprimer. Bomo stestirali, kako je v C. Načelno bi bilo možno, da Critticall sort preoblikuje tako, da je operacij sicer 60% manj, vendar da piše bolj na različne konce kot original. Tako bi lahko plačal davek za slabše cacheiranje. Zato ima verzija ki bo prišla zdej ven, vgrajene uteži ukazov in $penvar. Da bi tudi tako (sicer maloverjetno) situacijo prav skanaliziral.

Kar se tiče White paper ... na tem delamo že kar en čas, ja. Bo skupaj z novo verzijo na netu.

Kar se tiče odprte kode ... že virus narejen na tej osnovi, bi bil lahko siten. Da o (sicer 1 ali manj procentov verjetnem) "code runawayu", ki bi ga nekdo na tej osnovi naredil - niti ne govorim. Še tko bi znal ... brez Critticalla.


Bayes ... ga bom priporočil uporabnikom, mogoče s templatom.
Man muss immer generalisieren - Carl Jacobi

Vesoljc ::

obteženi ukazi?
dobr to ;)
Abnormal behavior of abnormal brain makes me normal...

Thomas ::

Ja, lahko jim daš tudi (mogoče vsem) težo 0 in penaliziraš variablo. Tako ti evoluira proti najmanjši vrednosti tiste variable. Ali večih. Takole: http://www.critticall.com/func.html. Ne dela pa to še s trenutno dosegljivo verzijo.
Man muss immer generalisieren - Carl Jacobi

(Maniac) ::

V kodi imam float spremenljivko, vendar jo v critticallu ne morem definirati.

Ali obstaja kaksen workaround, ali bo treba pocakati na naslednjo verzijo?

Thomas ::

Izrazi float v tisočinkah. Ali milijoninkah. To je obvoz.
Man muss immer generalisieren - Carl Jacobi

Thomas ::

Kar se Mersenna tiče. A kdo kej kapira, kaj hočem rečt? ;)
Man muss immer generalisieren - Carl Jacobi

Vesoljc ::

money grabber ;)

[edit]
kaj nej bi penvar delau? o kakšni kazni je govora?
Abnormal behavior of abnormal brain makes me normal...

Zgodovina sprememb…

  • spremenil: Vesoljc ()

Thomas ::

$penvar penalizira vrednost spremenljivke alien, ki pove razdaljo med dejanskmi vrednostmi (tukaj "Mersennovih eksponentov) in predpostavljeno funkcijo. Tako funkcija počasi evoluira proti pravi, ker Critticall favorizira manjše vrednosti alien. To mu pove $penvar. Ko se funkcija čedalje bolj prilega do sedaj znanim vrednostim, je nova vrednost verjetneje tam okoli izračuna. Ni pa nujno. Ampak boljš pa definitivno, kot da dobiš nekaj random za pol leta za računat.

To je razlaga $penvar v konkretnem primeru.
Man muss immer generalisieren - Carl Jacobi

Vesoljc ::

when alien == 0, then Thomas časti? :D
Abnormal behavior of abnormal brain makes me normal...

Thomas ::

Hehe ... funkcija je približno dobra že prej. Že prej _mogoče_ kaže na obetavno mesto, kjer naslednji Mersenne mogoče leži. Zanesljivo pa to seveda ni niti, ko je alien že na 0. Predvsem je pa tedaj še pol leta do leta računanja Lucas-Lehmerjevega testa. Ki gre ponavadi pa v prazno. Zdaj naj bi šel samo precej (?) manjkrat. Ene sorte brokerski nasvet lovcem na nagrade.
Man muss immer generalisieren - Carl Jacobi

Vesoljc ::

heh, še malo pa boš lahko dal predict slo-borza ;)

samo, tale LL test je pa res en brute force...
na p3 866 hoče 135 dni 24/7... hard core

misliš, da se da se da kej optimizirat? (itaq se da :D )
Abnormal behavior of abnormal brain makes me normal...

Thomas ::

Ja verjetno da se da. Gre pa takole:


one=1; // jasno, da je one 1
two=2; // jasno, da je two 2
s=4; // LL pravita, da mora biti 4
exponent=5; // primer mejmo 5 !
Mersenne=31; // 2^5 - 1
WeHaveAPrimeHere=0; // default nimamo

for (i=two;i<exponent;i++) {
s=s*s;
s--;s--;
s=s%Mersenne;
}
if (s==zero) {WeHaveAPrimeHere=1;} //zmagal smo!
Man muss immer generalisieren - Carl Jacobi

(Maniac) ::

Torej sem sprobal 2 metodi sortiranja in sicer insertionsort, ter Knuth ShellSort.

Rezultati so hudo dobri!:D

Po cca dveh urah, ki si jih je vzel critticall za vsak algoritem posebej, so rezultati sledeči:

Za shellsort sem kreiral tabelo z 14.500.000 random int-i.
(povprečen)čas sortiranja: original 25 sekund, critticall 16 sekund

za insertionsort : 100.000 random int.
(povprečen)čas sortiranja: original 25 sekund, critticall 18 sekund


Kot zanimivost: za obe metodi sem critticallu podal tabele velikosti 10(za hitrejše delovanje), vendar mi potem ni več pravilno sortiral večje cifre(!), tako da je priporočljivo podati vsaj 50 elementov.(seveda sem ponovil vajo na tabeli 50 in 100 elementov)


Mislim da bi bilo zelo priporočljivo da je v naslednji verziji omogočeno vsaj uporaba tabel (zapis a[i])v pogojnih stavkih, ker s tem odpade vsaj 80 % error checkinga pri predelavi kode.

Drugače pa čestitam!

Zgodovina sprememb…

  • spremenil: (Maniac) ()

Gandalfar ::

x: s cim si skompajlal original verzijo?

(Maniac) ::

oboje z javac v1.3

Thomas ::

Ja, tale data dependency je bil kar hud problem. Zato sta bila pokurjena 2 meseca. Zdej to dela, samo moraš pa dat kakšen $rinvar še po $invar. Anyway, mckn se pocakte na novo verzijo, tele dni (17.12)
Man muss immer generalisieren - Carl Jacobi

Thomas ::

Man muss immer generalisieren - Carl Jacobi

snow ::

original : 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
enhanced : 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 55? 59 61 65? 67 71 73 77 79 83 85? 89 91? 95? 97

if((sieve[i]!=1) && (sieve[i]!=2)) potem je prastevilo, ce sem prav razumel.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

Thomas ::

No, to so pa last minute popravki! Hvala - gremo gledat ....
Man muss immer generalisieren - Carl Jacobi

snow ::

Potem danes bo nov Critticall?
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
««
9 / 29
»»


Vredno ogleda ...

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

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

Oddelek: Programiranje
758054 (5874) Senitel
»

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

Oddelek: Programiranje
905926 (5272) CaqKa
»

Petaflopsu naproti (strani: 1 2 3 )

Oddelek: Novice / Procesorji
1059575 (9575) Marjan
»

cene permutacij help please

Oddelek: Programiranje
262183 (1790) Sergio
»

kako definirtati prastevilo

Oddelek: Programiranje
143907 (3712) ooux

Več podobnih tem