Implementazione del motore di endgame degli scacchi senza basi di gioco Endgame

3

Sono interessato alla creazione di un motore per la risoluzione del gioco degli scacchi.

Solitamente i finali degli scacchi vengono risolti usando le basi della tabella di fine partita generate da retrograde algorithm .

Ho trovato che l'Intelligenza Artificiale e gli Algoritmi Genetici sono stati applicati alla programmazione degli scacchi.

Tuttavia, prima di iniziare l'implementazione volevo sapere se i finali di scacchi possono essere giocati senza i tablebase di fine partita?

Se sì, allora quali sono i pro e i contro di queste alternative alle tabelle dei finali?

Esistono altri algoritmi noti per questo problema?

    
posta TryinHard 30.12.2013 - 12:07
fonte

2 risposte

4

Senza tabelle precalcolate, puoi semplicemente costruire un motore di gioco standard di scacchi (non specificamente per i finali). Guarda, ad esempio, qui per un punto di partenza. Per ottimizzare un motore di questo tipo per i finali, puoi provare ad adattare automaticamente la tua funzione di valutazione ogni volta che identificherai una situazione di "endgame conosciuto" per la quale hai una strategia di valutazione specifica pronta.

Vantaggi: in genere è necessario molto meno spazio di archiviazione rispetto a una soluzione basata su tabella. Fine dei tavoli di gioco per 5,6 o 7 pezzi AFAIK avrà bisogno di diversi Giga- o Terrabytes (una mia ipotesi approssimativa), per più pezzi un approccio basato sulla tabella non sarà più fattibile.

Contro: la tua IA sarà tutt'altro che perfetta (al contrario di una tabella di fine partita, che consente al motore di giocare perfettamente). Le situazioni di fine gioco soffrono in genere del " problema all'orizzonte ". Vedi questo articolo di Wikipedia su ciò che è stato realizzato negli ultimi anni usando l'analisi retrograda basata su tabella. Non puoi aspettarti di ottenere tali risultati da un motore standard.

    
risposta data 30.12.2013 - 13:01
fonte
0

Il tablesbase non è necessario per i finali.

In genere, questo viene fatto progettando due funzioni di valutazione, una per il middle game e una per il endgame. Ad esempio, preferiremmo spostare il re più vicino al centro nel finale.

Diamo un'occhiata al codice dello stoccafisso:

Nel link

#define S(mg, eg) make_score(mg, eg)

Lo stoccafisso definisce il punteggio sia per il middle game che per il finale.

Il motore di scacchi va bene per la maggior parte dei finali a meno che non ci siano seri problemi con l'orizzonte di ricerca.

    
risposta data 24.02.2017 - 07:12
fonte

Leggi altre domande sui tag