Programmeringstävling (förslag)

Permalänk
Medlem

Har sovit tills för ett par timmar sedan, ska kolla sedan när jag kommer hem. Dock verkar koden du skrev vara för .NET och inte den gamla hedeliga VB6. Tänkte mest göra ett litet klientskal.

Permalänk
Medlem

Är det här helt dött nu eller skriver folk fortfarande på sina bottar?

Permalänk
Medlem

Äh, det blir som jag förutspådde - uppgiften är alldeles för svår och tidskrävande så det kommer rinna ut i sanden. Hitta på nån mer rimlig tävling istället så vill fler vara med och det hela blir så mycket roligare.

Visa signatur

www.filipsprogram.tk - lite freeware
"Delight, herregud. Talang är bara förnamnet."

Permalänk

Jo. Känns som t ex gör ett litet singleplayer spel baserat på det eller datt vore mer intressantare och lättare.

Visa signatur
Permalänk
Medlem

Själv är jag klar med min bot, det kan ju vara så att folk generellt har mycket annat att göra och inte har tid med detta.

Permalänk

Ledsen för att jag försvann, blev tvungen att hantera en del tråkiga
saker som tyvärr konsumerat all min lediga tid.

Tävlingen:

Nu vet jag inte riktigt hur långt savje har kommit med
implementeringen av sin server och hur det fungerar med
nätverksprotokollet. Hade inte riktigt tänkt mig att versionen
jag arbetade på skulle vara den slutgiltliga versionen.

Håller inte riktigt med om att uppgiften är så svår som Delight
kanske tror. Men jag är benägen att hålla med honom om att det
kommer att vara tidskrävande, i alla fall så som det ser ut nu
med nätverksprotokoll och felhanteringen som hör till. Här följer
därför ett reviderat förslag på hur man kan tänka sig hålla en
liknande tävling:

No Limit Holdem - Heads Up.

N stycken pokerbotar gör upp mot varandra, två och två,
round-rubin style.

Hur eliminerar man nätverksprotokollet utan att tvinga folk att
skriva sin pokerbotar i ett specifikt programmeringsspråk?

Stdio, komplett matchhistorik och ett "stateless" kommunikations-
protokoll. Pokerbotarna exekveras varje gång det är deras tur,
fattar sina beslut utifrån matchhistoriken som de läser via stdin
och informerar "dealern" genom att skriva till stdout.

Protokollet?

Så här ser ett meddelande ut när en spelare skall agera för första gången i en omgång: HAND:114:sb:3000/3000:10/20:10/20||QsQd||\r\n Så här ser meddelandet ut när handen är färdigspelad: HAND:114|sb:3500/2500:10/20:0/0|cr10r20c/r10r30c/rc/cr50r100c|QsQd/5s2s6h/9c/Ac|Ks2d:+500|\r\n | A | B | C | D | E | Vi bryter ner meddelandet i dess huvudsakliga komponenter för att undersöka protokollet: A = HAND:114|...|\r\n | | | H P L H = handnummer, heltal P = meddelandets parametrar L = <CRLF>, ASCII 13 + ASCII 10 B = sb:3500/2500:10/20:0/0 | | | | P S B R P = denne spelares position, sb eller bb S = spelarnas stackar i ordningen sb/bb B = storleken på blinds i ordningen sb/bb R = minsta antal chips som för call/raise C = cr10r20c/r10r30c/r20r40c/cr50r100c | | | | P F R T P = preflop börjar med sb <-- F = flop börjar med bb R = river börjar med bb T = turn börjar med bb Actions = c [call] r <heltal> [raise] f [fold] a [allin] D = QsQd/5s2s6h/9c/Ac | | | | H F R T H = hole cards, 2st F = flop cards, 3st R = river card, 1st T = turn card, 1st kort = <valör|färg> valör = 2,3,4,5,6,7,8,9,T,J,Q,K,A färg = s,d,h,c E = Ks2d/+500 | | P R P = motståndarens kort, 2st R = result för denna hand i chips, ex -300, +500

Det kanske ser lite komplicerat ut men det är väldigt enkelt och
elegant i praktiken. Utöver HAND behövs det enbart två meddelanden för
att protokollet ska bli komplett, NEWHAND\r\n och ERROR:sträng\r\n.

NEWHAND skickas ut i början av varje omgång för att botar ska få
chansen att återställa sig själva och göra sig redo för en ny hand.

ERROR skickas egentligen enbart ut när något av följande skett:

a) en bot har kraschat eller tagit för lång tid på sig
b) en bot har gjort en felaktig raise

I sådana fall kommer pokerboten att automatiskt förlora handen, potten
överförs till motståndaren och en ny omgång startar. I praktiken
kommer detta att vara otroligt sällsynt eftersom det är nästintill
omöjligt att göra något fel om man man använder sig av informationen som
man får via HAND.

Hur kommunicerar bottarna till "dealern"? Tja, det räcker med att
skriva ett par tecken till stdout, samma actions som i [C], dvs 'c',
'r', 'f' eller 'a'. Det enda dealern gör är att den lägger till
actions på rätt plats i [C], lägger till kort i [D] och presenterar
resultat från showdowns genom att lägga till [E].

Vad tror ni?

Tror inte att det går att göra det enklare än så här. Man borde
nästan kunna skriva en bot som enbart "callar" med mindre än 50
rader kod.

Permalänk
Medlem

Nah, tycker inte riktigt att en så stor ändring i protokollet ska göras, det betyder ju en fullständig omkodning för alla som redan har börjat. Nätverksbiten är ju bara svår i språk som t.ex. C++, så om det är ett problem kanske någon skulle kunna skriva en klass eller något liknande så att man kan koncentrera sig på själva AIn.

Permalänk
Medlem

Håller med You, det finns ju redan nätverkskod för ruby (av you) och c# (av savje) som man kan låna om man inte orkar skriva kod själv, så det känns inte som om det är det som är problemet om folk tycker det är för jobbigt.
Om det finns intresse kan jag bygga ihop en nätverksdel av en bot i haskell oxå, har ju ändå börjat på en bot där, fast inte hunnit så långt iom att intresset verkar lite sviktande o jag haft lite annat för mig. Däremot för att få ihop en AI krävs givetvis att man sätter sig o funderar lite och det behövs nog en del kod även om den inte behöver vara speciellt avancerad om man vill ha en AI som tex har lite kod för att värdera sina kort hyfsat.

Permalänk

Tycker faktiskt inte att argumenten ni presenterar är speciellt övertygande. Skulle det handla om en fullständig omkodning av ens bot så tror jag det är lika bra att man tar sig an utmaningen och tar lärdom av hur man i framtiden bör strukturera sina program.

Om det är fler som redan börjat så får vi väl köra på med det gamla protokollet.

Permalänk
Medlem

Tror precis som delight att det är för svårt. Jag började skissera lite på en bot men kände inte som jag kom någon vart. Vet inte om jag ska ta ett ryck och försöka få ihop någon men känner mig inte överdrivet motiverad (speciellt med tanke på den enorma uppslutningen i tråden).

Sen förstår jag verkligen inte menningen med att skriva ett nytt protokoll (alltså nytt från scratch, omarbetning av det gamla är ju självklart en annan sak). Tror verkligen inte att det är det som "skrämmer bort" potentiella deltagare. StdIO fungerar väl iprincip på liknade sätt som vanlig nätverkskommunikation, bara att det är lite krångel att sätta upp det hela. Som jag skrev i början på tråden, innan detta hade jag iprincip aldrig hållt på med nätverksprogrammering (bortsett från ett chattprogram som jag hade gjort direkt av en guide). Även fast nätverksprogrammering är några steg över 'hello world' så är det inte överdrivet svårt. Jag tror att om man är kapabel att skriva en pokerbot som spelar bättre än bara synar på par och höjer med allt över triss så lär man sig nätverksprogrammering på en eftermiddag (och det måste väl ändå ses som en piss i havet jämfört med förmodade tiden det skulle ta att göra en någolunda sofistikerad bot). Oavsett, precis som vb konstaterar, så om någon skriver ett nätverkskommunikationsskal i de mest populära språken så blir det väl nästan, ur varje aspekt, lättre att köra via nätverk (och man kan väl anta att de flesta som håller sig till exotiska språk också har kollat in nätverksprogrammering).

Som jag påpekade när diskussionen om stdio kom upp förut så medför det självklart att allt måste köras lokalt och det medför en mängd komplikationer. Dels det uppenbara logistiska, program ska skicka fram och tillbaka någon som ska ladda inför varje match osv osv, jag vet inte hur ni andra ställer er till det, men jag skulle inte vilja ta på mig det ansvaret (speciellt inte om det skulle ansluta sig fler till tävlingen). Sen utesluter man ju deltagaren från matchen, man kan ju omöjligt följa sin bot i spelet (även om spelet skulle gå så fort att man omöjligt kunde uppfatta varje moment så kan man ändå följa den med vunna händer eller liknade, plus att det finns möjlighet att lägga in en funktion som spara en logg över spelet så man kan gå tillbaka och studera enskilda händer).

Sen att man ska starta om botarna varje gång låter väl inte speciellt bra, liksom dels kommer den ju då glömma bort hur alla andra botarna spelar (om någon spelar aggressivt osv) men framförallt om man har en bot som lägger upp en taktik inför varje hand (liksom att man ska bluffa eller spela lugnt). Liksom det skulle till stora delar reducera spelet till plain potoddsräkningen och då tycke i alla fall jag att charmen har tagits ur tävlingen men framförallt så är det inte så mycket "AI" som är med i bilden (utan en sannolikhetsräknare)...

Personligen tycker jag att vi byter spel till någon som är lite lättre än det som anses som ett av de svåraste spelen i världen (och från ett datorperspektiv måste ses mycket svårare än till exempel schack). Tycker det skulle vara en bra idé att börja riktigt låg alltså typ luffarschack, fyra i rad eller fångarnas dilemma. Dels skulle det isolera problembilden otroligt mycket, vilket gör att uppgiften inte tycks lika överväldigade, dels skulle det inte skulle kräva den enorma tiden som nuvarande spel skulle. Men den största fördelen med att byta spel är att jag är övertygad att det skulle locka fler deltagare. Sen om det visar sig att det blir alldeles för lätt och några får mer eller mindre perfekta botar, vilket ändå får ses som relativt troligt, så är det ju inget problem att byta spel till något lite mer krävande, men man har då fått flera intresserade och nya deltagare kan börja på den lägre nivån och köra sina botar mot de andras och på så sätt få en bra utvecklingskurva.

Vet inte om din fråga angående hur långt fram i utvecklingen min server/pokerdealer var endast var på retorisk nivå, men den är, vad jag har testa mig fram (har ju ingen fungerade klient än, bara ett skal) iprincip komplett, största bristen är att den inte klarar splitpottar med flera än 2 all-ins (alltså totalt 3 spelare) om inte den som inte är all-in vinner... Sen finns det nog massa oupptäckta buggar... Men vill påpeka att jag inte fäster något affektionsvärde vid den...

Vet inte varför bobby är så angelägen att köra via stdio, men jag tycker det finns en ganska stor enighet att fördelarna med att köra det via nätverket överväger nackdelarna.

Permalänk

Det handlar inte om att jag känner att vi måste använda stdio av vidskeplighet utan snarare att jag inte ser några övertygande argument för varför man medvetet skall göra saker och ting mer komplicerade än vad de behöver vara.

Förstår inte riktigt varför ni låser er på små detaljer utan att se det från ett större perspektiv. Exempel:

Nätverksprotkoll:
Tanke: säkerhet, otroligt svårt att skriva en säker server, med hjälp av stdio kan man köra bidragen lokalt under en masterprocess som chrootar.

Nätverksprogrammering är "lätt":
Tanke: det som kan gå fel kommer att gå fel, timeouts, reconnecta till servern, debugging, hur testar man sin bot, etc

Starta om "bottarna":
Tanke: funktionellt, lagra state via cache filer, den avancerade boten kanske sätter upp en egen daemon

Svårt att skriva "bot":
Tanke: börja enkelt, handevaluerare, potoddsberäknare, frekvensanalys, skrämseltaktiker, kontrollerad "slumpmässighet", cacha data i en enkel databas, etc

Etc..

Hoppades på att jag skulle kunna vara passiv den här gången men det verkar ju inte vara någon annan som är villig att ta på sig ansvaret. Är inte speciellt intresserad av att axla på mig "Linus"-rollen bara för att få igång någonting eller att leka "devils advocate" för att få processen att gå framåt, så jag tackar för mig och ägnar min tid åt andra saker.

Permalänk
Medlem

Oavsett hur du värderar argumenten för respektive mot att köra det via nätverket får du se dig nerröstad och den här 'tävlingen' sker inte på dina villkor. Så om inte du är stor nog att svälja det och inte vill vara med pågrund att du inte får som du vill så är det väl inte så mycket mer man kan göra än att häpnas...

Vidare om du menar "handevaluerare, potoddsberäknare, frekvensanalys, skrämseltaktiker, kontrollerad 'slumpmässighet', cacha data i en enkel databas, etc" som enkelt så har du nog kraftigt missbedömt den allmänne sweclockarens både kunskapsnivå och fritid...

Sen, utan att göra några anspråk på martyrskap, så förstår jag inte vad du menar med att ingen har tagit på sig något ansvar? Efter att du skrivit protokollet så har ju en mängd utveckling skett. Först var det någon som skrev ihop en server i python sen verkade utvecklingen av den stanna upp, var på jag skrev ihop en i C# (då jag inte kan python). Den servern fungerar som sagt inte helt felfritt men fungerar ändå. Vidare har jag satt upp en registeringssidan. Jag ifrågasätter inte din frånvaro under utvecklingen på något sätt, att man prioriterar en tävling på sweclockers ganska lågt är ju förståligt, och bevisligen har många inklusive jag gjort det... Men att säga att det har stått stilla pågrund av att du inte har tagit tag i sakerna är ju uppenbart fel...

Nå, vad säger ni andra, lägga ner tävlingen, byta spel eller köra på med poker? (Ni vet var min röst faller )

Permalänk

Tror du gör bäst i att inte försöka "häpnas" över vad du tror dig kunna utläsa av min person eller mina skäl för att avböja ett fortsatt deltagande. Prova och läs inlägget en gång till: "...inte intresserad av att axla på mig Linus-rollen...".

Vidare tycker att tonen i ditt inlägg är rent ut sagt skamlig. Du försöker få det att låta som att jag försöker förstöra eller misskreditera andras arbetete när det enda jag gjort är att argumentera för realistiska förutsättningar.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av savje
Nå, vad säger ni andra, lägga ner tävlingen, byta spel eller köra på med poker? (Ni vet var min röst faller )

Byta spel till något lätt, tex luffarschack annars dör nog det här ut helt och hållet.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av BobbyFromDallas
Tror du gör bäst i att inte försöka "häpnas" över vad du tror dig kunna utläsa av min person eller mina skäl för att avböja ett fortsatt deltagande. Prova och läs inlägget en gång till: "...inte intresserad av att axla på mig Linus-rollen...".

Vidare tycker att tonen i ditt inlägg är rent ut sagt skamlig. Du försöker få det att låta som att jag försöker förstöra eller misskreditera andras arbetete när det enda jag gjort är att argumentera för realistiska förutsättningar.

Jag utläser inget av din person generellt, det jag häpnades över var din inställning att antingen gör vi på ditt sätt eller så är du inte med i tävlingen. Sedan om du fick uppfattningen att jag försökte insinuerar att du skulle vara en dålig person eller något liknade så är det olyckligt då det inte alls var min intention. Om jag sedan skulle ha missförstått dig, att du inte vidare ställer upp av andra skäl än att din vilja inte blev omfamnad, så ber jag om ursäkt men hoppas du förstår min reaktion utifrån den tolkning jag gjorde.

Vidare har ingen varken lagt eller förväntat sig att du ska ta på dig "linus"-rollen, snarare tycker jag att du försökt ta den själv. Din inställning tycks på något sätt vara att du är oumbärlig för 'tävlingen', något jag inte kan förstå. Självklart en person som har och skulle kunna tillföra mycket, något du visat genom många förslag och protokollet. Men att, som du framställer det, utvecklingen stått stilla under den tid du varit frånvarande är ju uppenbart fel.

Oavsett kommer man till slutsatsen att om du inte vill anpassa dig till vad som har blivit överenskommet och din argumentering för ändring av det överenskomna inte lyckas så är det inte så mycket att göra. Om du inte vill vara med längre är det synd, men ditt val. Dock jag kan inte förstå vad vidare diskussion om detta skulle leda till, så hoppas bara att du ändrar dig och fortsätter i tävlingen...

Åter till det väsentliga; Jag röstar för att vi startar en ny tråd och försöker komma fram till ett bra och lätt första spel. Tar Bobby's protokoll som inspiration till nästa, och slänger upp en server och några klient-skal i de vanligaste språken. Är både lite sjuk och har ledigt i helgen så har lite tid över...

p.s. Huruvida min ton i mina inlägg är allt för hetsig eller "skamlig" är något som jag lämnar till andra läsare och moderatorerna att bedöma. Jag skulle omöjligt kunna vara objektiv, likväl som jag omöjligt skulle kunna vara objektiv i bedömning av dina inlägg. Om du blir illa till mods av min argumentering så är det (som jag tidigare sa) både olyckligt och mot min intention, men jag försöker till största mån sträva bort från personargument och andra irrelevant saker. Om något tycker att jag har misslyckats med detta så får de gärna påpeka det, förslagsvis via ett PM så inte tråden går längre ifrån vad det handlar om än vad den redan har gjort. d.s.

Permalänk

Nu är jag inte så bra på att programera men jag tänkte schak (eller hur det stavas) kanske hade varit ett bra spel inte för svårt osv

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av SweetKelly
Nu är jag inte så bra på att programera men jag tänkte schak (eller hur det stavas) kanske hade varit ett bra spel inte för svårt osv

Gör en bra schackdator du. Kräver nog en hel del för att få den bra.

Visa signatur

Sverige är ett så litet land att det bara får plats en åsikt i taget där.