2012-10-24, 02:41
#1
Hej!
Jag tänkte göra ett nytt försök att få ordning på AI:n i mitt eggdrop-spel. Allt annat i spelet har varit färdigt länge. Det är, liksom poker, ett spel där man kan höja, syna, passa eller lägga sig, men med bara två spelare (spelaren och datorn) och med bara ett kort var. En summa ligger i potten redan innan någon börjar agera, och för att förenkla går det inte att satsa valfritt belopp utan bara att dubbla. Högst kort vinner om inte den andre lägger sig, precis som i poker. Om båda har samma kort vinner datorn; detta är fördelen som ska göra att datorn (jag) tjänar på det i längden.
Jag har kommit en bit på vägen, men har inte lyckats knyta ihop det till en eller flera formler eller algoritmer.
Först och främst konstaterar jag något självklart: att det alltid finns ett (eller flera lika bra) sätt att spela på när det är min (datorns) tur, som är bättre än alla andra sätt. Det är det jag är ute efter - att hitta det bästa sättet att spela utifrån en specifik informationskombination, t.ex. "potten startar på 10:-", "jag har knekt" och "motståndaren passar". Om jag alltid spelar perfekt, spelet är rättvist (datorn och spelaren turas om att börja) och jag har den lilla fördelen av att vinna när korten är lika, kan jag inte förlora i längden. Plus bonusen jag får när spelaren avviker från sin perfekta strategi, t.ex. dubblar för ofta när han har damer för att han gillar dem, eller blir skrämd för mycket eller för lite av mina satsningar.
För det andra: att spela perfekt är inte samma sak som att spela statiskt. Jag kan t.ex. inte dubbla varje gång jag har 10 och motståndaren passar. Då visar jag vad jag har för kort. Det perfekta sättet inkluderar att slumpa mellan olika val, och det är procenten för de olika valen som jag behöver finna för att spela perfekt. Jag slumpar ett tal mellan t.ex. 0 och 1. Blir det mellan 0 och x lägger jag mig, blir det mellan x och y synar jag och blir det mellan y och 1 dubblar jag (0 <= x <= y <= 1). Eller liknande.
För det tredje tror jag att det här är ett problem som bara kan lösas m.h.a. att introducera någon slags oändlighet, dvs han-tror-jag-tror-han-tror-osv... Antingen går det att räkna ut exakt med någon formel eller så måste jag hitta en bra approximations-algoritm som blir bättre och bättre ju fler gånger jag kör den, och sen välja hur mycket tid som är acceptabelt att datorn tänker under.
---
När det gäller mitt informationsinsamlande, så har jag ingen aning om jag måste komma ihåg alla tidigare givar som jag har spelat mot just den här spelaren och hur han/hon har agerat tidigare under den här handen, för att kunna spela rättvist... Eller om jag kan få ett rättvist spel utan att komma ihåg något av dem, dvs bara utgå från vad som ligger i potten, vad satsningen är emot mig och vad jag har för kort, och spela perfekt bara utifrån det. Den första gången jag möter en spelare och inte har några uppgifter om hur han spelar, så har jag bara två saker att utgå ifrån: hur mycket pengar han har totalt och hur mycket pengar jag, banken, har totalt. Sen lär jag väl balansera storleken på hans satsning emot sannolikheten att han ska bli bankrutt i längden jämfört med sannolikheten att jag ska bli bankrutt i längden. Och räkna in hur högt kort jag har, såklart. I det här låtsas-spelet har jag oändligt mycket pengar, så jag kanske måste jämföra med sannolikheten för att han ska _dubbla_ sina pengar jämfört med sannolikheten att han ska bli bankrutt?
Finns det någon information om det här på nätet?
Jag tänkte göra ett nytt försök att få ordning på AI:n i mitt eggdrop-spel. Allt annat i spelet har varit färdigt länge. Det är, liksom poker, ett spel där man kan höja, syna, passa eller lägga sig, men med bara två spelare (spelaren och datorn) och med bara ett kort var. En summa ligger i potten redan innan någon börjar agera, och för att förenkla går det inte att satsa valfritt belopp utan bara att dubbla. Högst kort vinner om inte den andre lägger sig, precis som i poker. Om båda har samma kort vinner datorn; detta är fördelen som ska göra att datorn (jag) tjänar på det i längden.
Jag har kommit en bit på vägen, men har inte lyckats knyta ihop det till en eller flera formler eller algoritmer.
Först och främst konstaterar jag något självklart: att det alltid finns ett (eller flera lika bra) sätt att spela på när det är min (datorns) tur, som är bättre än alla andra sätt. Det är det jag är ute efter - att hitta det bästa sättet att spela utifrån en specifik informationskombination, t.ex. "potten startar på 10:-", "jag har knekt" och "motståndaren passar". Om jag alltid spelar perfekt, spelet är rättvist (datorn och spelaren turas om att börja) och jag har den lilla fördelen av att vinna när korten är lika, kan jag inte förlora i längden. Plus bonusen jag får när spelaren avviker från sin perfekta strategi, t.ex. dubblar för ofta när han har damer för att han gillar dem, eller blir skrämd för mycket eller för lite av mina satsningar.
För det andra: att spela perfekt är inte samma sak som att spela statiskt. Jag kan t.ex. inte dubbla varje gång jag har 10 och motståndaren passar. Då visar jag vad jag har för kort. Det perfekta sättet inkluderar att slumpa mellan olika val, och det är procenten för de olika valen som jag behöver finna för att spela perfekt. Jag slumpar ett tal mellan t.ex. 0 och 1. Blir det mellan 0 och x lägger jag mig, blir det mellan x och y synar jag och blir det mellan y och 1 dubblar jag (0 <= x <= y <= 1). Eller liknande.
För det tredje tror jag att det här är ett problem som bara kan lösas m.h.a. att introducera någon slags oändlighet, dvs han-tror-jag-tror-han-tror-osv... Antingen går det att räkna ut exakt med någon formel eller så måste jag hitta en bra approximations-algoritm som blir bättre och bättre ju fler gånger jag kör den, och sen välja hur mycket tid som är acceptabelt att datorn tänker under.
---
När det gäller mitt informationsinsamlande, så har jag ingen aning om jag måste komma ihåg alla tidigare givar som jag har spelat mot just den här spelaren och hur han/hon har agerat tidigare under den här handen, för att kunna spela rättvist... Eller om jag kan få ett rättvist spel utan att komma ihåg något av dem, dvs bara utgå från vad som ligger i potten, vad satsningen är emot mig och vad jag har för kort, och spela perfekt bara utifrån det. Den första gången jag möter en spelare och inte har några uppgifter om hur han spelar, så har jag bara två saker att utgå ifrån: hur mycket pengar han har totalt och hur mycket pengar jag, banken, har totalt. Sen lär jag väl balansera storleken på hans satsning emot sannolikheten att han ska bli bankrutt i längden jämfört med sannolikheten att jag ska bli bankrutt i längden. Och räkna in hur högt kort jag har, såklart. I det här låtsas-spelet har jag oändligt mycket pengar, så jag kanske måste jämföra med sannolikheten för att han ska _dubbla_ sina pengar jämfört med sannolikheten att han ska bli bankrutt?
Finns det någon information om det här på nätet?