Satana steps


Questa pagina ha una gerarchia - Pagina madre:Programmazione

Home Forum Programmazione Satana steps

Questo argomento contiene 243 risposte, ha 6 partecipanti, ed è stato aggiornato da stegemma stegemma 6 mesi, 2 settimane fa.

Stai vedendo 15 articoli - dal 31 a 45 (di 244 totali)
  • Autore
    Articoli
  • #7521
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Cos’è la funzione a valori casuali?

    LL

    #7522
    stegemma
    stegemma
    Moderatore

    I valori della funzione di valutazione venivano impostati ad ogni mossa, così:

     for(int i=0; i<enVALUES; i++)
      {
        iiValues [ i ] += 5 - (rand() % 10);
      }
    

    In questa versione, un pedone valeva 100, per cui non era una grande differenza. Nella prima impostazione, i valori erano totalmente casuali, con un range da 0 fino a mezzo pedone. Nella versione 2.0.3 mi sembra che fossero totalmente casuali o con un diverso range.

    Ci si può divertire per vedere come varia la forza del motore… ma per i nostri non dovrebbe influire molto.

    PS: nella sezione code, se scrivi quadra i quadra (per l’indice dell’array) ti perdi un pezzo di codice. Io disabiliterei tutti ma proprio tutti i tag nella code.

    #7523
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Arg! Temevo questa risposta, ma qual’è il motivo per il quale randomizzare parte dei valori dovrebbe portare ad un miglioramento delle performances del motore? Forse alla fine fai un collect dei valori cercando il più appropriato?

    PS: nella sezione code, se scrivi quadra i quadra (per l’indice dell’array) ti perdi un pezzo di codice. Io disabiliterei tutti ma proprio tutti i tag nella code.

    E’ per questo che io consiglio di usare il pre
    http://www.g-sei.org/faq-2/
    http://codex.wordpress.org/Writing_Code_in_Your_Posts
    in pratica ha tutti i tag disabilitati come consigli tu.

    Bye!

    LL

    #7524
    stegemma
    stegemma
    Moderatore

    La generazione di valori random è la prima parte dell’algoritmo genetico; non avendo tempo di implementarlo li ho semplicemente lasciati casuali 🙂

    La versione con valori parzialmente casuali l’avevo già sperimentata in Raffaela, per variare il gioco. Non ha mai dato risultati degni di nota. Il peso del valore dei pezzi, in un motore senza quiescenza, determina maggiormente la mossa che non i valori posizionali.

    #7525
    stegemma
    stegemma
    Moderatore

    Direi che ci siamo… questa versione può giocare dignitosamente all’IGT:

       Engine               Score          Sa
    1: Satana – x64 current 16,0/30 ·········· 
    2: Supra 19 64bit       5,0/10  ====1=10=0 
    2: Satana.2.0.4.w64bit  5,0/10  ========== 
    4: Neurone_XX           4,0/10  0101010100
    
    —————–Neurone_XX—————–
    Neurone_XX – Satana – x64 current          : 4,0/10 4-6-0 (0101010100)  40%   -70
    —————–Satana – x64 current—————–
    Satana – x64 current – Neurone_XX          : 6,0/10 6-4-0 (1010101011)  60%   +70
    Satana – x64 current – Satana.2.0.4.w64bit : 5,0/10 0-0-10 (==========)  50%    ±0
    Satana – x64 current – Supra 19 64bit      : 5,0/10 2-2-6 (====0=01=1)  50%    ±0
    —————–Satana.2.0.4.w64bit—————–
    Satana.2.0.4.w64bit – Satana – x64 current : 5,0/10 0-0-10 (==========)  50%    ±0
    —————–Supra 19 64bit—————–
    Supra 19 64bit – Satana – x64 current      : 5,0/10 2-2-6 (====1=10=0)  50%    ±0
     
    
    #7526
    stegemma
    stegemma
    Moderatore

    Qual è il significato di tutto questo thread? Non lo faccio per caso o per auto-incensarmi (visti i risultati non superlativi…) ma per mettere in chiaro una cosa: arrivare a livelli top con un engine è questione di fatica, tempo perso, tentativi, fallimenti e, soprattutto, di sgualcire le sudate carte!!! Per questo dobbiamo diffidare da chi si presenta improvvisamente con un engine da 2200 punti e più. Siccome i genii della programmazione sono pochi e non si dedicano agli scacchi… si tratta al 99% di un clonatore selvaggio. Lo stesso, ma in misura minore, per chi ha un motore debole che improvvisamente guadagna un migliaio di punti ELO.

    Con questi step, si vedrà come, passo passo, l’implementazione delle varie parti di un engine porti ad un aumento di prestazioni del motore; aumento che è graduale e raramente drammatico. Potrei auto-smentirmi, se implementando le TT vedessi un aumento di prestazioni enorme ma almeno potrei giustificarlo e dimostrarlo tecnicamente ed avremmo un termine di confronto per ogni futuro engine che dovesse apparire.

    #7527
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Ok, ok, d’accordo su tutto (anche se imho i ‘2200’ dipendono dal linguaggio di programmazione), ma ti sei dimenticato un piccolo particolare: Adachess! 🙂
    Nei miei test dà timpulate (siciliano: gran ceffoni) sia a Satana che alla mia XXII, solo con il learning, giorno dopo giorno Neurone sta rosicchiando un po’ di elo.

    Bye!

    LL

    #7528
    stegemma
    stegemma
    Moderatore

    Ho scelto Neurone perché è l’avversario a livello di Satana, all’IGT, e Supra perché l’ho trovato in un torneo in cui era l’unico ad aver perso una partita contro Satana.

    Che parametri devo dare ad Arena, per far funzionare Neurone XXI? Il programma parte ma non pensa 🙁

    E poi… si può togliere lo splash-screen di Neurone?

    #7529
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Che parametri devo dare ad Arena, per far funzionare Neurone XXI? Il programma parte ma non pensa

    dovrebbe bastare la sclta del protocollo (winboard).
    Considera che la prima volta che viene attivato, il programma fa un check up del sistema (dura qualche secondo), dopodicche se riavvii arena dovrebbe essere tutto pronto.

    E poi… si può togliere lo splash-screen di Neurone?

    Ma come!? E’ la cosa più bella del mio engine! Mai nessuno in trent’anni e passa aveva pensato una str.. ehm… una cosa del genere! 😀
    Se vuoi proprio disattivarlo vai nella sottocartella Config, attiva l’eseguibile (Neurone_config.exe), deseleziona ‘Display splash screen at startup’, poi clicca su ‘Save and exit’.

    Bye!

    LL

    #7532
    stegemma
    stegemma
    Moderatore

    Lo splash screen diventa fastidioso solo perché io faccio molti brevissimi gauntlet da 1 minuto, tra Satana e Neurone. Siccome mi piace vederli giocare, perché solo così capisco i limiti della valutazione di Satana, nelle prime mosse non vedo la scacchiera, per diversi secondi, coperta dallo splash screen.

    Grazie per la dritta, ora la disattivo e vedo se riesco a far girare XXI… visto che XX ormai è “carne da macello”, per Satana 😉

    #7533
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Perchè non ci fai un book? Secondo me guadagneresti molti punti elo… e poi, un ‘Libro di Satana’ mette paura 🙂
    Bye!

    LL

    #7534
    stegemma
    stegemma
    Moderatore

    Perchè non ci fai un book? Secondo me guadagneresti molti punti elo… e poi, un ‘Libro di Satana’ mette paura :-)
    Bye!

    Troppe cose devo fare… ma non sarebbe una cattiva idea. Anche solo un book di 4 mosse, che contenga solo e4/e5 d4/d5 farebbe guadagnare molti punti ELO a Satana.

    Comunque l’ultimo gauntlet Satana/Neurone è finito 4,5/7 per Satana, per cui non c’è molta differenza. Adesso l’uomo da battere è AdaChess… di questo passo, prima che arrivi a Rybka, ce ne vuole!!!

    #7535

    Alessandro
    Membro

    Eeeeeeh ma AdaChess è mooolto lontano dai 2200 elo 🙂 Indicativamente dovrebbe essere sui 1600, che pure è un bel traguardo in un solo anno e mezzo di sviluppo.
    L’obiettivo della prima versione era quello di avere un motore funzionante, ragionevolmente “bug-free”, ma anche che facesse mosse non casuali. Una base di partenza per le versioni successive.
    L’obiettivo di questa seconda versione è stato invece quello di implementare algoritmi più sofisticati ed efficienti in modo da dargli una valutazione posizionale più accurata possibile (nei limiti delle mie scarse capacità scacchistiche).
    La prossima versione è ovviamente già in fase di sviluppo. Obiettivo: 2000 elo. Chi lo sa se è troppo ambizioso?

    #7536
    stegemma
    stegemma
    Moderatore

    Eeeeeeh ma AdaChess è mooolto lontano dai 2200 elo :-) Indicativamente dovrebbe essere sui 1600, che pure è un bel traguardo in un solo anno e mezzo di sviluppo.
    L’obiettivo della prima versione era quello di avere un motore funzionante, ragionevolmente “bug-free”, ma anche che facesse mosse non casuali. Una base di partenza per le versioni successive.[…]

    Beh, Satana avrà, in tutto, un paio di mesi di lavoro e 3 engine per un’infinità di anni di esperienza… ma mi sembra che fatichi a battere AdaChess, per cui hai fatto un ottimo lavoro, già ora. Non guardare all’ELO dei software più blasonati… l’importante è battere Satana! 😉

    Anche per Satana mi sono posto un primo obiettivo di avere un programma “bugs-free”, su cui sperimentare gli algoritmi che mi interessano, senza distrazioni di mosse incomprensibili. Non ci sono ancora arrivato ma non sono molto lontano.

    L’ultimo baco è nella verifica dello scacco; in questa posizione:

    rnb1kb1r/pp1p4/5Np1/2p2p2/2B2P1p/4P2Q/PPPPN2P/RNB1K2R/ b KQ

    non riconosce che il Re è sotto scacco. Per trovarla, ho usato un metodo che può essere utile a tutti. Ho una funzione IsInCheck (bacata) ed una MakeMoves (perfetta, lo prova il perft). All’inizio della IsInCheck, solo per debug, chiamo la MakeMoves al livello seguente, senza muovere. La MakeMoves (oltre a generare le mosse) ritorna true se prende il Re per cui mi basta confrontare i due valori e mettere un breakpoint, se differiscono.

    Uso un simpatico “trucco” per far sì che venga chiamata questa funzione di test, che così “incapsula” quella standard (che, purtroppo, ha più punti di ritorno, per cui non la si può semplicemente modificare):

    #define DEBUG_IS_IN_CHECK 1
    
    bool clsEngine::IsInCheck(const uint64_t boSquare)
    {
    #if DEBUG_IS_IN_CHECK
      if((boSquare & board.boKings)!=EMPTY)
      {
        int options = board.options;
        board.options = 0; // evita loop infinito per controlli IsInCheck nella generazione arrocchi
        NextLevel();
          bool bCompareCheck = MakeMoves();
        PreviousLevel();
        board.options = options;
        if(bCompareCheck!=IsInCheckDeb(boSquare))
        {
          sfout.Push(“# ISINCHECK BUG FOUND!!!”);
          DebugBoard();
          IsInCheckDeb(boSquare); // <— metto un breakpoint e la richiamo in debug, per trovare il baco
        }
        return bCompareCheck;
      }else return IsInCheckDeb(boSquare);
    }
    bool clsEngine::IsInCheckDeb(const uint64_t boSquare)
    {
    #endif
      …
    }
    
    #7537
    stegemma
    stegemma
    Moderatore

    Rilasciata la versione 2.0.5 su:

    Satana 2.0.5

    In un gauntlet a 10′ sembra superiore a Neurone XX e Supra ma inferiore ad AdaChess.

Stai vedendo 15 articoli - dal 31 a 45 (di 244 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