gogobello says hello world!


Questa pagina ha una gerarchia - Pagina madre:Programmazione

Home Forum Programmazione gogobello says hello world!

Questo argomento contiene 78 risposte, ha 7 partecipanti, ed è stato aggiornato da  sasachess 1 settimana, 2 giorni fa.

Stai vedendo 15 articoli - dal 1 a 15 (di 79 totali)
  • Autore
    Articoli
  • #7888

    sasachess
    Partecipante

    Ciao a tutti i nuovi amici del G6,
    sono orgoglioso di presentarvi il nuovo nato, si chiama gogobello.

    Prima di parlare del mio nuovo chess engine, trovo doveroso scrivere un paio di righe di presentazione.
    Mi chiamo Salvatore Giannotti, alias sasachess su FICS. Ho 35 anni e sono un informatico.
    Mi sono appassionato al gioco degli scacchi a circa 20 anni. Il gioco agonistico mi piace ma vi ho preso parte a periodi alterni. Sono una modesta 1N.
    Vivo un po’ in provincia di Bari, dove ho messo su famiglia e un po’ a Roma, dove lavoro. Diciamo pure che per il momento sono un pendolare.
    Ho scoperto il G6 ai tempi dell’università. L’idea di scrivere un motore mi piacque, ma ero troppo preso dalla tesi e lasciai perdere.
    Un bel giorno ho riaperto il sito del gruppo, ho scaricato la versione base di Pedone di Fabio Gobbato e mi sono messo a studiare. Vorrei a tal proposito ringraziare pubblicamente Fabio! Senza il suo Starter Engine, probabilmente gogobello non sarebbe nato.

    Veniamo a gogobello. Ho scelto di implementarlo in linguaggio c, linguaggio che mi affascinò ai tempi dell’università e che poi non ho più avuto modo di usare. Ho letto alcuni topic ideologici sul tema dei motori originali, derivati e cloni. Se dovessi collocare gogobello in queste tre categorie direi che è a metà strada tra un derivato (da pedone base) e un originale. gogobello è stato scritto da zero, pezzo per pezzo, ma studiando e prendendo come iniziale riferimento il codice di Fabio. Non nego di aver ripreso la parte di rappresentazione e la generazione delle mosse di Pedone base. Non avrei potuto fare di meglio! Ma sta piano piano evolvendo secondo il mio stile. A ogni versione diventa sempre più mio. Mi accarezza l’idea di poter partecipare un giorno a un vostro torneo tra motori.

    Di seguito i vari update di versione:

    * Aggiornamenti vers. 0.01 (Study):
    * Settembre 2014
    * – Base di partenza Pedone_base di Fabio Gobbato
    * – Implementazione funzioni singole di generazione mosse
    * – Modificata la logica di verifica Mosse Umano
    * – Riorganizzazione Codice in file sorgenti dedicati
    *
    * Aggiornamenti vers. 0.02 (Give me an Interface please):
    * Ottobre 2014
    * – Modalità console/xboard;
    * – Modificata la tabella valore posizione Pedoni;
    * – Principal Variation on the Stack (Bruce Moreland);
    * – Modalità analisi infinita;
    * – Gestione dello Stallo/Scaccomatto in AlphaBeta
    *
    * Aggiornamenti vers. 0.03: (Order it!)
    * – Fix bug uscita dalla modalità di analisi infinita
    * – Static Exchange Evaluation (Catture)
    * – Killer Heuristic (Quiete)
    * – History Heuristic (Quiete)

    Netto il miglioramento inserendo la gestione delle killer moves. Altro notevole passo in avanti nella velocità di elaborazione l’ho ottenuto compilando a 64bit. Incredibile la mia soddisfazione nel vedere gogobello battere pedone base! 🙂

    Allego le due versioni a 64 o a 32 bit. Vi va di provarlo?

    Saluti.
    Salvatore

    #7890

    Alessandro
    Membro

    Ciao Salvatore! Benvenuto fra noi!
    Se sasachess è abbastanza stabile puoi farlo giocare in un torneo che forse non è ancora partito (se guardi i vecchi topic se ne parla di un torneo online). Potrebbe essere una bella occasione!

    Proverò sasachess e ti saprò dire qualcosa 🙂

    #7891

    sasachess
    Partecipante

    Argh! sasachess è il mio nickname su FICS.

    Il mio motore si chiama gogobello! 🙂

    #7892

    Alessandro
    Membro

    Oops!! 🙂

    #7893

    sasachess
    Partecipante

    Vi posto anche un paio di test effettuati per verificare funzionamento e utilità delle killer moves e dell’history heuristic.

    killer moves (KM)
    Partendo dalla posizione di prova:
    “r3qrk1/pp2ppbp/6p1/1Np5/P7/2PP3P/1P2QPP1/R2R2K1 w – – 0 1”

    Senza KM:
    4 205 000 11888 b5c7
    5 307 007 479303 b5c7
    6 104 018 1420735 b5c7
    7 304 360 32991458 b5c7
    8 98 1015 89775934 b5c7

    Con KM:
    4 205 000 11609 b5c7
    5 307 004 207603 b5c7
    6 104 012 788201 b5c7
    7 304 118 9037207 b5c7
    8 98 351 26998206 b5c7

    Al variare della profondità, il risultato in termini di bestmove e valore della funzione di valutazione non cambia ma il numero di nodi esaminati e il tempo di risposta del motore con le KM attive sono significativamente minori.

    ——————————————————————————————-

    History Heuristic (HH)

    Ho provato a giocare una manciata di mosse in apertura contro il motore. Ho usato la stessa sequenza di mosse con e senza HH. Il test è stato eseguito su un portatile vecchiotto con processore Intel Centrino Pentium M 1.5GHz, SO Windows XP a 32bit e motore impostato con profondità fissa a 6 PLY.

    Senza HH:
    6 -93 259 2780216 b8c6
    6 -60 136 1339969 g8f6
    6 -71 086 787609 c6b4
    6 -140 018 84034 b4d3
    6 -149 102 1032794 f6g8
    6 -144 149 1624636 f8e7

    Con HH:
    6 -93 085 677017 b8c6
    6 -60 056 342829 g8f6
    6 -71 067 504564 c6b4
    6 -140 030 102321 b4d3
    6 -149 137 1205183 f6g8
    6 -144 120 1094821 f8e7

    Come per le KM, anche per il test dell’HH, si può osservare che pur restando inalterate la valutazione e la bestmove, il motore esamina meno nodi (aumenta il pruning nell’alphabeta) arrivando alla bestmove in meno tempo.

    Direi un buon risultato ottenuto con poco sforzo.

    Statemi bene.
    Salvatore

    #7908
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Ciao e un benvenuto anche da parte mia, Salvatore!

    Confermo quanto detto da Alessandro, l’anno prossimo si farà la terza edizione dell’Igwt che tornerà a coinvolgere tutti i motori originali gsei.

    Parliamo quindi di originalità premettendo solo che a me piace premiare il lavoro delle persone (è x questo che includo nei tornei tutte le features create dai programmatori).

    Ricordo che quando Fabio mi inviò i sorgenti del pedone base, c’era anche la quiescenza ma poi ci accordammo sulla rimozione di tale feature. L’idea dello starter engine era quella di dare solo una traccia su come cominciare lo sviluppo di un chess engine.
    Mi fa piacere che l’idea stia cominciando a prendere piede, ma adesso la domanda diventa: tutti i motori tratti da Pedone base come sono da considerarsi? Originali o derivati?

    Di fatto abbiamo un regolamento, ma tu sei il primo in questa situazione.
    Il tuo programma l’hai scritto da 0 e hai dichiarato quali parti di programma sono come pedone base (un bravo x la trasparenza).

    Io sarei del parere (così come da premessa), di premiare il tuo lavoro, quindi, se da test che effettueremo on line, il tuo programma sarà nettamente più forte di Pedone base allora sarà originale, altrimenti no.

    Attualmente Pedone base non è in classifica, quindi il primo step sarà quello di fargli fare un giro di test già venerdì prossimo, in modo da avere sempre un riferimento.
    Lo step successivo sarà quello di convertire in elo la parola ‘nettamente’ ossia, di quanto elo Gogobello dovrà essere più forte di pedone base per essere considerato originale?
    Infine si farà il test e vedremo come considerare Gogobello.

    Quanto sopra è una mia idea, se qualcuno ne ha di migliori, si faccia avanti.

    In qualunque caso nel frattempo, se vuoi una mano a migliorare Gogobello (accidenti che nome, sembra un pappagallo! ;-)), basta chiedere! Piccola dritta: Fabio ci ha messo un attimo a rimuovere la quiescenza dal suo Pedone base.

    Bye!

    LL

    #7910

    sasachess
    Partecipante

    Ciao Alessandro,
    mi fa piacere leggere il tuo post!

    Per quanto riguarda la questione ELO, ho provato a eseguire questo test con un limite di 10 sec.
    http://www.chessmaniac.com/ELORating/ELO_Chess_Rating.shtml

    Ho voluto confrontare gogobello 0.02 (molto simile a pedone base come performance) con gogobello 0.03.
    Ho ottenuto una stima di circa 1300 punti elo con il primo e 1600 con il secondo.

    Per poter eseguire il test, ho dovuto prima implementare la modalità di analisi infinita che mi ha tolto parecchie energie! In pedone base non c’è.

    In ogni caso, conto di migliorare ulteriormente.. e dato che la chess programming mi sta incuriosendo parecchio, ho buttato giù una bozza dei prossimi lavori. Per cui condivido con voi la mia roadmap mentale.

    * TO-DO vers. 0.04 (Horizon Effect bye bye):
    * – Quiescenza
    * – Iterative Deepening
    * – Gestione comandi “level”, “st”, “sd”, “time” di Winboard
    * – Sudden-death time control
    *
    * TO-DO vers. 0.05 (Opening Book)
    * – Small Opening Book
    *
    * TO-DO vers. 0.06: (Hash it!)
    * – Hash e Transposition Table
    *
    * TO-DO vers. 0.07: (Evaluation)
    * – Sicurezza del Re
    * – Strutture Pedonali
    * – Centralizzazione
    * – etc.
    *
    * TO-DO vers. 0.08: (Pruning)
    * – Null Move Pruning
    * – Futility Pruning
    *
    * TO-DO vers. 0.09: (Selectivity)
    * – Selectivity Extensions
    *
    * TO-DO vers. 0.10: (Ponder)
    * – Pondering
    *
    * TO-DO vers. 0.11: (The curse of Endgame)
    * – tablebases

    Come vedi nel futuro prossimo ho proprio intenzione di implementare la quiescienza. Mi sono già portato avanti, infatti, ho implementato una funzione basata sul metodo Static Exchange Evaluation che utilizzerò in quiescienza in modo da evitare di perdere tempo ad analizzare catture inutili.

    Al momento ho una funzione di valutazione che fa ridere i polli, basata sul solo materiale. Penso di aggiungerci almeno la mobilità. Ma il grosso l’ho volutamente posticipato.. ci voglio ragionare con calma.

    Mi piacerebbe anche far giocare il motore su FICS. Magari mi documento un po’ sul da farsi.

    Insomma ho tante idee, spero solo di riuscire a portarle a termine! 🙂

    #7921
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Wow, che lista!

    Nel frattempo ti ho ‘promosso’ ad autore quindi dovresti poter avere la possibilità di modificare la pagina di Gogobello http://www.g-sei.org/gogobello/ (se non riesci avvisami che ricontrollo le abilitazioni).

    Per quel che riguarda fics comincia con scrivere una email a computers@freechess.org
    con oggetto: request computer account
    e con contenuto simile a questo sotto:
    ° Full name: Neurone
    ° Fics handle:ilgrinta
    ° Request handle: Neurone
    ° Engine name: Neurone
    ° Programmer: Lissandrello Luca
    ° Hardware: Intel Core 2 Duo E4300 1.80Ghz 2GBRam
    ° Software: Windows Xp sp3 – Winboard 4.5.3
    ° Variant supported: none
    ° Manual or automatic operation: none
    ° Login times
    ° Estimated ratings: 1500
    ° Reason for having computer account: Test my engine

    e tieni le dita incrociate.
    Ah, attento a non accedere con un programma su un account umano o viceversa (sono moto fiscali)!

    Bye!

    LL

    #7924

    sasachess
    Partecipante

    Ohohoh, grazie mille Luca!

    Ho aggiornato la pagina senza problemi. Mi sono accorto, però, di aver allegato una versione errata del motore a 32 bit. La falsa partenza non poteva mancare!

    Allego la versione corretta.

    #7926
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Non c’è problema. Tralaltro è probabile che tu non possa cancellare il vecchio zip, se vuoi lo faccio io.

    Bye!

    LL

    #7993

    sasachess
    Partecipante

    Sto lavorando alla versione 0.04.

    Ho risolto un paio di bug:
    – corretto il calcolo del tempo nella modalità di analisi infinita;
    – corretta la funzione SEE (Static Exchange Evaluation) che per alcune posizioni mandava in crash gogobello.

    Ne ho approfittato per effettuare un test di unità della funzione SEE. Ho deciso di generare le sole catture buone nella funzione di ricerca alpha beta.
    Ho potuto confrontare il risultato ottenuto utilizzando lo SEE rispetto alla tecnica MVV-LVA. Ebbene, mi sembra che vada molto meglio l’SEE.

    Posizione test
    “r3qrk1/pp2ppbp/6p1/1Np5/P7/2PP3P/1P2QPP1/R2R2K1 w – – 0 1”

    Con MVV-LVA:
    Profondità fissa a 7 PLY
    score 207
    tempo 2,04 sec
    nodi ~11 milioni
    bestmove b5c7

    Con SEE:
    Profondità fissa a 7 PLY
    score 207
    tempo 0,84 sec
    nodi ~5 milioni
    bestmove b5c7

    Il risparmio è notevole. Penso di lasciare attivo il SEE.. non mi limiterò a utilizzarlo solo nella quiescienza.

    #7994
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Secondo me se metti a posto il time management in partita puoi guadagnare tanto.

    LL

    #8048

    sasachess
    Partecipante

    Ci sto lavorando Luca, vedrai gogobello 0.04 sarà notevolmente più forte della 0.03!

    #8060
    stegemma
    stegemma
    Moderatore

    Per curiosità, quanto ci mette a fare il perft 6 dalla posizione iniziale? Io sono quello paranoico del perft…

    #8063

    sasachess
    Partecipante

    Circa 27 secondi con la versione a 32 bit, su Intel Core Duo da 2GHz.

Stai vedendo 15 articoli - dal 1 a 15 (di 79 totali)

Devi essere loggato per rispondere a questa discussione.

© 2017 G 6 Tutti i diritti riservati - Buon divertimento!

By continuing to use the site, you agree to the use of cookies. more information

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi