sfondo
MINACCIA ( M achine E ducable N oughts Una ° C rosses E ngine) è un algoritmo di apprendimento automatico superficiale rudimentale per le Noughts gioco e Croci, creato da scienziato informatico britannico Donald Michie nel 1960. È stato originariamente implementato con 304 scatole di fiammiferi, ciascuna etichettata con una posizione sulla scacchiera e contenente perline colorate (con uno dei nove colori, che rappresentano possibili mosse). Michie calcolò che queste 304 scatole di fiammiferi erano sufficienti per ogni combinazione di mosse sul tabellone.
Quanto più matematico tra voi può rendersi conto che in realtà ci sono 19.683 possibili combinazioni di Noughts, Crosses e Blanks su una tavola N&C; tuttavia, ha calcolato i modi per ridurre questo numero (per accelerare l'algoritmo e probabilmente per ridurre le scatole di fiammiferi!). In primo luogo, ha rimosso tutte le mosse impossibili, come:
-------
|X|0|X|
| |0| |
|X|X| |
-------
(due bocconcini e quattro croci)
Successivamente, ha compensato le rotazioni. Ad esempio, se sulla scatola di fiammiferi vediamo:
-------
| |0|0|
|X| |X|
| |0| |
-------
possiamo usare la stessa scatola per
-------
| |X| |
|0| |0|
| |X|0|
-------
Pertanto, le perline colorate di cui sopra rappresentano posizioni relative, non assolute. Ad esempio, se dicessimo che una perlina rossa significava in alto a sinistra, daremmo un'occhiata all'immagine in cima alla scatola e vedremmo:
-------
| |0|0|
|X| |X|
| |0| |
-------
quindi sapremmo che nel caso in cui questa sia la tavola, allora la perlina rossa significherebbe:
-------
|R|0|0|
|X| |X|
| |0| |
-------
Ma se questo è il consiglio:
-------
| |X| |
|0| |0|
| |X|0|
-------
il tallone rosso significherebbe
-------
| |X|R|
|0| |0|
| |X|0|
-------
Queste trasformazioni si applicavano alle rotazioni e all'inversione (in tutte le direzioni, compresa la diagonale). Ancora una volta, devi solo salvare ogni scatola di fiammiferi una volta in questo modo: non creare scatole virtuali separate per ogni trasformazione!
Un'altra semplificazione fatta da Michie è stata quella di assicurarsi che il computer andasse per primo. In questo modo, poteva rimuovere tutte le mosse di primo livello, rimuovendo circa un quinto delle caselle rimanenti. Alla fine, ha rimosso tutte le caselle di fine gioco (poiché non sono stati richiesti ulteriori "contenuti" o mosse in questi passaggi).
Bene, ora sull'algoritmo stesso (è molto semplice):
- Prima di tutto, decidi cosa rappresentano i colori delle perle. Avrai bisogno di 9 colori per rappresentare ciascuno degli spazi sul tabellone.
- All'inizio del gioco, ciascuna delle 304 scatole di fiammiferi contiene perline. Mentre le perline sono di colore casuale (quindi i duplicati vanno bene), dovrebbero essere possibili mosse (quindi se l'immagine dello stato della scheda raffigura una 'O' in mezzo a destra, quindi non puoi usare la perlina che rappresenta il mezzo- destra).
- Ogni volta che è il turno di MENACE (X), trova la scatola di fiammiferi con l'attuale posizione del tabellone (o una sua trasformazione) stampata su di essa.
- Apri la scatola di fiammiferi e scegli qualsiasi tallone lì a caso.
- Scopri come lo stato della scheda è stato trasformato per arrivare all'immagine sulla scatola di fiammiferi (ad es. Ruotata di 90 gradi in senso antiorario). Quindi, applica quella trasformazione al tallone (es. In alto a sinistra diventa sinistra-sinistra).
- Posiziona una X in quel quadrato. Rimuovi il tallone selezionato dalla scatola di fiammiferi. Se la scatola viene lasciata vuota di conseguenza, metti tre perline (possibili) casuali nella scatola e scegline una per la mossa.
- Ripeti 3-6 fino alla fine del gioco.
- Se MENACE ha vinto il gioco, torna indietro attraverso ogni scatola di fiammiferi che MENACE ha preso. Quindi, rintraccia di quale colore perlina ha usato in quella mossa. Metti due di quel colore di tallone nella scatola (in modo che ci sia il tallone originale + uno in più, aumentando così la probabilità che MENACE faccia quella mossa la prossima volta che arriva in quella posizione)
- Se MENACE ha perso il gioco, non fare nulla ( non sostituire le perline che ha tolto).
- Se MENACE ha disegnato il gioco, quindi sostituisci il tallone che ha usato in ciascuna delle sue mosse, ma non aggiungerne uno in più, in modo da rimanere con ciò che hai iniziato.
Questo ci lascia con un algoritmo che è molto semplice, ma difficile da implementare. Questo costituisce la base della tua sfida.
Se sei ancora confuso, vedi http://chalkdustmagazine.com/features/menace-machine-educable-noughts-crosses-engine/ - è quello che ho letto quando ho appreso per la prima volta di questo algoritmo
Sfida
Gioca una partita a Tic-Tac-Toe con il computer. Ad ogni passaggio, visualizza il contenuto di tutte le scatole di fiammiferi.
ingressi
- All'inizio del programma un numero, che indica quante partite vuoi giocare con MENACE
- Quindi, dopo il primo turno di MENACE, inserisci la tua mossa come una stringa di due caratteri, la prima lettera che è "L", "R" o "M" (sinistra, destra o centro) in riferimento all'asse Y. Quindi inserisci un'altra lettera (di nuovo "L", "R" o "M"), questa volta facendo riferimento all'asse X. Ripeti l'operazione per tutte le mosse e i giochi.
Uscite
- All'inizio di ogni nuovo gioco, genera "nuovo gioco".
- Dopo ogni mossa da parte del giocatore, esponi la scacchiera in qualsiasi formato ragionevole. Non ha bisogno di avere un bell'aspetto (es. Una serie di array che rappresentano le posizioni della scheda va bene).
- Dopo ogni mossa del giocatore, MENACE dovrebbe fare una mossa. Emetti il tabellone dopo la mossa di MENACE
- Dopo ogni partita, pubblica il contenuto di tutte le 304 scatole di fiammiferi. Le perle possono essere rappresentate da una lettera, nome di un colore, carattere o qualsiasi stringa o numero intero che ti piace (senza puntatori, funzioni anonime, ecc.).
Regole
- Questo è code-golf , quindi vince la risposta più breve in byte.
- Devo essere in grado di inserire le mosse dopo aver visto la risposta di MENACE. No "passa tutte le tue mosse in questa funzione e guarda come si svolge il gioco".
- Il tabellone deve essere eliminato tra una partita e l'altra.
- Le scatole di fiammiferi non devono essere cancellate tra i giochi (questo ripristinerebbe l'apprendimento automatico)
- Devi avere 304 scatole di fiammiferi. Chiunque può implementare questo algoritmo con tutte le 19.683 scatole di fiammiferi, ma l'apprendimento è lento (poiché richiede molti giochi per ottenerle tutte con contenuti utili).
- L'output può essere in qualsiasi formato ragionevole e l'input può essere preso secondo gli standard PPCG (purché conforme alla regola 2). Se è necessario regolare il formato di input (come descritto nella sezione " Input "), va bene finché ha senso.
- Una partita termina quando un giocatore vince (ottenendo tre di fila in diagonale, in orizzontale o in verticale) o se c'è un pareggio (il tavolo è pieno e non c'è vincitore)
- Mentre MENACE deve fare possibili mosse (e avere solo possibili perline all'interno di ogni scatola di fiammiferi), per il bene della sfida non è necessario convalidare l'input dell'utente. Se digitano qualcosa di sbagliato, il tuo programma può fare qualunque cosa (impazzire, lanciare errori, ecc.) - puoi presumere che l'input sia corretto.
[[0, 2, 6], [4, 8, 4, 3, 3], [7, 7, 7, 7, 7, 7, 7, 8], [1], ... [3, 3, 5, 4]]
.