Come faccio a scegliere l'algoritmo migliore per un gioco da tavolo come le pedine?


15

Come faccio a scegliere l'algoritmo migliore per un gioco da tavolo come le pedine?

Finora ho preso in considerazione solo tre algoritmi, vale a dire, minimax, potatura alfa-beta e ricerca dell'albero di Monte Carlo (MCTS). Apparentemente, sia la potatura alfa-beta che MCTS sono estensioni dell'algoritmo di base minimax.

Risposte:


17

tl; dr:

  • Nessuno di questi algoritmi è pratico per il lavoro moderno, ma è un buon punto di partenza pedagogico.

  • Si dovrebbe sempre preferire l'uso della potatura Alpha-Beta sulla ricerca barex minima.

  • Dovresti preferire utilizzare una qualche forma di ricerca euristica guidata se riesci a trovare un'euristica utile. Generare un'euristica utile di solito richiede molta conoscenza del dominio.

  • Dovresti preferire utilizzare la ricerca di Monte Carlo Tree quando non hai una buona euristica, quando le risorse di calcolo sono limitate e quando gli errori non avranno conseguenze fuori misura nel mondo reale.

Più dettagli:

Nella ricerca minimax, non cerchiamo di essere molto intelligenti. Usiamo solo un approccio di programmazione dinamica standard. È facile capire il valore delle mosse di differenza se siamo vicini alla fine del gioco (poiché il gioco finirà nella mossa successiva, non dobbiamo guardare molto avanti). Allo stesso modo, se sappiamo cosa farà il nostro avversario nell'ultima mossa del gioco, è facile capire cosa dovremmo fare nella seconda ultima mossa. In effetti, possiamo considerare la seconda ultima mossa come l'ultima mossa di una partita più breve. Possiamo quindi ripetere questo processo. L'uso di questo approccio è certo di scoprire le migliori strategie in un gioco standard in forma estesa, ma ci richiederà di considerare ogni mossa possibile, il che è impossibile per tutti tranne i giochi più semplici.

La potatura Alpha-Beta è un rigoroso miglioramento nella ricerca di Minimax. Si avvale del fatto che alcune mosse sono ovviamente peggiori di altre. Ad esempio, negli scacchi, non ho bisogno di prendere in considerazione alcuna mossa che ti darebbe l' opportunità di mettermi in scacco matto, anche se tu potessi fare altre cose da quella posizione. Quando vedrò che una mossa potrebbe portare a una perdita, non mi preoccuperò di pensare a cos'altro potrebbe succedere da quel punto. Vado a vedere altre cose. Questo algoritmo è certo di produrre il risultato corretto ed è più veloce, ma deve ancora considerare la maggior parte delle mosse in pratica.

Esistono due modi comuni per aggirare l'estremo costo computazionale per risolvere esattamente questo tipo di giochi:

  1. Usa una euristica (una ricerca A * è il solito algoritmo per scopi pedagogici, ma la ricerca Quiescence è un'idea simile nei giochi a 2 giocatori). Questa è solo una funzione che fornisce una stima del valore di uno stato del gioco. Invece di considerare tutte le mosse in un gioco, puoi semplicemente considerare le mosse verso una certa distanza, e quindi utilizzare il valore dell'euristica per giudicare il valore degli stati che hai raggiunto. Se la tua euristica è coerente (essenzialmente: se sopravvaluta sempre la qualità degli stati), allora questo produrrà comunque la risposta corretta, ma con enormi accelerazioni nella pratica.

  2. Usa i rollout (come Monte Carlo Tree Search). Fondamentalmente, invece di considerare ogni mossa, esegui alcune migliaia di giochi simulati tra giocatori che agiscono in modo casuale (questo è più veloce del considerare tutte le mosse possibili). Assegna un valore agli stati pari alla percentuale media di vincita dei giochi a partire da esso. Questo potrebbe non dare la risposta corretta, ma in alcuni tipi di giochi si comporta in modo affidabile. Viene spesso usato come estensione di tecniche più esatte, piuttosto che essere usato da solo.


Un * non sembra davvero adattarsi al contesto dei giochi a due giocatori come fanno gli altri algoritmi? Nota su MCTS: le implementazioni tipiche non "considerano tutte le mosse a una profondità fissa" e quindi avviano le implementazioni; invece, le implementazioni tipiche in modo dinamico, aumentano gradualmente l'albero di ricerca dell'albero, crescendolo di più in parti più promettenti (parti in cui molti rollout sono spinti verso dalla strategia di selezione), crescendolo meno nelle parti meno promettenti.
Dennis Soemers,

1
@JohnDoucette perché dovresti dire "Nessuno di questi algoritmi è pratico per il lavoro moderno, ma è un buon punto di partenza pedagogico". Nel caso di MCTS, sembra molto appropriato per il lavoro moderno anche per la ricerca a giocatore singolo quando la transizione allo stato successivo dato uno stato e un'azione è ben definita. Sei d'accordo?
Miguel Saraiva,

1
@MiguelSaraiva Da solo, MCTS non è qualcosa che di solito useresti per un'applicazione moderna. Combinato con qualcosa come un DNN per fornire un euristico appreso sarebbe comunque abbastanza buono.
John Doucette

1
@JohnDoucette "MCTS non è qualcosa che di solito useresti per un'applicazione moderna". Prima di tutto, la "modernità" a cui ti riferisci ha avuto il suo grande passo avanti nel 2016 (MCTS + DNN) e sembra che tu stia sottintendendo che tutto ciò che era prima era obsoleto (ovviamente falso). In effetti, potrebbe anche essere più plausibile dire che MCTS non viene normalmente utilizzato a causa del contrario: è TROPPO avanzato: ci sono un sacco di applicazioni nel settore che sono davvero obsolete e potrebbero essere AGGIORNATE a MCTS. Per molti di questi MCTS + DNN è solo un sogno lontano poiché il pre-allenamento è praticamente inconcepibile.
Johan,

1
@Johan Mi sembra giusto per le applicazioni industriali , ma la domanda è "un gioco da tavolo come le pedine". Per questi tipi di problemi con i giocattoli, penso che MCTS non sia l'approccio moderno giusto. Ci sono sicuramente molti problemi del mondo reale in cui sarebbe comunque un enorme miglioramento sui sistemi implementati esistenti.
John Doucette

6

NB Il motivo per cui ho scelto solo questi tre algoritmi era dovuto al tempo che ho a disposizione per capirli. Da una piccola ricerca, ho scoperto che questi algoritmi sono sostanzialmente intrecciati con l'algoritmo minimax. Quindi, se riesco a capirne uno, gli altri due andranno a posto.

Dato questo contesto, consiglierei di iniziare con Minimax . Dei tre algoritmi, Minimax è il più facile da capire.

Alpha-Beta , come altri hanno già detto in altre risposte, è un netto miglioramento rispetto a Minimax. Minimax è fondamentalmente una parte dell'implementazione Alpha-Beta e una buona comprensione di Alpha-Beta richiede comunque di iniziare con una buona conoscenza di Minimax. Se ti è rimasto del tempo dopo aver compreso e implementato Minimax, ti consiglio di passare all'Alpha-Beta in seguito e di costruirlo sopra Minimax. Iniziare con Alpha-Beta se non hai ancora capito Minimax non ha davvero senso.

La ricerca dell'albero di Monte-Carlo è probabilmente un po 'più avanzata e più complicata da comprendere davvero, in profondità. Negli ultimi dieci anni, MCTS è diventato davvero molto più popolare rispetto agli altri due, quindi da quel punto di vista la comprensione di MCTS può essere più "utile".

La connessione tra Minimax e MCTS è meno diretta / ovvia della connessione tra Minimax e Alpha-Beta, ma esiste ancora una connessione almeno a livello concettuale. Direi che avere una buona conoscenza di Minimax è ancora utile prima di immergersi in MCTS ; in particolare, comprendere Minimax e i suoi difetti / punti deboli può fornire un contesto utile / aiutarti a capire perché MCTS è diventato "necessario" / popolare.


Per concludere, secondo me:

  • Alpha-Beta è strettamente migliore di Minimax, ma anche fortemente correlato / costruito sopra Minimax; quindi, inizia con Minimax, poi vai su Alpha-Beta se il tempo lo consente
  • MCTS ha diversi punti di forza / debolezza, è spesso migliore di Alpha-Beta nei problemi "moderni" (ma non sempre), una buona comprensione di Minimax sarà probabilmente utile prima di iniziare ad immergersi in MCTS

C'è qualche altro algoritmo che suggeriresti di poter usare anche io? È come un livello di potatura alfa beta
Joey,

@Joey Hmm no non proprio. Minimax è un punto di partenza molto naturale, lo consiglio vivamente se sei appena agli inizi. Questo è stato fondamentalmente il primo algoritmo sviluppato per giochi come scacchi / dama / tic tac toe / qualunque cosa. Successivamente, su di esso sono stati sviluppati centinaia se non migliaia di miglioramenti, molti dei quali è possibile trovare su chessprogramming.wikispaces.com/Search . Alpha-Beta è il miglioramento più naturale da esaminare in cima a Minimax.
Dennis Soemers,

@Joey Monte-Carlo Tree Search è un po 'diverso (non ha necessariamente Minimax come base), è interessante, divertente, popolare e molto rilevante nell'intelligenza artificiale "moderna". Tuttavia, le basi sono importanti, non consiglierei di iniziare subito con MCTS se non capisci ancora Minimax + Alpha-Beta, anche se tecnicamente potrebbe essere possibile.
Dennis Soemers,

Grazie per quel sito. È un patrimonio di conoscenze che ora posso leggere. La cosa più difficile da imparare sulle nuove cose è trovare il materiale giusto per aiutarti a capire. Quindi grazie ancora per il sito
Joey,

@Joey Non sono sicuro al 100% se il chessprogramming sia il sito più semplice da cui imparare (e sembra che ci sia un avviso spaventoso in cima che il sito potrebbe scomparire alla fine di luglio). Se ricordo bene, molte descrizioni sono piuttosto brevi / probabilmente non facili da capire se sei un principiante nel campo. Sarà almeno una buona raccolta completa di nomi di tutti i tipi di algoritmi / miglioramenti, e puoi provare a cercare le fonti originali o google tutti quei nomi per informazioni più dettagliate altrove.
Dennis Soemers,

1

Se dovessi scegliere tra potatura Minimax e Alpha-Beta dovresti scegliere Alpha-beta. È più efficiente e veloce perché può potare una parte sostanziale dell'albero di esplorazione. Ma devi ordinare le azioni dal meglio al peggio a seconda del punto di vista massimo o minimo, in modo che l'algoritmo possa capire rapidamente se l'esplorazione è necessaria.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.