Permalänk
Medlem

Programmeringstävling #2

Edit: OBS! Registering för tilldelning av id# sker här http://www.poker-solitaire.com/bottav/botregistering.php
Edit2: Protokollet till tävlingen hittar ni här http://www.poker-solitaire.com/bottav/protocol001.txt
-------------------------------------------------------------------------------

Efter ett ganska misslyckat första försök går vi snabbt in på det andra

Tävlingen kommer i korta drag gå ut på att varje deltagare programmerar en bot som spelar ett spel. Man kopplar upp botar mot varandra och ser vem som vinner.

Från förra försöket tog vi med oss en hel del:
- Inte börja med för svårt spel!
Förra gången föll röstningen på poker, närmare bestämt texas hold'em, de flesta som började programmera sin bot insåg dock att det var för svårt. Var på många hoppade av tävlingen.

- Nätverksprogrammering is the way to go.
Det var en lång diskussion hur man ska lösa kommunikationen mellan botarna och de två förslaget var att köra de via nätverk och köra lokalt via stdio. Som sagt kom vi fram till att nätverksprogrammering är det bästa. (Om någon tycker stdio skulle vara bättre, läs gärna igenom diskussionen i förra tråden innan du postar här).

Det vi behöver nu är förslag på bra spel man kan tävla i. Kom ihåg att det ska vara lätt (gärna löjligt lätt), detta ska i första hand ses som en provomgång... När vi upptäcker att det blir för lätt kan vi byta till ett svårare spel!

För att få lite tempo i tävlingen tänkte jag att onsdagkväll är en bra deadline för förslag angående vilket spel. Sen kan vi skriva ihop ett protokoll, server och skal-klienter (alltså klienter som bara innehåller själva nätverksbiten för alla programmerare som inte känner att de klara det själva) ganska snabbt efter det.

Gamla tråden (försök #1) hittar ni här: http://www.sweclockers.com/forum/showthread.php?s=&threadid=6...

Några förslag av spel:
- Luffarschack
- Fyra i rad
- Finns i sjön
- Fia med knuff

Permalänk

Spel som använder något slumpat tycker jag helt går bort.

Permalänk
Medlem

Kalaha skulle kunna vara ett kul spel att testa...
hela spelplanen ryms i en array och det är ju en bonus

dock så har jag bara kodat c++ i 2 veckor och php i 2 månader så jag kan nog inte vara med, men lycka till

Edit:

Spelplanen

utgångsläge: spelplan[14]{0,6,6,6,6,6,6,0,6,6,6,6,6,6}

spelplan[0] är spelare etts "bo" och spelplan[7] är spelare tvås

Visa signatur

E6300 | Thermalright Ultra-120 eXtreme + Noctua 120mm 1200rpm | Gigabyte GA-965P-DS3 | 3GB Corsair XMS2-6400 CL5

Permalänk
Medlem

Sokoban, enkelt att koda och väldigt enkelt att komma på lösningar.
http://en.wikipedia.org/wiki/Sokoban

Kräver ett trivialt protokoll, servern skickar ut banor som ascii strängar och klienterna skickar in svaren som ascii strängar.

Bedömingen kan ta hänsyn till antal steg, hur många gånger man flyttat ett block, och hur lång tid det tog att få svaret.

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Medlem

argh, jag som ville se en kitten cannon-bot
http://www.addictinggames.com/kittencannon.html
lite slumpat bara...

det där sokoban verkar trevligt

Permalänk
Medlem

Sokoban låter kul... Men tycker inte att det är ultimat som första spel, av två anledningar. Dels tror jag det är lite för svårt men framförallt tycker jag det faller på att det är ett spel med endast en spelare, jag skulle tycka att det skulle vara roligare om man spelade mot andra (alltså direkt, inte bara jämförde resultat)...

Kalaha kan nog vara väldigt bra!

Permalänk
Medlem

Min röst ligger i så fall på Kalaha

Permalänk
Medlem

Othello fungerar med

Permalänk
Medlem

Vad sägs om Sänka skepp? Personligen föredrar jag lite mer "verklighetsförankrade" spel av någon anledning, skulle gärna se ett enkelt turnbaserat spel med t.ex. två tanks som åker omkring och ska försöka skjuta varandra. Fast det blir ju helt klart mer avancerat än t.ex. fyra i rad eller sänka skepp, så man kan ju börja med nån av dom. Och jag har nog ändå inte tid att ställa upp tror jag.

Visa signatur

Min hemsida: http://www.srekel.net
Pocket Task Force: http://ptf.srekel.net
Kaka e gott! http://kaka.srekel.net

Permalänk
Medlem

Sänka skepp skulle vara trevligt, för då kan jag återanvända lite lispkod från ett skolprojekt.

Permalänk
Medlem

jag har gjort en kalahabot som iaf ingen människa lär kunna vinna över.

Rätt kul grej att spela mot faktiskt.... först kan man tro att man har ledningen... Man kan krossa den typ under hela första spelhalvan... Sen har botten typ bara guldkorn kvar och får så att det går jämnt ut och det blir dens tur igen.. och igen och igen och igen, sen får man inte spela nåt mer och förlorar ungefär så stort som det går att förlora.

Vet inte om jag har nån spelbar version av det om nån vill se sen.. kanske kan gräva lite och se... Men jag kommer inte göra nån remake för det här... Har inte tid tyvärr.

(kan säga att alla som lästa AI på playgroundsquad under iaf mitt år fick göra en sån bot)

Permalänk
Hedersmedlem

luffarschack går ju bort direkt eftersom det finns en trivial strategi som gör att man vinner bara man får göra första markeringen.

Sänka skepp minns jag inte riktigt hur det gick till (:p) men det man fick väl placera ut sina skepp helt frivilligt? Isf så är det ju ingen slumpfaktor i det.
Jag tycker det låter som en trevlig tävling.
Dessutom har jag skrivit sista tentan på torsdag eftermiddag så jag kan få göra lite rolig programmering

Visa signatur

Forumregler | Feedbackforumet | Något som behöver modereras? Tryck på Anmäl inlägget och ge en anledning, någon moderator kommer granska inlägget och göra (egen) bedömning
"Fate. Protects fools, little children and ships named Enterprise." - Riker - ST:TNG

Permalänk
Medlem

Sänka skepp vore kul att försöka sig på. Lätta regler

Visa signatur

Fotograf med eget företag och grymt teknikintresserad.
www.kimsanfridsson.com

Permalänk
Testpilot

Sänka skepp skulle nog även jag klara av att koda en bot till, verkar som ett bra val tycker jag
Det enda man behöver komma överens om är antal skepp och hur stora dom är, vad jag vet finns det ingen standard för det.

Edit: Eller det kanske det fanns: http://en.wikipedia.org/wiki/Battleship_%28game%29

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Medlem

rävspelet?

Permalänk

Jag röstar för sänka skepp. Skulle vara kul att göra så att botten kunde lista ut motståndarens taktik

Permalänk
Medlem

Rimion: Med rävspel antar jag att du menar detta http://susning.nu/R%E4vspel och inte kortspelet svälta räv , om det är rävspelet så bra förslag!

Förstår inte problemmet med att ha slump inblandat, eftersom det är botar kan man ju köra typ tusen matcher och på det sättet jämna ut slumpen.

Har likt förra försöket skrivit (eller rättare sagt tagit den förra) ihop en liten registeringssida där man kan "anmäla" sig till tävlingen... Det är mer för att man ska bli tilldelad ett id# som används i kommunikationen. Ni hittar den här: http://www.poker-solitaire.com/bottav/botregistering.php
Även om ni är osäkra om ni kommer genomföra tävlingen kan ni ju anmäla er ändå...

Sen angående röstningen av vilket spel, tror jag det finns en risk att väldigt många som skulle tycka det var ballt att tävlingen rörde ett visst spel men inte hade någon tanke på att ställa upp (är väl inte jätte välgrundat men man kan se den tendensen i förra tråden) därför föreslår jag att röstningen sker genom att man skriver vilket spel man föredrar i beskrivningsrutan för sin bot på "anmälnings"-sidan... sen, förslagsvis på torsdagskväll, sammanställs röstningen... Eller är det en dålig idé...?

Permalänk
Medlem

Sänka skepp tror jag är lagom svårighetsgrad på men det kan bli lite tråkigt eftersom det knappast kräver någon direkt kommunikation mellan botarna, räcker med att man matar in spelplanen till boten en gång så kan den lösa den på egen hand(om man bortser från att folk kan göra fuskbotar).
Dvs det krävs inget svar eller motattack/drag från den andra botten för att spelet ska kunna "fungera".

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Chimaira
Sänka skepp tror jag är lagom svårighetsgrad på men det kan bli lite tråkigt eftersom det knappast kräver någon direkt kommunikation mellan botarna, räcker med att man matar in spelplanen till boten en gång så kan den lösa den på egen hand(om man bortser från att folk kan göra fuskbotar).
Dvs det krävs inget svar eller motattack/drag från den andra botten för att spelet ska kunna "fungera".

Bra poäng! Tycker att Kalaha verkar roligare

Skrivit ihop en lite kalahabot enligt dessa regler. Kan ju bara säga att man får ganska rådask av den. Normal spelomgång är typ 16-56 eller i den storleksordningen och då använder jag ändå bara AI med djupsökning utan någon framtidstaktik eller ens beaktan av framtida lägen (varken för motståndaren eller boten själv)...

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Chimaira
Sänka skepp tror jag är lagom svårighetsgrad på men det kan bli lite tråkigt eftersom det knappast kräver någon direkt kommunikation mellan botarna, räcker med att man matar in spelplanen till boten en gång så kan den lösa den på egen hand(om man bortser från att folk kan göra fuskbotar).
Dvs det krävs inget svar eller motattack/drag från den andra botten för att spelet ska kunna "fungera".

Men det där är väl inte som sänka skepp fungerar?

Som jag tror det ska fungera så initerar botarna (klienterna) till servern med var de vill placera ut sina skepp. Sen skickar ena boten sina fem drag (om vi börjar med fem skepp) till servern och den ger det till motståndarboten som ser var man försöker skjuta osv. Så går spelet frammåt och tillbaka på detta sätt.
Servern är väl bara inblandad som "domare" så det inte fuskas.

Visa signatur

Forumregler | Feedbackforumet | Något som behöver modereras? Tryck på Anmäl inlägget och ge en anledning, någon moderator kommer granska inlägget och göra (egen) bedömning
"Fate. Protects fools, little children and ships named Enterprise." - Riker - ST:TNG

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Aqualize
Men det där är väl inte som sänka skepp fungerar?

Som jag tror det ska fungera så initerar botarna (klienterna) till servern med var de vill placera ut sina skepp. Sen skickar ena boten sina fem drag (om vi börjar med fem skepp) till servern och den ger det till motståndarboten som ser var man försöker skjuta osv. Så går spelet frammåt och tillbaka på detta sätt.
Servern är väl bara inblandad som "domare" så det inte fuskas.

Hmm, läste inte Chimairas inlägg allt för noga, blir lite osäker på vad han egentligen menade nu när jag läste om det...

Det jag trodde han menade (och som jag sa "Bra poäng!" till) var att intraktionen mellan botarna är väldigt knapp... Att de turas om är ju mer ett nödvändigt ont (för spelglädjen) när människor spelar det. Oavsett implementering så kommer de vara ekvivlanenta med en lösning där varje bot i början skickar in placeringen av sina båtar, sedan inleder gissningsfasen helt frånskillt den andra boten mot servern och sen jämför servern vem som hade lägst antal gissningar (detta förutsatt att man inte ändrar på reglerna, men kan inte komma på någon bra lösning för att lösa problemmet... möjligen att man får flytta båtarna men det känns som det tar grejen ur spelet). Det finns ju bot-intraktion men den är ju endast begränsat till utsättningen av båtarna (självklart kan man öka den genom att spela flera matcher i rad och försöka hitta mönster i hur den andra bot sätter ut sina båtar).

Sen finns det några andra nackdelar som inte direkt är revelanta just nu, då detta är en provomgång. Men den bästa utsättningen av båtarna är väl den som är helt slumpmässig, vilket inte kan ses som positivt då det är en bot och inte slumpgenerator vi ska göra . Vidare (dels pågrund av att bästa utsättningen är slumpmässig) så är bästa gissningarna de som följer ett visst sökmönster, vilket inte är så svår att komma fram till vilket (typ börjar på var 10:e ruda, sedan var 8:e osv ner till varannan... (man behöver ju aldrig söka av mer än varannan). Detta leder ju till att utgången av en match kommer vara helt slumpmässig, även om man har programmerat en relativt simpel 'bot'. (Dessa problem kan man ju säkert (delvis) lösa med att variera stora delar av spelet, typ storleken på planen, antal båtar, att man får flytta om båtarna osv, men då går man nog ifrån lätthetskravet).

Men som sagt det är en provomgång så val av spel är inte så jätte viktigt, huvudsaken är att det är lätt så vi kommer igång. Även om det kanske låter som jag totalsågar Sänka Skepp så är det ett ganska bra förslag även om jag tycker det finns många andra som är bättre.

p.s. Har fortsatt på min kalaha-bot... det är otroligt kul... Just nu värderar den även de chanser den ger motståndare genom sitt drag. Detta har gjort att den är mycket mer försiktig i sitt spel. Jag antar att den vinner oftare men den vinner inte alls lika stort, ska nog försöka lägga in någon en funktion så den väljer när den ska vara försiktig och när den ska köra på (t.ex. mot den sämre spelare är det bättre att köra på, antagligen desamma om boten är i underläge). Jag ska försöka göra så att den hittar mönster i hur motspelaren spelar och värdera in det i sin utvärdering av dragen (har en ganska otymplig idé hur man skulle kunna lösa det). Vidare har jag testa lite med att boten ska varierar sitt spel, t.ex. välja alternativa drag även om de är marginellt sämre för att förvilla en duktig motbot (antagligen kommer denna funktion endast användas när den känner att det finns behov för det). Känns verkligen som man skulle kunna utveckla detta i oändligheten samtidigt som det är ganska lätt att få en bot som spelar ganska bra (propaganda-varning ) d.s.

Permalänk
Hedersmedlem

savje, läs reglerna för sänka skepp på wikipedia
Alltså som de visar där så har man 5 "skott" från början (lika som antalet båtar) som man skjuter. Då ska motspelaren rapportera tillbaka om det blev träff eller miss (vilket servern håller reda på så det inte fuskas). Sen när något av ens skepp är förstört så har man fyra kvar och får bara skjuta 4 skott.
Så man får ju feedback på om man träffar eller inte. Så jag tycker det inte är ekvivalent med att skicka in allt och servern jämför vem som klarade sig snabbast. Men som du skrev så är det ju mycket slumpen i detta spel, och strategin för att placera ut båtar är enkel.

Men jag börjar gilla förslaget med kalaha mer och mer. Där är det ju ingen slump om jag minns rätt. Jag körde det när jag var liten, bara några gånger. Så jag kanske var lite motsträvig eftersom jag inte är bra på det, men jag får väl ta chansen att lära mig.
Det som lockar är ju att det är så "enkelt" att tänka ut heuristiska algoritmer etc. Antar jag. Tänk schack eller något sådant, där är det ju mycket klurigare med alla typer av drag etc.
Kalaha ställer jag mig bakom.

Dessutom har jag nyss (hoppas jag) avslutat en AI kurs så att leka med sådant här (stod ju att kalaha var populärt inom AI på labbsidan du länkade till) blir bara roligt.

Edit:
Hur många stenar ska vi köra med?
För är det för få så kan man ju göra en fullständig sökning (som det uppmanades i deluppgift B). Om det är för "grunt" så kommer ju någon klara av det med sitt program och vinna, alltid (tror jag), då den har den optimala strategin. Så helst djupt nog så det inte är rimligt att låta datorn söka alla möjliga lösningar.

Visa signatur

Forumregler | Feedbackforumet | Något som behöver modereras? Tryck på Anmäl inlägget och ge en anledning, någon moderator kommer granska inlägget och göra (egen) bedömning
"Fate. Protects fools, little children and ships named Enterprise." - Riker - ST:TNG

Permalänk
Medlem

Oh, sorry... antog att de var de "vanliga" reglerna (dvs. de jag har spelat med ) som stod på Wikipedia, har aldrig stött på dessa regler tidigare, men som sagt ledsen att jag inte kollade upp det... Även fast det lägger till en dimension till spelet (och gör att det inte blir helt ekvivalent med den lösningen jag förklarade) så tycker jag att min kritik kvarstår (omän försvagad): intraktionen är för låg (och det blir för mycket slump). (Sen kan man ifrågasätta själva regeln i sig då det den gör är att det går sämre för den som det redan går dåligt för, alltså blir inledningsskedet i spelet mer avgörande. Detta leder till att antalet (avgörande/betydande) drag minskar vilket ökar slumpenfaktorn...)

Kalaha har mycket riktigt ingen slump (mer än vem som börjar). Att du inte kan kalaha är nog inget problem, tar nån minut och lära sig. Jag tror inte heller att man har så stort övertag om man är kalaha-proffs (vilket får ses som en ganska stor fördel).

Varför inte bara köra på 6-stenars kalaha? Borde väl vara tillräckligt för att man inte ska söka genom alla. Funderade lite på om man kanske skulle köra 7-stenars för att minska fördelen med att börja men vet inte hur stor fördelen egentligen är...

Sen måste jag fråga några grejer angående uppgifterna på sidan jag länkade (du/ni får ursäkta om de är dumma frågor, har inte läst något AI kurs själv, inte någon programmeringskurs alls för den delen...) men den optimala lösningen/draget måste väl ändå bero på vad motspelaren väljer för drag? Alltså man kan ju se vad det optimala draget är om man möter en motspelare som spelar optimalt... men frågan om den optimale spelare kommer spela optimalt om den möter en motspelare som inte spelar optimalt, och om inte spelar då den optimale spelaren verkligen optimalt? (Jag skiljer här mellan en spelare som alltid vinner och en som spelar optimalt, jämför med ett dagisbarn som alltid vinner över sina kompisar på dagiset, han spelar ju knappast optimalt även om han alltid vinner). Slutsatsen blir väl att den optimale spelare bara kan spela optimalt om den vet hur motspelaren kommer spela, eftersom motspelaren antagligen inte avslöjar detta blir väl det ett spelmoment i sig. Alltså inkorporeras klassiska spelteoriska problem, t.ex. att den 'matematiskt' optimala draget inte är optimalt då den andres föregående drag är baserat på tron att mitt nästkommande drag kommer vara just det. Men som sagt kanske fått allt om bakfoten...

Men fler spel-förslag är välkomna! Ingen röstning har skett än...

Permalänk

Vet inte vad spelet heter, men det spelet där det ligger X antal kulor i EN skål, sedan får man ta 1 - 3 kulor, och den botten som tar sista kulan torskar. Fast det kanske är som kalaha? Har inte spelat kalaha sedan dagis

Permalänk
Hedersmedlem

savje du ger mig huvudvärk.
Men om vi ser det som ett min-max så borde väl den optimala spelaren alltid spela optimalt (om värderingsalgoritmen är den bästa), gör motståndaren "misstag" (icke optimal) så piskar väl den optimala upp den ännu enklare bara.

Citat:

Ursprungligen inskrivet av FetJonthe
Vet inte vad spelet heter, men det spelet där det ligger X antal kulor i EN skål, sedan får man ta 1 - 3 kulor, och den botten som tar sista kulan torskar. Fast det kanske är som kalaha? Har inte spelat kalaha sedan dagis

Nej det är inte kalaha.
Jag vill inte vara elak men jag tror det inte är något bra spel.
Nu har jag inte tänkt igenom det riktigt men om man gör ett min-max problem av det så lär väl det (med inte för många kulor) skapa en optimal strategi och så vinner alltid den som börjar (om båda spelar "optimalt").

Visa signatur

Forumregler | Feedbackforumet | Något som behöver modereras? Tryck på Anmäl inlägget och ge en anledning, någon moderator kommer granska inlägget och göra (egen) bedömning
"Fate. Protects fools, little children and ships named Enterprise." - Riker - ST:TNG

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av FetJonthe
Vet inte vad spelet heter, men det spelet där det ligger X antal kulor i EN skål, sedan får man ta 1 - 3 kulor, och den botten som tar sista kulan torskar. Fast det kanske är som kalaha? Har inte spelat kalaha sedan dagis

Som Aqualize skriver så är det ett ganska dåligt spel till den här tävlingen. Eftersom du kan välja 1-3 kulor och den som tar den sista förlorar är det bara att se till att du tar kula nummer 2 från slutet. För att se till så du med säkerhet tar den kulan är det bara att räkna baklänges med 4 steg. Tar du kula nummer 2+4=6, 6+4=10 osv styr du spelat och kan inte förlora.

Tror att kalaha är ganska bra till den här tävlingen.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Aqualize
savje du ger mig huvudvärk.
Men om vi ser det som ett min-max så borde väl den optimala spelaren alltid spela optimalt (om värderingsalgoritmen är den bästa), gör motståndaren "misstag" (icke optimal) så piskar väl den optimala upp den ännu enklare bara.

Ja antagligen är det så att gå ifrån den mest optimala draget uträknat analytiskt inte ger någon större fördelen (i alla fall inte om man bara spelar en omgång)... Men för att belysa det jag menade så har jag ett exempel :)... Tänk ett spel med tre lådor med ett, två respektive tre tusen kronor i dem. Nu har de varit så snälla att de har skrivit vad som finns i lådorna på dem. Spelet har två spelare, du får helt fritt välja vilken låda du vill ta och får pengarna i den, dock får motståndaren innan du väljer utan att du ser (men du vet att han har gjort det) tömma en låda så den är tom. (det är motståndarens pengar som ligger i lådorna)

Här är det ju tillsynes så att vi borde ta tretusen kronors lådan, dock har ju antagligen motståndaren tömt just den lådan. Alltså kanske tvåtusen kronors lådan är den man ska köra på, men om motståndaren tänker "aha' han kommer tro att jag tömmer tretusen kronoren, och kommer då välja tvåtusenaren alltså tömmer jag den" osv. Även om det finns en ganska enkel optimal matematiskt strategi.

Om man bara spelar en runda skulle jag hävda att slumpfaktorn blir så stor att det är mest rationellt att typ 60% av gångerna ta trean och resten tvåan. Men om man spelar över flera omgångar så kommer man ju börja kunna uttyda mönster i hur den andre spelar, och genom det anpassa sitt spel. Alltså blir optimala strategin beroende på hur den andre spelar. Som sagt blir det nog inte lika stor effekt i kalaha så det inte blir lika relevant (eller kanske inte fungerar alls med tanke på att det är ett spel med fullständig information, men å andra sidan kan man se liknade situationer i schack...).

p.s. Hur ska röstningen se ut? ska vi köra på mitt förslag att alla som är registerade får en röst via den sidan? i så fall, börja registera er d.s.

Permalänk
Medlem

Låter bra.

Permalänk
Medlem

Vore det inte en rolig grej att göra hockey fotboll eller något. Sen så skriver spelmotor+ev.grafik osv, och så får de tävlande skriva ai plugin för lagen

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Torandi
Vore det inte en rolig grej att göra hockey fotboll eller något. Sen så skriver spelmotor+ev.grafik osv, och så får de tävlande skriva ai plugin för lagen

Jo låter bra, dock tror jag det blir för svårt, dels själva AIn men också spelmotorn...

Verkar vara två spel-kandidater som har chans... Sänka Skepp och Kalaha... Röstningen sammanställs som sagt i morgon kväll

Edit: Glöm inte att registera er och skriva in eran röst... Antingen där eller här i tråden (men endast registerade som är röstberättigade)...

vb: vad är det du har 'röstat' på? "\x -> y"?