I miei errori


Questa pagina ha una gerarchia - Pagina madre:Programmazione

Home Forum Programmazione I miei errori

Questo argomento contiene 35 risposte, ha 8 partecipanti, ed è stato aggiornato da Lissandrello Luca Lissandrello Luca 1 anno, 2 mesi fa.

Stai vedendo 15 articoli - dal 16 a 30 (di 36 totali)
  • Autore
    Articoli
  • #7164
    stegemma
    stegemma
    Moderatore

    Il mio errore più grave (che poi ho ripetuto nei vari programmi) era nell’algoritmo di scelta della mossa migliore, a seguito di iterative deepening. Sia nelle ultime versioni di Raffaela che in Freccia, il motore trovava la mossa migliore… poi giocava la prima mossa trovata al primo livello!!!

    Ho perso diversi tornei, per questo errore. Tempo fa avevo deciso di riprendere tutti i miei software, da Raffaela e Freccia a Satana, per renderli “error-free” ma poi mi sono fermato a mezza-Raffaela (ovvero, l’ho corretta solo a metà).

    #7165
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Ho perso diversi tornei, per questo errore. Tempo fa avevo deciso di riprendere tutti i miei software, da Raffaela e Freccia a Satana, per renderli “error-free” ma poi mi sono fermato a mezza-Raffaela (ovvero, l’ho corretta solo a metà).

    Per il prossimo torneo (l’igwt) io utilizzerei la vecchia Raffaela (la versione più forte). L’ho già selezionata tra i partecipanti su http://www.g-sei.org/igwt-2/ ma posso sostituirla con quella che vuoi fino a qualche ora prima dell’evento.

    Bye!

    LL

    #7166
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    In questo momento c’è il test di un vecchissimo motore su http://www.g-sei.org/engine_testing/ , è un po’ per nostalgici, ma ci aiuta a tenere viva e aggiornata la classifica elo su http://www.g-sei.org/classifica/
    Sono le ultime partite, dopodiché salteremo a venerdì per l’igwt.

    Bye!

    LL

    #7167
    stegemma
    stegemma
    Moderatore

    Per il prossimo torneo (l’igwt) io utilizzerei la vecchia Raffaela (la versione più forte). L’ho già selezionata tra i partecipanti su http://www.g-sei.org/igwt-2/ ma posso sostituirla con quella che vuoi fino a qualche ora prima dell’evento.

    Sì, è meglio usare quella. Quella nuova va bene giusto per avere la soddisfazione di battere un motore 😉

    #7433
    stegemma
    stegemma
    Moderatore

    Sempre in tema del mio baco ricorrente… anche Satana non ne era immune. Stavolta sono riuscito a replicarlo in un altro modo. Nell’iterative deepening salvavo la migliore mossa come puntatore… poi avevo la bella idea di riordinare l’array (statico) delle mosse, prima di effettuare una nuova iterazione… col risultato che il puntatore alla mossa migliore puntava ad un’altra, quasi a caso!!!

    Ecco il motivo delle buffe partite da brocco di Satana (sempre che non ci sia un altro baco) e forse anche delle ultime release di Raffaela.

    #7434

    marco belli
    Membro

    avevo un errore nel codice simile 🙂 anche io a volte nell’iterative deepening non usavo la mossa migliore, ma quella che ad una data profondità aveva dato il risultato parziale migliore.
    In pratica se mentre cercavon con profondità 12 ad un certo punto iniziavo ad avere un fail low e aprivo la finestra verso il basso, se il tempo a dispozione per la ricerca finiva prima di aver dato un risultato dentro la finestra, allora sceglievo come mossa migliore qyella che aveva avuto uno score maggiore cioè quella sbagliata 🙁

    #7438
    stegemma
    stegemma
    Moderatore

    Satana comincia a giocare non bene ma in modo piacevole. Ha perso la sua prima partita contro il vecchio Neurone XX (versione 2013) ma ha venduto cara la pelle, nonostante i suoi numerosi errori.

    Ho notato due cose: la prima è che, in questa partita da 3 minuti, arriva regolarmente al livello 8. Nulla confronto con Raffaela/Freccia ma siamo in C++; la seconda è che mi è sembrato che Neurone tenga impegnata la CPU fino al 40/60 %, subito dopo che ha mosso. Non so se sia un problema del task manager ma Satana scende dal 99% quando pensa allo 0% in stand-by. Stavo proprio verificando che Satana si comportasse correttamente, perché prima teneva occupata la CPU al 99% anche in standby.

    Ecco la partita, bella da vedere, bachi compresi:

    #7507
    stegemma
    stegemma
    Moderatore

    L’ultimo dei miei simpatici errori, scoperto stamattina:

    
      if(!valid_moves)
      {
        pNode->value = IsInCheck(board.boKings & *pNode->pMyPieces) 
                     ? ENGINE_KING_VALUE
                     : ENGINE_DRAW_VALUE;
      }
    

    Semplicemente manca un “-” e la cosa simpatica è che, non appena Satana ne vedeva la possibilità, faceva di tutto per prendere matto!!!

    #7508
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    mi è sembrato che Neurone tenga impegnata la CPU fino al 40/60 %, subito dopo che ha mosso. Non so se sia un problema del task manager ma Satana scende dal 99% quando pensa allo 0% in stand-by. Stavo proprio verificando che Satana si comportasse correttamente, perché prima teneva occupata la CPU al 99% anche in standby.

    Fino alla XIX versione, in caso di ponder off, neurone verificava eventuali input da gui in modo smodato usando il processore in modo a penalizzante per gli avversari su un computer monoprocessore.
    Me l’aveva fatto notare Carlos Pagador, per la XX versione questo bug l’ho risolto, mi fa strano che si riverifichi… anche perchè ho continuato a fare attenzione a quest’aspetto e non mi sembra succeda più… mmm…

    LL

    #7509
    stegemma
    stegemma
    Moderatore

    Prova ad aggiungere uno usleep(100) appena prima della verifica della presenza di dati nello standard input:

    Best way to handle standard input – talkchess forum

    #7510
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Threading.Thread.Sleep(Sleep_di_attesa)

    LL

    #7511
    stegemma
    stegemma
    Moderatore

    Me lo faceva sulla virtualbox xp ma sembra che nel pc “vero” non ci sia il problema. Lo verifico meglio appena Satana si sarà “stabilizzato”. Ho rivisto l’alphagemma, per i casi sia di matto che di mosse illegali ed ora mi resta solo da sistemare il comportamento in caso di time-out segnalato dall’interfaccia (ora si blocca e non gioca la partita seguente).

    #7733

    Un baco trovato di recente in pedone:

    Per salvare il tipo di nodo nella hash faccio affidamento alla mossa migliore, ossia, se viene individuata e alpha<beta sono in un nodo PV, se viene individuata e alpha>=beta sono in un CUT se la mossa migliore non viene individuata mi trovo in un ALL (la mossa migliore viene aggiornata con alpha).

    Questo è vero per la ricerca, non è vero invece in quiescenza. Ad esempio, se sono in un nodo PV e alpha viene aggiornata dallo stand-pat score mi troverò senza una mossa migliore ma in un nodo PV.
    In pedone, salvavo quindi nella hash un nodo PV come un nodo ALL, perchè in quel caso non c’era l’aggiornamento della mossa migliore.

    #7734
    stegemma
    stegemma
    Moderatore

    Non c’ho capito niente… i miei bachi sono più terra terra 😉

    #8055
    stegemma
    stegemma
    Moderatore

    Eccomi col baco di Satana. In questa posizione:

    [FEN]8/p7/8/1P6/8/8/8/K6k b[/FEN]

    Satana sbagliava il perft dopo a7a5, giocando alcune mosse in più. Ho scoperto la sequenza bacata facendo il log delle mosse:

    a7a5 a1b1 a5a4 b5a6

    Fin qui, sembra un banale errore di en-passant giocato al momento sbagliato… ma è più bello. Satana ha la generazione incrementale delle mosse, per cui ricostruisce solo quelle che servono, in base all’ultima mossa. Quando gioca a7a5, vengono ricostruite le mosse del pedone b4, aggiungendo l’en-passant. Quando fa l’undo di a7a5, l’en-passant scompare. fin qui, tutto ok. Il problema è che non rigenero le mosse del pedone b4 quando l’en-passant non è più valido! Non vengono rigenerate perché (apparentemente) la mossa a5a4 non influisce sulle mosse del pedone b4. Siccome la generazione incrementale tiene tutte le mosse già salvate di ogni pezzo, fin che ci siano interferenze di altri pezzi, ecco che l’en-passant sembra ancora valido. Lo sospettavo ed ora ne ho la certezza.

    Al prossimo baco…

    PS: il baco è ancor più bello perché si verifica solo avendo introdotto la funzione IsInCheckAfterMove all’ultimo livello del perft; questa funzione esegue una mossa minimalmente, senza fare l’update delle mosse (quindi neanche del pedone che prendeva en-passant), infatti il perft andava bene se attivavo il confronto dell’IsInCheckAfterMove con una normale sequenza Execute/UnDo, che invece attivava l’update delle mosse… insomma: una bella combinazione di reazioni a catena!!!

Stai vedendo 15 articoli - dal 16 a 30 (di 36 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