Fråga:
Kan en schackmotor göra retroanalys?
Snack_Food_Termite
2019-11-28 13:56:22 UTC
view on stackexchange narkive permalink

Om jag tog en laglig schackposition, i vilken utsträckning kunde en motor ta reda på de tidigare rörelserna? [i vissa andra brädspel som Othello görs sådan spelrekonstruktion enkelt med en motor.]

Jag har inga riktiga data att gå med, men din fråga får mig att fundera över om en motor som Alpha-Zero skulle kunna lära sig att spela schack i omvänd ordning och sträva efter att nå det ursprungliga tillståndet. Med tanke på att Alpha-Go har vunnit på Go, där positionerna blir mer komplicerade när du går, undrar jag om deras algoritmer kan övervinna gränserna som tas upp i svaren.
Jag ställde en liknande fråga för en tid sedan: https://chess.stackexchange.com/questions/15146/calculate-the-first-n-unknown-moves-of-a-chess-game
Jag tror att du förmodligen skulle kunna lura folk på Code Golf SE för att skriva en lösare för detta åt dig :-D
@AaronF: Och då skulle de ge dig ett Jelly-program och låta dig göra dina insatser i geléformat, eller ännu värre, Hexagony.
Nio svar:
Remellion
2019-11-28 14:44:04 UTC
view on stackexchange narkive permalink

Motorer som Stockfish och Komodo kan inte räkna ut de tidigare rörelserna, för det är inte det de är programmerade för.

Det är dock försvinnande osannolikt att någon någonsin kan programmera en motor som fungerar ut lagliga tidigare drag. Logiken att ta reda på om ett eventuellt tidigare drag är lagligt eller inte är extremt svårt.

Till att börja med hur listar vi möjliga tidigare drag?

Möjliga tidigare drag, som kallas retraktioner (om vi ignorerar lagligheten en sekund), hittas lätt algoritmiskt - varje bit dras tillbaka när det rör sig i schack framåt (förutom bönder), och de kan också "fånga" en fiendens enhet - pant, riddare biskop, rook eller drottning. t.ex. wBc4 tar bonde på f7 i omvänd riktning ser ut som att biskopen flyttar från f7 till c4, med en svart bonde som visas på f7.

Bönder rör sig 1 kvadrat bakåt och avskiljer en kvadrat diagonalt bakåt. (Du kan ta reda på hur dubbelsteget ser ut.)

När det gäller kontroller kan man dra sig tillbaka till det som ser ut som "check" i vanligt schack, och man måste alltid dra tillbaka för att aldrig lämna motståndaren i "kolla upp". (Så om det föregående exemplet av wBc4xbPf7 kontrollerar den svarta kungen på e8 krävdes det vitt att dra tillbaka biskopen för att ta bort "check".)

Uncastling är lätt att visualisera (och lägger till den begränsning som kungen eller tårnet kan inte dra tillbaka igen). Un-en-passant är svår att beskriva och utgör grunden för många klassiska retroproblem. Det är återigen lätt att visualisera befordran.

Det är därför inte svårt att lista alla potentiella tillbakadragningar ur programmeringssynpunkt. Den otroligt svåra delen är att avgöra vilka tillbakadragningar som är lagliga. Det finns många anledningar till att en indragning inte kan vara laglig, allt från enkel (tillbakadragning av en oupptagning till att lämna 9 svarta bönder på tavlan, till exempel) till högt invecklad (jfr de flesta retrograda analysproblem, se Retrohörnan.)

Se till exempel detta problem av Troitsky på Chess.SE, och mitt tillhörande svar på det. Mycket logik går in i att bevisa att det faktiskt bara finns en laglig återkallelse av svart, och detta är inte uppenbart, vilket innebär att man räknar pionfångster, med tanke på deras ordning och tempobegränsningar.

Att skriva en motor till för att utföra en sådan uppgift måste man kunna belysa den mänskliga logiken bakom den på ett sådant sätt att en dator kan utföra logiken. Detta verkar helt enkelt inte alls möjligt, med tanke på att "lagligheten av tillbakadraganden" är mycket mer otydlig än "lagligheten av framåtgående schackrörelser".

Det är intressant. En sak som människor kan göra bättre!
att bevisa att en position kan nås från startposition är i allmänhet ungefär lika svårt som att lösa schack. Människor kan bara göra det för en liten delmängd av positioner. För datorer är det omöjligt.
@Sopel * Människor kan bara göra det för en liten delmängd av positioner. * Detta är felaktigt. Med en slumpmässig position kan människor i de flesta fall säga vackert om det är lagligt eller inte. Vissa är uppenbarligen oåtkomliga på grund av pantstrukturen, andra är trivialt lagliga eftersom "inget speciellt pågår". Retrograd analytiker koncentrerar sig på den tunna gränszonen och bygger sofistikerade pussel med positioner som är eller inte är lagliga på grund av flera finesser.
* Un-en-passant är svår att beskriva och utgör grunden för många klassiska retroproblem. * - Jag kan inte se detta. Närhelst en passant kunde ha hänt, kunde du istället fånga en normal framåtriktad bonde. Både inställningen och resultatet är oskiljbara. Så man kan ignorera en-passant under hela retroanalysen och helt enkelt lägga till det i slutet som en ytterligare, trivial gren i ett steg när en enskilt framåtriktande bonde fångades direkt (och inte blockerades från att avancera två fält).
@Wrzlprmft Det är inte trivialt och inställningen kan verkligen urskiljas: https://chess.stackexchange.com/a/23541/15989
@Remellion: Ah, förstår jag. Så den enda anledningen till att det är svårt är att den fångade bonden kan ha blockerat en kontroll?
@Wrzlprmft Det är en av anledningarna. En annan (ett ganska brett ämne) är hur passiva indragningar interagerar med kasträtter. Se https://www.janko.at/Retros/Glossary/Castling-and-En-passant.htm för ett urval, nämligen de senaste 8 problemen (9-16). Det finns andra, ännu mer subtila interaktioner (t.ex. med tredubbel repetition / 50-drag / Dead Reckoning) - retrograd analys är ett mycket djupare fält än det första intrycket det gör.
Retrograd analys av castling och en passant kommer också att bli intressant. Efter 40 drag finns det många alternativ att välja mellan för att gå tillbaka till startpositionen.
BlindKungFuMaster
2019-11-28 14:18:13 UTC
view on stackexchange narkive permalink

Nuvarande motorer kan inte göra det alls. Att räkna bakåt är helt annorlunda än att räkna framåt. Bitar uppstår istället för att tas.

Men du kan säkert anpassa motorer för att kunna prestera bra på den här uppgiften.

Jag håller inte med det andra uttalandet - hittills finns det ingen motor som ens kan lista alla möjliga tillbakadragningar (lagliga eller olagliga) från en position. Och det är extremt svårt att avgöra om en återkallelse är laglig i retroproblem - det finns inget snyggt sätt att inkapsla all den logiken i ett datorprogram.
Ja, lagligheten är svår. Jag antar att du måste hitta hela spelet. Men indragningar bör vara relativt lätt genomförbara. Och då är det bara trädsökning.
Trädsökning är hemskt om bara en 15-lags indragningslinje är laglig av många, många, många möjliga rader. Och det kommer inte ens tillbaka till startpositionen. Se problemet kopplat till i mitt svar för en smak av ett måttligt svårt retrograd problem.
Visst, trädsökning kräver beskärning. Men jag medger att en sådan motor antagligen inte går bra på Troitzky-problem, där det bara finns en laglig 15-skiktslinje. Jag tänkte mer på den allmänna uppgiften att återuppta den mest troliga linjen som ledde till en position. Jag tror att det skulle vara ett mycket intressant och också smidigt problem.
Även för den allmänna uppgiften är det svårt att säga. För att ha en motor av något slag måste vi berätta för det vad en "laglig" rörelse / indragning är. Det här är verkligen den svåra delen för vanliga motorer (flyttvalidering) och den nästan omöjliga delen för en indragningsmotor - hur definierar du en laglig indragning på ett verifierbart sätt?
För faktiska spel skulle jag försöka maskininlärning av lagliga / troliga återkallelser. Det slutliga beviset på laglighet kan bara vara ett komplett spel.
@Remellion att avgöra vilka drag som är lagliga i en vanlig motor är trivialt, jag förstår inte varför det skulle vara mycket svårare för retraktioner.
@MilesRout Juridiska drag definieras av schackreglerna, och det är således "lätt" att kontrollera att ett drag är lagligt - du behöver bara hänvisa till schackreglerna. En juridisk återkallelse definieras (en möjlig definition) som en som börjar från och resulterar i en rättslig position (nås från startgruppen genom juridiska drag). Men hur vet du om en position är laglig? Det finns inget enkelt sätt att göra det.
Laska
2019-11-28 18:26:34 UTC
view on stackexchange narkive permalink

Jag har beslutat att utvidga detta till en mer allmän översikt över motorernas tillämplighet för olika retro-undergenrer.

Schackmotorer (t.ex. Stockfish) är bra på att prova alla drag framöver i en position men kändes dålig för att abstrahera allmänna drag som fästningar.

På samma sätt kan du enkelt försöka dra tillbaka möjliga minsta drag bara genom att få bitar att röra sig bakåt, kläcka motsatta bitar istället för att fånga dem och springa bort från motstående kungar som "kontrollerar" dem. Svårigheten är att abstrahera allmänna funktioner för att ta reda på om positionen kan härledas från startpositionen. Skillnaden mellan juridiska drag och rättsliga positioner är nyckeln här och är en åtskillnad som också görs i FIDE-lagarna.

Proof-spel En retrodomän som har haft stor framgång med motorer är bevis spel. Det här är som retroproblem förutom att du har fått ytterligare information om det förväntade antalet drag. Denna uppfattning om klocka förenklar retroprocessen enormt, på ett liknande sätt som Othello-spel kan härledas för att man vet det exakta antalet drag. Vissa människor ser dem som framåtbestämmelser eftersom du börjar från spelarrayen och kan spela framåt, men de ses i allmänhet som retros. Ledande motorer i detta utrymme är Natch, Euclide, Popeye och för feproblem Jacobi.

Allmänna retros Det finns färre motorer för allmänna retroproblem. Dessa fungerar genom att låta lösaren specificera begränsningar som härleds av en mänsklig lösare. Jacobi gör detta inom ramen för ett visst antal drag, men det bästa jag vet är de gåtfulla Rawbats, ett verktyg som bara används av tillverkaren Mario Richter, och endast känt av dess resultat för att öka utvecklarens färdigheter.

Helpmate retractors Det finns en stor möjlighet för någon datoranvändare att bygga en enkel retraktionsmotor som bara försöker dra tillbaka senaste drag utan att oroa sig för global laglighet och sedan spelar framåt som en vanlig problemmotor. En sådan motor, i kombination med lite mänskligt sunt förnuft, skulle kunna validera de hundratals hjälpkompositioner som för närvarande är otestbara.

Jag vill avsluta med att nämna två retrosområden som är mindre mottagliga för motor angrepp.

Problem baserade på konventioner En är domänen för retrokonventioner: castling, en passant och andra relaterade regler. Att kombinera ett logiskt resonemangssystem med en schackmotor har inte gjorts, och i vissa fall finns det djupa tvetydigheter i själva konventionerna. Detta arbete lämnas normalt för människan att lösa, men i princip om konventionerna kunde grundas logiskt skulle det vara ett intressant forskningsämne.

Defensive retractors Den andra svåra genren av retro komposition innehåller de högtekniska defensiva motståndarna av olika slag. Dessa handlar i huvudsak om att spela schack bakåt på ett konkurrenskraftigt sätt, och frågor om positionslagenlighet är normalt nyckeln utan vilken problemkompositionerna inte är meningsfulla.

PhishMaster
2019-11-28 18:28:27 UTC
view on stackexchange narkive permalink

I grund och botten är svaret "nej", och det kommer förmodligen aldrig att förändras.

Jag ska jämföra detta med tabellbas eftersom det verkar relevant på grund av hur de är gjorda jämfört med vad du frågar i din fråga. Jag inser att de skiljer sig åt i vissa andra aspekter.

Tabellbaser, som är databaser med perfekt slutspel, beräknas på exakt det sätt som du frågar: De börjar vid slutpositionen och arbetar tillbaka till möjlig ursprunglig position. Naturligtvis börjar de från slutet av spelet när det för närvarande bara finns 7 eller mindre kvar på brädet, inklusive kungar. Du kan se hur detta egentligen är MYCKET enklare än din fråga, men det är fortfarande ett STOR åtagande för datorkraft som vi för närvarande känner till.

Med bara 7 stycken krävs det inte bara otroligt mycket tid att lösa till och med en position, och det tar WHOPPING 140+ terabyte att lagra alla 7-mans bordsbaser. Det tog år att göra detta. Du kan se hur du lägger till några fler delar, detta växer exponentiellt. På grund av den extrema datorkraftkostnaden är vi inte ens nära att starta 8-mans bordsbaser, och det beräknas att de skulle ta över 10 petabyte att lagra i sin helhet. Även om du inte försöker lösa varje position med 32 bitar kan du se hur det inte är möjligt att försöka gå från slutet av ett spel tillbaka till den ursprungliga 32-bitars startpositionen.

Den enda frågan är om de kunde programmera i den mänskliga tendensen att spela på olika sätt för att beskära sökningen, men jag tvivlar på att så mycket, som även då, siffrorna är enorma.

Såvida jag inte missförstår något är det mycket * mycket * svårare att konstruera en tabell över * alla möjliga * sätt på vilka ett spel kan uppstå (tabellbaser) än att bara träna på ett sätt som ett spel kan uppstå (retroanalys).
user20689
2019-11-29 06:31:00 UTC
view on stackexchange narkive permalink

Nej.

Först och främst spelar motorer (och alla) mot någon annan också (en mänsklig spelare, en annan motor, till och med sig själva med den motsatta färgen). De kan gissa det troliga drag från den andra skådespelaren, men de kommer inte för långt. De väljer ett bra drag och den andra skådespelarens drag hjälper dem att begränsa utbudet av möjligheter.

Att vända en spelposition är ett annat problem, eftersom du måste veta båda spelarna rör sig för att lösa det. Du vet inte om rörelserna var bra eller dåliga, eller ens om de var vettiga, du vet bara att de var lagliga. I den meningen skulle ombyggnad av spelet vara mer besläktad med att "lösa" schack (att få alla möjliga lösningar i ett spel från startpositionen).

Dessutom, även om du stärker kraven ("låt oss gissa det varje spelare spelade alltid rörelsen med den bästa analysen av den aktuella motorn ") du har många situationer där flera möjliga föregångartillstånd visas. Gissa bara

  rnbqkbnr / pp1p1ppp / 8/8 / 3p / N7 / PPP1PPPP / R1B1KBNR w - - 1 13  

Kommer det här från?

  [fen ""] 1. d3 c5 2. d4 e5 3. Na3 exd4 4. Qxd4 cxd4  

Eller från?

  [fen ""] 1. d3 c5 2. d4 e5 3. Na3 cxd4 4. Qxd4 exd4  

I båda fallen är svartens sista drag det starkaste, ändå tjänar det dig inte att bestämma vilken som var föregående styrelse situation. När analysen expanderar bakåt multipliceras möjligheterna.

Tack för ditt svar och välkommen. När vi gör retrograd analys gör vi i nästan alla fall hänsyn till kvaliteten på flytten. Svårt nog bara för att överväga laglighet. Jag tror att den motor som det hänvisas till i frågan var en hypotetisk motor som är utformad för retroändamål snarare än en av de kända framåtmotorerna som Stockfish
@Laska Som jag ser det är tanken på flyttens kvalitet att det, som en förstärkning av villkoren, skulle göra retrograd analys lättare, eftersom det skulle begränsa antalet möjliga tidigare styrelser. Min poäng är att även med starkare kriterier kommer osäkerhet att dyka upp.
Tack igen för ditt svar, user20689. Hur kan jag vara helt objektiv om flyttens kvalitet? Det kan inte bero på en motor vid en viss tidpunkt. En futuristisk idé som jag hörde från den bästa retrokomponisten Nicolas Dupont är att länka till reflexmate-tillståndet, så varje kompis i 1 är obligatorisk. Under reflexmate-2 är varje kompis i 2 obligatorisk osv. Så vi kan konvergera mot en värld där retrograd analys förutsätter perfekt spel. Men kom ihåg att det primära målet är att schackkomposition är en konstnärlig: att uppnå coola effekter är det inte nödvändigtvis för att göra retroanalys lättare.
lvella
2019-11-30 00:33:11 UTC
view on stackexchange narkive permalink

Som andra har sagt, är nuvarande motorer inte avsedda att göra det. Men ur ett teoretiskt datavetenskapligt perspektiv är det "möjligt", även om det sannolikt är omöjligt.

Precis som en "framåt" schackmotor kan högst söka några (dussintals?) Drag i framtiden (eftersom möjligheter exploderar exponentiellt), skulle en bakåtmotor drabbas av exakt samma begränsning.

Jag tror att det är relativt enkelt att räkna upp alla lagliga bakåtflyttningar från ett visst kortstatus (i motsats till vad andra har sagt), men antalet av möjligheter exploderar exponentiellt ju längre tillbaka vi går.

Hur som helst, eftersom antalet styrelser är begränsade är det teoretiskt "möjligt" att skriva ett sådant program: med tillräckligt med tid kommer en dator att analysera alla möjliga och slutligen slutar med ett giltigt spel fram till den punkten (det är inte unikt; många spel kan leda till samma tillstånd), eller dra slutsatsen att en sådan position är omöjlig (även om det tar många gånger universums ålder att få där, därav citaten om "möjligt"). Det här är vad vi datatekniker kallar ett avgörbart problem. Ett sådant tillvägagångssätt är förmodligen inte genomförbart (eftersom det verkligen inte är möjligt för "framåtchack").

Men moderna schackmotorer räknar inte upp alla möjligheter. Istället använder de mycket avancerade heuristik för att bestämma sannolikheten för en rörelse, och de presterar mycket bra mot människor. Det verkar för mig att liknande heuristik och tekniker kan användas för att skapa ett bakåtspel av schack i en mjukvara som fungerar åtminstone ibland.

Jag tvivlar inte på att vi skulle kunna bygga ett spel som leder till en rättslig ställning i acceptabel tid i de flesta fall. Detta resultat skulle dock nästan positivt vara meningslöst, eftersom vi skulle behöva släppa det implicita antagandet att spelet "vettigt". Vi skulle med största sannolikhet få ett spel där först bara bönderna rör sig i position, sedan blir alla saknade bitar kooperativa, och äntligen flyttas varje bit till position som urverk.
Det kan vara så att det rekonstruerade juridiska spelet är "ologiskt", men jag tvivlar starkt på att det finns så många "ologiska" juridiska vägar som leder till en logisk styrelsestatus, speciellt om positionsanalys används för att hjälpa till med återuppbyggnaden. I själva verket är de "logiska" möjligheterna det som kan hjälpa en bakåtmotor att filtrera bort de osannolika banorna.
jpa
2019-11-30 13:23:34 UTC
view on stackexchange narkive permalink

Det är sant att med utgångspunkt från målpositionen kommer det att vara möjligt att söka efter möjliga tidigare drag. Det finns emellertid ett tillvägagångssätt som kan ge ett rimligt spel som träffar målpositionen.

I normala schackmotorer får datorn varje position med vissa kriterier, till exempel hur många bitar den har kvar. Syftet med poängen är att bestämma hur sannolikt det är att vinna från den positionen.

Man kan istället använda en annan uppsättning poängkriterier, till exempel hur många bitar som finns på rätt platser, och om uppsättningen av kvarvarande bitar matchar målet.

Att placera två sådana motorer som spelar ett normalt framspel-spel mot varandra kan antagligen generera ett spel som hamnar i målpositionen.

Extra: En rolig förlängning skulle vara att använda den normala poängen för att förutsäga motståndarens drag och målpoängen för schackmotorns egna drag. På detta sätt skulle schackmotorn för att försöka tvinga en motspelare som spelar för att hamna i den specifika positionen. Naturligtvis skulle detta endast vara möjligt för en liten delmängd av positioner.

alphacapture
2019-12-01 19:25:27 UTC
view on stackexchange narkive permalink

Även om det för närvarande inte är möjligt att skriva en AI som gör det bättre än människor, finns det några relevanta program under rubriken "retro, programy, úlohy" här

allo
2019-12-01 00:31:19 UTC
view on stackexchange narkive permalink

Ur ren teoretisk synvinkel: Ja, det är möjligt.

Du behöver bara spela fram alla möjliga spel tills du hittar minst ett spel som innehåller den aktuella positionen. Sedan använder du rörelserna som den spelade framåt för att göra din retroanalys.

Men du kan inte bara göra det, eftersom mängden möjliga spel är enorm. Så denna punkt är bara ett bevis på att det är möjligt i teorin. I praktiken är frågan om det går att hantera på en rimlig tid.

Jag antar att det går att genomföra genom att utvidga några av de nuvarande planeringsmetoderna, men detaljerna är inte enkla. Jag skulle rekommendera att ställa frågan om en AI kan uppnå detta på https://ai.stackexchange.com, eftersom det är en intressant fråga om spel-AI och kan utlösa några ganska intressanta svar på den webbplatsen.



Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 4.0-licensen som det distribueras under.
Loading...