Come gioca un computer a scacchi?

Messaggioda kobeilprofeta » 12/08/2013, 18:11

Come ragiona un computer che gioca a scacchi?
Ho sentito che puó "vedere" massimo 5 mosse avanti e "guardando" le possibili combinazioni sceglie quella che lo porta in maggior vantaggio. Ma a questo punto mi sorgono due domande:
1) come si calcola quale dei due giocatori è in vantaggio e di quanto?
2) tiene anche conto della mossa che crede farà l'avversario?

1] oltre al punteggio materiale (che è di per sè molto facile: Q=$10$; R=$5$; B=$3$; N=$3$; K=$infty$) c'è da pensare a quello posizionale (che è ovviamente molto più complesso). Qualcuno riesce a linkarmi o spiegarmi come funziona? Ho in progetto di creare {spero insieme a voi} un programma che giochi a livelli abbastanza alti...

2] perchè se non ne tenesse conto potrebbe per esempio (stupido) mangiare con la propria Q un N protetto da un pedone avversario, nella speranza che non venga catturata. se invece tiene conto, come fa? Dato che non sa il livello dell'avversario? 

Ringrazio chiunque mi risponderà e mi darà una mano.

Intanto buone vacanze ;)
kobeilprofeta
Cannot live without
Cannot live without
 
Messaggio: 348 di 5262
Iscritto il: 24/09/2012, 18:25

Re: Come gioca un computer a scacchi?

Messaggioda Pianoth » 24/08/2013, 14:27

No, no, no, no, no! :-D
Un motore scacchistico può calcolare infinite posizioni e quindi può prevedere infinite mosse avanti, ma c'è un'unica forte limitazione data dalla memoria e dal processore del computer o del dispositivo utilizzato. In pochi secondi comunque i motori migliori calcolano almeno 13 mosse avanti, quindi sei proprio fuori strada. :)

1) Per quanto riguardo il calcolo del punteggio, questo dipende da motore a motore ed è una delle cose più importanti, dato che il computer andrà a scegliere la mossa che lo porterà (secondo i suoi calcoli) alla posizione migliore. Per quanto riguarda il "punteggio materiale" (come lo chiami tu) è molto semplice, si sommano i valori dei pezzi del bianco e si sottrae al risultato la somma dei valori dei pezzi del nero. Se si ottiene un numero positivo il bianco è in vantaggio materiale, se si ottiene un numero negativo il nero è in vantaggio materiale. Questo calcolo va fatto per tutte le posizioni analizzate, quindi in teoria calcolando infinite posizioni avanti è sufficiente guardare solo il materiale. Purtroppo a causa delle limitazioni del computer non si possono calcolare infinite posizioni (eccetto nei casi in cui c'è un matto forzato per esempio), quindi bisogna trovare un modo per calcolare un "punteggio posizionale". Questo modo varia parecchio da programma a programma, perché vanno considerati tantissimi parametri: controllo del centro, spazio e mobilità dei pezzi, sicurezza del re...

2) Vengono calcolate quasi tutte le mosse possibili, vengono ignorate alcune mosse che sicuramente portano un forte svantaggio. Alcuni programmi non ignorano nulla o ignorano poco, ma questo li rende lenti nel calcolo e in una partita veloce quindi rischiano di perdere molto più tempo cercando di analizzare molte mosse avanti.

1] Guarda qui. Tempo fa volevo anche io creare un motore scacchistico e avevo trovato un sito che spiegava bene e in modo estremamente semplice da capire tutto quello che riguardava il creare un motore scacchistico, purtroppo ho cambiato computer e non trovo più quel sito. :(

2] No, un motore scacchistico calcola il punteggio di tutte le mosse e le ordina per punteggio, per poi scegliere la mossa col punteggio più alto. Per quanto riguarda programmi con forza "limitata" semplicemente viene rallentata la velocità di calcolare posizioni o viene limitato il numero di posizioni da calcolare (o vengono usati altri metodi tipo fare apposta degli errori ogni certo numero di mosse o cose simili).

Spero sia di aiuto. :)
È da un bel po' che non venivo su questo forum!
"Chi non ride mai, non è una persona seria." - Fryderyk Chopin.
Pianoth Eakòs Shaveck.
http://projecteuler.net/profile/Pianoth.png
Avatar utente
Pianoth
Average Member
Average Member
 
Messaggio: 480 di 972
Iscritto il: 22/02/2010, 08:59

Re: Come gioca un computer a scacchi?

Messaggioda kobeilprofeta » 10/09/2013, 14:14

Grazie mille per la risposta. Considera peró questa posizione:
Pedone bianco in b2
Cavallo bianco in c3
Donna nera in c7
Tratto al nero (computer). 

Se considerasse solo la propria mossa troverebbe un guadagno a fare Dxc3. Come fa a sapere cosa muoverà l'avversario? Nel esempio che ho riportato io è ovvia una risposta b2xc3, ma con una posizione più complessa la scelta della mossa variarebbe probabilmente a seconda dell'Elo del giocatore. 


Un'esempio potrebbe essere questo:
Bianchi
Re b7
Pedone c2
Donna g6

Neri
Re e1
Alfiere a4
Cavallo e4
Torre f7

Tratto al bianco (computer): potrebbe pensare conveniente Dxf7 (sempre se non considera la mossa del nero). Se invece considera la mossa del nero vede che a Dxf7 seguirebbe Cd6+ che cattura la donna bianca; se invece si trova davanti un principiante probabilmente questo sarà portato a fare un Axc2. Questo probabilmente non creerebbe problemi al calcolatore sulla scelta della prima mossa, ma se, come dici tu, calcola mooolte mosse avanti il fatto che il nero giochi Axc2 piuttosto che Cd6+ cambia molto sulla scelta della combinazione. Se infatti trova una combinazione vincente pensando che l'avversario giochi correttamente, in caso di mossa "errata" dell'avversario, pottebbe essere messo in difficoltà. 
Mi ricordo un esempio in cui l'uomo ha battutto un computer sfruttando la sua non-flessibilità mentale. 
kobeilprofeta
Cannot live without
Cannot live without
 
Messaggio: 359 di 5262
Iscritto il: 24/09/2012, 18:25

Re: Come gioca un computer a scacchi?

Messaggioda agnenga » 12/09/2013, 00:16

kobeilprofeta ha scritto:Grazie mille per la risposta. Considera peró questa posizione:
Pedone bianco in b2
Cavallo bianco in c3
Donna nera in c7
Tratto al nero (computer).
Se considerasse solo la propria mossa troverebbe un guadagno a fare Dxc3. Come fa a sapere cosa muoverà l'avversario? Nel esempio che ho riportato io è ovvia una risposta b2xc3, ma con una posizione più complessa la scelta della mossa variarebbe probabilmente a seconda dell'Elo del giocatore.
 


ciao kobeil,
anch'io tempo fa avevo iniziato a preparare un programma, e avevo quasi finito la scacchiera con tutti i pezzi e pedine e annessi movimenti e regole, ma poi mi sono stancato e attualmente ho messo tutto nel cassetto.

Avevo trovato, circa 3 anni fa, una paginetta molto istruttiva e l'avevo salvata, vedo se la trovo e te la posto. Non era comunque (e ovviamente) qualcosa di esaustivo, solamente un'introduzione alle problematiche connesse a un tale tipo di programmazione.

Personalmente trovo interessante la tecnica che si basa sul criterio del minimax della teoria dei giochi, magari praticando un discreto sfoltimento in fase di analisi delle diramazioni delle varianti. Va tenuto presente infatti che il gioco degli scacchi è a informazione completa (tutta l'informazione è nota a priori).

Collegandomi al tuo discorso che ho citato sopra, se ho ben capito quello che intendi, ti faccio osservare che in errori così grossolani una macchina non può incorrere, e questo per il semplice fatto che la macchina non dovrebbe essere programmata per valutare una posizione (terminale) in cui sia essa a muovere. Il software, ammettendo che sondi ad una profondità dell'albero delle varianti pari a uno, lo farà valutando DUE semimosse: la sua e quella dell'avversario; quindi esso analizzerà sempre multipli di mosse (cioè coppie di semimosse).

Il problema legato ai limiti della profondità (stai pur sicuro che con un normale pc oltre le 5/6 posizioni non si va, mantenendo tempi ragionevoli) è che fermandosi a una certa posizione, il computer potrebbe non vedere qualcosa di interessante o minaccioso (ambedue forzatamente), ma che si manifesteranno con chiarezza solo nel proseguimento delle posizioni. A tale riguardo, ricordo che in una partita contro Deep Fritz, io avevo intuito un vantaggio decisivo compiendo un sacrificio di pezzo, mentre il software (impostato a profondità 4) rimaneva su una linea più sobria, che tuttavia portava ad una situazione di parità.

Insomma, come si suol dire, al pc manca il famoso "colpo d'occhio". Questo, almeno, per il momento. Tuttavia, sono abbastanza convinto che se si riuscisse a trovare un sistema di apprendimento diverso da quello classico basato sull'esperienza (ovvero, memorizzo una certa posizione come deleteria e, in futuro, se la ritrovo, la scarto immediatamente) allora la macchina potrebbe pure dotarsi del colpo d'occhio. Un tale sistema, a mio parere, dovrebbe consistere di un'intelligenza artificiale basata su schemi (noti). Non credo che questo sia preso in considerazione dalla teoria (ma potrei sbagliarmi). Sono convinto, inoltre, che con una capacità, per esempio, di sondare fino ad una profondità di 15 nodi, il computer sia a tutti gli effetti imbattibile: quale umano, a meno di uno studio teorico approfondito e particolareggiato a parte di una data apertura, avrebbe una tale vista?

Dal punto di vista tattico (combinazione), poi, la macchina è imbattibile (non sbaglia mai il calcolo). E per i finali? Esistono algoritmi che consentono l'esecuzione perfetta di tutti i finali (noti). Ricordo che da una famosa posizione vincibile, avendo il bianco il tratto, con la (difficile) regola delle case corrispondenti, il computer venne fuori in maniera impeccabile. Quindi!
Sub <homofaberfortunaesuae> End
Avatar utente
agnenga
Junior Member
Junior Member
 
Messaggio: 7 di 106
Iscritto il: 06/09/2013, 14:36

Re: Come gioca un computer a scacchi?

Messaggioda Obidream » 14/09/2013, 16:57

Forse potresti provare a scaricarti i sorgenti di qualche gioco di scacchi ( ad esempio Knights che è open source, anche se sicuramente non si tratta di un motore scacchistico avanzato, potrebbe essere un buon modo per capire come funziona)
((v & 0xff) && (v & 0xff00) && (v & 0xff0000) && (v & 0xff000000))
Avatar utente
Obidream
Advanced Member
Advanced Member
 
Messaggio: 831 di 2195
Iscritto il: 07/02/2012, 20:57

Re: Come gioca un computer a scacchi?

Messaggioda Valerio7342 » 04/04/2014, 19:05

Non è così per i computer con ELO più basso. Infatti i computer con ELO sotto 1100 "mangiano a tutti i costi" alfieri o torri, anche se successivamente questo può portare a un grande svantaggio o addirittura alla sconfitta del computer, anche in poche mosse.
Consideriamo per esempio questa situazione:
Immagine
Il computer (blu e di ELO 1020) cattura con la regina l'alfiere in b5, ma il rosso sposta il cavallo (Nc7+) in modo che possa catturare la regina.
Consideriamo anche questa partita:
Immagine
Immagine
Il computer (blu e di ELO 1040) subisce scacco matto nonostante due cavalli e un pedone di vantaggio.
I computer, oltre a questo, iniziano sempre allo stesso modo e questo a volte scoccia.
Attenzione: per vedere le immagini intere salvatele
Valerio7342
New Member
New Member
 
Messaggio: 11 di 62
Iscritto il: 09/02/2014, 15:37

Re: Come gioca un computer a scacchi?

Messaggioda anonymous_be1147 » 04/04/2014, 22:46

Testo nascosto, perché contrassegnato dall'autore come fuori tema. Fai click in quest'area per vederlo.
@Valerio7342

Ciao, se vuoi, invece di inserire direttamente le immagine nel messagio, puoi allegarle tramite l'apposito box che trovi sotto l'editor d'inserimento dei messaggi (linguetta
Invia allegato
).
Un'alternativa ancora migliore sarebbe quella di inserire la partita in formato PGN, che mi pare il tuo programma di scacchi ti permette di vedere, nel messaggio usando il BBCode
pgn
. Ad esempio scrivendo nel messaggio

Codice:
[pgn]
[Event "Matematicamente.it Scacchi game"]
[Site "www.matematicamente.it"]
[Date "2014.02.16"]
[Round "10"]
[White "kobeilprofeta"]
[Black "stan"]
[Result "1-0"]

1.e4 e5 2.Nf3 Nf6 3.Bc4 d6 4.Ng5 d5 5.exd5 Nxd5
6.Qf3 Be6 7.O-O c6 8.Re1 Bd6 9.d4 exd4 10.Qxf7+
[/pgn]


ottieni automaticamente:



@everybody Non ingannatevi, penso di essere un po' più forte di quel che sembra da questa partita. :-D
anonymous_be1147
Cannot live without
Cannot live without
 
Messaggio: 1153 di 3226
Iscritto il: 02/03/2006, 20:20

Re: Come gioca un computer a scacchi?

Messaggioda Valerio7342 » 11/04/2014, 20:26

La partita contro ELO 1020 era un doppio inganno, infatti il blu non poteva muovere la regina perché così il Re poteva essere catturato.
Ve la cito:



Ricordate però che nel mio programma non si può fare Copia e Incolla, quindi ho dovuto ricopiare tutto.
Valerio7342
New Member
New Member
 
Messaggio: 12 di 62
Iscritto il: 09/02/2014, 15:37

Re: Come gioca un computer a scacchi?

Messaggioda Valerio7342 » 11/04/2014, 20:46

Ecco anche la partita contro ELO 1040:

Valerio7342
New Member
New Member
 
Messaggio: 13 di 62
Iscritto il: 09/02/2014, 15:37

Re: Come gioca un computer a scacchi?

Messaggioda Valerio7342 » 23/04/2014, 10:39

E come diceva kobeilprofeta in "Questioni tecniche", i computer con ELO più basso non giocano in maniera costante.
Lo dimostra questa partita contro ELO 1120, in cui alla fine il computer ha fatto una serie di mosse dubbie, come 47 Bc5?, 53.Kf7? e 60.Bf8?.

Valerio7342
New Member
New Member
 
Messaggio: 16 di 62
Iscritto il: 09/02/2014, 15:37

Prossimo

Torna a Scacchi

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite