Forum pubblico/privato: Pubblico
Permessi di scrittura: Utenti registrati
Giorno: 11/09/2014, 18:19:50
Lucaschess: come giocare senza libro?
Ciao, ciao.gif
ho creato una sorta di engine-stub in Python che al comando UCI "go" risponde "bestmove h7h5"; l'ho importato in LC 9_step_2 e ci ho giocato contro.

Mi aspettavo che dopo aver eseguito una qualsivoglia prima mossa, l'engine mi rispondesse con la predeterminata "h7h5".

Invece la sequenza è rimasta sui binari di una variante d'apertura "e2e4 e7e6 d2d4 d7d5 b1c3 g8f6 a2a4" fino a quell'"a2a4" fatta a bella posta per uscire dal libro.

Analizzando la log prodotta dal mio stub, o notato che il primo comando UCI di LC è un "position startpos" con tutta la variante di apertura, quando mi aspettavo un più logico "position startpos moves e2e4" e ciò nonostante abbia dichiarato il mio engine-stub con l'opzione OwnBook=true e abbia altresì deselezionato l'opzione libro dall'interfaccia di LC.

Questa è la sequenza dei comandi UCI impartiti da LC:

uci
setoption name OwnBook value true
isready
position startpos moves e2e4 e7e6 d2d4 d7d5 b1c3 g8f6 a2a4
isready
go depth 3
stop
quit


Insomma, per farla breve: siamo sicuri che sia possibile disabilitare l'opening book di default? mmmm.gif

Stolcius
Giorno: 06/07/2022, 11:36:04
Link sponsorizzati
Giorno: 12/09/2014, 08:47:21
Fallo più terra terra.
Crea un libro.bin vuoto e selezionalo.
Dovrebbe potersi giocare una partita senza libro d'apertura; cmq le primissime mosse saranno teoriche, anche se magari robe tipo difesa nimzowitsch o amenità del genere.
Giorno: 12/09/2014, 15:04:40
Il mistero del libro fantasma
orcodituapse ha scritto:
Crea un libro.bin vuoto e selezionalo.
Dovrebbe potersi giocare una partita senza libro d'apertura


Grazie della risposta Orco(ti ho inviato un mp). zizi.gif

Guarda, avevo già eseguito il workaround che mi hai consigliato(libro vuoto "fake_book.bin" - vedi immagine in calce al post), ma l'unica cosa che ho ottenuto è una scacchiera semi-frizzata(con i pezzi non selezionabili). dho.gif

La cosa che mi perplime è che a rigor di logica deflaggando la checkbox "LIBRO"(immagine - ibidem), l'engine dovrebbe giocare dalla prima mossa.

Invece ciò non avviene punto. confused.gif

Nel test che avevo innanzi condotto, il primo comando position startpos moves(impartito dall'interfaccia di LC) non conteneva la mia prima mossa, ma una lista di mosse e, dato che non era stato ancora impartito GO(cmd UCI che, come sai, avvia la "mente pensante" dell'engine), significa che quella lista l'ha prodotta LC basandosi su un suo non meglio identificato opening book.

cmq le primissime mosse saranno teoriche, anche se magari robe tipo difesa nimzowitsch o amenità del genere.

Scusami, ma non ho capito. mmmm.gif
Come è possibile che le prime mosse siano teoriche se il motore non accede a un libro?

Ti ricordo che l'engine è uno stub "Stolcius-made" in Python che esegue una sola mossa "h7h5" indipendentemente dalla prima mossa sottopostagli dal bianco(l'umano, o quasi...Io)biggrin.gif
image 1286


Un salutone, ciao.gif
Stolcius
Giorno: 12/09/2014, 15:43:35
Questa cosa comincia ad incuriosirmi.
Purtroppo, o per fortuna, per adesso ho ragazzi cui faccio lezioni private (chimica generale e organica) quindi ho dovuto ridurre quasi a zero il tempo da dedicare a lucaschess.
Cioè creando un libro.bin con nessuna poiszione, cmq ottieni sempre 1...h5???
Strana sta cosa, cioè intendo dire se la gui scandaglia il libro e non trova niente, il GO all'engine dovrebbe seguire immediatamente (cioè come succede normalmente quando il libro esaurisce le sue mosse).
Attenzione però: hai provato a cambiare motore?
Per esempio, a memoria, ricordo che con libro nullo tutti gli SHREDDER giocano la scandinava contro e4, mentre tutti i FRITZ giocano la difesa nimzowitsch o talvolta la alekhine.
In effetti però quell' OWNBOOK true mi fa pensare.
Perchè non provi a scrivere a lucas, quella parte di codice l'ha scritta lui (il 99.9% a dire il vero, hihihihi).
Giorno: 12/09/2014, 17:31:06
Equivoco
orcodituapse ha scritto:
Strana sta cosa, cioè intendo dire se la gui scandaglia il libro e non trova niente, il GO all'engine dovrebbe seguire immediatamente (cioè come succede normalmente quando il libro esaurisce le sue mosse).

Orco, penso di essermi spiegato male.

Mi scuso e riformulo.

Ho implementato un programma stupidissimo che simula il comportamento di un engine(più avanti posterò il codice).

Questo programma intercetta il comando GO, impartito da qualsivoglia chessboard uci e risponde "bestmove h7h5".

Inoltre, logga tutti i comandi impartiti dall'interfaccia UCI su un file di log.

Tutto qui.

Ho importato questo engine in LC e ci ho giocato una partita.

Comportamento atteso:
- eseguo una qualsiasi mossa(e.g. 'e2e4')
- il programma comunica alla scacchiera "h7h5"
- posizione finale:
abcdefgh
8
8
7
7
6
6
5
5
4
4
3
3
2
2
1
1
abcdefgh
Fen: rnbqkbnr/ppppppp1/8/7p/4P3/8/PPPP1PPP/RNBQKBNR w - - 0 1


Invece, dopo "e2e4" LC è andato avanti con una serie di mosse teoriche fino a quando sono uscito dal libro.

Solo allora l'interfaccia di LC ha impartito GO e il mio engine ha risposto con la preconfezionata 'h7h5'.

Ciò dimostra che LC ha giocato la variante pre-GO affidandosi un suo libro anche con l'opzione libro disabilitata. senzasperanza.gif

Eccoti il codice Python del mio programmino ciao.gif
------------------------------------

import os
import sys


app_path = os.path.dirname(os.path.abspath(__file__))
engine_log = os.path.join(app_path, 'Engine_Stub.log')


class UciInfo(object):
____ id_name = 'id name Engine_Stub ver 1.0'
____ id_author = 'id author Stolcius'
____ own_book = 'true'

def write_uci_response(msg):
____ msg += '\n'
____ sys.stdout.write(msg)
____ sys.stdout.flush()

def main():

____ f = open(engine_log,'w')

____ response = ''

____ while not response.lower().strip()=='quit':
________ response = raw_input('')
________ f.write(response + '\n')
____ ___ if response == 'uci':
____ ________write_uci_response(UciInfo.id_name)
____ ________write_uci_response(UciInfo.id_author)
____ ________write_uci_response("option name OwnBook type check default {}"
______________________________.format(UciInfo.own_book))
________ ____write_uci_response('uciok')
________ elif response == 'isready':
________ ____write_uci_response('readyok')
________elif 'go' in response:
________ ____write_uci_response("bestmove h7h5")
________ elif "position startpos moves" in response:
____ ________ pass


____ f.close()
____ sys.exit('\nSi vis pacem para...cerebellum!\n')

if __name__ == '__main__':
____ main()

Giorno: 12/09/2014, 19:40:50
Ho capito.
Beh allora il motore non è importante.
Si comporterebbe uguale, la gui, con qualsiasi cosa tu carichi.
Siceramente faccio ammenda, e pubblica ammissione d'ignoranza.
Potrebbe essere che semplicemente lucaschess ,originariamente, non fosse pensato per usare altri libri se non il suo; per cui la gui scandaglia il suo ownbook, sempre e cmq.
Cmq non saprei, veramente non ho idea senzasperanza.gif.
Giorno: 12/09/2014, 19:53:18
orcodituapse ha scritto:
Potrebbe essere che semplicemente lucaschess ,originariamente, non fosse pensato per usare altri libri se non il suo; per cui la gui scandaglia il suo ownbook, sempre e cmq.

Ma se così fosse, nel caso si giocasse contro una personalità GM, andrebbe in vacca la quota di personalità legata alla suite di aperture utilizzate da quel GM, o no? mmmm.gif

Per inciso e a proposito di GM, ci sarebbe da far correggere Gran Maestro (in tutte le voci - e.g. "Gioca come un Gran Maestro") con Grande Maestro: il titolo corretto.

Un salutone, ciao.gif
Stolcius
Giorno: 13/09/2014, 09:37:35
Le labels le ho corrette due minuti fà.
Ed anzi mi hai dato lo spunto per correggere altra roba.
Per quanto riguarda l'uso del libro, invece, sono arcisicuro che quel problema si verifica solo in modalità "gioca contro un motore a tua scelta" perchè in altri ambiti ho verificato personalmente che il tutto funziona.
Però ripeto, io non mi occupo di questa cosa.
Puoi scrivere a lucas, già ho visto che l'hai fatto altre volte; lui di sicuro sa se ci sono problemi.
Giorno: 13/09/2014, 10:47:44
Puoi scrivere a lucas, già ho visto che l'hai fatto altre volte; lui di sicuro sa se ci sono problemi.

Buona idea: fatto!biggrin.gif

Buon week end, ciao.gif
Stolcius

P.S.
Secondo me LC, per le sue caratteristiche "sui generis", meriterebbe più visibilità di quella che già possiede; comunque, penso che a poco a poco, e, soprattutto, grazie al passaparola degli utilizzatori, aumenterà il suo credito in modo più che significativo. cool.gif
Giorno: 13/09/2014, 11:16:10
Appena uscirà la versione 9 ufficiale, come l'anno scorso verso natale, avremo di nuovo la possibilità di contare i downloads.
Le versioni 8.x secondo me hanno toccato gli 80.000 downloads di sicuro.
Non male direi cool.gif!