Fin dallinfanzia, mi sono chiesto come funzionasse il gioco elettronico 20Q . Pensi a un oggetto, una cosa o un animale (ad es. patata o asino ). Il dispositivo ti pone quindi una serie di domande come:

  • È più grande di una pagnotta di pane?
  • Si trova allaperto?
  • Viene usato per svago?

Per ogni domanda, puoi rispondere , no , forse o sconosciuto . Ho sempre immaginato che funzionasse con immensi condizionali annidati (if -statements). Tuttavia, penso che sia una spiegazione improbabile a causa della sua complessità per il programmatore.

Come implementerei un tale sistema?

Risposta

Non so come abbia fatto 20Q nello specifico, ma ci sono molte informazioni su come implementare un gioco di 20 domande .

Ci sono molti modi per risolvere questo problema, ma ne descriverò uno . Questi giochi possono implementare una sorta di albero decisionale . Per un gioco elettronico come 20Q, questo albero sarebbe precalcolato e abbastanza facile da attraversare. Esistono metodi per utilizzare alberi decisionali di apprendimento in cui il gioco può accettare nuovi oggetti alla fine delle sue domande se non è in grado di indovinare cosa sia lutente chiedendo.

Quando le domande sono una serie di risposte sì o no, si finisce con un albero binario. Ogni nodo è una domanda e le foglie sono risposte. Quando si risponde alle domande con sconosciuto o non sicuro, i nodi figlio possono essere combinati e le loro domande poste in serie per selezionare ulteriormente le possibili risposte.

inserisci qui la descrizione dellimmagine

Fondamentalmente questo è il processo:

  1. Inizia con un elenco completo degli oggetti. Questi possono iniziare tutti con la stessa probabilità, oppure possono essere ordinati in base alla probabilità che loggetto fosse scelto in testing.
  2. Inizia con la prima domanda nellalbero decisionale. Inseriscilo nella coda delle domande.
  3. Poni la domanda in cima alla coda.
  4. Elabora la risposta:
    1. Le risposte Sì / No rimuove / aggiunge una quantità predeterminata di probabilità da ogni risposta basata sulla domanda.
    2. La risposta “Forse” rimuove / aggiunge una frazione della quantità predeterminata di un “sì”.
    3. “Sconosciuto” non cambia le probabilità
  5. Una risposta “Sconosciuto” o “Forse” inserisce entrambe le domande dei nodi successivi nella coda delle domande. Una risposta “Sì” o “No” aggiunge semplicemente il rispettivo nodo sì / no alla coda delle domande.
  6. Vai al passaggio 3 fino a quando le domande fuori o la probabilità di una singola risposta sono oltre una certezza “predefinita ” soglia.
  7. Fornisci la risposta più probabile.

La generazione dellalbero è probabilmente largomento di unaltra domanda. Ma fondamentalmente si tratta di scegliere domande che dividono le risposte il più possibile. Metti le domande che dividono le domande più equamente allinizio in modo che il maggior numero di domande possa essere selezionato il più velocemente possibile.

Risposta

La semplice risposta è che il gioco portatile 20Q è stato creato dallintelligenza artificiale che vive a http://20Q.net . Su 20Q.net puoi giocare a diverse versioni del gioco di Twenty Questions, simili al giocattolo, tranne per il fatto che il gioco impara da ogni gioco giocato. Il giocattolo portatile utilizza il stessi algoritmi di rete neurale. La rete neurale sceglie le domande da porre oltre a fare ipotesi. Questo approccio significa che lIA spesso indovina correttamente anche se rispondi a una domanda in modo diverso da ciò che è stato insegnato allIA. Un altro vantaggio è che il gioco farà domande in modo diverso ad ogni gioco anche se stai pensando alla stessa cosa.

Gli algoritmi e la rete neurale del classico gioco inglese (Animal, Vegetable, Mineral) è stata creata nel 1988 da Robin Burgener. . . me.

Grazie per aver chiesto.

Commenti

  • Ciao Robin, benvenuto nel sito. Chi meglio per rispondere a questa domanda se non lo stesso inventore. ‘ è interessante sapere quanto sia complesso il 20Q. Grazie per il tuo contributo al sito e ancor di più per il tuo contributo allintelligenza artificiale. Si spera che ‘ visiterai il sito di tanto in tanto e risponderai A.I. domande :).
  • hehe, adoro quando succede xD.

Rispondi

Ho cercato su Google “codice 20q” e ho trovato questo: http://mosaic.cnfolio.com/B142LCW2008A197

Questa versione è solo per gli animali, ma le 20 domande effettive probabilmente hanno un algoritmo simile.

Ecco una rapida panoramica del codice che ho collegato:
Ci sono molte risposte differenti codificate nel programma.A loro vengono quindi assegnati diversi attributi VERO o FALSO:

#define ANIMALS_LIST "daddylonglegs bee penguin eagle giraffe octopus tiger elephant jellyfish bull \nparrot dolphin python crocodile cat leopard monkey zebra sheep rat \nowl spider frog polarbear snail tortoise rabbit salmon rhino fox" #define MAMMALS "0 0 0 0 1 0 1 1 0 1 0 1 0 0 1 1 1 1 1 1 0 0 0 1 0 0 1 0 1 1" #define FLYING_ANIMALS "1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0" #define WATER_ANIMALS "0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 0" #define BEAK "0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0" ... 

Come puoi vedere unape non è un mammifero ma vola, ecc.

Esiste un array per ogni gruppo:

int mammals[ TOTAL_ANIMALS ] = { 0 }; int flying_animals[ TOTAL_ANIMALS ] = { 0 }; int water_animals[ TOTAL_ANIMALS ] = { 0 }; ... 

Quando viene posta ogni domanda:

 askUserQuestion( guesses, "\nQuestion %d: Is your animal a mammal? \n", mammals ); 

Il programma esamina la definizione della categoria appropriata e tiene traccia di quale animale è molto probabilmente quello a cui stai pensando in base ai valori VERO o FALSO e alla tua risposta Sì o No inserita alla domanda.

Questo viene fatto in:

void askUserQuestion( int guessNumber, char* question, int* animalData ); 

Answer

It “s non un enorme albero decisionale o un mucchio di dichiarazioni if / else hard-coded. Robin Burgener, linventore, ha documentato completamente il suo algoritmo nel suo deposito di brevetto del 2005. “è ingegnosamente semplice.

Commenti

  • Invece di cercare le altre risposte, potresti voler fornire una breve descrizione dellalgoritmo invece dipostando un link ad esso.
  • nel caso ti fossi perso le altre risposte, ha commentato sopra! forse @ user22025 potrebbe anche fornire una breve spiegazione qui: D

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *