search extensions


Questa pagina ha una gerarchia - Pagina madre:Programmazione

Home Forum Programmazione search extensions

Questo argomento contiene 11 risposte, ha 3 partecipanti, ed è stato aggiornato da mauro.riccardi mauro.riccardi 5 anni, 5 mesi fa.

Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)
  • Autore
    Articoli
  • #2650
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    L’altro giorno ho scambiato 4 chiacchere con Edoardo anche sull’estensione della ricerca basata sugli scacchi che ha implementato su ProChess.
    Lì per lì non ho preso in considerazione l’ipotesi di implementare tale feature su Neurone, ma rivedendo molte partite su fics mi sono ricreduto sulla sua importanza.
    Se infatti Neurone avesse avuto tale funzionalità molte partite non le avrebbe perse (spesso clamorosamente).

    Ecco, mi sono trovato altra ‘roba’ da fare prima di implementare la parte mp 🙂

    Il problema che ha dovuto affrontare Edo è stato quello di scartare gli scacchi inutili, ossia quelli come, per esempio Axf7+ da

    Diagramma

    Il problema che invece mi pongo io è il seguente:

    Considerando che l’estensione voglio implementarla insieme alle mosse ‘out of check’, come faccio a bloccare l’esplosione della ricerca in casi come quelli degli scacchi a ripetizione in posizioni aperte?


    Pensavo di tapparlo non appena trovo una posizione nelle transposition table, ma forse esiste qualcosa di più semplice… che dite? Sono fuori strada?

    Bye!
    LL

    LL

    #2651

    Non mi meraviglio che tu abbia notato l’effetto orizzonte senza check extensions. C’e’ una grossa differenza tra con e senza check extensions.

    Per quanto riguarda l’esplosione, io me ne preoccuperei relativamente poco.

    Se hai le hash tables (o nel tuo caso, un meccanismo analogo) gli scacchi ripetuti li vai a ripescare direttamente da li’.

    Meglio ancora se hai il meccanismo di detection di ripetizione (che e’ un controllo che si fa prima di pescare dalla TT).

    C’e’ poi il problema degli scacchi “quasi” ripetuti (per esempio quando l’avversario ti entra con la Donna nelle retrovie, e continua a dare scacchi, ma senza ripetere la posizione. E’ vero che un pochino ti aumenta l’albero, ma c’e’ da fare una osservazione.

    Partiamo dal caso in cui lo scacco e’ a profondita’ residua 1 (cioe’ e’ l’ultima mossa prima della frontiera, dopo di li’ si va in quiescenza, se ce l’hai, o usi una funzione di valutazione, con tutti i trucchi che vuoi per sostituire la quiescenza – come nel tuo caso o nel caso, pare, di Sargon); in questo caso senza estensioni saresti direttamente all’orizzonte (insomma, con la quiescenza mica tanto, ma e’ per semplificare il discorso), con estensione permetti alla ricerca di esaminare anche le evasioni, come se avessi avuto un ply in piu’ da prima. *Non* stai permettendo alla ricerca di cercare eventuali nuovi scacchi da parte dell’avversario.

    Chiaramente se sei a profondita’ piu’ alta le linee si possono sempre allungare sensibilmente piu’ delle altre, ma sempre in ragione di 1 semimossa per ogni 2 semimosse di scacco-evasione.

    Il mio consiglio e’: prova, se vedi che su certe posizioni l’albero esplode, pensa a limitazioni (tipo non estendere per piu’ di N volte di seguito), ma io credo che non ci sara’ necessita’ di fare questa scelta.

    Per quanto riguarda la posizione del diagramma, la differenza tra quella posizione e un tatticismo “a la Tal” e’ che non ci sono abbastanza pezzi: non esistono criteri statici per decidere, per cui io lascerei alla ricerca di sbrogliarsela da sola. Io ho provato a non estendere certi scacchi, o a potarli addirittura, ma non mi dava miglioramenti: cmq per queste cose testare sul *proprio* programma e’ la via migliore, visto che ogni implementazione reagisce in maniera diversa.

    Aggiungo anche una considerazione: ci sono estensioni che premiano “mosse collegate” che portano minacce, non come le check ext’s, ma quasi. Io non avrei paura delle esplosioni prima di aver provato in concreto nel mio programma se queste si verificano o no.

    Infatti ho tante di quelle estensioni in Chexa che fanno emergere (http://en.wikipedia.org/wiki/Emergence) un profilo quasi psicopatologico 🙂

    BTW, assolutamente, scrivi anche una funzione che generi solo le evasioni, la differenza si vede. Anche perche’ le mosse che non evadono uno scacco sono interamente spreco di cicli di CPU.

    bye^2,     mr

    #2652

    Da quanto capisco tu vuoi estendere la ricerca sia quando sono sotto scacco (evasioni) sia quando do scacco. se non hai un sistema per accorgerti delle ripetizioni questo può portare ad un loop infinito. Inoltre le evasioni sono causate da uno scacco alla mossa precedente, estendendo entrambe è come estendere di 2 mosse gli scacchi! Ti consiglio di provare solo una delle due tecniche, su ProChess ho ottenuto circa +100 Elo di miglioramento 🙂

    #2653
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Il sistema x le ripetizioni ce l’ho implementato all’interno della funzione per le transposition table. Le mie TT non usano hash table/zobrist, e nemmeno dictionary (più performanti su vb net), ma sono presenti su normalissimi vettori (ancora più performanti ma un po’ ‘ingombranti’).

    Il loop infinito quindi non mi fa paura, perchè non è realistico, il mio timore non è vedermi ramificare l’albero in maniera non solo non uniforme tra un’analisi di una mossa ed un’altra (è normale che non sia uniforme all’interno di una stessa elaborazione, se utilizzo la doppia estensione) e nemmeno l’aumento di memoria usata (la scarico ad ogni iterazione), ma soprattutto per il tempo impiegato .

    In merito penso di fare il test sul tempo a disposizione ad ogni fine iterazione estesa ed in base a quello deciderò se tagliare ad una certa profondità prefissata l’estensione oppure lasciarla esplodere fino al suo termine logico.

    Riuscissi ad implementarla per l’uomo macchina, secondo me equilibrerei le sorti la partita contro Yao, altrimenti pazienza, perderò.

    Sarebbe bello utilizzare questa estensione nella ‘bella’ contro Freccia al campionato italiano. Ricordo che Neuro ci aveva perso l’ultima volta soprattutto a causa di un tatticismo scaturito da una serie di scacchi fuori dal suo orizzonte (http://www.g-sei.org/11-campionato-italiano/).

    Bye!
    LL

    LL

    #2654

    Sulla questione delle tt implementate come vettori non capisco: normalmente si tratta di un vettore…

    Riguardo alla “doppia” estensione, ti sconsiglio di estendere di 2 ply, con una unica eccezione (e pure li’, testa per vedere se ti da qualche miglioramento). L’eccezione sarebbe che se hai una sola evasione legale puoi anche estendere sia lo scacco che l’evasione, tanto li’ non aumenta l’albero, visto che non ci sono ramificazioni.

    Questa ultima (tipicamente chiamata credo single reply extension) a me non ha mai dato risultati buoni, ma va testata perche’ ogni motore e’ diverso. Pero’ estendere sia gli scacchi sia tutte le evasioni di 1 ply la vedo male. Poi devi fare contorsionismi per limitare quando ti basta semplicemente estendere meno, imho.

    bye^2,     mr

    #2655
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Sulle tt davo per scontato che venissero usate delle hash table normalmente e credevo di essere io l’eccezzione con il vettore. A questo punto dovrò rimetterci mano per personalizzarlo in modo diverso 😉

    Sulla doppia estensione non so, mi metterò a provare e poi ti dico, grassie!

    Ah, dato che ci incrociamo Mauro, mi accennavi alla possibilità di condividere degli script per l’uomo macchina. Se vuoi faccio una pagina nuova sul’area di sviluppo; io mi faccio la parte windows e tu quella linux… così rilasciamo i due pacchetti diversi e lo facciamo per tutti, che dici?

    Bye!
    LL

    LL

    #2656

    Beh, “hash table” e’ il nome che gli hanno dato, ma in effetti e’ un vettore, indicizzato per (parte del) contenuto (vedi Zobrist).

    La doppia estensione ribadisco che si puo’ usare  imho solo se c’e’ una sola risposta allo scacco (se vuoi piu’ estensioni c’e’ una pletora di tecniche disponibili – inoltre spesso e’ piu’ facile fare le riduzioni, anche li’ c’e’ molto da guadagnare).

    Per gli script…ahem…mi ricordi che cosa dovevano fare quegli script? Non mi guardare male, davvero non mi ricordo :-\

    bye^2,     mr

    #2657
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Ti riporto quanto ho trovato… 😉
    “Mi e’ venuto in mente che si potrebbe realizzare un “helper pack” per i partecipanti: praticamente un zip file con degli script (sotto linux) o dei collegamenti (sotto windows) per semplificare e automatizzare il lancio dell’interfaccia con le opzioni giuste per produrre un file debug adatto (con nome che cambia ad ogni turno, per es.).
    In modo da eliminare le possibilita’ di errore/dimenticanza meramente umano.
    In effetti e’ quello che pensavo di fare per me stesso, poi mi e’ venuto in mente che il sistema e’ esportabile :-)”

    LL

    #2658

    Ahh, ho capito che intendo ( 🙂 )

    Si’, ok. Meglio ancora si potrebbe fare qualcosa per automatizzare la produzione degli script. Per esempio il file debug potrebbe cambiare nome ad ogni turno (cosi’ non ci sarebbero sovrascritture accidentali), e si potrebbe aggiungere anche il nome dell’avversario del turno (c’e’ l’opzione apposita di xboard, opzione che dovremo usare pure nel match uomomacchina). Altre cose?

     

    bye^2,     mr

    #2659
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Io lato windows farei un’interfaccia con vari campi da compilare (compilati di default quando abbiamo già il dato) e anzicchè link attiverei tutto attraverso un classico bottoncino. Il tutto in modo più semplice possibile, a prova di idiota.

    Quidi sintetizzando gli input:
    – Percorso eseguibile gui
    – Parametro gui nome avversario
    – Parametro gui round
    – Percorso eseguibile engine + parametri
    – Watcher si/no
    – freechess si/no

    I file in output del debug e del pgn li vedrei creati sempre, per essere univoci, li creerei in base al round e all’ora del sistema.
    I parametri da aggiungere in più o in meno verranno scelti automaticamente in base alla selezione effettuata in input.

    Se poi abbiamo bisogno di altro lo implementiamo strada facendo.

    Bye!
    LL

    p.s. sarebbe carino che alla fine di ogni turno venga zippato tutto l’occorrente e spedito ad una email. nel campo – mail dell’arbitro. Ma se vuoi lo valutiamo a tempo debito.

    Bye!
    LL

    LL

    #2661
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Leggendomi, mi sono accorto di non avere scritto il nome account fics, nel caso in cui si voglia soltanto giocare su fics. In qualunque caso penso che manchi ancora qualcosa, tipo il nome dell’eventuale file contenente i comandi da far eseguire in automatico allo startup su fics, ma sono dettagli, ci si mette un attimo ad implementarlio.

    Entro dopodomani creo la paginetta sull’area di sviluppo, faccio una bozza e la metto lì, poi, è chiaro, vedi tu come fare la parte linux, in qualunque caso, potremmo anche non scendere nel dettaglio e creare una serie di link parametrizzati, l’importante che funzionino.

    Bye!
    LL

    LL

    #2663

    In effetti io intendevo l’helper pack solo ad uso dei tornei con regolamento g6, per cui alcune cose non servono. E’ in quei casi che l’errore umano puo’ causare problemi (tipo squalifica perche’ non produci il log…).

    Vabbe’, alla fine fatto 30 possiamo fare 31…

    bye^2,     mr

Stai vedendo 12 articoli - dal 1 a 12 (di 12 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