Permalänk
Medlem
Citat:

Ursprungligen inskrivet av savje
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"?

Får se om jag orkar, kanske fixar någon sånt någon dag.... Kanske..

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

KTH har haft tävlingar i hockey några gånger. Deras motor finns att ladda ner och det är ganska enkelt att skriva ai till ett lag.

http://www.csc.kth.se/contest/2004-02/NHL/software/download.h...

Permalänk
Medlem

Ser inte ut som det blir några fler som röstar, tar mig därför friheten att räkna ihop rösterna:

1. Asimov (savje) - Kalaha 7. Boten (ChristofferC) - Sänka Skepp 8. La Bot (Cirux) - Sänka Skepp 9. TOb (wpr21) - Blank 10. Youbot (You) - Kalaha 11. hbot (vb) - \x -> y (?) 12. dumbo (Aqualize) - Kalaha ----------------------------------------------- Kalaha - 3 röster Sänka Skepp - 2 röster \x -> y - 1 röst Blanka röster - 1

Med andra ord vann kalaha röstningen och kommer bli spelet som spelas. Jag smygstartade lite på kalaha protokollet, ni hittar det här http://www.poker-solitaire.com/bottav/protocol001.txt. Så nu är det bara att börja! Ska försöka skriva ihop ett förslag till server och C# skal-klient så snabbt som möjligt. Självklart är det inte försent att hoppa på tävlingen, men man kan då självklart inte påverka vilket spel som ska spelas i denna omgång.

Permalänk

Kalaha låter kul, bra initiativ!

Permalänk
Testpilot

Hittade aldrig hur man röstade, skulle ha röstat på sänka skepp om jag kunde
Spelar ingen roll egentligen, ska se om jag kan skriva ihop något.

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
Hedersmedlem

Och när protokollet görs så ska vi väl enas om exakta reglerna (fanns ju lite variationer på spelet har jag sett).
Jag gör ett första test i C# (om det inte gör något så får du gärna skriva kod som funkar i dotnet 2.0) så slipper jag leka med nätverksbiten.
Kom på en sak, får man ställe upp med flera botar? Funderade (obs fundera alltså, kommer säkert inte bli något av) att ge mig på OCaml och fixa en bot i det med.

edit: Eller så kan man ta och läsa igenom prokollet och se massa text där om regler

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
Och när protokollet görs så ska vi väl enas om exakta reglerna (fanns ju lite variationer på spelet har jag sett).
Jag gör ett första test i C# (om det inte gör något så får du gärna skriva kod som funkar i dotnet 2.0) så slipper jag leka med nätverksbiten.
Kom på en sak, får man ställe upp med flera botar? Funderade (obs fundera alltså, kommer säkert inte bli något av) att ge mig på OCaml och fixa en bot i det med.

edit: Eller så kan man ta och läsa igenom prokollet och se massa text där om regler

Tog dom reglerna jag uppfattade som mest vedertagna, men inget är skrivet i sten så klart om någon skulle vilja göra en ändring

Jupp skriver i .NET 2.0.

Personligen ser jag inget problem med att ställa upp med flera botar, dock kan man begränsa det lite genom att säga att man endast får ställa upp med fler botar om dom är skrivna i olika språk och helst spelar på olika sätt... Men men vad tycker ni andra?

hunden: Tyvärr är det försent nu, deadlinen är som sagt redan passerad. Synd att du inte sa till tidigare så skulle någon kunna berätta hur man röstade. Hoppas du är med i tävlingen ändå.

Är typ halvvägs klar med servern nu, med lite tur kommer en första version ut i natt

Permalänk
Hedersmedlem

Satt och skrev på en bot igår. Usch, agget mot procedurell programmering bara växer.

Hur går det för savje?

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

Jo då, det går bra... Servern och skal-klienten blev jag klar med i natt, dock finns en ganska stor bugg i servern som jag inte har lyckats lösa än (den tar av någon mysterium inte emot pongar från klienter som den har skickat ping till två gånger i rad :/). Sen vet jag inte hur det funkar om man kör fler bord samtidigt, men känns som ett framtida problem... Men ska se till att fixa buggen...

Permalänk
Medlem

Du skulle inte vilja slänga upp server någonstans sen så att man kanske kan testa något simpelt? Har slängt ihop själva protokollet så man kan skicka kommandon och "logga in" osv. Men är inte helt säker på hur vissa saker funkar.

// kevin

Visa signatur

Mycket mumbo-jumbo nu känner jag.

Permalänk
Medlem

Har tyvärr inte möjlighet att sätta upp en server, plus att som den är utformad just nu så måste man starta servern manuellt... men när server är tillräckligt buggfri (har lokaliserat buggen nu) så slänger jag upp den så ni kan kölra servern själva... (och ansluta lokalt via ip 127.0.0.1)

Edit: Sååå! Äntligen klart! Servern funkar som den ska (även om den stannar upp en kort stund ibland, ingen anning om varför... men det märks knappt). Och ett klient-skal finns redo och bör fungera utan problem. Jag har försökt göra så bra buggtestning som möjligt men som alltid kan man inte vara säker...

Ni hittar grejerna här: http://www.poker-solitaire.com/bottav/Kalaha.zip

I filen finns dels källkoden till servern och skal klienten, dels den byggda servern ("BotServer"), en mycket simpel färdig bot som ni kan köra mot er egna ("ExempelBot") och ett program så man kan spela själv via servern ("Manuell Klient"). ExempelBot och Manuell Klient slumpar fram sitt id så ni kan starta fler och koppla upp samtidigt mot servern. Manuell Klient fungerar så att ni skriver in nummret som finns under brädet när det skrivs ut (kolla på pilen för att se vilka ambor som är era och kom ihåg att spelet går moturs!).

Servern är mycket lättskött, vänta till alla som ska ansluta har anslutit och loggat in, sen skriver du "start" och trycker på enter. Servern startar då spelet och sätter varje klient med en annan klient (dock om det är ojämt antal klienter får en slumpvald inte spela) och låter dom spela 20 spel mot varandra. Orkar inte förklara källkoden till servern men om det är någon som vill pilla och undrar något är det bara och fråga.

Skal-klienten är inte speciellt krånglig. Det man som AI-programmerare ska koncentrera sig på är "Game" klassen. Där finns en mängd funktioner som körs när servern skickar vissa meddelanden. Av dessa funktioner är nog "RequestMove" den viktigaste, den ger nämligen vilket drag man gör... Man kan skriva en bot endast genom att ändra den funktionen (se nedan). Men det mesta står kommenterat i källkoden för Game-klassen. Vidare är det viktigt att du skriver in din bots namn och id. Detta gör du i "Controller" klassen, ändra (högst upp) [botId] till din bots id# och [botName] till din bots namn. Vidare finns en mängd paramentrar (i form av bool variablar, [writeBoard], [showServerMessages] osv.) angående vad boten ska skriva ut för meddelanden, står kommenterat vad varje paramenter styr... Utöver det så ska man nog inte pilla runt i Controller-klassen om man inte vet vad man håller på med :).

Som sagt kan man skriva en bot endast genom att ändra på "RequestMove" funktionen, här följer två exempel.

Första exemplet är en otroligt simpel bot (precis den som finns i huvudmappen som "ExempelBot"):

public int RequestMove(bool lastWasInvalid) { int bestMove = -1; int bestValue = 0; for (int n = this.myPosition * 7; n < 6 + this.myPosition * 7; n++) { if (bestValue < this.board[n]) { bestMove = n; bestValue = this.board[n]; } } return bestMove; }

Andra exemplet förvandlar programmet till ett program som gör att användaren kan spela (precis den som finns i huvudmappen som "Manuell Klient"), kan vara en bra idé att sätta [writeBoard] (i Controller-klassen) till true i detta fall:

public int RequestMove(bool lastWasInvalid) { Console.Write("Please make move: "); int move = Convert.ToInt32(Console.ReadLine()); if (this.myPosition == 0) { return (move - 1); } else { return 13 - move; } }

Så tror det ska vara allt, hoppas det funkar... om det inte gör det, säg till

Permalänk
Hedersmedlem

Tackar för koden
Jag blev så himla trött på att försöka få något vettigt i C#. Så istället började jag titta runt på OCaml. Sen kom jag ju på... F# !
Så det blir väl AI:n i F# och så ska det länkas ihop med C# skalet. Blir att lära sig lite grejor.

Edit: Jag fick bygga om servern. På min dator så fick den IP:et 0.0.0.0
Alltså den här raden i koden.

this.serverIp = IPAddress.Parse("127.0.0.1"); //IPAddress.Any;

så gjorde jag.
IPAddress.Any verkar lite farlig, den fullt fungerande nätverksanslutningen är den enda av alla som är "aktiverad".

bte 51 mot 21 till mig mot exempelboten weehoo. Tog ett tag först innan man förstod vem som var vem etc.

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

Oj, F# hade jag aldrig hört talas om... Snart klar med första versionen av min egna bot... Lägger kanske upp den för allmän beundran ( ) snart

Permalänk
Hedersmedlem

Nej jag vill inte se din kod Då kommer jag bara snegla på den.
Men är det boten som du skrev förut som bara använde djupsökning? Eller lagt till mer saker?

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
Nej jag vill inte se din kod Då kommer jag bara snegla på den.
Men är det boten som du skrev förut som bara använde djupsökning? Eller lagt till mer saker?

Nej nej, klart jag inte lägger upp koden till min bot (skulle ju nästan vara fusk), menade att jag lägger upp min bot kompilerad (ni får beundra den genom att den krossar era )... Är väl iprincip djupsökning men med några små extra finesser... ni hittar första versionen här http://www.poker-solitaire.com/bottav/Asimov.zip

Är lite sugen på att göra en bot framtagen med någon typ av genetisk algoritm måste klura lite hur man kan lösa det..

Permalänk
Medlem

Själv lyckades jag inte ens logga in då min längangivelse antagligen är helt buggad ;S Nån som vet exakt hur det ska vara?

String s = Integer.toHexString( 0x100 | (0x0ff & length) ).substring(1);

Verkar inte funka så bra för jag får Error 103 InvalidFormatting.

MVH
// Kevin

Visa signatur

Mycket mumbo-jumbo nu känner jag.

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av savje
Nej nej, klart jag inte lägger upp koden till min bot (skulle ju nästan vara fusk), menade att jag lägger upp min bot kompilerad (ni får beundra den genom att den krossar era )... Är väl iprincip djupsökning men med några små extra finesser... ni hittar första versionen här http://www.poker-solitaire.com/bottav/Asimov.zip

Är lite sugen på att göra en bot framtagen med någon typ av genetisk algoritm måste klura lite hur man kan lösa det..

Jag skyller på att jag behövde sova. Det slog mig aldrig att du skulle kunna lägga upp den kompilerad... Nattintelligensen vet du

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 The-k0rf
Själv lyckades jag inte ens logga in då min längangivelse antagligen är helt buggad ;S Nån som vet exakt hur det ska vara?

String s = Integer.toHexString( 0x100 | (0x0ff & length) ).substring(1);

Verkar inte funka så bra för jag får Error 103 InvalidFormatting.

MVH
// Kevin

Antar att du skriver i java. Tyvärr kan jag ingen java, men alltså checkbyten är en byte i början av ett meddelande, dvs. ett tecken om man skulle läsa det som ASCII. Så i C skulle koden som tar fram checkbyten se ut så här:

char getCheckByte(char* message) { int length; for(length = 0; message[length]!= '\\0'; length++) { } return (char)length; }

Där [message] är en \0 terminerad char-array

Edit: Vet inte om det hjälper, men så här löste jag det i klienten jag skrev. C# är ju ganska likt Java..:

string messageToSend = "BLABLA:blabla:blabla\r\n"; //Meddelandet som ska skickas byte[] bufferMessage = Encoding.ASCII.GetBytes(messageToSend); //Konvertera det till bytes byte[] buffer = new byte[1]; //Skapar checkByten buffer = BitConverter.GetBytes(bufferMessage.Length); //Sätter checkByten till rätt värde this.networkStream.Write(buffer, 0, 1); //Skriver checkByten till nätverksströmmen this.networkStream.Write(bufferMessage, 0, bufferMessage.Length); //Skriver meddelandet this.networkStream.Flush(); //Flushar meddelandet till servern

Men borde gå lika bra med:

string messageToSend = "BLABLA:blabla:blabla\r\n"; string outString = Convert.ToString(Convert.ToChar(messageToSend.Length)); outString += messageToSend; byte[] bufferMessage = Encoding.ASCII.GetBytes(outString); this.networkStream.Write(bufferMessage, 0, bufferMessage.Length); this.networkStream.Flush();

Permalänk
Medlem

EDIT:

Lösning för java:

public byte[] intToByteArray(int value) { return new byte[] { (byte)(value >>> 24), (byte)(value >> 16 & 0xff), (byte)(value >> 8 & 0xff), (byte)(value & 0xff) }; } String m = "LOGIN:SuperBot:123:KALVER001\r\n"; byte[] n = intToByteArray(m.length()); os.write(n,0,1); os.writeBytes(m); //os är en DataOutputStream

Jag skulle också bli överlycklig om någon kunde berätta hur man får till längdangivelsen i Java, har suttit hela eftermiddagen och försökt utan något som helst resultat.

Visa signatur

Gör om, gör rätt!

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Aqualize
Edit: Jag fick bygga om servern. På min dator så fick den IP:et 0.0.0.0
Alltså den här raden i koden.

this.serverIp = IPAddress.Parse("127.0.0.1"); //IPAddress.Any;

så gjorde jag.
IPAddress.Any verkar lite farlig, den fullt fungerande nätverksanslutningen är den enda av alla som är "aktiverad".

bte 51 mot 21 till mig mot exempelboten weehoo. Tog ett tag först innan man förstod vem som var vem etc.

Såg din edit först nu... att det skriver ut att den har 0.0.0.0 som ip är en liten bugg, inte orkat fixa den då den inte är super viktig, funkar ju ändå...

IPAddress.Any gör att servern lyssnar till alla inkommande anslutningar... Om man kör IPAddress.Parse("127.0.0.1"); kommer den inte neka alla som inte kopplar upp lokalt?

Som sagt är jag lite rookie på nätverksprogrammering så om man inte ska använda IPAddress.Any så säg det gärna, och förklara varför...

Permalänk
Hedersmedlem

Hehe jo men det där var på natten. Vi kan skippa det Det fungerar så bra så.
Den skriver ju ut 0.0.0.0 och jag försökte (vafan tänkte jag på?) ansluta till 0.0.0.0 med exempelboten. Men det fungerade ju inte (inte konstigt heller) och jag gjorde inget mer test utan ändrade serverkoden.

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

Hur lång tid har botten på sig ungefär för att göra ett drag? 1 sekund? 1 minut?

Permalänk
Medlem

Just nu finns det ingen begränsning i servern... Men när vi kör tävlingen så måste vi ah någon typ av begränsning...

Hade en tanke att man kunde lösa det genom att man får 1 sekund (eller liknade) per drag men tiden räknas för varje spel... så om man i ett spel har gjort 20 drag så har man 20 sekunder "tillgodo"... Sen om man gjorde ett drag på 10 sekund och de andra 19 på resten eller tog 1 sekund per drag så spelar inte det någon roll... (alltså typ som det är i schack fast istället för fast tid så har man en tid relativt till hur många drag man har (gjort))...

Edit: Har gjort lite små uppdateringar på servern, funkar lite smidigare nu... dock buggar den upp ibland om man ansluter mer än 5 klienter... om någon känner sig manad får ni gärna kolla på det... ni hittar i alla fall den här http://www.poker-solitaire.com/bottav/BotServer.zip

Permalänk
Medlem

En liten update bara så att dom som läser inte tror att tråden dött..
Jag har gjort en djupsök-bot som bara behöver kunna ansluta o snacka med servern för att den ska kunna spela. Ska fixa det idag tänkte jag, så får se om den har nån chans mot botten du länkade till savje (antagligen inte, den verkar riktigt dålig när jag spelat mot den).

btw, hur djupt hinner den söka på nån/några sekunder? Min kommer som mest ~8 steg ner som det är nu utan någon extra logik för att beskära trädet, o det e ju inte speciellt långt..

Permalänk
Medlem

Asimov har variabel djupsökning men ett snitt på 5-6 ungefär (närmare information är hemligstämplat )... Har inte lagt till någon funktion för att beskära trädet... Ska försöka göra lite förbättringar jag har grubblat lite över :)...

Vad tyckte ni om mitt förslag om tidsbegränsning?

Permalänk
Hedersmedlem

Är det meningen att vi ska köra över internet? Är det 1 sekund lite väl lite tid för att hinna med och få och svara utifall men råkar ut för att ens paket försvinner på villovägar runt internet?
Har pga. en del omständigheter inte skrivit något på min bot på flera dagar men nu är det dags. Jag verkar göra det jobbigare för mig än vad det behöver vara. Istället för att bara göra en array (i F#), liknande jag gjorde i C# (din var rätt lik också) så försökte jag mig på en cirkellänkad lista i F#. Jag tyckte det skulle vara bra för koden blir finare när den ska fördela allt, men jag tror jag lägger det på is och får något gjort istället.

Edit: Det finns fler omständigheter än supreme commander demot som släppts.

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

menade mer med kumulativ tidsbegränsning... sen hur mycket man får per drag är en vidare fråga men men, hoppas du får igång din bot

Permalänk
Hedersmedlem

Har nästan fått ordning på lite saker. Sen ska den kunna generera trädet. Jag ska göra en minimax. Har dock ett lustigt problem, när det är den andra spelarens tur så kan han inte plocka upp ur ambo nummer 7 (närmast motspelarens kalaha). Men kalahat kan han plocka ur eller nått.
Jag litar på F# prestanda, för det kommer bli världens overhead det här, när det väl fungerar får man försöka skriva om det en del. T.ex. ta bort den cirkulära dubbellänkade listan som generas för varje nod när den ska fördela frön, men sedan konverteras tillbaka till en vanlig enkellänkad lista.

Men man lär sig roliga saker Roligast var det när jag hade fått ingång på all kod och det nästan fungerade precis som jag ville

Jag bara dregglar över F#. Vad sägs om att det såklart går med managed directX och ska även funka med XNA. Mummaspråk.

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

Hur går det för alla? något som är redo att köra en test match snart?

Permalänk
Hedersmedlem

Nej inte klar ännu
Har varit borta i en vecka på semester

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