Tunig con algoritmi genetici


Questa pagina ha una gerarchia - Pagina madre:Programmazione

Home Forum Programmazione Tunig con algoritmi genetici

Questo argomento contiene 21 risposte, ha 6 partecipanti, ed è stato aggiornato da Lissandrello Luca Lissandrello Luca 5 anni, 3 mesi fa.

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

    Ho letto che Satana sfrutta gli algoritmi genetici. Attualmente sto rifacendo l’eval di Soldat. Ho gia’ sviluppato un algoritmo che fa’ giocare soldat contro se stesso , ma il tuning e’ simile a quello di Stockfish, e sfrutta il metodo random “Montecarlo”, per cui  avere un per avere una tabella di 64 caselle tarata, Soldat dovrebbe giocare 50000, 100000 partite superveloci , c io’ equivale a almeno 40 ore di gioco !!!

    Volevo sapere le vostre esperienze in questo campo o se come me fino ad ora avete sempre tarato l’eval con un test fen.

    Saluti Marco.

    #3023

    Ho gia’ sviluppato un algoritmo che fa’ giocare soldat contro se stesso , ma il tuning e’ simile a quello di Stockfish, e sfrutta il metodo random “Montecarlo”, per cui avere un per avere una tabella di 64 caselle tarata, Soldat dovrebbe giocare 50000, 100000 partite superveloci ,

    Potresti spiegare un po’ meglio in che modo usi il Montecarlo? Sono molto interessato all’argomento.

    In questo periodo sto per iniziare a usare CLOP di Remi Coulom, con cutechess per “guidare” il tutto, ma ancora non ho messo l’arrosto nel forno. In generale comunque credo che sia preferibile usare un pool di avversari diversi, piu’ che fare l’autoplay, visto che poi ogni motore ha le sue caratteristiche.

    #3024

    dalla mia scarsa esperienza ti serve un pool di avversari diversi. prendine una decina che abbiano più o meno la forza di gioco del tuo programma e fai test da fen. puoi dare un’occhiata a http://kirill-kryukov.com/chess/tools/opening-sampler/

    per la mia prossima versione di prochess, più che le tecniche montecarlo, volevo tentare l’approccio dello steepest gradient descent (non so come si dica in italiano), che *dovrebbe* farmi raggiungere un massimo locale…

    #3025

    Ciao a tutti,

    sone contento che riteniate questo argomento interessante quanto me. In passato ho sempre tarato l’eval di Soldat con test fen e
    facendolo giocare , ma alla lunga il tuning manuale diventa stressante , specie per le matrici, e specie per modifiche che comportino
    aumenti di elo molto limitati.
    Il metodo di tuning di Stockfish, che ho letto nel sito http://chessprogramming.wikispaces.com , come l’ho interpretato io si basa
    sul “metodo Montecarlo” , legato alla probabilita’e alla legge dei grandi numeri, per cui la devianza di una distribuzione gaussina
    si abbassa aumentando il numero del capione rappresentativo, per cui per un campione sufficientemente grande si puo’ avere la
    certezza del risultato di un gioco probabilistico.

    Si parte con una matrice “A” che riteniamo essere buona ma non perfetta tipo :

    A =
    [1,20][1,50]
    [1,20][1,50]

    si fa’ giocare contro una matrice  “B” = “A”+”VALORI RANDOM”, del tipo :

    B =
    [1,25][1,40]
    [1,20][1,51]

    Se “B” vince “A” diventa :

    A = (B-A) * 0.002 = per esempio :

    [1,2001][1,4999]
    [1,2000][1,5001]

    E si continua per almeno 30000 partite superveloci.

    Non e’ potente come gli algoritmi genetici, ma pone un approccio diverso rispetto al prova e gioca.
    Per informazione ho fatto un test con 5000 partite, e la matrice a 64 caselle si e’ appena mossa, comunque sono fiducioso.

    Saluti Marco.

    #3026

    @Marco:

    L’argomento e’ molto interessante, soprattutto per me, che il tuning non l’ho praticamente mai fatto 🙂

    Devo dire che non sono molto d’accordo col chiamare questo metodo un “metodo Montecarlo”, ma questo e’ secondario. Quello che mi chiedo e’ se non sia un po’ rischioso usare molti parametri con questo sistema: praticamente questi vengono modificati tutti insieme, puo’ essere difficile avere una convergenza, se non sei sicuro che i termini che modifichi siano proprio “ortogonali” – c’e’ una questione di scelta dei parametri. Poi c’e’ sempre il problema degli “ottimi locali” (l’ottimo locale e’ nemico del bene 🙂 ): in questo periodo sto cercando alternative, anche se non sono sicuro che si possa mitigare quest’ultimo problema. Appena posso provo con cutechess+CLOP, se riesco a combinare qualcosa faccio un resoconto qui sul sito, in qualche forma, sia per verifiche e correzioni, sia per “disseminare”. Spero che in un futuro prossimo si moltiplicheranno questi temi qui sul forum 🙂

    bye^2,     mr

    #3027
    stegemma
    stegemma
    Moderatore

    In Satana uso un approccio genetico molto semplice, lasciando che i parametri “evolvano” prima di ogni mossa. Gioco dei mini-tornei tutti contro tutti ed applico l’algoritmo dopo ogni torneo. Purtroppo i bachi nella parte più tradizionale del motore hanno impedito di verificare la bontà dell’algoritmo. In buona parte li ho eliminati ma ce ne sono ancora. Quando il motore sarà stabile, mi dedicherò a migliorare l’algoritmo genetico. Già adesso Satana è quasi decente ma c’è ancora qualcosa da sistemare. I problemi allo IOCSC erano dovuti al sort delle mosse per l’iterative deepening ed altri piccoli bachi, tutti risolti (spero). Resta da verificare la quiescenza, che è molto spartana ed ha sicuramente qualche problema… poi tornerò a verificare l’AG.

     

    PS: per “torneo” intendo un torneo interno a Satana, che si svolge come training dell’AG, non il torneo reale in cui gioca il programma; di fatto, i mini tornei vengono giocati nel tempo di riflessione di Satana

    #3030

    Vorrei sapere un po’ di piu’ dell’evoluzione dei parametri di Satana e come queste influiscano sulle generazioni. In effetti sarei anche io interessato a sviluppare algoritmi genetici, ma ritengo che servirebbe una popolazione  stabile di almeno 1000 unita’, e  creare un dna a bit e lo sviluppo delle  generazioni penso sia fuori dalla mia  portata.

    Saluti Marco

    #3031

    Ciao a tutti,

    ho fatto un test sul metodo di tuning con valori random su una matrice 64, posizione del re nel mediogioco, modificando solo 32 valori ( dato che la matrice e’ simmetrica ).

    La tabella originale era :

    -30,-40,-40,-50,-50,-40,-40,-30,
    -30,-40,-40,-50,-50,-40,-40,-30,
    -30,-40,-40,-50,-50,-40,-40,-30,
    -30,-40,-40,-50,-50,-40,-40,-30,
    -20,-30,-30,-40,-40,-30,-30,-20,
    -10,-20,-20,-20,-20,-20,-20,-10,
    20, 20,    0,     0,    0,    0,  20, 20,
    20, 35, 10,     0,    0,   10, 35, 20

    dopo 8000 partite superveloci con fattore di crescita 0.004 e’ diventata :

    -30, -37, -36, -48, -48, -36, -37, -30,
    -33, -40, -36, -49, -49, -36, -40, -33,
    -30, -36, -36, -42, -42, -36, -36, -30,
    -31, -37, -43, -50, -50, -43, -37, -31,
    -20, -31, -26, -36, -36, -26, -31, -20,
    -13, -16, -21, -22, -22, -21, -16, -13,
    17,  17,    0,    0,    0,    0,  17,  17,
    17,  31,    6,    2,    2,    6,  31,  17

    ho poi fatto giocare le due versioni tra loro (10+1 sec.mossa) ed e’ risultato :

    soldat iniziale 37/90
    soldat evoluto  53/90

    non e’ un test esaustivo, dato che soldat ha giocato solo contro se stesso, ma ritengo ci sia un miglioramento della seconda matrice rispetto alla prima, ed il tuning e’ avvenuto in automatico ( anche se ci sono volute 24 ore ! ).

    Saluti Marco

    #3032

    il risultato di selfplay è molto interessante! hai provato a far giocare le due versioni contro altri avversari?

    #3033

    Ciao a tutti,

    ho fatto giocare le due versioni in due minimatch (10+1 sec.):

    1: ProChess101CP 24,0/39
    2: Bikjump       23,0/39
    3: GERBIL        16,0/39
    4: No_evolv      15,0/39

    1: Bikjump       22,0/39
    2: ProChess101CP 21,5/39
    3: Evolv         18,5/39
    4: GERBIL        16,0/39

    anche questa sembrebbe confermare un miglioramento della seconda matrice rispetto alla prima.

    Saluti Marco

    #3034

    Io per risparmiare tempo macchina faccio gauntlet, piu’ che tornei all’italiana. Tanto a te che t’importa del risultato di ProChess vs Gerbil? 🙂

    BTW, sto ottenendo risultati molto interessanti con CLOP+cutechess. Pensavo ci fosse di piu’ da aggeggiare, in realta’ ho dovuto fare delle modifiche molto ben gestibili. Tra l’altro, nel fare quelle modifiche ho rilevato che nella mia funzione di valutazione c’erano un po’ di cose fatte non del tutto bene, le ho migliorate considerevolmente: visto che i test servono? 🙂

    bye^2,     mr

    #3130
    stegemma
    stegemma
    Moderatore

    Perché dai per scontato che la matrice debba essere simmetrica? Prova con una matrice non simmetrica e potresti ottenere un piccolo miglioramento, dovuto al fatto che l’arrocco lungo e quello corto portano a partite molto diverse tra di loro, tatticamente ma anche stilisticamente parlando.

    #3131

    La matrice e’ sicuramente asimmetrica, ma calcolare 32 valori anziche’ 64 e’ sicuramente piu’ semplice.

    Ho fatto altre prove,  ma i risultati sono stati deludenti. Es. la posizione della torre non influisce abbastanza sul risultato della partita per ottenere qualche risultato statisticamente rilevante. Dopo 8000 partite la tabella si era appena mossa e in maniera apparentemente casuale. E’ possibile che per esempio la coppia degli alfieri dopo 100000 partite dia qualche risultato con il metodo random , ma allora se mi servono 10 giorni per il tuning automatico faccio prima a farlo manualmente con altri tipi di test.

     

    SAluti Marco

    #3132

    Pero’ allora io direi di fare un ragionamento piu’ estremo: anche 32 parametri (e solo per la posizione del Re…) sono tantissimi. Puoi diminuire di tanto il numero di parametri, semplicemente dando un malus (unico) alto alla posizione del re oltre le prime due traverse (tanto si parla di mediogioco), per cui tutte le case che non sono nelle prime due traverse hanno malus identico (tanto se gli dici che il Re non deve uscire dalla seconda pena malus, a maggior ragione non andra’ neanche in quarta). In questo modo i parametri ti diventano 17. Poi puoi considerare che il Re in seconda nel mediogioco sta appena poco meglio che in terza, quindi magari dai un malus unico (per es.) per il Re in seconda e nelle colonne centrali, e uno per le ali, cosi’ i parametri diventano 11-12. Cosi’ ti concentri sulla posizione in prima traversa. Se poi imponi pure la simmetria i parametri diventano un gestibile 7.

    Peraltro nella sicurezza del Re sicuramente entrano anche altri fattori (imho piu’ importanti), quindi essere troppo precisi con la PST del Re mi sembra overkilling.

    Just my 2 cents.

    bye^2,     mr

    #4393

    vorrei provare usare anche io cutechess-cli + clop sul mio motore cinnamon, ma non ho ben capito come configurare il tutto. Qualcuno di voi ha uno script funzionante?

    grazie a tutti

    Giuseppe

     

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

Devi essere loggato per rispondere a questa discussione.

© 2018 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