[ tesa @ 23.10.2004. 22:41 ] @
Takmicenje u pravljenju AI algoritama za logicke igre! http://codechallenge.4t.com |
[ tesa @ 23.10.2004. 22:41 ] @
[ grepme84 @ 24.10.2004. 00:41 ] @
Bar nesto na nase :)
Mozes da mi posaljes sve sto je pod download sekciji jer meni ne radi i ako ti nije mrsko, postuj jedan primer ovde svog dll-a da vidimo kako se to radi. Pozdrav svima! [ reiser @ 24.10.2004. 02:00 ] @
Jer mogu da pokusam da napravim AI u Delphi-u ?
![]() [ blaza @ 24.10.2004. 08:26 ] @
http://codechallenge.4t.com/spisak.html
Citat: i vidite koliko ste dobar kreator AI-a (Artificial Inteligence). Ništa lakše. Hint: Intelligence umesto Inteligence . [ reiser @ 24.10.2004. 14:44 ] @
ehm... Moze li neki primer ? Kako da znam raspored kruzica u polju ?
[ tesa @ 21.11.2004. 15:16 ] @
Proslo je vise od dva meseca od otvaranja sajta. Sledi prvi pravi turnir na kome ce ucestvovati bar 6 do sada prijavljenih programera. Od njih su 3 profesionalna i tesko da ce ih neko nadmudriti.
Inace, DLL-ove mozete praviti u bilo kom programskom jeziku. Sve sto je potrebno je da eksportujete jednu funkciju koja prima i vraca celobrojnu vrednost. Hvala Blazi za gresku u kucanju. Pozdrav svima. [ Vertyg01 @ 22.11.2004. 02:11 ] @
damn moram da nabavim msvc++ ili .net :P
ima li neko kratak primjer ? int blah=0; int GameMove(int col) { if (blah=0) {blah++; return col;} return 0; } moj prvi potez ofc glupo je ali razmisljam o nekom algoritmu ;) !!! [ `and @ 22.11.2004. 12:48 ] @
Zasto trazi identifikaciju kod download-a ... ( koji je user i pass :) ?
[ tesa @ 22.11.2004. 15:43 ] @
Odgovor za Vertyg-a:
Da, zaista je za pocetak dovoljno samo vratiti celobrojnu vrednost. Ona inace treba da bude izmedju 0 i 9 jer se u suprotnom partija automatski prekida i pobednik je drugi igrac. Kada se nakon malo muke potezi pocnu da pamte u globalnoj matrici, polako pocne da se nazire strategija. Odgovor za 'and-a: Niko nije imao problema sa tim tj. nikome nije trazena sifra za pristup fajlovima koji se download-uju. Pokusaj ponovo. [ `and @ 23.11.2004. 12:25 ] @
@tesa Citat: Forbidden Remote Host: [212.200.96.180] You do not have permission to access http://codechallenge.4t.com/4InLine.zip Data files must be stored on the same site they are linked from. Thank you for using FreeServers ... ipak nece ... [ tesa @ 23.11.2004. 14:18 ] @
Upravo se i kod mene dogodilo isto. Juce sam sasvim normalno skinuo fajl a danas mi prijavljuje gresku kao tebi. Izgleda da se ovaj server po nekada preoptereti pa prvo prestanu da funkcionisu stranice koje se besplatno hostuju. Inace, druga dva linka sa download stranice mi normalno rade.
Nego, da se ti nebi mucio dok ja to ne sredim, posalji mi svoj mail na [email protected] i poslacu ti tih 17 Kb koliki je game engine na mail. [ tesa @ 25.11.2004. 09:42 ] @
Mnogi su mi napisali mail da im licno posaljem fajlove. Hvala im na interesovanju i nadam se da ce napraviti dobre igrace. Treci turnir je prekosutra (u Subotu 27.11.2004) tako da taman imate vremena da lagano napravite igraca do cetvrtog turnira koji ce biti pred kraj godine.
Server je danas sve vreme radio veoma dobro tako da nije bilo problema sa linkovima. Verujem da ce svi moci da preuzmu fajlove direktno sa stranice, ali ako bude bilo kakvih problema napisite mi mail i ja cu problem resiti na drugi nacin kako treba. [ 6ypek @ 25.11.2004. 10:57 ] @
Uh, tek shto sam polozio Osnove Veshtachke Inteligencije, a naletim na ovakav topic :) ccc :)) nemoj vishe majke ti.. dosta mi vishe onih silnih stabala pretrazivanja i logike prvog i drugog reda... :)))) Daj neki NFS da se opustim ko covek :))) [ tesa @ 27.11.2004. 20:58 ] @
Danas je odigran treci turnir na kome je bilo nekoliko veoma jakih igraca (programera). Rezultate i log partija mozete skinuti sa stranice "Rezultati" sajta http://codechallenge.4t.com
[ tesa @ 04.12.2004. 12:04 ] @
Postavljen je novi game engine koji omogucava postavljanje pocetnih neutralnih polja.
Napominjem sve koji prave svog igraca za cetvrti turnir da eksportuju i drugu funkciju (za postavljanje neutralnih polja). Da bi bili sigurni da sve radi kako treba najbolje da sa Download sekcije sajta preuzmete novi game engine. Pomocu njega mozete da proverite da li su obe potrebne funkcije pravilno eksportovane. [ tesa @ 20.12.2004. 18:22 ] @
Sajt za takmicenje u pravljenu AI (vestacke inteligencije) za logicke igre redizajniran je i prebacen na novi domen: www.codechallenge.com
Napravite DLL koji ce se boriti protiv DLL-ova drugih takmicara u nekoj od logickih igara. [ `and @ 31.12.2004. 11:51 ] @
Da li se meni cini ili vec dva dana ne mogu da pristupim sajtu ...
[ tesa @ 31.12.2004. 15:53 ] @
Server na adresi www.codechallenge.com je oboren pre dva dana i posto ide Nova Godina, sigurno ga nece podici do prvog sledeceg radnog dana.
Ipak, posto se nesto slicno ranije dogodilo, bio sam spreman i sajtu se moze pristupiti preko adrese: http://codechallenge.atspace.com Pozdrav svima i srecna Nova Godina [ freediver @ 20.01.2005. 09:50 ] @
Kako izgleda za naredni turnir? Da li ima novih takmicara? Evo ja napravih jednog :)
[ tesa @ 28.01.2005. 12:58 ] @
Sve je spremno za sutrasnji peti turnir. Za sada je samo tvoj takmicar nov, ali su zato mnogi postojeci takmicari doradjeni. Cini mi se da je dolazak novog igraca "One man army" na proslom turniru, koji je usput i pobedio, inspirisao do tada najbolje ucesnike da dorade svoje takmicare.
Pozdrav svim ucesnicima, i poziv svima ostalima da posete www.codechallenge.com [ freediver @ 29.01.2005. 16:17 ] @
Svaka cast na odrzavanju takmicenja iako se bas i nisam proslavio :) Ovaj put su izostali komentari partija koliko vidim.
[ Mihajlo Cvetanović @ 22.02.2005. 12:26 ] @
Možda je došlo vreme da se malo povećaju vremena izvršavanja? Kao u šahu, recimo 200 sekundi za prvih 50 poteza i 3 sekunde za svaki sledeći?
Primetio sam da se igra 5 partija, što znači da jedna strana igra 3 puta prva. Neparan broj partija je verovatno uveden da bi se pronašao pobednik, ali nekako mi nije pravedno da neko ima prednost prvog poteza. Možda bi umesto pete partiji trebalo da se "izvode penali", tj. da se igra na dva razlike, ali sa vrlo ograničenim vremenom. Još jedna stvar. Ako sam dobro zaključio oba algoritma se izvršavaju na istom računaru, što znači da se dva dll-a nadmeću za resurse računara (procesor, memorija, hard disk). Ništa ne znači to što se poziva funkcija jednog dll-a po izlasku iz funkcije drugog, jer dll-ovi mogu da imaju više niti izvršenja koje rade i kada se izađe iz dotične funkcije. Mislim da bi svaki algoritam trebao da se "razbaškari" na sopstvenom računaru (naravno, računari treba da su identični). [ tesa @ 25.02.2005. 12:42 ] @
Komentari se uvek objavljuju dan-dva nakon rezultata takmicenja jer ih ne pisem ja vec upravo jedan od takmicara.
Vreme se nece povecavati jer bi to samo davalo prednost rekurzivnim "ne-pametnim" algoritmima. Sto se tice broja partija i odredjivanja sta je fer a sta ne, pa u realnosti su stvari mnogo gore. Svaki turnir u bilo kom sportu moze da bude veoma nepravedan jer recimo drugi po jacini moze da ispadne vec u prvom kolu i da zavrsi kao sto drugi. Sto se CodeChallenge-a tice, od narednog turnira igrace se prvo po grupama u kojima ce igrati svako sa svakim, a najbolja dva igraca iz svake grupe ce se plasirati u polufinale. Kao sto sam upravo objavio na sajtu, odrzavanje sestog turnira odlaze se za naredni mesec. Stiglo je malo osvezenih takmicara a nijedan nov. U planu su nove igre, ali o tom po tom. Pozdrav svima. [ Mihajlo Cvetanović @ 25.02.2005. 14:15 ] @
Citat: Vreme se nece povecavati jer bi to samo davalo prednost rekurzivnim "ne-pametnim" algoritmima. Okej, jeste malo problem to što u svakom potezu ima samo 10 mogućih rešenja. Da ih je više ti rekurzivni ne bi imali šanse. S druge strane ne znam da li sam baš najbolje razumeo: ako se poveća vreme poteza onda prednost ima jedna klasa algoritama (nepametni) u odnosu na drugu klasu (pametni). Ne bih da ulazim u to da li je to uopšte tačno, ali koliko su onda "pametni" ti drugi algoritmi? [ DarkMan @ 26.02.2005. 21:05 ] @
Citat: tesa: Vreme se nece povecavati jer bi to samo davalo prednost rekurzivnim "ne-pametnim" algoritmima. Zasto rekurzivni algoritmi nisu pametni? Ja mislim da su ama bas svi takmicarski dll-ovi rekurzivni. Da li to znaci da ni jedan takmicarski dll nije pametan? Gledanje unapred tj. predvidjane poteza nije moguce izvesti bez rekurzivnih funkcija. Za igre ovog tipa odavno su vec smisljeni algoritmi koji funkcionisu odlicno. Tu se koriste algoritmi pod imenom MinMax i Alpha-Beta. Evo i nekih linkova: http://www.cs.mcgill.ca/~cs251/OldCourses/1997/topic11/ http://www.ocf.berkeley.edu/~y...xtras/alphabeta/alphabeta.html Jedina alternativa koja moze da se primeni su neuronske mreze. Problem kod neurosnkih mreza je sto je za ovakve igre potrebno kreirati veliku neuronsku mrezu koja ce se jako sporo izvrsavati na racunaru (a mi nemamo vremena za tako nesto). Uz program koji koristi neuronske mreze bi trebala da dolazi i neka baza koja predstavlja ono sto je do sada nauceno tako da bi se takmicarski dll, koji je baziran na neuronskim mrezama, mogao prepoznati po dadatnom fajlu iz dll. [ Mihajlo Cvetanović @ 02.03.2005. 11:15 ] @
Citat: tesa: Kao sto sam upravo objavio na sajtu, odrzavanje sestog turnira odlaze se za naredni mesec. Stiglo je malo osvezenih takmicara a nijedan nov. U planu su nove igre, ali o tom po tom. Kad se budu objavljivala pravila za nove igre možda bi ipak trebalo uvesti dva računara za meč. Time se isključuje mogućnost krađe tuđeg procesorskog vremena, a istovremeno je moguće iskoristiti i protivnikovo vreme za dodatno procesiranje. [ tesa @ 04.03.2005. 23:53 ] @
Evo kratkog odgovora. Produzavanjem vremena svi bi tezili da sto bolje optimizuju rekurziju. Ovako se forsira analiza jedne pozicije, a upravo je to ono sto nije tipicno za racunar vec za nas nacin razmisljanja, a to je poenta - AI.
[ Mihajlo Cvetanović @ 07.03.2005. 10:01 ] @
Kako šahisti razmišljaju? Sigurno ne tako što pokušavaju da nekom magičnom jednačinom dođu od trenutne pozicije na tabli do sledećeg poteza. Ono što rade je da u glavi simuliraju svoju i protivnikovu igru nekoliko poteza u napred, pokrivajući što više logičnih puteva, i pritom uzimajući u obzir i neki opšti položaj figura. Kad osmisle strategiju onda krenu da je sprovode.
Nije vreme ni važno, 2 sekunde na modernim računarima zapravo i nije tako malo. Ako mi za analizu jednog (budućeg) stanja treba 1 mikro sekunda to znači da mogu da pokrijem 2 miliona stanja, što bi za neoptimizovanu rekurziju (10 mogućih poteza) bilo 6-7 poteza unapred (10^6). Za optimizovanu (recimo 5 mogućih poteza) to je 9 poteza unapred (5^9). Na tu se optimizaciju treba i skoncentrisati. Ako i postoji magična funkcija koja pokriva 9 poteza u napred onda smo naleteli na trivijalan problem (naravno, svaka čast čoveku koji napravi takvu funkciju). BTW, baš me zanima da li postoji neki od takmičara koji ne koristi ni malo rekurzije. Ono što je tehnički bitnije je deljenje procesorskog vremena (i memorije). Ako napravim thread sa visokim prioritetom koji će da procesira stanja i kad nije moj red (kao što i šahista razmišlja i dok je protivnik na potezu) onda sam teško onesposobio svog protivnika. Ako i protivnik napravi thread, ja mogu da izazovem exception u svom threadu dok je protivnikov potez, i sudije će diskvalifikovati protivnikov dll jer neće znati da nije "pukao" on nego moj dll. To sad postaje pravi Code Wars, što nije bila originalna namera. Rešenje je dati čitav računar svakom algoritmu. [ freediver @ 07.03.2005. 15:01 ] @
Mislim da je i dve sekunde previse za potez. To vreme bi trebalo da se smanji na ~200ms. To bi znatno smanjilo obim rekurzije a i ubrzalo partije. Po mom proracunu trenutno mogu da pogledam sve poteze do dubine 6-7 na test masini (ne mogu tacno da ocenim jer ne mogu da izmerim njene performanse, ali ugrubo).
Drugo, sto se tice kradje procesorkog vremena, moguce je da se dll-ovi unloaduje svaki put, i da im se po pozivu prenosi celokupno stanje table. [ Mihajlo Cvetanović @ 09.03.2005. 13:06 ] @
Izgleda da ovde postoji više od jedne osobe za koju rekurzija predstavlja ne-AI način programiranja. Ja se ne slažem.
Prvo, trebalo bi razlikovati "neinteligentnu" i "inteligentnu" rekurziju. Neinteligentna rekurzija se inače zove "pretraživanje po širini" i znači da prvo obradim sve poteze dubine 1, pa sve poteze dubine 2, itd. Inteligentna rekurzija se inače zove "heurističko pretraživanje" i znači da trenutno obrađujem onaj potez koji mi se trenutno čini vrednim obrađivanja. U ovom drugom slučaju zapravo i nema rekurzije u pravom smislu reči, ali i dalje ima pretraživanja. Drugo, ni jedna veštačka inteligencija (niti i jedna prirodna inteligencija) ne radi tako što ima neku savršenu metodu za pronalaženje rešenja (tj. neku magičnu funkciju). Takva savršena metoda postoji samo za trivijalne probleme (igra Nim je jedan trivijalan problem). Teoretski gledano sve igre su trivijalne, uključujući i šah, ali niko ne prilazi tom problemu tako što traga za magičnom funkcijom. Zapravo traganje za magičnom funkcijom je ne-AI način programiranja, jer je ceo algoritam smislio programer (tj. pokrio je sve moguće puteve) i to za jedan ograničen problem (kao što je ovde za neke algoritme ispao problem ubacivanja neutralnih kuglica). Ali, kao što rekoh, nije vreme toliko ni bitno... Citat: freediver:Drugo, sto se tice kradje procesorkog vremena, moguce je da se dll-ovi unloaduje svaki put, i da im se po pozivu prenosi celokupno stanje table. Ne bi to pomoglo, funkcije za rad sa bibliotekama nisu povezane sa funkcijama za rad sa nitima. Problem borbe za resursima ne može drugačije da se reši osim da se svaki algoritam "vrti" na svom računaru. [ freediver @ 09.03.2005. 21:04 ] @
Postujem ja rekurziju i slazem se da je gotovo nemoguce resiti ovakav problem bez nje.
Ali kada za rekurziju imas 200 ms umesto 2000 ms, heuristicki pristup i odsecanje losih poteza mnogo vise dolazi do izrazaja zar ne? Sa druge strane mozes traziti i 10 sec za potez ili vise ali gde je kraj? Neko mora da odigra te partije ako nista. Poz ps. nadam se da neces krenuti stranputicom kradje proc vremena ;) [ DarkMan @ 09.03.2005. 23:54 ] @
Sto se tice problema kradje procesorskog vremena mislim da imam resenje.
U dole prilozenoj arhivi je izvorni kod i izvrsna verzije programa za testiranje igraca kao i tri igraca za testiranje programa. Pre samog pocetka testiranja igraca (dll-a) izbroji se broj thread-ova programa. Zatim se igraci testiraju na postojanje funkcija TableSetupMoves i GameMove, zatim na ispravnost funkcionisanja TableSetupMoves tj. mora vratiti ispravan checksum. Na kraju se 10 puta poziva funkcija GameMove i proverava se broj threadova. Ako GameMove vrati broj izvan opsega 0-9 ili je broj thread-ova veci nego na pocetku igrac nije prosao test. Za testiranje sam napravio 3 igraca. Prvi mora uvek da prodje test jer ne kreira nikakve thread-ove. Drugi i treci igrac kreiraju thread-ove i moraju uvek da padne na testu. E sada, ovo je jos uvek potrebno dodatno ispitati da li zaista funkcionise kako treba. Inace vec pred sam kraj pisanja programa sam mislio da ovo nece funkcionisati jer je moguc razlicit broj thread-ova za istog igraca. Na primer, ucitam prvog (postenog ![]() Nenade, na tebi je da odlucis da li ce se ovaj test koristiti ili ne. PS: Mihajlo je ranije komentarisao broj partija. Dok sam po internetu trazio "DOKUMENTACIJU" za algoritme koji se primenju u ovakvim igrama, saznao sam da su neki ljudi radili naucne radove (diplomski, doktorat?) na temu igre connect-4 i jedan tip je dokazao da u ovoj igri sa standardnom tablom 7x6 prvi igrac moze uvek da pobedi (naravno ako odigra prave poteze). Znaci da igrac koji pocinje prvi tj. odigra 3 partije od 5 kao prvi igrac ima prednost. Mozda bi ovde bila bolja koncepcija kao kod tenisa: minimum tri odigrane partije i sa dve razlike. [ zvrba @ 10.03.2005. 08:34 ] @
Citat: darko79: Sto se tice problema kradje procesorskog vremena mislim da imam resenje. U dole prilozenoj arhivi je izvorni kod i izvrsna verzije programa za testiranje igraca kao i tri igraca za testiranje programa. dobro, zasto takav zaobilazni nacin? zasto jednostavno ne suspendas proces? arhitektura poput ove: 1. imas jedan "supervisor" program koji uvijek ima stanje igre 2. imas dva procesa (po jedan za svakog "igraca") koji koristi f-je iz DLL-a za igru. kad DLL napravi "potez" dojavi ga supervisor programu kako bi on mogao proslijediti potez drugom "igracu" 3. kada je neki igrac na redu, jednostavno zaustavis proces drugog igraca (to bi trebalo stopati i sve threadove). na unixu jednostavno mozes slat SIGSTOP i SIGCONT signale a sigurno postoji nesto i za windoze.. [ Mihajlo Cvetanović @ 10.03.2005. 09:21 ] @
U redu, moguće je enumerisati threadove u procesu, ali nije moguće utvrditi kome pripada koji thread, plus šta ako dll pokrene čitav novi proces? Pokretanje procesa iz memorije (umesto sa diska) je moguće, i kako sad neko da otkrije koji procesi imaju pravo da se izvrsavaju, a koji nemaju? I nije samo deljenje procesorskog vremena problem, problem je i memorija. Onaj dll čija se funkcija prva pozove ima priliku da zauzme čitavu slobodnu memoriju.
Jako je komplikovano sve to izregulisati... BTW, ne postoji funkcija SuspendProcess zato što proces nije nešto što se izvršava. Postoji SuspendThread, što bi značilo da mora da se pozove za svaku nit u procesu. U windowsu ne postoji ugrađeno signaliziranje procesima i nitima (bar ne na user nivou). [ zvrba @ 10.03.2005. 10:06 ] @
hm. pokusaj 2: u svom "supervisor" programu ucitas OBA DLL-a, pootvaras fajlove koji ti trebaju itd. Prilikom ucitavanja DLL-a je moguce zaobilazenje inicijalizacije? I nakon sto to sve napravis, skines svom procesu sve moguce privilegije (kreiranje threadova, procesa itd...). Tako da ce DLL koji pokusa koristiti nesto od tih mogucnosti dobiti gresku...
pokusaj 3: imas DebugActiveProcess (ili tako nesto) koji zaustavi sve threadove u procesu i kompletan proces stoji dok ne pozoves ContinueDebugEvent. pa sa WaitForDebugEvent cekas neki timeout koliko proces smije cekati i ako prijedje to vrijeme, posaljes mu DebugBreakProcess. istina, najelegantnije rjesenje je dva kompjutera :) [ DarkMan @ 10.03.2005. 11:51 ] @
Citat: Mihajlo Cvetanović: U redu, moguće je enumerisati threadove u procesu, ali nije moguće utvrditi kome pripada koji thread... Ako se broj thread-ova, posle ucitavanja dll-a, poveca pretpostavljam da je dll kreirao thread. Zar ne bi bilo logicno? Citat: Mihajlo Cvetanović: ...plus šta ako dll pokrene čitav novi proces?... Sta bi se time dobilo? Igrac jede sam sebi resurse? Ostvariti sinhronizaciju u thread-ovima je dovoljno komplikovano a da o procesima ne pricamo. Ako imas ideju kako bi se to izvelo napisi neki konkretan primer pa da vidimo kako se to moze spreciti. Citat: Mihajlo Cvetanović: ...problem je i memorija. Onaj dll čija se funkcija prva pozove ima priliku da zauzme čitavu slobodnu memoriju... Sta se dobija zauzimanjem slobodne memorije? Kako bi to osakatilo protivnika? Zbog postojanja virtuelne memorije svakom procesu je na raspolaganju 4GB memorije. Kada neki program pocne da zauzima vise nego sto ima fizicke memorije windows pocinje da swapuje sto se sasvim lepo cuje (mislim na hard disk). Ima ovde lepih ideja ali koja je njihova izvodljivost. Ocemo da pisemo debugger? Ili mozda da igraci budu odvojeni procesi - kako ih naterati da igraju zajedno? Verovatno bi bilo najbolje (citaj najsigurnije) dva racunara ali to znaci da Nenad mora napisati mreznu verziju igre koja ce na svakom racunaru ucitati po jednog igraca i sinhronizovati njihovu igru. [ freediver @ 10.03.2005. 12:32 ] @
Rasprava koliko god dobra bila ima jednu po meni pogresnu premisu - da bi neko zaista hteo da vara na dati nacin. Obzirom da je takmicenje bez ikakvih nagrada itd i samo za slavu, zar bi neko stvanro zeleo da na taj nacin pobedi? Mislim da su svi koji ucestvuju entuzijasti.
Drugo ako jednom preraste u nesto ozbiljnije, uvede se uslov da se posalje source code u koga ce organizator imati uvid i sve je reseno. Tako da utrosite energiju na drugom mestu i skoncetrisite se na takmicare da bi naredno takmicenje bilo jos znaimljivije! [ Mihajlo Cvetanović @ 10.03.2005. 12:37 ] @
Citat: Ako se broj thread-ova, posle ucitavanja dll-a, poveca pretpostavljam da je dll kreirao thread. Zar ne bi bilo logicno? U pravu si. Počeo sam da razmišljam o kombinaciji CrateProcess/CreateRemoteThread, ali to je već iživljavanje. Znam! Instaliraš hook, i tu kreiraš thread. Ispada da je thread kreirao niko drugi do glavni program. Citat: Sta bi se time dobilo? Igrac jede sam sebi resurse? Ostvariti sinhronizaciju u thread-ovima je dovoljno komplikovano a da o procesima ne pricamo. Ako imas ideju kako bi se to izvelo napisi neki konkretan primer pa da vidimo kako se to moze spreciti. Evo jednog opšte poznatog primera: država štampa novac i izaziva inflaciju. Inflacijom svačiji (pa i državin) novac gubi na vrednosti, ali državi to ne smeta jer ona poseduje novu količinu štampanog novca. Za državu plus je veći od minusa. Za sve ostale plus ni ne postoji. U našem primeru taj novi proces bi radio nešto korisno i slao dll-u podatke preko cevi (pipe). Nikad nisam kreirao proces iz memorije, ali verujem da to može. Ne detaljiše mi se sad o tome jer nije poenta da "krpimo" postojeći sistem nego da za sledeći izazov krenemo boljim i lakšim putem. Citat: Sta se dobija zauzimanjem slobodne memorije? Kako bi to osakatilo protivnika? Zbog postojanja virtuelne memorije svakom procesu je na raspolaganju 4GB memorije. Kada neki program pocne da zauzima vise nego sto ima fizicke memorije windows pocinje da swapuje sto se sasvim lepo cuje (mislim na hard disk). Da, ali šta da radimo kad čujemo swapovanje? Koga da okrivimo? Doduše, ako koristiš samo VirtualAlloc onda si relativno bezbedan, ali ako koristiš malloc/new onda lako možeš da ostaneš bez memorije (ako se ne varam CRT heap je ograničene veličine). Svaka sekunda je bitna. Vreme koje čekam da protivnik odigra potez je utrošeno vreme. Memorija je isto važna (mada ne toliko kao procesor). Naravno, niko pošten ne bi namerno zauzimao tuđe resurse, ali ako ti za algoritam treba dosta memorije onda je ti zapravo uzimaš od protivnika. [ tesa @ 10.03.2005. 19:25 ] @
Od mog prvog susreta sa forumima na internetu primetio sam da se poruke po eksponencijalnom zakonu odmicu od pocetne teme. Ovo nije bas tako strasno, ali me potseca na to.
Verovatno cu napraviti nekakav pomocni program za kontrolu i otkrivanje prljavih radnji, ali bez obzira sta on bude radio to niko nece znati. Posto ja sedim na racunaru i pustam ceo turnir, imam ogromnu prednost u kontroli procesa. Ja ne moram da pravim program da se bori protiv nedozvoljenih niti. Sve sto treba da uradim je da otvorim tekst editor i objavim da je igrac eliminisan. Pozivam vas sve da pokusate da svrgnete Misirca na castan nacin jer svaki drugi ne dokazuje nista. Odrzace se jos samo dva-tri turnira pre pojave bar jedne nove igre u kojoj cemo se takmiciti. Do tada je bolje da se posvetimo igri 4-in-line jer cemo posle toga sigurno preci na nesto novo. [ 3MAJ86 @ 12.03.2005. 17:50 ] @
pratim vetj neko vreme shta se deshava ovde, i iako sam neiskusan programer, reshio sam da "ukrstim kuglice" na sledetjem turniru... vetj par dana spremam svoje chedo, i treba uskoro da bude zavrshen...
nije mi jasno zashto se toliko prepucavate oko toga koji je nachin najbolji za "kvarnu" pobedu. sada ja izigravam nekog pacifistu, u smislu "vreme koje troshite na to, bolje da ste upotrebili za kreaciju svojih takmichara itd..." :) uglavnom, moje mishljenje je da mozhe sasvim lepo da se igra i bez rekurzije, samo shto na taj nachin ima mnogo vishe "fizichkog" rada programera. da li je neko za to, da kada se definitivno zavrshi sa turnirima u 4inline igri (i predje se na novu igru), da se objave izvorni kodovi takmichara. mislim da bi ovo umnogome pomoglo slabijim (mladjim) programerima da nauche dosta toga, dok ovi drugi nishta ne gube, jer nije neka lova i/ili slichno u igri. na kraju, ovo mozhe da bude izborna stvar... (samo nemojte da me gadjate jajima) :) [ Mihajlo Cvetanović @ 14.03.2005. 10:25 ] @
Pretpostavljam da niko ozbiljan ovde ne želi da pobedi na kvarno, ali možda postoji neko ko želi da iskoristi sve što mašina i operativni sistem mogu da mu ponude. Ako mašina ima više od jednog procesora, zašto se ograničiti samo na jedan? Zašto ne bih i ja iskoristio protivnikovo vreme? Ako mi treba 100MB memorije za algoritam zašto ih ne bih uzeo?
Ova rešenja jesu napredna, i većina verovatno nema nameru da se trudi oko njih, ali ako neko hoće da se potrudi trebalo bi mu to omogućiti tako da to ne smeta protivniku. [ tesa @ 26.03.2005. 18:06 ] @
Imamo novog sampiona. Poslednji prijavljeni ucesnik je ovog puta poboljsao svog takmicara i pobedio dosadasnjeg sampiona "Misirca".
Rezultati turnira su na http://www.codechallenge.com [ vaske555 @ 29.10.2005. 23:10 ] @
Ako neko ima source za 4inLine, neka mi posalje, znacilo bi mi za ucenje kako se koristi heuristika...:)
na [email protected] [Ovu poruku je menjao vaske555 dana 30.10.2005. u 00:10 GMT+1] [ donny @ 19.11.2005. 18:30 ] @
a zasto ti teba bas za 4inline vaske? sto ne recimo onaj 8block ili tako nesto... ;)
[ damso @ 07.09.2006. 15:03 ] @
također sam zainteresovan za "4 in Line".
Pišite.. [ damso @ 13.09.2006. 16:46 ] @
Evo okvira za test AI algoritma u igri 4inLine:
http://perun.im.ns.ac.yu/rackovic/vi1/4InLine.zip Dato je uputstvo,urađen je korisnički interfejs igre kao i primjeri AI-igrača koji igraju igru. Potrebno je napisati što bolju heuristiku za igru 4inLine.Ovde ću iznositi neke ideje,komentare,urađene dijelove,.. pišite svoja mišljenja. Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|