Domanda:
Quanto è comune / importante la promozione a cavaliere?
TigerhawkT3
2015-04-18 07:38:03 UTC
view on stackexchange narkive permalink

Un programma di scacchi senza la capacità di promuovere a cavaliere è inaccettabilmente incompleto?

Ho un programma di scacchi che implementa le regole di scacchi più basilari, come l'en passant e l'arrocco. Tuttavia, la promozione sceglie automaticamente una regina, poiché introdurre un punto decisionale lì complicherebbe tutto, dall'intelligenza artificiale al sistema di replay alle combinazioni di tasti.

Un programma di scacchi senza la promozione a cavaliere non va bene o è la media il giocatore di scacchi non si accorgerà mai che manca? E se lo facessero, sarebbe simile a "oh, nessuna promozione a cavaliere immagino" o più come "come diavolo qualcuno ha pensato che andasse bene? Scommetto che non è stato nemmeno sviluppato da un giocatore di scacchi!" (una scommessa sicura)? Spero che sia abbastanza banale da essere trascurato, ma se è davvero importante, dovrò solo capirlo.

La sotto-promozione può essere una parte semplice della generazione di mosse. Ogni possibile promozione genera quattro possibili mosse; al motore non interessa che f8 = Q e f8 = N siano entrambe promozioni dello stesso pedone.
Sto usando un motore che ho realizzato interamente da solo, non basato su un motore standard.
Ma sicuramente ha una possibile routine di generazione delle mosse?
* Sento * che la sottopromozione è troppo rara per avere importanza in 1 partita su 10, ma che è abbastanza comune da avere importanza in 1 partita su 50 (principalmente promuovendo a cavaliere con assegno per ragioni tattiche). Ma non ho numeri per confermarlo, quindi non la vedo come una risposta, sono solo curioso se la risposta sarà da qualche parte in quell'intervallo.
Ho aggiunto underpromotion all'ultima versione del mio programma di scacchi. La sua base di giocatori (inesistente) ha tirato un sospiro collettivo di sollievo.
Quattro risposte:
Ellie
2015-04-18 08:23:35 UTC
view on stackexchange narkive permalink

Beh, sicuramente non lo definirei come inaccettabilmente incompleto , dopotutto è un evento molto raro che sei costretto a promuoverti troppo per diventare un cavaliere, a meno che tu non stia scherzando.

Detto questo, ci sono casi nei giochi reali, in cui devi effettivamente promuovere i cavalieri (di nuovo molto raramente, ma comunque ogni tanto ne vedi uno), perché ad es. devi promuovere con un assegno (altrimenti potresti essere scacco matto), quindi se in tali scenari è solo con il cavaliere che puoi controllare, allora hai davvero bisogno dell'opzione di promozione del cavaliere. Un esempio casuale:

  [Title "1.e8 = N + Forced knight promotion"] [StartFlipped "0"] [fen "3K4 / 4P3 / 2qk4 / 8/8/8/8 / 8 w - - 0 1 "] 1. e8 = N + (1.e8 = Q Qc7 #)  

Eccone un altro: (corrispondenza tra Tomic e Winzbeck)

  [Titolo "Promozione forzata N o B else stallo"] [StartFlipped "0"] [fen "3rb2k / 2P4p / 6pP / p2B1pP1 / Pp2pP2 / 1P2K3 / 8/8 w - - 0 1"] 1. cxd8 = N (1. cxd8 = B) (1. cxd8 = Q)  

D'altra parte, può anche accadere che se promuovi qualcosa di diverso dal cavaliere, metti in stallo il posizione, quindi ancora una volta è necessaria la promozione del cavaliere. Troverai un sacco di esempi da questo post di scacchi SE e link al suo interno.

Mentre se prendi come esempio i giochi blitz online, la maggior parte delle volte (per i controlli del tempo < 5 minuti almeno) i giocatori impostano la loro promozione automatica su regina in modo che, nel caso in cui abbiano problemi di tempo e debbano promuovere, possono anticiparla.

Tutto sommato, direi che dovresti prova a implementarlo per completezza e, se ti risulta difficile, non preoccuparti troppo, non è un grosso problema.

In realtà ricordo un gioco molto divertente tra Hikaru Nakamura e Boris Savchenko nel precedente campionato mondiale di blitz, dove Nakamura ha dovuto sottoporsi alla promozione in cavaliere con controllo per evitare un compagno in 1, ecco la clip, è a soli 2 minuti, guardalo dal iniziare, ma se vuoi solo vedere il momento della promozione, eccolo.

Sembra che sia approssimativamente "non inaudito" - abbastanza necessario per i tornei, ma non un grosso problema per la maggior parte dei giochi. Posso metterlo nel dimenticatoio senza sentirmi come se un componente chiave fosse stato tralasciato?
@TigerhawkT3 sì, sì, puoi.
Nel tuo secondo esempio, perché la promozione Q è in stallo? Il diagramma è forse incompleto o lo sto finalmente perdendo?
@firtydank non lo stai perdendo, mancava un alfiere su d5, grazie per averlo segnalato :)
Il finale torre vs pedone dove devi sottopromuoverti non è così esotico ... c'è anche una trappola nel countergambit di Albin, che usa underpromotion: 1. d4 d5 2. c4 e5 3. dxe5 d4 4. e3 Bb4 5. Bd2 dxe3 6. Bxb4 exf2 7. Ke2 fxg1N!
@BlindKungFuMaster sì, ma non volevo copiarli di nuovo qui, poiché sono già nel collegamento SE di scacchi che avevo ref'ed. Ma sicuramente è vero che è una linea più * esotica *. Volevo solo alcuni semplici esempi che trasmettessero l'idea.
C'è un famoso gioco tra Nakamura e Kramnik nelle Olimpiadi del 2012 che coinvolge una bella promozione Knight
Simon Jenkins
2015-04-19 12:56:06 UTC
view on stackexchange narkive permalink

La sottopromozione può essere rara ma è importante nel senso che, nelle rare occasioni in cui ne hai bisogno, ne hai davvero BISOGNO .

I due scenari di base, coperti nell'altra risposta, sono:

  1. Sottopromozione alla non regina per evitare di mettere in stallo l'avversario
  2. Sottopromozione al cavaliere perché la tua prossima mossa deve assolutamente essere un check

Nessuna di queste situazioni garantisce una risposta "oh, nessuna promozione a cavaliere immagino", come se fossero troppo pignoli e dovessero semplicemente scegliere la regina come fanno sempre tutti perché è la migliore. La regina non è la migliore qui ed essere costretta a scegliere rischia di costargli la partita.

Bourbon53
2015-04-20 19:37:56 UTC
view on stackexchange narkive permalink

Mentre la promozione insufficiente a un cavaliere è relativamente raro, la promozione insufficiente a una torre non lo è.

Non è raro promuovere a una torre in un re contro re e pedoni finali per evitare lo stallo del re.

La promozione a cavaliere è più comune della promozione a torre (circa l'80% più comune nella copia di Million Base che ho controllato).
Emilio Díaz
2015-04-20 23:51:35 UTC
view on stackexchange narkive permalink

Forse è un po 'oscuro, ma come controllerai la tua generazione di mosse con le promozioni? Voglio dire, per testare il tuo generatore di traslochi, non appena si verifica una promozione, non avrai modo di verificare se il tuo codice promozionale funziona correttamente.

Nel caso in cui qualcuno non abbia idea di cosa io " sto parlando di; http://chessprogramming.wikispaces.com/Perft+Results

Ogni volta che è il turno del computer di muoversi, guarda tutti i suoi pezzi disponibili, genera le possibili mosse per ognuno e sceglie una mossa a caso (modalità facile) o cerca di catturare / evitare (modalità difficile). Non guarda affatto avanti.
@TigerhawkT3: Ma quello che sta chiedendo Emilio, è come fai a sapere che l'insieme di tutte le possibili mosse che generi è corretto (eccetto per l'omissione di sottopromozioni) se non puoi testare il tuo codice con risultati Perft noti? Non importa se guardi avanti o no, perché si tratta di giocare, non di muovere la generazione.
Nel mio programma, ogni tipo di pezzo ha regole specifiche su dove può muoversi, con la generazione di mosse pseudo-legali. Ad esempio, una torre può muoversi su / giù / sinistra / destra quanto vuole, fermata da pezzi amici o dalla fine del tabellone. [Questa pagina] (http://chessprogramming.wikispaces.com/Move+Generation) dice che Perft "genera ricorsivamente mosse per la posizione corrente e tutti i bambini fino a una certa profondità" - il mio programma non controlla affatto i bambini. Questo potrebbe portare a consentire mosse illegali?
@TigerhawkT3: No, non è necessario controllare i bambini. Il punto è che è molto facile sbagliare la generazione di mosse. Perft è un modo per verificare di aver capito bene. La routine Perft è ricorsiva, ma dovrebbe essere facile da scrivere anche se non si generano mai in modo ricorsivo le mosse nel codice principale.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...