Quale paradigma usare per scrivere il motore degli scacchi?


9

Se avessi intenzione di scrivere un motore di gioco di scacchi, quale paradigma di programmazione useresti (OOP, procedurale, ecc.) E perché dovresti sceglierlo? Per motore di scacchi, intendo la parte di un programma che valuta la scheda corrente e decide la prossima mossa del computer.

Lo sto chiedendo perché ho pensato che sarebbe stato divertente scrivere un motore di scacchi. Poi mi è venuto in mente che potevo usarlo come progetto per l'apprendimento della programmazione funzionale. Poi mi è venuto in mente che alcuni problemi non sono adatti al paradigma funzionale. Poi mi è venuto in mente che questa potrebbe essere una buona discussione sul foraggio.


1
Questo è simile alla scrittura di un compilatore C da zero. Non reinventerei la ruota. Vorrei prima studiare quelli esistenti.
Giobbe

10
@Job: il mio obiettivo è il processo piuttosto che il risultato. Anche se finisco con un motore molto cattivo, penso che potrebbe esserci del valore nel processo di analisi del problema e nello sviluppo di un modo per attaccarlo, soprattutto se ho imparato alcuni nuovi metodi di programmazione nel processo.
colpì l'

1
In bocca al lupo. Nessun vero datore di lavoro ti chiederà mai di svilupparne uno da zero, ma durante un colloquio potrebbero chiederti come affrontare il problema.
Giobbe

6
@Job gran parte dell'abbracciare la vita di programmazione sta codificando le cose non perché ce n'è un bisogno preciso, ma perché puoi.

1
@Mark, che ne dici di abbracciare la vita;) = viaggi, lingue, teatro, poesia, attività all'aperto, ecc.? Mi piace programmare, ma quando non lo faccio di per sé, ho altre 1000 cose da fare.
Giobbe

Risposte:


7

La valutazione non è un problema parallelizzabile per quanto ne so, ma la valutazione di catene diverse lo è, quindi lo scriverei definitivamente per utilizzare più core e multithreading.

Sia che tu diventi funzionale o semi-funzionale è una questione di gusti. Personalmente andrei OOP e utilizzerei il supporto per la programmazione funzionale e il parallelismo che esiste ad esempio in C #

A proposito, se dovessi scrivere un motore di scacchi, proverei a crearne uno che possa davvero "pensare" agli scacchi. Usando la valutazione della tavola per forzare la forza bruta tutte le possibili combinazioni sono state eseguite a morte ed estremamente bene, ma non ci sono stati molti progressi nel fare un motore di scacchi più pensoso / sfocato. Sarebbe una sfida! :)

Trova alcuni giochi con posizioni di gioco davvero difficili e mosse forti (sono contrassegnati! O !!) e usali per allenare e testare il tuo motore.


2

Immagino che dipenda dai tuoi obiettivi, che prendo sono strettamente didattici. Se stai cercando di scrivere un prodotto competitivo, vorresti la massima efficienza nei valutatori di livello più basso. Molte opportunità per il parallelismo a livello di bit qui. Molte opportunità anche per le tabelle hash. Inoltre opportunità di sfruttare il parallelismo. Quindi ai livelli più alti, probabilmente vuoi un sistema buono per l'IA, quindi ciò significa probabilmente una lingua di programmazione funzionale. Ovviamente non vuoi fare tutte queste cose, sceglierne una o due e accontentarti del fatto che il tuo progetto non sarà competitivo con i programmi migliori.


2

Ho scelto il paradigma OOP nel mio motore di scacchi chiamato The Turk . La prima versione del mio motore di scacchi è stata scritta più procedurale piuttosto che OOP, quindi ho trovato così difficile migliorare il mio motore di scacchi a causa di lunghi blocchi di codice e design scadente.

Dipende da ciò che si desidera ottenere durante la scrittura del motore di scacchi.Se si desidera creare un motore di scacchi che è troppo forte, quindi non è nemmeno possibile farlo nei linguaggi OOP a causa di lenti collegamenti in ritardo. Se vuoi solo imparare la programmazione e divertirti anche scrivendo il motore di scacchi, le lingue gestite e OOP saranno i tuoi amici. Posso suggerirti di scegliere C # perché è anche possibile scrivere il motore di scacchi in modo più procedurale con esso.


Come giudica ELO? Rispetto a Crafty?

@ Thorbjørn Ravn Andersen - Crafty uno dei migliori motori di scacchi open source scritti in C e dal Dr. Robert M. Hyatt, che ha trascorso la sua vita nella programmazione degli scacchi. Sfortunatamente non ho testato la valutazione elo perché ci sono ancora molte cose da fare prima di testare la valutazione elo. Attualmente la valutazione è solo valutare i valori dei pezzi, quindi ha una valutazione piuttosto debole e ancora non ho ancora implementato tutti gli algoritmi necessari. Sfortunatamente non ho tempo da dedicare a questo progetto al momento. Spero che un giorno sarà possibile continuare su di esso.
Freshblood

ah scusa, ho pensato che potesse davvero suonare. Colpa mia.

@ Thorbjørn Ravn Andersen - Ho pubblicato lì alcune versioni e gli ultimi changeset del repository pronti per essere compilati. Volevo solo dire che al momento è abbastanza debole.
Sangue fresco l'

2

Ho portato un semplice programma di scacchi come mezzo per imparare la lingua Forth. Si è rivelato perfetto per questo problema imperativo e ho imparato molto. Lo stack aperto mi ha permesso di implementare la ricerca alfa-beta in un modo unico che mi ha dato maggiori informazioni sull'algoritmo.

Si potrebbe pensare che la programmazione funzionale sarebbe ottima per i programmi di scacchi, dal momento che gli algoritmi core (ricerca approfondita alfa-beta, valutazione iniziale) sono ricorsivi e funzionalmente rigorosi. Tuttavia, un programma di scacchi vive e muore a causa dell'efficienza e nessuno degli attuali linguaggi funzionali ha questo obiettivo. I primi cento motori all'avanguardia utilizzano tutti linguaggi imperativi (principalmente C / C ++, quindi Delphi) per avere il massimo controllo sull'utilizzo della memoria, il multi-threading, lo stato globale e la generazione di codice. Tutti i linguaggi funzionali utilizzano l'allocazione dinamica della memoria per le strutture di dati di base, che è la morte per un programma di scacchi.

Mi piacerebbe ancora vedere qualcuno tentare di entrare nei primi 100 motori di scacchi usando un linguaggio funzionale.

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.