Hur vinner man i spelet rock-paper-sax? (implementera en optimal strategi i Wolfram Mathematica). Hur man alltid vinner spelet sten, papper, sax

Översättning av ett inlägg av Jon Mcloone, Director of International Business and Strategic Development på Wolfram Research. Originalinlägg: Hur man vinner på Rock-Paper-Scissors
Ladda ner inlägget som ett Mathematica-dokument

Ur en matematisk synvinkel är spelet sten-papper-sax (se bilaga 1 i slutet) inte speciellt intressant. Nash-jämviktsstrategin är väldigt enkel: välj slumpmässigt och med lika stor sannolikhet bland tre alternativ, och givet ett stort antal spel kan varken du eller din motståndare vinna. Även om, när man beräknar strategin med hjälp av en dator, är det fortfarande möjligt att slå en person efter ett stort antal spel.

Min nioåriga dotter visade mig ett program hon skapade med Scratch som vann absolut varje gång helt enkelt genom att hålla reda på vilka val du gjorde innan du gjorde dina! Men jag kommer att presentera dig för en enkel lösning som slår en person i sten-papper-sax utan att fuska.

Eftersom det är omöjligt att besegra någon som alltid gör ett helt slumpmässigt val, kommer vi att räkna med att människor inte är särskilt slumpmässiga. Om datorn kan märka mönstret du följer i dina försök att vara slumpmässigt, kommer det att vara ett steg närmare att förutsäga dina framtida handlingar.

Jag funderade på att skapa en algoritm som ett av ämnena i vår statistikkurs under konceptet Computer-Based Math. Men den första artikeln jag stötte på i mitt sökande efter prediktiva algoritmer undersökte lösningen med en komplex design baserad på copula-distributioner. Denna lösning var svår för en skolelev att förstå (och kanske till och med för mig), så jag bestämde mig för att utveckla en enklare lösning som jag kunde förklara i enkla termer. Och även om det redan har utvecklats tidigare så är det mycket roligare att skapa saker på sitt eget sätt än att hitta en färdig implementering av dem.

Till att börja med behöver vi bara kunna starta spelet. På den tiden hade en demo redan utvecklats och fanns tillgänglig som gjorde att du kunde spela sten-pappersax, men det var inte riktigt vad jag behövde, så jag skrev min egen version. Denna punkt kräver inte mycket förklaring:

För det mesta beskriver den här koden användargränssnittet och spelets regler. Datorspelarens hela strategi finns i denna funktion:

Där 1 motsvarar sten, 2 motsvarar papper och 3 motsvarar sax. Detta är den optimala lösningen. Oavsett hur du spelar kommer du att vinna lika många spel som datorn, och din vinstfrekvens kommer att sväva runt noll.

Så nu skulle det vara intressant att skriva om funktionen välj Gå för att göra en förutsägelse om ditt val med hjälp av de senaste speldata lagrade i variabeln historia. Det första steget är att analysera de val som gjorts under de senaste spelen och hitta alla förekomster av vilken sekvens som helst. Genom att observera vad en person gjorde i varje efterföljande spel kan vi upptäcka ett visst beteendemönster.

Det första argumentet för funktionen är historien om tidigare spel. Till exempel, i datauppsättningen nedan, har datorn (den andra kolumnen är det andra elementet i varje underlista) just spelat ett papper (siffran 2) mot en sten som spelas av en människa (siffran 1). Detta kan ses från det sista elementet i listan. Det är också tydligt att denna situation redan har uppstått två gånger, och båda gångerna var personens nästa drag återigen en sten.

Det andra argumentet är antalet senaste historikelement som kommer att användas för att söka. I det här fallet skickas siffran 1 som ett argument till funktionen, som endast söker i data efter förekomster av (1,2). Om vi ​​väljer 2, kommer funktionen att söka efter förekomster av sekvensen (3,2), (1,2) och returnera en tom lista, eftersom en sådan sekvens inte tidigare har påträffats.

Tredje argumentet Allt, indikerar att i de nödvändiga sekvenserna måste både de mänskliga rörelserna och datorns rörelser sammanfalla. Argumentet kan ändras till 1 för att bara titta på historien om personens rörelser (det vill säga, förutsatt att det mänskliga valet endast beror på hans egna tidigare drag), eller 2 för att bara titta på den andra kolumnen, det vill säga historien av datorns rörelser (det vill säga att anta att en person svarar på datorns tidigare drag oavsett vilka drag han själv gjorde och därför oavsett om han vann eller förlorade).

I det här fallet finner vi till exempel att personen valde efter stenen, oavsett vad datorn valde i samma spel.

Med tanke på en stor mängd data kan vi bara nöja oss med ett argument Allt, och programmet kommer att kunna avgöra själv vems rörelser, datorns eller personens, är viktigare. Till exempel, om en dators historia av rörelser ignoreras av en människa när han gör ett val, kommer datamängden som erhålls för vissa historik av datorrörelser att ha samma fördelning som för alla andra historik av datorrörelser, förutsatt att det finns tillräckligt med data på tidigare spel. Genom att söka igenom alla spelpar får vi samma resultat som om vi först valt data från historien om datorns rörelser, och sedan använt denna delmängd för funktionen som visas ovan. Detsamma kommer att hända om bara historien om datorns rörelser spelar roll. Men samtidigt kan man, genom att söka med båda dessa antaganden beaktade separat, få mer exakta matchningar i historien, och detta är tydligast i de fall där datamängden om spel är liten till en början.

Från dessa två tester kan vi alltså finna att det första ger en uppskattning på 100 % att personens nästa val blir en sten, och det andra visar att det är 75 % sannolikhet att personen väljer en sten och en 25 % sannolikhet att saxen kommer att väljas.

Och här har jag fastnat något för att lösa problemet.

I det här fallet är de två förutsägelserna åtminstone mer eller mindre nära i resultat, även om de skiljer sig åt i de numeriska värdena för sannolikheterna. Men om du söker över tre "skivor" av data med ett antal olika historiklängder och förutsägelseresultaten är inkonsekventa, hur kombinerar du dem?

Jag gjorde en anteckning om detta problem i min "Skriv en blogg om det här"-mappen och glömde bort det tills för några veckor sedan när det uppstod en diskussion om hur man skulle täcka begreppet "statistisk signifikans" i en datorbaserad matematikkurs.

Jag insåg att frågan inte är hur man kombinerar de resulterande förutsägelserna, utan hur man avgör vilken av förutsägelserna som är mest betydelsefulla. En av förutsägelserna kan vara mer betydelsefulla än de andra eftersom den speglar en starkare trend eller kanske är baserad på en större datamängd. Detta spelade ingen roll för mig, så jag använde helt enkelt p-värdet för signifikanstestet (med nollhypotesen att båda spelarna spelar av en slump) för att rangordna de resulterande förutsägelserna.

Jag tycker att jag borde lyssna på våra egna första principen att det första steget för att lösa ett matematiskt problem är "den korrekta formuleringen av frågan."

Om vi ​​nu tar det senaste resultatet vi fick, visar det sig att den bästa förutsägelsen är sten, som har ett p-värde på 0,17. Detta betyder att det bara finns en sannolikhet på 0,17 att data som används för en given förutsägelse avviker från den diskreta enhetliga fördelningen ( DiscreteUniformDistribution[(1,3)]), och mer av en slump än på grund av systematiska fel, oavsett om det är mänskligt eller någon annan orsak, som kan förändra distributionen.

Ju mindre detta p-värde är, desto mer säkra kan vi vara på att vi har hittat ett sant beteendemönster. Så vi gör helt enkelt förutsägelser för olika historiklängder och datasegment och väljer förutsägelsen med det minsta p-värdet.

Och vi gör ett val som kommer att slå personens val.

Här ser du resultatet. Du kan ladda ner och prova det själv från Wolfram Demonstrations webbplats.

När ett program har för lite data spelas det slumpmässigt, så du börjar på lika villkor. Till en början, när hon precis har börjat lära sig, fattar hon några dumma beslut, så att du kan komma framåt. Men efter 30-40 matcher börjar det få riktigt meningsfulla förutsägelser och du kommer att se din vinstprocent gå in i det negativa området och stanna där.

Naturligtvis är en sådan lösning bara bra mot primitiva försök att framstå som slumpmässiga. Dess förutsägbarhet gör den mottaglig för eventuella förluster mot en välkalkylerad och planerad strategi. Det är extremt intressant att försöka besegra detta program med hjälp av intuition. Det är möjligt, men om du slutar tänka eller tänker för mycket kommer du snart att hamna på efterkälken. Naturligtvis kan programmet enkelt göra detta genom att använda samma algoritm för att förutsäga programmets nästa drag.

Detta tillvägagångssätt leder till början av ett slags "kapprustning", en tävling för att skriva algoritmer som kommer att vinna sten-pappersax mot motståndarens algoritm, och det enda sättet att stoppa detta är att återgå till Nashs jämviktsstrategi, vilket gör val genom RandomInteger[(1,3)].

Bilaga 1
Om du inte vet hur man spelar det här spelet är reglerna följande: du väljer sten, papper, sax, med en av tre gester som visas samtidigt av dig och din motståndare. Sten slår sax (gör dem matta), sax slår papper (de klipper av det) och papper slår sten (det slår in det). Vinnaren får en poäng vid oavgjort, båda spelarna får inga poäng.

Tack för din hjälp med att översätta detta inlägg.

Det finns ingen person som inte har spelat spelet "Rock, Paper, Scissors." Hon kan trots allt inte bara ta upp tid utan också lösa till exempel en tvist.

Samtidigt vet inte många att detta spel har sitt ursprung i Kina och senare, på 1800- och 1900-talen, blev det populärt i många länder runt om i världen, inklusive Ryssland. Och i början av 2000-talet dök de första mästerskapen i denna "sport" med betydande prispengar upp.

För att vinna det här spelet behöver du inte vara synsk - du kan läsa din motståndares tankar eller programmera hans handlingar, du behöver bara följa några regler.

1. Män tenderar att kasta "stenen" först eftersom det uppfattas som styrka och beslutsamhet. Därför kan du fånga den starka halvan av mänskligheten när de gör det här ganska ofta. Genom att använda denna funktion kan du enkelt vinna genom att visa "papper". Men kom ihåg att det här tricket inte fungerar med erfarna spelare.

2. Om du har "tur" att spela med en erfaren spelare är det osannolikt att han visar "stenen" för första gången - detta är för uppenbart. Därför är "sax" ett ganska optimalt alternativ.

3. Berätta för din motståndare vad du ska visa och sedan... visa vad du sa. Varför? Så länge du inte spelar med någon som är omedveten om din fräckhet, kan du, genom att göra dina avsikter kända, få en fördelaktig roll. Till exempel, om du deklarerar "rock", kommer din motståndare inte att kasta "papper" och tror att du kommer att visa "sax". Detta drag kan ge dig en seger eller oavgjort.

4. Om din motståndare kastar sax två gånger, är chansen att han visar dem en tredje gång mycket liten. Troligtvis kommer han att kasta "papperet" eller "stenen". I det här fallet skulle det vara tillrådligt för dig att visa "papperet".

5. Under den andra omgången visar oerfarna spelare undermedvetet vad som kunde ha besegrat dem tidigare. Till exempel, om din motståndare förlorade med "papper", kommer han att visa "sax", då är ditt drag "sten". Om motståndaren kastade ut "stenen" första gången, är det andra gången lämpligt att visa "sax": han kommer troligen att bestämma sig för att kasta ut "papperet".

6. Det finns situationer när du inte vet vad du ska slänga. I det här fallet råder jag dig att visa "papperet". Enligt statistik visas "sax" något mer sällan än något annat. Men för inte så länge sedan fann brittiska forskare att den mest vinnande strategin i spelet är att visa "sax". Faktum är att motståndaren oftast undermedvetet förväntar sig "sten" -gesten, vilket är anledningen till att han visar "papper".

Bra spel!


Gud bara vet hur många kontroversiella situationer i barndomen som löstes genom att spela "Sten, papper, sax." Varför finns det barn, det finns många vuxna barn som hittar en enkel väg ut på några sekunder och en kasserad skylt. Så vad döljer sig bakom det enkla slängandet av fingrar: slumpen eller en beprövad strategi? Forskarna vet svaret och ger sitt vinnande recept.

Nyligen meddelade ett team av kinesiska forskare från Zhejiang University världen om de djärva fynden av deras psykologiska tester. Forskare genomförde 5 experimentella cykler från december 2010 till mars i år. Varje cykel omfattade 12 sessioner med 6 deltagare. Totalt nådde det totala antalet ämnen 360 personer. Könsförhållandet var 217:143 med en kvinnlig övervikt (flickor var helt enkelt mer aktiva i att anmäla sig). En student eller doktorand kunde endast delta i studien en gång.

Människor var utom synhåll för varandra, framför monitorskärmar. Detta eliminerade verbal och visuell kontakt. Varje deltagare spenderade från en och en halv till två timmar på att spela 300 matcher med en slumpmässig motståndare. Incitamentet att vinna var en liten monetär belöning för varje vunnen omgång. Och här är slutsatserna från detta...

Så vad behöver du veta för att vinna? Efter att ha observerat ett stort antal "strider" fann forskare att en spelare som besegrade sin motståndare i det aktuella spelet var mer benägna att upprepa sina handlingar i nästa omgång, och mindre sannolikt att ändra något.

Å andra sidan, om en spelare förlorar två eller flera gånger i rad, kommer han att sluta visa den dåliga handen och försöka bryta själva tecknet som just tillät hans motståndare att slå honom.

Således, om spelare A var på förlustrad, och spelare B precis hade kastat saxen och därmed klippt A:s papper, så skulle A sannolikt ha kastat en sten, vilket skulle ha en hygglig chans att vinna, eftersom B sannolikt skulle sticka samma vinnande taktik. Beteendets psykologi är enkel: om du vinner förändras du inte, om du förlorar byter du.

Förlorat? Släng tecknet som slår din motståndares sista vinnande tecken.

Vann du? Fortsätt inte att visa samma tecken, kasta istället ut din förlorande motståndares sista hand.

Fortfarande inte helt klart? Här är några vinnande strategier som hjälper dig att förbli oövervinnerlig:

Om du vann den senaste matchen...

Om du förlorade det senaste spelet (och din motståndare inte är medveten om denna teknik)...

  • ...efter att ha kastat bort stenen, gå vidare till sax i nästa kamp
  • ...kasta ut saxen, gå vidare till papper i nästa kamp
  • ...kasta pappret, gå vidare till stenen i nästa kamp

Om du förlorade det senaste spelet (och din motståndare är medveten om denna teknik)...

  • ...kasta stenen, gå till tidningen i nästa kamp
  • ...kasta bort saxen, gå vidare till stenen i nästa kamp
  • ...kasta papperet, gå vidare till saxen i nästa kamp

Du kan bekanta dig mer i detalj med den forskningsmetod som kinesiska forskare tillhandahåller allmänheten. Självklart är den skriven på engelska och innehåller layouter och formler som är svåra att förstå för människor långt ifrån matematik.

Och avslutningsvis vill jag tillägga att skulden för att förlora bilar, hus och fruar i "sten, papper, sax", först och främst bör läggas på din egen passion, och inte på de kinesiska sinnena och författaren till dessa rader .

"Sten, papper, sax" är ett spel som är bekant för alla sedan barndomen och löste även de allvarligaste manliga tvister. Jag har alltid trott att det här spelet bara var baserat på tur, men det är långt ifrån sanningen. I dag "Så enkelt!" kommer att berätta några små hemligheter som gör att du alltid kan vinna det här spelet. Och sedan kommer du att åka i framsätet, och någon annan kommer att springa efter öl.

Hemligheten till att vinna Rock, Paper, Scissors

Om du redan har glömt reglerna, låt mig påminna dig: stenen bryter saxen som klipper papperet och papperet täcker stenen.

Ett team av kinesiska forskare från Zhejiang University genomförde ett stort antal experiment och observationer, vars resultat visade några mönster: En spelare som besegrar sin motståndare i det aktuella spelet kommer med största sannolikhet att upprepa sina handlingar i nästa omgång och kommer sannolikt inte att ändra något.

Å andra sidan, om spelaren förlorar två eller flera gånger i rad, kommer det att sluta visas dålig kombination och kommer att försöka bryta själva tecknet som just tillät hans motståndare att besegra honom.

Baserat på detta kan vi härleda följande vinnande strategi:

  • Om du förlorar, kasta ut tecknet som slår din motståndares sista vinnande tecken.
  • Om du vinner, fortsätt inte att visa samma tecken, kasta istället ut din förlorande motståndares sista kombination.

Några fler viktiga mönster

  • Oftast använder det starkare könet stenen först, så om din motståndare är en man, försök kasta papper.
  • Om du tävlar med en erfaren spelare är det stor chans att han försöker spela på din naivitet och kasta papperet. Använd sax.
  • Kom ihåg att om din motståndare redan har kastat stenen två gånger i rad, hatar den personen att vara förutsägbar och kommer att använda sax i de flesta fall. Kasta en sten.
  • Titta på din motståndares fingrar. De minsta rörelserna kommer att berätta vilket drag din motståndare kommer att använda. Alla fingrar är spända - sten. Alla fingrar är avslappnade - papper. Endast två fingrar är spända - sax.
  • Papper används minst ofta i spelet - i 29,6% av fallen. Sax används oftare - 35%. Och ännu oftare sten - 35,4%. Använd effekten av överraskning.

Berätta för din vän om dessa små knep, han kommer att bli helt glad över att han alltid kommer att vinna argument med sina klasskamrater!


Vi är vana vid att tro att det gamla goda spelet "Rock, Paper, Scissors" är baserat på ren tur (eller slump). Men om så var fallet, speladet skulle inte vara så intressant.

Corruption.Sport med en länk till Bright Side avslöjar flera hemligheter för dig, med hjälp av vilka du alltid kan vinna denna strid. Och då kommer du att åka i framsätet, och någon annan kommer att springa efter öl.

Låt oss först börja med grunderna. Som du säkert vet bryter stenen av saxen som klipper papperet och pappret täcker stenen.

Efter att ha observerat ett stort antal sådana "strider" upptäckte ett team av kinesiska forskare från Zhejiang University att en spelare som slog sin motståndare i det aktuella spelet är mer benägna att upprepa sina handlingar i nästa omgång, och är mindre benägna att ändra något.

Å andra sidan, om en spelare förlorar två eller flera gånger i rad, den kommer att sluta visa den misslyckade kombinationen och kommer att försöka bryta själva tecknet som just tillät hans motståndare att besegra honom.

Baserat på detta, vinsten strategi:

  • Förlorat? Kasta tecknet som slår din motståndares sista vinnande tecken.
  • Vann du? Fortsätt inte att visa samma tecken, kasta istället ut din förlorande motståndares sista hand.

Och några fler tips:

  • Män är ofta de första som kastar stenen. Om du spelar mot en man, prova papper.
  • Erfarna spelare kommer att försöka spela på din naivitet och kasta papperet. Använd sax.
  • När du ser att din motståndare redan har kastat stenen två gånger, vet att personen hatar att vara förutsägbar och i de flesta fall använder sax. Använd sten.
  • Titta på din motståndares fingrar. De minsta rörelserna kommer att berätta vilket drag din motståndare kommer att använda. Alla fingrar är spända - sten. Alla fingrar är avslappnade - papper. Endast två fingrar är spända - sax.
  • Papper används minst ofta i spelet - i 29,6% av fallen. Sax används oftare - 35%. Och lite oftare är sten - 35,4%. Använd effekten av överraskning.