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 226 a 240 (di 244 totali)
  • Autore
    Articoli
  • #10222
    stegemma
    stegemma
    Moderatore

    Aumentiamo la posta in gioco:

    Il punto è trovare una posizione in cui il bianco possa catturare vantaggiosamente un pezzo ma debba comunque giocare il perpetuo, perché si troverebbe comunque in uno svantaggio tale da perdere. Da parte del nero, si deve trovare una posizione in cui deve impedire il perpetuo, per mantenere e sfruttare il proprio vantaggio.

    Non è così banale, perché disabilitando il controllo del perpetuo (anzi: della triplice ripetizione) il motore deve giocare diversamente (cadendo nella trappola) invece di forzare/evitare la ripetizione.

    #10223
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Mah, io ad ogni mossa mi valorizzo un array con la posizione (senza i codici legati al numero della mossa stessa). Prima della search io verifico se la posizione da esaminare è contenuta nell’array o no. Se è contenuta, passo subito 0 come score (e bon, come direbbero a Torino), altrimenti procedo normalmente.
    Facendo così dovrebbero esser coperti tutti i casi.

    Bye!

    LL

    #10224
    stegemma
    stegemma
    Moderatore

    Io salvo le posizioni derivanti da mosse giocate effettivamente nella TT, con un tipo TT_DRAW fatto apposta. Quando nella search trova una posizione con quel tipo, ritorno poco meno di zero, per indicare che si sta giocando una ripetizione (non serve sapere se doppia o triplice). Siccome la TT non la cancello mai, questo mi serve per le mosse appunto già giocate. Ci sarebbe un potenziale baco, perché quelle entry potrebbero venir cancellate dalla ricerca ma non me ne preoccupo, per ora.

    Il problema è nella search: come fare per evitare che il motore cada nella trappola di ignorare le mosse che l’avversario fa per procurarsi la ripetizione? Del tipo: ho la Donna in meno, ti regalo un Cavallo e poi ti dò il perpetuo. Se non lo verifichi nella ricerca, potrebbe essere troppo tardi.

    Sto provando senza questo controllo ma è una cosa da implementare. Si potrebbe semplicemente confrontare la hash corrente con le hash delle posizioni precedenti dell’albero e questo è semplice, se usi già uno stack di nodi. Certo, per Satana è utile soprattutto contro Neurone, almeno per le vecchie versioni (mi aspetto sorprese all’IGT dal MP di Neurone!).

    #10228
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Io il problema non me lo sono posto perchè penso che venga tutto gestito logicamente dallo 0 dato dalla rip. Se infatti nella search è 0 io taglio ogni altro sviluppo di rami, mentre per tutti gli altri nodi terminali mi accerto che la valutazione non dia mai 0 (aggiungo un bonus di 0.01 a chi ha la mossa nel caso di 0).
    L’unica logica che ho è, a parte quanto detto prima, che faccio il controllo solo fino a ply 2, giusto per non appesantire la ricerca.

    Bye!

    LL

    #10229
    stegemma
    stegemma
    Moderatore

    Il ritorno di “AlfaGemma”.

    Sto provando ad implementare AlfaGemma invece di AlfaBeta. Si tratta dell’algoritmo che avevo “inventato” (= scoperto l’acqua calda) molto tempo prima di scrivere Drago e che ho usato in tutti i miei sw in assembly. La versione assembly era obiettivamente contorta e difficile da debuggare. La versione C++ invece è leggibile.

    Il vantaggio rispetto ad AlfaBeta (o AlphaBeta, all’inglese) è che non è una funzione ricorsiva, per cui non usa lo stack. Non è veramente un gran vantaggio, perché l’uso dello stack è comunque efficiente ma a me fa comodo, perché io ho comunque un mio “stack” di nodi ed usare anche quello standard è una duplicazione.

    Potrei guadagnare fino a… 3 punti ELO ma non mi trovo a mio agio con AlfaBeta.

    #10230
    stegemma
    stegemma
    Moderatore

    Sembra che AlfaGemma sia veramente più efficiente di Alfabeta. Ho fatto un round-robin tra tre versioni di Satana, ed ecco i risultati:

    
    satana.AlfaGemma: 48
    satana.AlfaBeta: 33
    satana.2.1.14: 39
    

    PS: e la versione con AlfaGemma non ha ancora l’ordinamento delle mosse!

    Ed ora il test col vecchio LVB…

    #10231
    stegemma
    stegemma
    Moderatore

    A 5 minuti, 10 turni andata e ritorno, la versione AlfaBeta ottiene questo scarso risultato:

    
    1	334	0	0	-	_________________________
    1	432938	1	2	-	result	1-0	mate	larsenvb	satana.AlfaBeta	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R1.G2.pgn
    1	439968	1	1	-	result	1/2-1/2		satana.AlfaBeta	larsenvb	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R1.G1.pgn
    1	791295	2	1	-	result	0-1	mate	satana.AlfaBeta	larsenvb	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R2.G1.pgn
    1	887643	2	2	-	result	1-0	mate	larsenvb	satana.AlfaBeta	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R2.G2.pgn
    1	1238978	3	1	-	result	0-1	mate	satana.AlfaBeta	larsenvb	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R3.G1.pgn
    1	1399558	3	2	-	result	1-0	mate	larsenvb	satana.AlfaBeta	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R3.G2.pgn
    1	1750819	4	1	-	result	0-1	mate	satana.AlfaBeta	larsenvb	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R4.G1.pgn
    1	1865212	4	2	-	result	1-0	mate	larsenvb	satana.AlfaBeta	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R4.G2.pgn
    1	2289717	5	2	-	result	0-1	mate	larsenvb	satana.AlfaBeta	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R5.G2.pgn
    1	2403085	5	1	-	result	0-1	mate	satana.AlfaBeta	larsenvb	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R5.G1.pgn
    1	2720209	6	2	-	result	1-0	mate	larsenvb	satana.AlfaBeta	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R6.G2.pgn
    1	2756348	6	1	-	result	0-1	mate	satana.AlfaBeta	larsenvb	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R6.G1.pgn
    1	3282273	7	1	-	result	1-0	mate	satana.AlfaBeta	larsenvb	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R7.G1.pgn
    1	3319394	7	2	-	result	1-0	mate	larsenvb	satana.AlfaBeta	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R7.G2.pgn
    1	3669677	8	1	-	result	0-1	mate	satana.AlfaBeta	larsenvb	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R8.G1.pgn
    1	3838247	8	2	-	result	1-0	mate	larsenvb	satana.AlfaBeta	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R8.G2.pgn
    1	4155423	9	2	-	result	1-0	mate	larsenvb	satana.AlfaBeta	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R9.G2.pgn
    1	4357128	9	1	-	result	1/2-1/2		satana.AlfaBeta	larsenvb	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R9.G1.pgn
    1	4708534	10	1	-	result	0-1	mate	satana.AlfaBeta	larsenvb	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R10.G1.pgn
    1	4943337	10	2	-	result	1/2-1/2		larsenvb	satana.AlfaBeta	C:\Ligs\Satana\gauntlet.5m_AB_AG_LVB.108.T1.R10.G2.pgn
    1	4944345	10	0	-	----------------- tournament has finished
    1	4944349	10	0	-	satana.AlfaBeta: 7
    1	4944353	10	0	-	larsenvb: 33
    1	4944354	10	0	-	-----------------
    

    Ora sta girando la versione AlfaGemma, nelle stesse condizioni. Domani vedrò i risultati di questo scontro indiretto tra i due algoritmi.

    #10232
    stegemma
    stegemma
    Moderatore

    Dopo alcune correzioni e qualche ottimizzazione, ora la versione AlfaGemma ha un nps più che doppio, rispetto alla AlfaBeta e non c’è ancora l’ordinamento delle mosse.

    Basterà per raggiungere LarsenVB?

    #10233
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Accidenti!
    Secondo me però adesso le cose stanno così: O l’alfabeta faceva qualche giro di troppo, oppure l’alfagemma attuale non fa qualche giro (e penso ce ne accorgeremo all’igt 😉 )
    Oppure ancora… l’alfagemma è più cazzuto di quanto possa sembrare?!

    Bye!

    LL

    #10234
    stegemma
    stegemma
    Moderatore

    Di fatto è un alfabeta iterativo invece che ricorsivo, per cui l’eventuale guadagno è dovuto solo a qualche baco dell’implementazione di alfabeta oppure, più semplicemente, al fatto che capisco meglio alfagemma. C’è da dire che manca ancora l’ordinamento delle mosse e quello è piuttosto pesante, per cui se analizzassi il branching factor, oltre ai nps, credo che alla fine le due cose si equivalgano.

    Sui tempi brevi sembra migliore la versione con alfagemma ma devo lavorarci ancora, per capire se ho ottenuto un vero aumento di forza del motore.

    Dopo aver introdotto una versione semplificata di Transposition Table, ora Satana riesce a vincere i finali elementari RD vs RT e RAA vs R e altri simili, che non è poco.

    #10235
    stegemma
    stegemma
    Moderatore

    Ho adottato una variante della TT, richiamandola solo negli ultimi due nodi (i nodi foglia dei due colori, di fatto) ed ho ottenuto subito un ottimo progresso. Mentre prima Satana ce la faceva solo a 10 secondi, contro LVB, ora quasi lo eguaglia anche a 5 minuti:

    
    1	9957288	20	0	-	satana.AlfaGemma: 30
    1	9957290	20	0	-	larsenvb: 46
    

    Mi piace soprattutto perché le partite sono tutte molto combattute e non ci sono errori evidenti. Ho notato che LVB cura meglio la struttura pedonale, mentre Satana a volte sembra disinteressarsene. su questo devo lavorare. ora che AlfaGemma e TT sono stabili, posso tornare a lavorare alla funzione di valutazione.

    Quest’anno all’IGT dovrei riuscire a fare almeno una bella figura.

    #10236
    stegemma
    stegemma
    Moderatore

    E in un gauntlet a 10 secondi riesce a strappare una patta con alfieri contrari niente meno che a Cyberpagno (ma le altre le perde ovviamente tutte):

    
    1	334058	10	0	-	satana.AlfaGemma: 1
    1	334060	10	0	-	chiron: 40
    1	334062	10	0	-	cyberpagno: 39
    
    #10237
    stegemma
    stegemma
    Moderatore

    Ho rilasciato la versione 2.4.19, che sarà l’ultima “free” (salvo eventuali correzioni di bachi). Dopo di questa, il motore tornerà privato.

    Nello zip ci sono le versioni Windows 32/64 bit, Linux Ubuntu e Mac OS X!

    Satana 2.4.19 win/osx/lnx

    #10238
    stegemma
    stegemma
    Moderatore

    Altro test: un round robin tra alcune versioni di satana. Il risultato non è favorevole all’ultima versione ma più o meno sembrano eguagliarsi:

    
    satana.AlfaGemma: 83
    satana.2.4.19bk: 99
    satana.2.1.14: 101
    satana.2.2.17: 69
    satana.2.0.8: 40
    

    La versione “bk” era una delle prime con book.

    #10240
    stegemma
    stegemma
    Moderatore

    Mentre voi vi spaparazzate al sole, a me tocca fare test su test a Satana. Ora sto provando a riattivare la quiescenza. Un test a 5 secondi, in cui la nuova versione sembra un rullo compressore. C’è da dire che LarsenVB non va bene a tempi così brevi ed a volte crasha. Il risultato è interessante:

    
    satana.AlfaGemma: 125
    satana.2.4.19: 117
    larsenvb: 111
    satana.2.1.14: 98
    satana.2.2.17: 93
    satana.2.0.8: 52
    

    Ora provo a 5 minuti, con i tre motori più forti di questo gruppo.

    PS: questo era un round robin

Stai vedendo 15 articoli - dal 226 a 240 (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