Suggerimenti per i robot di King of the Hill


12

Quali consigli generali hai per creare un bot per partecipare a una sfida di King of the Hill? Quali strategie usi per passare dalla considerazione della sfida alla creazione del tuo bot? Quali strutture di dati trovi più utili?

Si prega di inviare un suggerimento per risposta.


16
Sento che questo dipende troppo dal problema specifico.
Fondi Monica's Lawsuit

@QPaysTaxes L'ho modellato direttamente dopo molte altre domande sui suggerimenti. C'è un modo per risolvere questa domanda in modo che sia migliore? Inoltre, è necessario risolvere anche le domande più vecchie sui suggerimenti?
mbomb007,

Le domande più vecchie sui suggerimenti sono basate su lingue per quanto posso dire, il che significa che i suggerimenti sono universali ma potresti non usarli. Questa domanda è più analoga ai "Suggerimenti per le sfide del Code Golf", in cui dipende interamente dalla sfida. Tuttavia, come dimostrano le risposte di seguito, ci sono alcune cose universali. Sono in conflitto
Finanzia la causa di Monica il

2
Penso che questo dipenda tanto dalle domande specifiche quanto dai "consigli per giocare a golf (lang)", perché in ogni caso usi molte caratteristiche linguistiche diverse in sfide diverse
Limone distruttibile

Risposte:


4

Alla ricerca di equilibri di Nash

Questo è un concetto molto importante quando il KOTH coinvolge un insieme relativamente semplice di decisioni, coinvolge solo pochi giocatori (in genere 2) ed è deterministico. Un equilibrio di Nash descrive una posizione "gridlock": se i due giocatori hanno deciso le loro due strategie, allora i due giocatori sono effettivamente bloccati in quelle posizioni: entrambi i giocatori che cambiano strategia semplicemente creano ulteriori vulnerabilità.

Esempi di giochi in cui gli equilibri di Nash sono importanti sono:

  • Rock-Paper-Scissors (-Lizard-Spock), in cui una strategia "imbattibile" è un gioco casuale
  • Morra , che ha uno "spettro" di equilibri. Peter Taylor ha scritto un buon esempio nella sua risposta qui .
  • Prisoner's Dilemma, un gioco cooperativo noto per avere un ingorgo "tutti perdono"

Come trovare un equilibrio

Trovare un equilibrio in realtà è piuttosto semplice per la maggior parte dei giochi semplici ed è spesso piuttosto intuitivo. Un sacco di dettagli sui vari metodi sono disponibili su Internet. Il concetto di base, che è normalmente applicabile, è quello di creare un elenco di possibili strategie che i due giocatori possono usare (le opzioni fornite dal gioco). Se una strategia è "dominata" da un'altra, quella strategia può essere rimossa dall'elenco e il processo viene ripetuto. Per "dominio" intendo che se la strategia A dà sempre un risultato uguale o migliore della strategia B, rispetto a tutte le restanti strategie avversarie, la strategia B può essere rimossa dall'elenco.

Esempio: Rock-Paper-Scissors

RPS ha qualcosa chiamato un equilibrio "misto", nel senso che è coinvolta una distribuzione . Invece di giocare ripetutamente la stessa mossa (il che porterà a una rapida sconfitta), l'equilibrio è giocare 1/3 di rock, 1/3 di carta e 1/3 di forbici in una distribuzione casuale. Se gioco in modo casuale, non c'è niente che il mio avversario possa fare per ottenere un vantaggio su di me, punto. Se il mio avversario sceglie di non giocare in modo casuale, ciò crea solo una vulnerabilità da parte sua.

I giochi con equilibrio misto sono probabilmente i più comuni su PPCG, poiché possono assumere molte forme (l' unico gioco interessante che mi viene in mente con un puro equilibrio è il dilemma del prigioniero). Dovrei notare che l'equilibrio misto non deve essere uniformemente casuale , semplicemente qualcosa di diverso dal giocare ogni volta la stessa mossa.

Utilizzando queste informazioni

L'equilibrio di Nash di un gioco spesso rappresenta la "linea di base" da cui dovresti cercare di operare. In RPS, giocare in modo casuale garantisce un punto di arrivo intorno al centro del gruppo. Per passare all'inizio, devi iniziare a identificare i punti deboli degli altri giocatori.

Per fare questo, dovresti attenersi all'equilibrio quando non sei sicuro delle debolezze dell'avversario. Una volta identificati quei punti deboli (hai scoperto che il tuo avversario non è in equilibrio), allora devi spostarti delicatamente fuori equilibrio per trarre vantaggio dal tuo avversario. Questa azione, a sua volta, crea punti deboli da parte tua. Devi quindi rilevare quando il tuo avversario sta cambiando la sua strategia, in modo da poter quindi fermare l'attacco e riprendere il gioco casuale.

Rilevamento delle variazioni dall'equilibrio

Questo è piuttosto difficile e non sono un esperto. Le variazioni possono presentarsi in molte forme:

  • Favorire alcune opzioni sopra / sotto le altre senza motivo, come un giocatore RPS che suona il rock due volte più spesso delle forbici o uno che evita di giocare con la carta. Alcune statistiche relativamente semplici possono rilevarlo.
  • Basare una mossa corrente su mosse passate, secondo uno schema prevedibile. Ciò include i "copy-cat", i robot "batte ciò che batte la tua ultima mossa" o i robot "ciclabili". Ciò richiede una logica aggiuntiva per il rilevamento, poiché la distribuzione globale delle mosse può essere distribuita uniformemente, anche se le mosse non sono casuali. Dovresti tentare di prendere nota delle mosse e trovare correlazioni come "la mossa che ho fatto 2 turni fa e la mossa che il mio avversario ha fatto ora" e "la mossa che ha fatto 1 turno fa e la mossa che ha fatto ora", ecc.
  • Bot la cui distribuzione delle mosse è basata sulla tua. La vulnerabilità in questi bot spesso non viene creata (in quantità misurabile) fino a quando non si è passati da una distribuzione casuale a un'altra. In generale, il tuo bot rientra in questa categoria.

3

Sii specifico sui requisiti per eseguire il tuo bot

I robot possono essere scritti in una varietà di lingue (e versioni di tali lingue), quindi aiuta tutti quando:

  1. Provalo nell'ambiente specificato dall'OP (o il più vicino possibile ad esso).
  2. Provalo in una varietà di altri ambienti, se possibile (per aiutare gli altri che vogliono eseguirlo).
  3. Sii specifico sulla lingua e sulla versione che usi e spiega come eseguire il tuo bot.

Come bonus: se stai usando una lingua meno conosciuta, crea un link dove le persone possono scaricare il binario / sorgente per eseguirlo.


2

Se basato su team, collabora con il tuo team

Mentre di solito puoi scrivere un bot che funziona da solo per completare le attività per aiutare la tua squadra, c'è un vantaggio molto maggiore quando ti coordini sia dentro che fuori dal gioco. Un primo esempio di ciò può essere visto in Red vs. Blue - Pixel Team Battlebots .

Durante lo sviluppo, i team sono stati in grado di chattare e discutere su come coordinare i loro robot per funzionare meglio che da soli. Mentre tecnicamente lo stesso bot, SphiNotPi3000 è stato scritto per funzionare in tandem con un altro di se stesso, ed è stato in grado di muoversi in modo da giustificare le debolezze che avrebbe dovuto affrontare da solo. Il risultato finale fu che furono in grado di dominare quasi completamente il campo di battaglia, anche quando erano solo loro due contro l'intera altra squadra .

Quindi, fuori dal gioco, pianifica e coordinati con i tuoi compagni di squadra su quali strategie affrontare. Forse qualcuno ha un bot che scansiona la mappa in diagonale? Fai scansionare in orizzontale (solo un esempio). All'interno del gioco, se la sfida consente la comunicazione di squadra, approfittane. Nel gioco dei robot da battaglia, ad esempio, potresti inviare un messaggio ai tuoi compagni di squadra sulla posizione dei robot al di fuori del loro campo visivo, e quindi incoraggiarli a scrivere i loro robot in modo compatibile per utilizzare quei segnali.


2

Usa una meta strategia

Per quasi tutte le strategie intelligenti c'è un'altra strategia che la batte: ad esempio, il tuo avversario potrebbe usare esattamente lo stesso ragionamento che hai per anticipare la tua prossima mossa e poi contrastarla. Ora potresti provare a indovinare di nuovo il tuo avversario, ma è difficile sapere quando fermarsi .

Un altro problema è che una strategia che è brava a indovinare un avversario intelligente potrebbe essere tutt'altro che ottimale contro avversari più semplici.

Come puoi risolverlo? Lascia che il tuo bot decida al volo quale strategia usare!

Per questo, inizi con il dare al tuo bot un repertorio di strategie diverse. Quindi, prima di ogni mossa, il tuo bot guarda la storia registrata del gioco finora e valuta come sarebbero andate queste diverse strategie. Quindi immagina quello che avrebbe avuto più successo.

Includere strategie che sono forti in primo luogo aiuterà a dare al tuo bot buone opzioni tra cui scegliere. Ma dovresti includere anche quelli molto semplici, perché spesso funzionano meglio contro avversari stupidi.

Potresti considerare di distorcere alcune strategie, sia per evitare un eccesso di adattamento (ad esempio, cercando di battere un modello in cui l'avversario agisce in modo casuale) sia per favorire alcune strategie all'inizio quando non ci sono ancora molte informazioni.

Naturalmente, questo approccio funzionerà solo per alcuni tipi di sfide da re delle colline. È andato molto bene per me in una partita Rock-Paper-Scissors-Lizard-Spock . In altri giochi può essere quasi impossibile valutare come sarebbe andata una certa strategia se non fosse stata effettivamente giocata.

Una forma estrema di questo meta approccio (che rasenta gli imbrogli) sarebbe quella di includere il comportamento noto di tutti gli altri robot nel proprio bot, in modo che possa anticipare perfettamente le loro mosse.


compreso il comportamento noto di tutti gli altri bot nel tuo bot non fa proprio rasentano barare, esso è barare. Sono abbastanza sicuro che sia una scappatoia non consentita.
mbomb007,
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.