Tuning


Questa pagina ha una gerarchia - Pagina madre:Programmazione

Home Forum Programmazione Tuning

Questo argomento contiene 19 risposte, ha 6 partecipanti, ed è stato aggiornato da  sasachess 1 anno, 2 mesi fa.

Stai vedendo 5 articoli - dal 16 a 20 (di 20 totali)
  • Autore
    Articoli
  • #9202

    Effettivamente è come usare 4 bit per ogni singolo pezzo ma rappresentando la scacchiera in questa maniera hai qualche vantaggio in più. L’idea è quella di usare meno spazio possibile e rendere l’esecuzione della mossa e il ripristino della posizione estremamente rapidi. Ancora non ho capito se in valutazione una struttura del genere è vantaggiosa o meno ma complessivamente sono soddisfatto.

    #9203
    stegemma
    stegemma
    Moderatore

    Io non ho lesinato sul numero di “bitboards”, per semplificare il codice. L’idea di tenerle tutte nei registri sarebbe valida lavorando in assembly, altrimenti ci pensa il compilatore a gestirle; ad esempio, mentre generi le mosse di torre non ti serve la bitboard dei cavalli, per cui non serve tenere occupato un registro. Per generare le mosse di un pezzo, ti servono solo:

    – la bitboard del pezzo
    – la bitboard del colore
    – la bitboard delle case vuote/occupate

    A livello di valutazione, io trovo comodo avere i singoli pezzi ma anche qui la funzione è così complessa che forse la rappresentazione diventa secondaria.

    Per vedere se il sistema è efficiente, potresti eseguire un profiling e confrontare il tempo speso nell’accesso “complicato” alle BB ma credo che non cambi poi molto. Direi che fin che Pedone sarà più forte di Satana non dovrai preoccupartene! 🙂

    #10359

    sasachess
    Partecipante

    Buondì,
    ho iniziato a giocare con il tuning. Fabio, ho letto delle tue esperienze con Pedone e sto seguendo anch’io la strada del Temporal Difference. Ma ho alcuni dubbi che espongo per punti:

    1. Leggo che hai tirato giù 150 milioni di posizioni, ma quanto tempo ci metti a fare il tuning con così tante posizioni? Sono davvero necessarie tutte quelle posizioni per avere un risultato decente?

    2. Giusto per avere un termine di paragone, che valore di errore medio ottieni?

    3. Per il momento ho implementato una funzione casereccia per cercare l’ottimo locale per ciascun parametro. Ma ci sarà sicuramente di meglio. Ho dato un’occhiata allo pseudo codice della localOptimize di Texel sul wiki

    vector<int> localOptimize(const vector<int>& initialGuess) {
       const int nParams = initialGuess.size();
       double bestE = E(initialGuess);
       vector<int> bestParValues = initialGuess;
       bool improved = true;
       while ( improved ) {
          improved = false;
          for (int pi = 0; pi < nParams; pi++) {
             vector<int> newParValues = bestParValues;
             newParValues[pi] += 1;
             double newE = E(newParValues);
             if (newE < bestE) {
                bestE = newE;
                bestParValues = newParValues;
                improved = true;
             } else {
                newParValues[pi] -= 2;
                newE = E(newParValues);
                if (newE < bestE) {
                   bestE = newE;
                   bestParValues = newParValues;
                   improved = true;
                }
             }
          }
       }
       return bestParValues;
    }

    Ma non mancano i check di superamento delle soglie? Io attualmente cerco il valore migliore di ciascun parametro tra un minimo e un massimo. Che metodo utilizzate? Potete condividere qualche link?

    Grazie!

    #10360

    Io avevo provato così, forse si può provare anche con molte meno posizioni alla fine ottieni sempre un tuning approssimato, diverso da quello che potresti ottenere manualmente.
    Il TD Learning l’ho provato con alcuni successi ma da un pò di tempo a questa parte l’ho abbandonato perchè non sono riuscito a ricavarci più nulla. Uno delle problematiche che ho riscontrato è che la differenza tra valutazione e ricerca può essere in alcuni casi notevole, e per ridurre l’errore, l’algoritmo di ottimizzazione tende a portarti il valore dei bonus vicino allo 0. Se i bonus sono molto bassi ovviamente la differenza tra valutazione e ricerca sarà minima.

    Il valore medio che ottieni dipende dalla profondità della ricerca. Per ricerche di 2 ply la differenza media mi pare si aggirasse sui 20-30cp.

    A suo tempo con il metodo Texel avevo dato in mano all’algoritmo di ottimizzazione tutti i bonus della valutazione, ed ho dovuto impiegare molto tempo per riportarli a dei valori decenti. Ti conviene prendere una decina di bonus alla volta, tararli e lanciare un test e ripetere toccando un pò per volta tutti i bonus.

    #10361

    sasachess
    Partecipante

    Per il momento ho eseguito un primo giro di tuning per valore statico dei pezzi e bonus di valutazione.
    Tralasciando le PST. Ho utilizzato circa 3 milioni di posizioni tratta da partite di GM, over 2500.
    Il risultato mi sembra plausibile, non vedo parametri “strani” e le variazioni tra i parametri inseriti manualmente e quelli ottimizzati non sono grandissime. A prima vista sembra che l’algoritmo funzioni e lavori “di fino”. Vedremo se questa prima sensazione sarà confermata dai risultati dei test.
    Di solito uso un Gauntlet, ma in questo frangente forse conviene prima partire da un self-match.

    EDIT: Dimenticavo, anch’io ho rilevato un errore medio tra 20 e 30 cp!

Stai vedendo 5 articoli - dal 16 a 20 (di 20 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