Info su scrittura chess engine


Questa pagina ha una gerarchia - Pagina madre:Programmazione

Home Forum Programmazione Info su scrittura chess engine

Questo argomento contiene 36 risposte, ha 5 partecipanti, ed è stato aggiornato da calimero22 calimero22 2 anni, 3 mesi fa.

Stai vedendo 15 articoli - dal 1 a 15 (di 37 totali)
  • Autore
    Articoli
  • #9554
    calimero22
    calimero22
    Membro

    Ciao.
    Spero di iniziare presto la creazione di un Chess engine.
    Vorrei chiedere due cose:

    1) supponiamo che siamo alla mossa 20: l’Engine riceve dalla GUI il comando:

    position startpos moves e2e4 e7e5 g1f3 b8c6 …….

    oppure

    position moves a6a2 ?

    2) Come fa l’engine a sapere che deve muovere il bianco o nero? Dal numero di mosse ?

    3) Cosa è l’UCI2?

    Grazie tante a tutti…… forse se mi chiarifico queste idee, potrà nascere un nuovo engine dalla sbalorditiva forza elo di 49.

    Giovanni

    #9556
    Andrea
    Andrea
    Moderatore

    Ciao,

    sicuramente lo avrai già, comunque le specifiche del protocollo UCI possono essere scaricate qui: http://download.shredderchess.com/div/uci.zip

    1) Dopo “position” ci deve sempre essere o “startpos”, che indica la posizione iniziale, o “fen <stringa_fen>”. Dopo, se sono state giocate delle mosse, c’è “moves” con la lista.

    2) Si, il colore lo si deduce dall’ultima mossa della lista o dalla fen se non c’è alcuna mossa.

    3) L’UCI2, per quanto ne sappia, non esiste. SMK e Rudolf Huber fecero delle aggiunte al protocollo nel 2003 o 2004:

    “Below you find an extension of the UCI protocol which was discussed with many
    engine authors at the IPCCC earlier this year in Paderborn and finally worked
    out with Rudolf Huber of SOS, Dieter Bürßner of YACE and myself. This new
    version is fully compatible with the old protocol (just one tiny exception, see
    below), so you can load and old engine in a new user interface and a new engine
    in an old user interface. This is the reason why we did not call it UCI2 or
    something.

    The main changes are:

    * a possibility to set the engine to any playing strength measured in Elo,
    * it is now easier for engines to “learn”, the engine gets a ucinewgame (this is
    the only extension that might cause problems as it could be misinterpreted by
    some old UCI engines) before every new game and whether the search is from a
    game or an analysis,
    * support for registering engines,
    * the engine can now show the current line it is currently thinking on
    * the engine can show a refutation for each root move
    * the GUI can send information about the opponent to the engine
    * the specification should be more precise in most points now”

    #9557
    calimero22
    calimero22
    Membro

    Ok. grazie 1000.
    Giovanni

    #9558

    marco belli
    Membro

    Uci è un protocollo senza stato, quindi tutte le volte che vuoi fare una nuova ricerca la procedura corretta è quella di inviare il comando position seguito dalla lista di mosse
    Esempio
    Position start position moves even did
    Oppure position fen fensTring moves

    Uci 2 è una piccola estensione a uci. Se implementi alcuni comandi aggiuntivi, tipo limitare la forza, alcuni programmi tipo arena mostrano che il motore è di tipo uci2

    #9559
    calimero22
    calimero22
    Membro

    Perfetto.
    Grazie.

    #9593
    calimero22
    calimero22
    Membro

    Ciao a tutti,
    un’altra domanda per favore, non ho voluto aprire un nuovo topic.
    Volendo creare una GUI che analizza i PGN, mi sono imbattuto in un quesito:

    1) il PGN ha la seguente codifica per le mosse: 1.d4 d5 2.Nf3 Nf6 3.Bg5 Nbd7….. ecc
    2) l’Engine accetta la posizione con position startpos moves d2d4 d7d5 g1f3 g8f6 c1g5 b8d7….

    Domanda: quindi il mio software deve “Trasformare” la mossa “d4” in “d2d4”, per poterla fare capire all’engine ?

    Grazie, spero di essere stato chiaro…

    Ciao
    Giovanni

    #9597
    stegemma
    stegemma
    Moderatore

    Sì, devi convertire le mosse nel formato previsto da UCI.

    #9598
    calimero22
    calimero22
    Membro

    Grazie.!!!
    Sarebbe bello avere un unico standard di mosse UCI <-> Engine.
    Ok. Grazie 1000
    Giovanni

    #9604

    marco belli
    Membro

    infatti il protocollo UCI è univoco 🙂
    il png non ne sono sicuro

    #9606
    stegemma
    stegemma
    Moderatore

    Io direi che UCI è bi-univoco, perché esiste una sola rappresentazione per ogni mossa ed ogni rappresentazione corrisponde ad una sola mossa. Il PGN invece è solo univoco, perché una rappresentazione indica una sola mossa ma ogni mossa può avere più rappresentazioni.

    E così abbiamo dato uno scopo alla vita dei/delle nostri/e ex-prof. di matematica! 😉

    #9737
    calimero22
    calimero22
    Membro

    Ciao a tutti.
    Utilizzo sempre questo topic per fare una domanda, se possibile.

    Ho creato un file go.txt nel quale ci sono i seguenti comandi UCI:

    uci
    position fen n1QBq1k1/5p1p/5KP1/p7/8/8/8/8 w – – 0 1
    go movetime 10000
    quit

    Dal prompt dei comandi lancio il seguente comando:

    stockfish.exe < go.txt

    L’esecuzione carica il motore, visualizza tutti i parametri, mostra velocemente una mossa con bestmove, MA non aspetta i 10 secondi di elaborazione, esce subito di nuovo sul prompt.

    Avete qualche aiuto da darmi?

    Vi ringrazio sempre.
    Ciao e buon weekend.

    Giovanni

    #9745
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Prova così:

    uci
    ucinewgame
    isready
    position fen 5k1K/7P/8/8/8/8/8/8 b – 0 0
    go movetime 10000
    quit

    Bye!

    LL

    #9746
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    Mmm…
    no, beh, comunque anche il tuo dovrebbe andare…

    prova a creare un file batch dove metti:
    stockfish.exe<go.txt>output.txt
    pause

    lo lanci e poi vai a vedere cosa c’è nell’output
    Bye!

    LL

    #9747

    marco belli
    Membro

    ciao, non appena scrivi quit, stockfish stoppa la ricerca, devi togliere quit dal file go.txt
    dopo 15 secondi scrivi quit a mano 🙂

    oppure usi qualche programma che comunichi con un engine tramite uci, arena per esempio, oppure pythonchess ha un interfaccia uci.

    #9748
    Lissandrello Luca
    Lissandrello Luca
    Moderatore

    A me funziona sia con batch, sia con quit che senza; il file di log che l’ho invitato a fare è una prova del 9.

    Bye!

    LL

Stai vedendo 15 articoli - dal 1 a 15 (di 37 totali)

Devi essere loggato per rispondere a questa discussione.

© 2018 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