Esiste un algoritmo perfetto per gli scacchi? [chiuso]


109

Recentemente ho discusso con una persona non programmatrice sulle possibilità dei computer di scacchi. Non sono esperto in teoria, ma penso di saperne abbastanza.

Ho sostenuto che non poteva esistere una macchina di Turing deterministica che vincesse sempre o andasse in stallo agli scacchi. Penso che, anche se cerchi l'intero spazio di tutte le combinazioni di mosse del giocatore1 / 2, la singola mossa che il computer decide su ogni passo si basa su un'euristica. Essendo basato su un'euristica, non batte necessariamente TUTTE le mosse che l'avversario potrebbe fare.

Il mio amico pensava, al contrario, che un computer avrebbe sempre vinto o pareggiato se non avesse mai fatto una mossa "sbagliata" (comunque lo definisci?). Tuttavia, essendo un programmatore che ha preso CS, so che anche le tue buone scelte - dato un saggio avversario - possono costringerti a fare mosse "sbagliate" alla fine. Anche se sai tutto, la tua prossima mossa è avida di abbinare un'euristica.

La maggior parte dei computer di scacchi cerca di abbinare un possibile finale di partita al gioco in corso, che è essenzialmente un traceback di programmazione dinamico. Anche in questo caso, l'endgame in questione è comunque evitabile.

Modifica: Hmm ... sembra che ho arruffato alcune piume qui. Quello è buono.

Ripensandoci, sembra che non ci siano problemi teorici nel risolvere un gioco finito come gli scacchi. Direi che gli scacchi sono un po 'più complicati della dama in quanto una vittoria non è necessariamente per esaurimento numerico dei pezzi, ma per un compagno. La mia affermazione originale probabilmente è sbagliata, ma penso di aver sottolineato qualcosa che non è ancora stato dimostrato in modo soddisfacente (formalmente).

Immagino che il mio esperimento mentale fosse che ogni volta che viene preso un ramo dell'albero, l'algoritmo (o percorsi memorizzati) deve trovare un percorso per un compagno (senza essere accoppiato) per ogni possibile ramo sull'avversario si muove. Dopo la discussione, comprerò che data più memoria di quanto possiamo sognare, tutti questi percorsi potrebbero essere trovati.


1
+1: ottimo argomento. Tuttavia, penso che questo dovrebbe essere considerato wiki, come dimostrato dalla varietà e dal volume delle risposte.
IAbstract

1
"pensi di aver segnalato qualcosa che non è ancora stato dimostrato in modo soddisfacente"? Cosa hai sottolineato che non è stato dimostrato formalmente?
S.Lott

2
ack! come possono esserci 20 risposte diverse a una domanda così in bianco e nero! (nessun gioco di parole).
Peter Recore

5
Anch'io sono sbalordito dal numero di persone che pubblicano le loro risposte speculative ignare che la risposta è stata effettivamente determinata matematicamente - risposta nel senso che è stato dimostrato che gli scacchi hanno una soluzione - non è pratico calcolarla.
DJClayworth

3
Mi ricorda la barzelletta sul computer che gioca a scacchi perfetti. Giocando al bianco, pensa e pensa e pensa e poi .... si dimette!

Risposte:


104

"Ho sostenuto che non poteva esistere una macchina di Turing deterministica che vincesse sempre o andasse in stallo agli scacchi".

Non hai ragione. Può esserci una macchina del genere. Il problema è l'enormità dello spazio statale che dovrebbe cercare. È finito, è DAVVERO grande.

Ecco perché gli scacchi ricorrono all'euristica: lo spazio degli stati è troppo grande (ma finito). Anche enumerare - molto meno cercare ogni mossa perfetta lungo ogni corso di ogni possibile gioco - sarebbe un problema di ricerca molto, molto grande.

Le aperture sono programmate per portarti a metà partita che ti dà una posizione "forte". Non è un risultato noto. Anche le partite finali, quando ci sono meno pezzi, sono difficili da enumerare per determinare la migliore mossa successiva. Tecnicamente sono finiti. Ma il numero di alternative è enorme. Anche 2 torri + re ha qualcosa come 22 possibili mosse successive. E se ci vogliono 6 mosse per accoppiarsi, stai guardando 12.855.002.631.049.216 mosse.

Fai i conti sulle mosse di apertura. Anche se ci sono solo circa 20 mosse di apertura, ci sono qualcosa come circa 30 seconde mosse, quindi per la terza mossa stiamo guardando 360.000 stati di gioco alternativi.

Ma i giochi di scacchi sono (tecnicamente) finiti. Enorme, ma finito. Ci sono informazioni perfette. Ci sono stati di inizio e fine definiti, non ci sono lanci di monete o lanci di dadi.


22
Tutti i finali con 6 pezzi o meno sono stati enumerati e risolti. Vedi tablebase e bitbase qui: en.wikipedia.org/wiki/Tablebase . Ad esempio, c'è un finale KQNKRBN in cui sono necessarie 517 mosse per forzare un compagno! Ma il numero totale di partite di scacchi è di circa (10 ^ (10 ^ 50)).
HTTP 410

2
Progettato per vincere è una cosa. Enumerato in modo esauriente è una cosa diversa. In ogni caso, l'informazione è perfetta - tutto è noto - il gioco è deterministico per definizione.
S.Lott

11
@RoadWarrior: non sono d'accordo. Casuale si applica al tempo. Dio lancia i dadi. Random non si applica agli scacchi, per definizione. Chess ha informazioni complete. Il tempo ha effetti quantistici: non può essere completo.
S.Lott

3
Ciò che rende difficile la previsione del tempo sono i fattori caotici non lineari, non gli effetti quantistici. Data una potenza di calcolo e una conoscenza sufficienti, potremmo in teoria creare una previsione meteorologica "corretta".
HTTP 410

3
@monojohnny: Le regole vietano tre ripetizioni della stessa posizione. Gli scacchi sono semplicemente finiti. È grande ma finito.
S.Lott

72

Non so quasi nulla di ciò che è stato effettivamente scoperto sugli scacchi. Ma come matematico, ecco il mio ragionamento:

Per prima cosa dobbiamo ricordare che White va per primo e forse questo gli dà un vantaggio; forse dà un vantaggio al nero.

Supponiamo ora che non esista una strategia perfetta per il Nero che gli consenta sempre di vincere / chiudere. Ciò implica che, indipendentemente da ciò che fa il Nero, c'è una strategia che il Bianco può seguire per vincere. Aspetta un minuto - Questo significa che è una strategia perfetta per il Bianco!

Questo ci dice che almeno uno dei due giocatori fa hanno una strategia perfetta che permette che il giocatore vince sempre o disegnare.

Ci sono solo tre possibilità, quindi:

  • Il bianco può sempre vincere se gioca perfettamente
  • Il nero può sempre vincere se gioca perfettamente
  • Un giocatore può vincere o pareggiare se gioca perfettamente (e se entrambi i giocatori giocano perfettamente, si trovano sempre in stallo)

Ma quale di queste è effettivamente corretta, forse non lo sapremo mai.

La risposta alla domanda è : deve esserci un algoritmo perfetto per gli scacchi, almeno per uno dei due giocatori.


2
+1, questo è davvero un ottimo modo per spiegarlo. Non posso credere di non averci mai pensato!
Zifre

2
Perché il nero che non ha una strategia perfetta implica che il bianco abbia una strategia perfetta? Che dire se entrambi i giocatori non hanno una strategia perfetta? Se la tua implicazione fosse vera, non sarebbe vero per ogni partita a 2 giocatori, il che significa che ogni gioco ha una strategia perfetta?
John M Naglick

8
@john: Poiché gli scacchi hanno informazioni perfette e nessun elemento casuale (a differenza di molti, molti altri giochi per 2 giocatori), l'unico modo in cui è possibile che non esista una strategia perfetta per il nero sarebbe se il bianco potesse forzare una vittoria nonostante qualsiasi tentativo di nero - in altre parole, se esiste una strategia perfetta per il bianco.
Dave Sherohman,

2
In realtà questa logica non sempre è valida, ma in questo caso è vera.
BlueRaja - Danny Pflughoeft

4
@john "perché tante discussioni qui" - perché alcune persone non conoscono la risposta, ma pubblicano comunque qui.
DJClayworth

30

È stato dimostrato per il gioco della dama che un programma può sempre vincere o pareggiare la partita. Cioè, non c'è scelta di mosse che un giocatore può fare per costringere l'altro giocatore a perdere.

I ricercatori hanno trascorso quasi due decenni esaminando i 500 miliardi di miliardi di possibili posizioni di dama, che tra l'altro è ancora una frazione infinitamente piccola del numero di posizioni di scacchi. Lo sforzo dei dama includeva i migliori giocatori, che hanno aiutato il team di ricerca a programmare le regole pratiche dei dama in un software che classificava le mosse come riuscite o non riuscite. Quindi i ricercatori hanno eseguito il programma, su una media di 50 computer al giorno. Alcuni giorni, il programma girava su 200 macchine. Mentre i ricercatori monitoravano i progressi e ottimizzavano il programma di conseguenza. In effetti, Chinook ha battuto gli umani per vincere il campionato mondiale di dama nel 1994.

Sì, puoi risolvere gli scacchi, no, non lo farai presto.


6
"[Non] non ti divertirai presto" è un po 'un eufemismo. Oltre al limite della durata prevista dell'universo, hai un problema di archiviazione: il numero di stati negli scacchi supera di gran lunga i 500 miliardi di miliardi di pedine; infatti, supera il numero di particelle nell'universo.
Michael Dorfman

30
"[...] infatti, supera il numero di particelle nell'universo.". Finché non supera il numero di stati delle particelle nell'universo, c'è ancora speranza ;-)
Carsten

1
cosa succede quando il programma che costringe sempre l'avversario a perdere sta giocando contro se stesso ????
John Demetriou

1
@BCS hmm, cosa succede se c'è una previsione in cui se sto giocando come secondo giocatore e l'altro sta usando la stessa euristica di me, segui questa euristica per vincere e se il primo giocatore ha un'euristica simile ???? ?
John Demetriou

1
quello che sto dicendo è che se c'è un algoritmo perfetto ed entrambi i giocatori ce l'hanno, ci sarà un numero indefinito di probabilità che l'algoritmo possa cambiare affinché sia ​​perfetto
John Demetriou

15

Questa non è una domanda sui computer, ma solo sul gioco degli scacchi.

La domanda è: esiste una strategia di sicurezza per non perdere mai la partita? Se esiste una tale strategia, allora un computer che sa tutto può sempre usarla e non è più un euristico.

Ad esempio, il gioco tris normalmente viene giocato in base all'euristica. Ma esiste una strategia di sicurezza. Qualunque cosa si muova l'avversario, trovi sempre un modo per evitare di perdere la partita, se lo fai fin dall'inizio.

Quindi dovresti provare che una tale strategia esiste o meno anche per gli scacchi. Fondamentalmente è lo stesso, solo lo spazio delle possibili mosse è molto più grande.


Quindi, chi ha avuto l'impulso di votare la mia risposta? C'è qualcosa che non va? Vuoi metterti davanti?
ypnos

@ypnos, non ho votato per niente la tua risposta. Ho appena commentato per dire di non lasciarti abbattere da elettori casuali. Hai guadagnato 30 ripetizioni e perso solo 1. Inoltre, +1;)
mmcdole

1
Diversi motivi per downvote. 1) È noto che esiste un algoritmo per risolvere il gioco, è solo che l'algoritmo non è pratico da calcolare utilizzando qualsiasi tecnologia immaginabile. 2) Risolvere il gioco NON implica che esista una strategia di sicurezza. Il tris è risolto, ma non esiste una strategia per il secondo giocatore che eviti una sconfitta.
DJClayworth

2
"Questa non è una domanda sui computer, ma solo sul gioco degli scacchi". Ebbene, l'informatica in realtà non riguarda i computer. Sono solo uno strumento. L'informatica funziona senza computer.
Janus Troelsen

1
In realtà è una domanda sui computer, poiché la domanda è se possa esistere una Macchina di Turing (= Computer) che risolva gli scacchi.
SDwarfs

14

Arrivo a questo thread molto tardi e che hai già realizzato alcuni dei problemi. Ma come ex maestro ed ex programmatore di scacchi professionista, ho pensato di poter aggiungere alcuni fatti e cifre utili. Esistono diversi modi per misurare la complessità degli scacchi :

  • Il numero totale di partite di scacchi è di circa 10 ^ (10 ^ 50). Quel numero è inimmaginabilmente grande.
  • Il numero di partite di scacchi di 40 mosse o meno è di circa 10 ^ 40. È ancora un numero incredibilmente alto.
  • Il numero di possibili posizioni di scacchi è di circa 10 ^ 46.
  • L'albero completo di ricerca degli scacchi (numero Shannon) è di circa 10 ^ 123, basato su un fattore di ramificazione medio di 35 e una durata media del gioco di 80.
  • Per fare un confronto, il numero di atomi nell'universo osservabile è comunemente stimato intorno a 10 ^ 80.
  • Tutti i finali di 6 pezzi o meno sono stati raccolti e risolti .

La mia conclusione: sebbene gli scacchi siano teoricamente risolvibili, non avremo mai i soldi, la motivazione, la potenza di calcolo o lo spazio di archiviazione per farlo.


3
Andiamo, forza. Devi pensare al problema in modo diverso. Non pensare al numero di giochi, perché le trasposizioni e gli algoritmi alfa-beta e simili lo riducono immensamente. Pensa alle posizioni sulla scacchiera (10 ^ 60) o alle combinazioni di pezzi degli scacchi (100 milioni). Con il Quantum Computing, è banale.
lkessler

2
Alpha-beta in questo contesto (risolvere gli scacchi) richiederebbe una perfetta funzione di valutazione. Così come le posizioni sulla scacchiera e le combinazioni di pezzi. Non abbiamo una funzione di valutazione perfetta, quindi il calcolo quantistico non ci aiuta.
HTTP 410

1
Ogni volta che penso che qualcosa sia "banale", e sono sicuro che nessuno l'ha già fatto, sono anche sicuro di aver sbagliato almeno una volta.
Dean J

2
@lkessler: le posizioni nel consiglio di amministrazione non raccontano l'intera storia. Almeno un po 'di storia del gioco è necessaria per l'arrocco o le catture o la pesca en passant a causa della mancanza di cattura o mossa del pedone, e l'intera storia per la pesca per ripetizione. Inoltre, poiché recentemente è stato un notevole risultato di ricerca per un computer quantistico fattore 15, direi che nulla è banale con il calcolo quantistico in questo momento.
David Thornley

2
Per fare un confronto qui, se riesci a generare tutte le possibili posizioni di scacchi, puoi banalmente forzare qualsiasi cifra con una chiave a 128 bit, poiché 10 ^ 46 è circa 2 ^ 152 o 2 ^ 153. Ci sono ottime ragioni per pensare che ciò sia impossibile prima della morte termica dell'Universo.
David Thornley

9

Alcuni giochi, infatti, sono stati risolti. Tic-Tac-Toe è molto facile per cui costruire un'IA che vincerà o legherà sempre. Recentemente, anche Connect 4 è stato risolto (e si è dimostrato ingiusto nei confronti del secondo giocatore, poiché una giocata perfetta gli farà perdere).

Gli scacchi, tuttavia, non sono stati risolti e non credo che ci sia alcuna prova che sia un gioco leale (cioè, se il gioco perfetto risulti in un pareggio). Parlando rigorosamente da una prospettiva teorica, Chess ha un numero finito di possibili configurazioni di pezzi. Pertanto, lo spazio di ricerca è finito (anche se incredibilmente grande). Pertanto, esiste una macchina di Turing deterministica che potrebbe suonare perfettamente. Se uno potrebbe mai essere costruito, tuttavia, è un'altra questione.


8

Il desktop medio di $ 1000 sarà in grado di risolvere i dama in soli 5 secondi entro il 2040 (calcoli 5x10 ^ 20).

Anche a questa velocità, 100 di questi computer impiegherebbero circa 6,34 x 10 ^ 19 anni per risolvere gli scacchi. Ancora non fattibile. Neanche vicino.

Intorno al 2080, i nostri desktop medi avranno circa 10 ^ 45 calcoli al secondo. Un singolo computer avrà la potenza di calcolo per risolvere gli scacchi in circa 27,7 ore. Sarà sicuramente fatto entro il 2080 finché la potenza di calcolo continuerà a crescere come negli ultimi 30 anni.

Entro il 2090, esisterà abbastanza potenza di calcolo su un desktop da $ 1000 per risolvere gli scacchi in circa 1 secondo ... quindi entro quella data sarà completamente banale.

Pedine dato era risolto nel 2007, e la potenza di calcolo di risolverlo in 1 secondo sarà in ritardo di circa 33-35 anni, probabilmente possiamo grosso modo stimare scacchi saranno risolti da qualche parte tra il 2055 e il 2057. Probabilmente prima da quando sarà disponibile più potenza di calcolo (come avverrà tra 45 anni), sarà possibile dedicarne di più a progetti come questo. Tuttavia, direi il 2050 al più presto e il 2060 al più tardi.

Nel 2060, ci vorrebbero 100 desktop medi 3,17 x 10 ^ 10 anni per risolvere gli scacchi. Renditi conto che sto usando un computer da $ 1000 come benchmark, mentre probabilmente saranno disponibili sistemi e supercomputer più grandi poiché anche il loro rapporto prezzo / prestazioni sta migliorando. Inoltre, il loro ordine di grandezza della potenza di calcolo aumenta a un ritmo più veloce. Considera che un supercomputer ora può eseguire calcoli 2,33 x 10 ^ 15 al secondo e un computer da $ 1000 circa 2 x 10 ^ 9. In confronto, 10 anni fa la differenza era 10 ^ 5 invece di 10 ^ 6. Entro il 2060 la differenza dell'ordine di grandezza sarà probabilmente 10 ^ 12, e anche questo potrebbe aumentare più velocemente del previsto.

Molto dipende dal fatto che noi come esseri umani abbiamo o meno la spinta a risolvere gli scacchi, ma la potenza di calcolo lo renderà fattibile in questo periodo (finché il nostro ritmo continua).

In un'altra nota, il gioco del Tic-Tac-Toe, che è molto, molto più semplice, ha 2.653.002 calcoli possibili (con una tavola aperta). La potenza di calcolo per risolvere Tic-Tac-Toe in circa 2,5 secondi (1 milione di calcoli al secondo) è stata raggiunta nel 1990.

Andando indietro, nel 1955, un computer aveva il potere di risolvere Tic-Tac-Toe in circa 1 mese (1 calcolo al secondo). Ancora una volta, questo si basa su ciò che si otterrebbe da $ 1000 se si potesse impacchettarlo in un computer (un desktop da $ 1000 ovviamente non esisteva nel 1955), e questo computer sarebbe stato dedicato alla risoluzione di Tic-Tac-Toe ... che semplicemente non era il caso nel 1955. Il calcolo era costoso e non sarebbe stato utilizzato per questo scopo, anche se non credo che esista una data in cui Tic-Tac-Toe sia stato considerato "risolto" da un computer, ma io certo che è in ritardo rispetto all'effettiva potenza di calcolo.

Inoltre, prendi in considerazione che $ 1000 in 45 anni varranno circa 4 volte di meno di quanto non siano adesso, così tanti più soldi possono andare in progetti come questo mentre la potenza di calcolo continuerà a diventare più economica.


9
"Lo sapevi che le vendite di dischi da discoteca sono aumentate del 400% per l'anno che termina il 1976? Se queste tendenze continuano ... AAY!" - Disco Stu
Jeremy Friesner

2
La legge di Moore - La potenza di calcolo raddoppia ogni 18 mesi - probabilmente fallirà intorno al 2015. Oppure il design del processore del computer dovrà essere radicalmente diverso. Quindi il 2080 non è un obiettivo realistico.
Philip Smith,

3
@Philip: le velocità di clock del processore dei computer desktop sono aumentate solo leggermente dal 2003 e da allora i miglioramenti sono stati principalmente l'aumento della cache e dei core multipli. Poiché un processore da 3 GHz ha un ciclo di clock nel tempo necessario alla luce per spostarsi di 4 pollici / 10 cm, non ci si può aspettare che la velocità di clock aumenti indefinitamente. Inoltre, il parallelismo è tipicamente difficile. Proiettare un aumento esponenziale per cinquant'anni quando ha iniziato a crollare sette anni fa non sembra una scommessa sicura.
David Thornley,

1
@ David - è tutto vero. Ma manca il punto. Se si dimezza la dimensione dei componenti sul chip, gli elettroni vengono eseguiti il ​​doppio alla stessa velocità di clock. Questo è ciò che alimenta la legge di Moore.
Philip Smith

3
@Philip: Il dimezzamento non può ovviamente andare avanti per sempre. Un atomo di silicio ha un diametro di circa un quarto di nanometro e la fabbricazione di chip è già ridotta a decine di nanometri. Inoltre, a livelli quantistici le particelle obbediscono a regole statistiche, non a regole assolute, quindi è necessario spostare un numero sufficiente di elettroni alla volta per invocare la legge dei grandi numeri. Finora, la legge di Moore è stata da qualche parte tra una legge e una profezia che si autoavvera, ma a volte finirà abbastanza presto.
David Thornley

7

In realtà è possibile per entrambi i giocatori avere strategie vincenti in infinite partite senza un buon ordine; tuttavia, gli scacchi sono ben ordinati. Infatti, a causa della regola delle 50 mosse , esiste un limite massimo al numero di mosse che una partita può avere, e quindi ci sono solo un numero limitato di partite di scacchi possibili (che possono essere enumerate per risolvere esattamente .. teoricamente, almeno :)


4
Tecnicamente la regola delle cinquanta mosse, come la ripetizione di tre mosse (che limita anche le cose - ci sono un numero finito di posizioni possibili, quindi moltiplicare quel numero per tre ci dà un limite massimo) non causa un pareggio. Piuttosto, dà a entrambi i giocatori l'opportunità di richiedere un pareggio. Di solito, il giocatore perdente lo farà, ma non è obbligatorio. Pertanto, il seguente è un gioco del tutto legale: 1. Nc3 Nc6 2. Nb1 Nb8 3. Nc3 Nc6 4. Nb1 Nb8, ripetuto all'infinito. E se non sbaglio, non è stato smentito che non sia il risultato di due algoritmi perfetti che giocano come bianco e nero.
Lenoxus

6

Il tuo fine della tesi è supportata dal modo in cui moderni programmi di scacchi funzionano ora . Funzionano in questo modo perché è troppo dispendioso in termini di risorse codificare un programma di scacchi per funzionare in modo deterministico. Non necessariamente funzioneranno sempre in questo modo. È possibile che un giorno gli scacchi vengano risolti e, se ciò accadrà, sarà probabilmente risolto da un computer.


5

Per la cronaca, ci sono computer che possono vincere o pareggiare a dama . Non sono sicuro che lo stesso si possa fare per gli scacchi. Il numero di mosse è molto più alto. Inoltre, le cose cambiano perché i pezzi possono muoversi in qualsiasi direzione, non solo avanti e indietro. Penso, anche se non sono sicuro, che gli scacchi siano deterministici, ma che ci siano troppe mosse possibili per un computer per determinare attualmente tutte le mosse in un ragionevole lasso di tempo.


1
Può essere fatto, ma può essere fatto su un computer che probabilmente vedremo mai?
BCS

1
Probabilmente non nella nostra vita. Tutte le ricerche davvero interessanti sul campo vengono svolte nel gioco Go. :)
Bill the Lizard

La maggior parte dei bambini di 6 anni IIRC può essere qualsiasi computer in Go.
BCS

2
@BCS: non più. I migliori programmi Go stanno battendo giocatori di livello dan (professionisti) ora.
Bill the Lizard

1
@BlueRaja: Era il 2008. Non so quale sia il record attuale, ma MoGo ha battuto i professionisti con 6 e 7 pietre su un 19x19. ireport.cnn.com/docs/DOC-214010
Bill the Lizard

5

Penso che tu sia morto. Macchine come Deep Blue e Deep Thought sono programmate con una serie di giochi predefiniti e algoritmi intelligenti per analizzare gli alberi alle estremità di quei giochi. Questa è, ovviamente, una drammatica semplificazione eccessiva. C'è sempre la possibilità di "battere" il computer nel corso di una partita. Con questo intendo fare una mossa che costringe il computer a fare una mossa non ottimale (qualunque essa sia). Se il computer non riesce a trovare il percorso migliore prima del limite di tempo per lo spostamento, potrebbe benissimo commettere un errore scegliendo uno dei percorsi meno desiderabili.

Esiste un'altra classe di programmi di scacchi che utilizza l'apprendimento automatico reale o algoritmi di programmazione / evoluzione genetica. Alcuni programmi sono stati evoluti e utilizzano reti neurali, et al, per prendere decisioni. In questo tipo di casi, immagino che il computer possa commettere "errori", ma finire comunque con una vittoria.

C'è un libro affascinante su questo tipo di GP chiamato Blondie24 che potresti leggere. Si tratta di dama, ma potrebbe applicarsi agli scacchi.


È così che batti i computer di oggi a scacchi. Domani andrà meglio. Sono d'accordo con te, però, che Blondie24 è affascinante.
Bill the Lizard

Votato di nuovo. Questo post non merita un punteggio negativo.
Cybis

Sfortunatamente, il problema del gioco degli scacchi è troppo grande per il funzionamento dell'apprendimento automatico. Non avrebbero mai potuto ottenere un programma di apprendimento degli scacchi per giocare in modo divertente senza errori. L'euristica è migliore. Ma Brute Force era anche meglio. Il campo dell'apprendimento automatico ha imparato solo dal suo fallimento con gli scacchi.
lkessler

I programmi di scacchi non commettono errori a breve termine e i programmi migliori giocano meglio dei campioni del mondo. Penso che l'ultima versione di Rybka 64 bit sia valutata come 3200 ELO
Alex

5

Dalla teoria dei giochi, di cui tratta questa domanda, la risposta è sì Gli scacchi possono essere giocati perfettamente. Lo spazio di gioco è noto / prevedibile e sì, se avessi i computer quantistici di tuo nipote potresti probabilmente eliminare tutte le euristiche.

Potresti scrivere una perfetta macchina da tris oggi-un-giorno in qualsiasi linguaggio di scripting e suonerebbe perfettamente in tempo reale.

Othello è un altro gioco che i computer attuali possono facilmente giocare perfettamente, ma la memoria della macchina e la CPU avranno bisogno di un po 'di aiuto

Gli scacchi sono teoricamente possibili ma non praticamente possibili (nel 2008)

i-Go è complicato, il suo spazio di possibilità supera la quantità di atomi nell'universo, quindi potrebbe volerci del tempo per creare una macchina i-Go perfetta.



4
Tecnicamente, è teoria dei giochi combinatoria.
Anafory

5

Gli scacchi sono un esempio di gioco a matrice, che per definizione ha un risultato ottimale (si pensi all'equilibrio di Nash). Se i giocatori 1 e 2 eseguono mosse ottimali ciascuno, verrà SEMPRE raggiunto un determinato risultato (non si sa ancora se si tratti di una vittoria-pareggio-perdita).


5

Come programmatore di scacchi degli anni '70, ho decisamente un'opinione su questo. Quello che ho scritto circa 10 anni fa, è fondamentalmente vero ancora oggi:

"Lavoro incompiuto e sfide per i programmatori di scacchi"

Allora, pensavo che avremmo potuto risolvere gli scacchi in modo convenzionale, se fatto correttamente.

Checkers è stato risolto di recente (Yay, University of Alberta, Canada !!!) ma è stato effettivamente fatto Brute Force. Per giocare a scacchi in modo convenzionale, dovrai essere più intelligente.

A meno che, ovviamente, Quantum Computing diventi una realtà. Se è così, gli scacchi saranno risolti facilmente come Tic-Tac-Toe.

All'inizio degli anni '70 in Scientific American c'era una breve parodia che attirò la mia attenzione. Era un annuncio che il gioco degli scacchi era stato risolto da un computer di scacchi russo. Aveva stabilito che c'era una mossa perfetta per il bianco che avrebbe assicurato una vittoria con un gioco perfetto da entrambe le parti, e quella mossa è: 1. a4!


3

Molte risposte qui rendono i punti importanti della teoria del gioco:

  1. Gli scacchi sono un gioco finito e deterministico con informazioni complete sullo stato del gioco
  2. Puoi risolvere un gioco finito e identificare una strategia perfetta
  3. Gli scacchi sono comunque abbastanza grandi che non sarai in grado di risolverli completamente con un metodo di forza bruta

Tuttavia queste osservazioni mancano di un punto pratico importante: non è necessario risolvere perfettamente il gioco completo per creare una macchina imbattibile .

È infatti molto probabile che tu possa creare una macchina da scacchi imbattibile (cioè non perderà mai e costringerà sempre una vittoria o un pareggio) senza cercare nemmeno una piccola frazione del possibile spazio degli stati.

Le seguenti tecniche, ad esempio, riducono tutte in modo massiccio lo spazio di ricerca richiesto:

  • Tecniche di potatura degli alberi come Alpha / Beta o MTD-f riducono già notevolmente lo spazio di ricerca
  • Posizione vincente dimostrabile. Molti finali rientrano in questa categoria: non è necessario cercare KR vs K, ad esempio, è una vittoria comprovata. Con un po 'di lavoro è possibile dimostrare molte più vittorie garantite.
  • Quasi certe vittorie - per un gioco "abbastanza buono" senza errori stupidi (diciamo su ELO 2200+?) Molte posizioni degli scacchi sono quasi certe vittorie, per esempio un discreto vantaggio materiale (ad esempio un cavaliere extra) senza alcun vantaggio di posizione compensativo. Se il tuo programma può forzare una posizione del genere e ha un'euristica abbastanza buona per rilevare il vantaggio di posizione, può tranquillamente presumere che vincerà o almeno disegnerà con il 100% di probabilità.
  • Euristica della ricerca ad albero: con un riconoscimento di pattern sufficientemente buono, puoi concentrarti rapidamente sul sottoinsieme pertinente di mosse "interessanti". Questo è il modo in cui giocano i grandi maestri umani quindi non è chiaramente una cattiva strategia ..... e i nostri algoritmi di riconoscimento dei pattern migliorano costantemente
  • Valutazione del rischio: una migliore concezione della "rischiosità" di una posizione consentirà una ricerca molto più efficace concentrando la potenza di calcolo su situazioni in cui il risultato è più incerto (questa è una naturale estensione della ricerca di quiescenza )

Con la giusta combinazione delle tecniche di cui sopra, mi sentirei a mio agio nell'affermare che è possibile creare una macchina per giocare a scacchi "imbattibile". Probabilmente non siamo troppo lontani dalla tecnologia attuale.

Nota che è quasi certamente più difficile dimostrare che questa macchina non può essere battuta. Probabilmente sarebbe qualcosa di simile all'ipotesi di Reimann: saremmo abbastanza sicuri che funzioni perfettamente e avremmo risultati empirici che dimostrano che non ha mai perso (compresi alcuni miliardi di pareggi di scala contro se stesso), ma non avremmo effettivamente la capacità di Provalo.

Nota aggiuntiva sulla "perfezione":

Sto attento a non descrivere la macchina come "perfetta" nel senso teorico del gioco perché ciò implica condizioni aggiuntive insolitamente forti, come:

  • Vincere sempre in ogni situazione in cui è possibile forzare una vittoria, non importa quanto complessa possa essere la combinazione vincente. Ci saranno situazioni al confine tra vittoria / pareggio in cui questo è estremamente difficile da calcolare perfettamente.
  • Sfruttare tutte le informazioni disponibili sulla potenziale imperfezione nel gioco del tuo avversario, ad esempio dedurre che il tuo avversario potrebbe essere troppo avido e giocare deliberatamente una linea leggermente più debole del solito sulla base del fatto che ha un maggiore potenziale per indurre il tuo avversario a commettere un errore. Contro avversari imperfetti può infatti essere ottimale fare una sconfitta se si stima che il tuo avversario probabilmente non individuerà la vittoria forzata e ti dà una maggiore probabilità di vincere te stesso.

La perfezione (in particolare per gli avversari imperfetti e sconosciuti) è un problema molto più difficile del semplice essere imbattibili.


Avere avversari imperfetti non è un vero problema. Questo fa sì che il giocatore perfetto vinca / pareggi (qualunque sia il risultato perfetto) in meno mosse. Una mossa ottimale in ogni posizione è sempre migliore o uguale alle altre mosse possibili (per definizione). Quindi una mossa non ottimale consente al tuo avversario di raggiungere uno stato finale ottimale (vittoria / pareggio) prima o addirittura consente di forzare un risultato migliore. Ad esempio, se il nero perde sempre se il bianco gioca perfettamente, è possibile che il nero vinca, se il bianco gioca solo una singola mossa subottimale. Ma sì, questo dovrebbe aumentare un po 'la complessità dell'analisi.
SDwarfs

@Stefan: gli avversari imperfetti sono un grosso problema se ti interessa un gioco ottimale . In particolare, puoi concepire situazioni in cui è effettivamente preferibile giocare una mossa perdente (cioè una mossa in cui un avversario perfetto ti batterebbe sicuramente) se sai che la probabilità che il tuo avversario commetta un errore è sufficientemente alta.
mikera

giocare ottimale a mio avviso significa ottenere il miglior risultato possibile con zero rischi. Il tuo avversario è probabilmente "debole" ma quando giochi quella mossa perdente lui / lei può sfortunatamente giocare una buona mossa per sbaglio. Prendersi cura degli avversari non ottimali è rilevante solo se c'è solo la scelta tra perdere mosse in cui uno di loro ha maggiori possibilità di errore da parte dell'avversario (gioco non ottimale) che porta effettivamente a un pareggio o alla vittoria.
SDwarfs

1
Questa non è la solita definizione di ottimo nella teoria dei giochi. Ottimale di solito significa massimizzare il risultato atteso . In tal caso, un giocatore ottimale accetterà dei rischi a condizione che ottenga in media un risultato migliore .
mikera

In tal caso hai perfettamente ragione!
SDwarfs

2

se cerchi l'intero spazio di tutte le combinazioni di mosse del giocatore1 / 2, la singola mossa che il computer decide su ogni passo si basa su un'euristica.

Ci sono due idee in competizione lì. Uno è che cerchi ogni possibile mossa e l'altro è che decidi in base a un'euristica. Un'euristica è un sistema per fare una buona ipotesi. Se stai cercando in ogni mossa possibile, non stai più indovinando.


In realtà, la citazione è giusta. I programmi esaminano tutte le mosse possibili per entrambe le parti nella posizione corrente e utilizzano l'euristica per trovare una buona mossa per guidare il gioco nella direzione di una posizione favorevole per il computer.
Bill the Lizard

1
No, non esaminano tutte le possibili mosse. Usano un'euristica di movimento nullo per potare l'albero.
Alex

2

"Esiste un algoritmo perfetto per gli scacchi?"

Si C'è. Forse spetta al bianco vincere sempre. Forse spetta al nero vincere sempre. Forse è almeno che entrambi leghino sempre. Non sappiamo quale, e non lo sapremo mai, ma certamente esiste.

Guarda anche


1
Essendo un giocatore di scacchi abbastanza decente e avendo studiato a fondo il problema nel corso degli anni, sono sicuro al 99,9% che la strategia perfetta negli scacchi per entrambi i giocatori risulti in un pareggio (come è stato dimostrato con le dama). Ci sono anche prove che all'aumentare della forza del giocatore, aumenta anche la percentuale di pareggi.
mikera


2

È perfettamente risolvibile.

Ci sono 10 ^ 50 posizioni dispari. Ogni posizione, secondo i miei calcoli, richiede un minimo di 64 byte rotondi da memorizzare (ogni quadrato ha: 2 bit di affiliazione, 3 bit di pezzo). Una volta che sono state raccolte, le posizioni che sono scacco matto possono essere identificate e le posizioni possono essere confrontate per formare una relazione, mostrando quali posizioni portano ad altre posizioni in un grande albero dei risultati.

Quindi, il programma deve solo trovare le radici di scacco matto da un solo lato più basse, se esiste una cosa del genere. In ogni caso, gli scacchi sono stati risolti abbastanza semplicemente alla fine del primo paragrafo.


1

Sono convinto solo al 99,9% dall'affermazione che la dimensione dello spazio statale rende impossibile sperare in una soluzione.

Certo, 10 ^ 50 è un numero incredibilmente grande. Chiamiamo la dimensione dello spazio degli stati n.

Qual è il limite del numero di mosse nella partita più lunga possibile? Poiché tutti i giochi terminano con un numero finito di mosse, esiste un tale limite, chiamalo m.

Partendo dallo stato iniziale, non puoi enumerare tutte le n mosse nello spazio O (m)? Certo, ci vuole O (n) tempo, ma gli argomenti della dimensione dell'universo non affrontano direttamente questo. O (m) spazio potrebbe anche non essere molto. Per O (m) space non potresti anche tenere traccia, durante questo attraversamento, se la continuazione di uno stato lungo il percorso che stai attraversando porta a EitherMayWin, EitherMayForceDraw, WhiteMayWin, WhiteMayWinOrForceDraw, BlackMayWin o BlackMayWinOrForceDraw? (C'è un reticolo a seconda di chi è il turno, annota ogni stato nella storia della tua traversata con il reticolo si incontra.)

A meno che non mi manchi qualcosa, questo è un algoritmo O (n) tempo / O (m) spazio per determinare in quale delle possibili categorie rientrano gli scacchi. Wikipedia cita una stima dell'età dell'universo approssimativamente al 10 ^ 60 ° tempo di Planck. Senza entrare in un argomento di cosmologia, supponiamo che sia rimasto molto tempo prima del caldo / freddo / qualunque morte dell'universo. Questo ci lascia la necessità di valutare una mossa ogni 10 ^ 10 volte di Planck o ogni 10 ^ -34 secondi. È un tempo incredibilmente breve (circa 16 ordini di grandezza più brevi dei tempi più brevi mai osservati). Diciamo ottimisticamente che con un'implementazione super-duper-buona in esecuzione sulla linea di tecnologia presente-o-prevista-non-quantistica-P-è-un-sottoinsieme-appropriato-di-NP potremmo sperare di valutare (prendi un un passo avanti, classificare lo stato risultante come uno stato intermedio o uno dei tre stati finali) a una velocità di 100 MHz (una volta ogni 10 ^ -8 secondi). Poiché questo algoritmo è molto parallelizzabile, questo ci lascia la necessità di 10 ^ 26 di tali computer o circa uno per ogni atomo del mio corpo, insieme alla capacità di raccogliere i loro risultati.

Suppongo che ci sia sempre un pizzico di speranza per una soluzione di forza bruta. Potremmo essere fortunati e, esplorando solo una delle possibili mosse di apertura del bianco, entrambi ne scegliamo una con fanout molto inferiore alla media e una in cui il bianco vince sempre o vince o pareggia.

Potremmo anche sperare di ridurre un po 'la definizione di scacchi e convincere tutti che moralmente è ancora lo stesso gioco. Abbiamo davvero bisogno di richiedere che le posizioni si ripetano 3 volte prima di un pareggio? Dobbiamo davvero fare in modo che la festa in fuga dimostri la capacità di fuggire per 50 mosse? Qualcuno capisce anche cosa diavolo è la regola dell'en passant ? ;) Più seriamente, abbiamo davvero bisogno di forzare un giocatore a muovere (invece di pescare o perdere) quando la sua unica mossa per sfuggire al controllo o uno stallo è una cattura en passant ? Potremmo limitare la scelta dei pezzi a cui un pedone può essere promosso se la promozione non regina desiderata non porta a un check o scacco matto immediato?

Sono anche incerto su quanto consentire a ciascun computer di accedere basato su hash a un ampio database di stati di fine partita e sui loro possibili risultati (che potrebbero essere relativamente fattibili sull'hardware esistente e con i database di fine gioco esistenti) potrebbe aiutare a ridurre la ricerca in anticipo. Ovviamente non puoi memorizzare l'intera funzione senza O (n) storage, ma potresti scegliere un intero grande e memorizzare molti endgame enumerando all'indietro da ogni possibile (o anche non facilmente dimostrabile impossibile, suppongo) end state.


1
Il tuo m = 5898. Le regole degli scacchi FIDE definiscono che devi muovere un pedone o prendere un pezzo (qualcosa che cambia irreversibilmente il gioco) almeno ogni 50 mosse (chiamata regola delle 50 mosse) o uno dei giocatori può richiedere la patta. È stato calcolato che la partita più lunga possibile è di 5898 mosse, se entrambi i giocatori collaborano e chiedono la patta il prima possibile. Non ha senso continuare a giocare, se entrambi i giocatori possono richiedere un pareggio. Se un giocatore nota che sta perdendo, può richiedere il pareggio, dando lo stesso risultato. Vedi: chess.com/blog/kurtgodden/the-longest-possible-chess-game
SDwarfs

1
Nota: m = 5898 è il numero di "mosse". Il numero massimo di mezze mosse è (118-3) * 100 + 3 * 99 = 11797. Puoi trovare la prova qui (tedesco!): De.wikipedia.org/wiki/50-Z%C3%BCge-Regel# Schachmathematik
SDwarfs

1

So che questo è un po 'un bernoccolo, ma devo mettere i miei 5 centesimi qui. È possibile che un computer, o una persona del resto, finisca ogni singola partita di scacchi a cui partecipa, in una vittoria o in una situazione di stallo.

Per ottenere ciò, tuttavia, devi conoscere con precisione ogni possibile mossa e reazione e così via, fino a ogni singolo possibile risultato del gioco, e per visualizzarlo, o per fare un modo semplice di analizzare queste informazioni, pensa a come una mappa mentale che si ramifica costantemente.

Il nodo centrale sarebbe l'inizio del gioco. Ogni ramo di ogni nodo simboleggia una mossa, ognuna diversa dalle sue mosse fratelli. Presentarlo in questo maniero richiederebbe molte risorse, soprattutto se lo facessi sulla carta. Su un computer, questo richiederebbe forse centinaia di Terrabyte di dati, poiché avresti molte mosse ripetitive, a meno che tu non faccia tornare indietro i rami.

Memorizzare tali dati, tuttavia, sarebbe poco plausibile, se non impossibile. Fare in modo che un computer riconosca la mossa più ottimale per estrarre le (al massimo) 8 mosse immediatamente possibili, sarebbe possibile, ma non plausibile ... poiché quel computer dovrebbe essere in grado di elaborare tutti i rami oltre quella mossa, fino alla conclusione, conta tutte le conclusioni che si traducono in una vittoria o in uno stallo, quindi agisci su quel numero di conclusioni vincenti contro conclusioni perse, e ciò richiederebbe RAM in grado di elaborare i dati nei Terrabyte, o più! E con la tecnologia odierna, un computer del genere richiederebbe più del saldo in banca dei 5 uomini e / o donne più ricchi del mondo!

Quindi, dopo tutta quella considerazione, potrebbe essere fatto, tuttavia, nessuno potrebbe farlo. Un compito del genere richiederebbe 30 delle menti più brillanti oggi in vita, non solo negli scacchi, ma anche nella scienza e nella tecnologia informatica, e un tale compito potrebbe essere completato solo su un (mettiamolo interamente in una prospettiva di base) ... estremamente in definitiva iper computer super-duper ... che non potrebbe esistere per almeno un secolo. Sarà fatto! Solo non in questa vita.


1

Ci sono due errori nel tuo esperimento mentale:

  1. Se la tua macchina di Turing non è "limitata" (in memoria, velocità, ...) non hai bisogno di usare euristiche ma puoi calcolare valutare gli stati finali (vittoria, sconfitta, pareggio). Per trovare il gioco perfetto ti basterà quindi utilizzare l'algoritmo Minimax (vedi http://en.wikipedia.org/wiki/Minimax ) per calcolare le mosse ottimali per ogni giocatore, il che porterebbe a uno o più giochi ottimali.

  2. Non vi è inoltre alcun limite alla complessità dell'euristica utilizzata. Se puoi calcolare un gioco perfetto, c'è anche un modo per calcolare un'euristica perfetta da esso. Se necessario, è solo una funzione che mappa le posizioni degli scacchi nel modo "Se sono in questa situazione S la mia mossa migliore è M".

Come altri hanno già sottolineato, questo si concluderà con 3 possibili risultati: il bianco può forzare una vittoria, il nero può forzare una vittoria, uno di loro può forzare un pareggio.

Il risultato di una perfetta partita di dama è già stato "calcolato". Se l'umanità non si autodistruggerà prima, un giorno ci sarà anche un calcolo per gli scacchi, quando i computer si saranno evoluti abbastanza da avere memoria e velocità sufficienti. Oppure abbiamo dei computer quantistici ... O finché qualcuno (ricercatore, esperto di scacchi, genio) non trova degli algoritmi che riducono notevolmente la complessità del gioco. Per fare un esempio: qual è la somma di tutti i numeri compresi tra 1 e 1000? Puoi calcolare 1 + 2 + 3 + 4 + 5 ... + 999 + 1000, oppure puoi semplicemente calcolare: N * (N + 1) / 2 con N = 1000; risultato = 500500. Ora immagina di non sapere di quella formula, di non conoscere l'induzione matematica, di non sapere nemmeno come moltiplicare o sommare numeri, ... Quindi, è possibile che ci sia un algoritmo attualmente sconosciuto che alla fine riduce la complessità di questo gioco e ci vorrebbero solo 5 minuti per calcolare la mossa migliore con un computer corrente. Forse sarebbe anche possibile stimarlo come un essere umano con carta e penna, o anche nella tua mente, dato ancora un po 'di tempo.

Quindi, la risposta rapida è: se l'umanità sopravvive abbastanza a lungo, è solo questione di tempo!


0

Potrebbe essere risolvibile, ma qualcosa mi dà fastidio: anche se l'intero albero potesse essere attraversato, non c'è ancora modo di prevedere la prossima mossa dell'avversario. Dobbiamo sempre basare la nostra prossima mossa sullo stato dell'avversario e rendere disponibile la mossa "migliore". Quindi, in base allo stato successivo, lo facciamo di nuovo. Quindi, la nostra mossa ottimale potrebbe essere ottimale se e solo se l'avversario si muove in un certo modo. Per alcune mosse dell'avversario la nostra ultima mossa potrebbe essere stata non ottimale.

Non riesco a vedere come potrebbe esserci una mossa "perfetta" in ogni fase.

Affinché sia ​​così, deve esserci per ogni stato [nel gioco corrente] un percorso nell'albero che porta alla vittoria, indipendentemente dalla prossima mossa dell'avversario (come nel tris), e ho un tempo per capirlo.


5
La mossa perfetta è decisa dalla strategia "minmax": è la mossa che massimizza il tuo punteggio minimo possibile (date tutte le mosse possibili che l'avversario potrebbe fare). O per dirla in un altro modo, presuppone che anche l'avversario giochi perfettamente.
Nick Johnson

Questo però è un punto interessante. Potrebbe sorgere una situazione in cui una risposta alla migliore mossa possibile ti metterebbe in svantaggio se il tuo avversario non esegue la migliore mossa possibile? Quali implicazioni ha questo?
Nona Urbiz

Non sono un matematico e non sono un ottimo giocatore di scacchi; Ho anche ipotizzato che in teoria (se fosse noto l'intero albero del gioco) la risposta a questa domanda fosse "sì". Tuttavia, ora che accenni a questo problema [a scelta dell'altro giocatore], significa che il sistema è potenzialmente imprevedibile? Ci sono punti a metà del gioco in cui l'altro giocatore potrebbe forzare uno svantaggio? È un po 'come il fatto che il Perceptron (Rete neurale) può imparare "OR" e "AND" ma non può mai afferrare "XOR"? Gli scacchi sono un esempio di sistema "caotico"? FWIW, IMHO penso che la risposta sembra essere "non so" a questo punto.
monojohnny

@Nona Per definizione, quella mossa sarebbe la mossa migliore. Non ci sono supposizioni.
piccolbo

@piccolbo: Meglio, una delle mosse migliori. Ci sono posizioni negli scacchi in cui più mosse danno lo stesso risultato (vittoria, pareggio o sconfitta nello stesso numero di mosse).
SDwarfs

0

Matematicamente, gli scacchi sono stati risolti dall'algoritmo Minimax , che risale agli anni '20 (trovato da Borel o von Neumann). Quindi, una macchina da gioco può davvero giocare a scacchi perfetti.

Tuttavia, la complessità computazionale degli scacchi lo rende praticamente irrealizzabile. I motori attuali utilizzano diversi miglioramenti ed euristiche. I migliori motori odierni hanno superato i migliori umani in termini di forza di gioco, ma a causa dell'euristica che stanno utilizzando, potrebbero non funzionare perfettamente quando viene concesso un tempo infinito (ad esempio, le collisioni di hash potrebbero portare a risultati errati).

I più vicini che abbiamo attualmente in termini di gioco perfetto sono i tablebase endgame . La tecnica tipica per generarli si chiama analisi retrograda . Attualmente, tutte le posizioni con un massimo di sei pezzi sono state risolte.


-1

, in matematica, gli scacchi sono classificati come un gioco determinato, ciò significa che ha un algoritmo perfetto per ogni primo giocatore, questo si è dimostrato vero anche per la scacchiera infinita, quindi un giorno probabilmente un'IA quantomica troverà la strategia perfetta, e il gioco è finito

Maggiori informazioni su questo in questo video: https://www.youtube.com/watch?v=PN-I6u-AxMg

Ci sono anche gli scacchi quantomici, dove non ci sono prove matematiche che si tratti di un gioco determinato http://store.steampowered.com/app/453870/Quantum_Chess/

ed eccoti un video dettagliato sugli scacchi quantici https://chess24.com/en/read/news/quantum-chess


-2

Ovviamente c'è solo 10 per la potenza di cinquanta possibili combinazioni di pezzi sulla scacchiera. Tenendo questo a mente, per giocare a ogni compibation, dovresti fare meno di 10 alla potenza di cinquanta mosse (comprese le ripetizioni moltiplicare quel numero per 3). Quindi, c'è meno di dieci per la potenza di cento mosse negli scacchi. Scegli quelli che portano allo scacco matto e sei a posto


-3

La matematica a 64 bit (= scacchiera) e gli operatori bit per bit (= le prossime mosse possibili) sono tutto ciò di cui hai bisogno. Così semplicemente. La forza bruta di solito troverà il modo migliore. Ovviamente non esiste un algoritmo universale per tutte le posizioni. Nella vita reale il calcolo è anche limitato nel tempo, il timeout lo fermerà. Un buon programma di scacchi significa codice pesante (pedoni passati, raddoppiati, ecc.). Il codice piccolo non può essere molto forte. L'apertura e la fine dei database consentono di risparmiare solo tempo di elaborazione, una sorta di dati preelaborati. Il dispositivo, intendo: il sistema operativo, il threading eventualmente, l'ambiente, l'hardware definiscono i requisiti. Il linguaggio di programmazione è importante. Comunque, il processo di sviluppo è interessante.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.