I wish to write a chess AI which simulates the way I think over the board, using C++.
Impressionante!
My focus is on writing the algorithms for choosing moves (decision making), not defining the board and pieces.
Er, eh?
To my knowledge, most chess programs written to date are focused on taking advantage of the computer's calculating powers
Ebbene sì, anche se alcuni sono focalizzati su animazioni cutesy.
(aka brute force method).
Erm no, forza bruta significherebbe che il computer ti costringerebbe a sederti e giocare sempre a una partita possibile finché il sole non consumasse la terra.
My program will be different in that the focus is going to be on emulating human thinking (in this case my own way of thinking which is actually highly organized).
Ogni pezzo di software scritto da umani finisce per emulare il pensiero umano. È l'hardware che non può tenere il passo.
I am relatively new to programming. Any advice you could give me on what topics to read, what programming paradigm(s) to use, any potential pitfalls I need to be aware of beforehand, or anything else you think I should know would be useful to me.
Leggi tutto. Impara tutto La maggior parte delle insidie provengono dai tuoi stessi punti ciechi. Sono relativamente vecchio alla programmazione (letto da decenni) e sto ancora comprando libri da leggere.
My gut feeling is that the coding will, for the most part, not benefit from OOP paradigm. Concepts such as positional evaluation, pattern recognition, weighing out pros and cons of various moves, knowing when to stop the search(pruning), defining goals and finding means to reach them, don't naturally resemble objects...or do they?
Gli oggetti modellano più delle cose del mondo reale. Sono idee. Alcuni oggetti sono raccolte di stringhe. Che cosa del mondo reale fa un modello hashset
? So che alcuni insegnano ancora in questo modo, ma un oggetto può modellare più delle cose che puoi vedere e toccare.
My guess is that procedural programming (simply providing the computer with a set of instructions, an algorithm for picking moves), or perhaps functional programming (FP) would be more relevant in this case? Let me know what you think, thank you.
La programmazione procedurale è semplice. Inizia dall'inizio, procedi nel mezzo, quando arrivi alla fine, fermati. Un bel modello semplice. Sfortunatamente è molto più facile scrivere che leggere e persino più difficile da cambiare. Ma se stai scrivendo qualcosa di piccolo è un big bang per il dollaro.
La programmazione funzionale riguarda molte cose, ma soprattutto si tratta di essere formali riguardo ai compiti. Non è grande nemmeno per gli effetti collaterali, ma soprattutto lo odia quando si usa =
con noncuranza.
Ho vinto un torneo di scacchi usando OOP funzionale (sì, entrambi insieme) contro un'intera classe. Eravamo liberi di usare qualsiasi paradigma che ci piacesse. Alcuni degli studenti più intelligenti sono andati per l'ultra ottimizzato usando bit board e libri di apertura. Non ho usato nulla di quello.
Il mio programma ha vinto, ma non principalmente a causa del mio paradigma. Ho vinto perché l'ho provato a morte . La maggior parte dei miei avversari ha perso le mosse illegali. Altri non potevano fare a meno di andare avanti nel tempo. L'altro programma che aveva persino una possibilità contro la mia aveva fatto la stessa scelta fatidica che avevo fatto. Ero conservatore con la mia profondità.
Abbiamo avuto 4 lunghi angosciosamente secondi per fare una mossa. La maggior parte non ha potuto esplorare oltre le 4 mosse. Quelli che non potevano farlo in modo affidabile e farebbero mosse stupide perché hanno smesso di guardare quando il tempo è scaduto.
Ho potato la mia ricerca di profondità fino a dove non c'era una possibile posizione della tavola che mi avrebbe fermato a metà ricerca. La gente rideva quando vedeva quanto velocemente la mia IA si muoveva. Hanno smesso di ridere quando ho iniziato a vincere.
Perché era così importante? Beh, non è stato perché i 3,5 secondi che non ho usato non avrebbero potuto essere utili. Potrebbe avere. Ma si sarebbe intromesso nella migliore delle cose che ho fatto. Ho provato MOLTO.
Nonostante abbiamo presentato solo dll, ho scritto la mia GUI che mi mostrava ogni possibile mossa per qualsiasi pezzo in qualsiasi posizione. Anche posizioni fuori bordo. Ho imparato a tenerlo sotto controllo nel modo più difficile. La mia unica perdita è stata quando una pedina che stavo per promuovere alla regina si è confusa al settimo grado e ha pensato che potesse muovere di due passi. Ho perso quando si è mosso dal tabellone. Non l'ho visto nei test. Ho bisogno di una GUI migliore.
Quindi quando dici che vuoi concentrarti sulla mente umana, io sono con te. Voglio solo consigliarti questo: Test. Perché al computer non importa cosa pensi. Fa solo quello che gli dici.
Potrei dirti di più ma ti collegherò solo alle mie precedenti battute di scacchi:
Soluzione di scacchi OOP pulita
Immutabilità e amp; scacchi