Încă din copilărie, m-am întrebat cum a funcționat jocul electronic 20Q . Te gândești la un obiect, lucru sau animal (de exemplu, cartof sau măgar ). Dispozitivul vă pune apoi o serie de întrebări, cum ar fi:

  • Este mai mare decât o pâine de pâine?
  • Se găsește în aer liber?
  • Se folosește pentru recreere?

Pentru fiecare întrebare, puteți răspunde da , nu , poate sau necunoscut . Întotdeauna mi-am imaginat că funcționează cu condiții imense, imbricate (if -statements). Cu toate acestea, cred că „este o explicație puțin probabilă din cauza complexității sale pentru programator.

Cum aș implementa un astfel de sistem?

Răspuns

Nu știu cum a făcut-o 20Q în mod specific, dar există o mulțime de informații despre cum să implementați un joc de 20 de întrebări .

Există multe modalități de a rezolva acest lucru, dar voi descrie un singur mod . Aceste jocuri pot implementa un fel de arborele de decizie . Pentru un joc electronic precum 20Q, acest copac ar fi precomputat și destul de ușor de parcurs. Există metode pentru a utiliza copaci de decizie de învățare în care jocul poate accepta obiecte noi la sfârșitul întrebărilor, dacă nu poate ghici ce este utilizatorul întrebare.

Când întrebările sunt o serie de răspunsuri da sau nu, ajungeți la un arbore binar. Fiecare nod este o întrebare, iar frunzele sunt răspunsuri. Când răspunsurile la întrebări sunt necunoscute sau nu sunt sigure, nodurile copil pot fi combinate și întrebările lor pot fi puse în serie pentru a elimina în continuare răspunsurile posibile.

introduceți descrierea imaginii aici

Practic acesta este procesul:

  1. Începeți cu o listă completă a obiectelor. Toate acestea pot începe la fel de probabil sau pot fi sortate în funcție de cât de probabil a fost ales obiectul în timpul testării.
  2. Începeți cu prima întrebare din arborele de decizie. Împingeți-l pe coada de întrebări.
  3. Puneți întrebarea deasupra cozii.
  4. Răspunsul procesului:
    1. Da / Nu răspunsurile elimină / adaugă o cantitate prestabilită de probabilitate din fiecare răspuns pe baza întrebării.
    2. Răspunsul „Poate” elimină / adaugă o fracțiune din cantitatea prestabilită a unui „da”.
    3. „Nu știu” nu schimbă probabilitățile
  5. Un răspuns „Necunoscut” sau „Poate” împinge ambele întrebări ale nodurilor următoare în coada de întrebări. Un răspuns „Da” sau „Nu” adaugă doar nodul respectiv da / nu în coada de întrebări.
  6. Continuați cu pasul 3 până când întrebările sau probabilitatea unui singur răspuns depășește o „certitudine” predefinită. „prag.
  7. Furnizați cel mai probabil răspuns.

Generarea arborelui este probabil subiectul unei alte întrebări. Dar, practic, alegem întrebări care împart răspunsurile cât mai mult posibil. Puneți întrebările care împart întrebările în mod egal aproape de început, astfel încât cel mai mare număr de întrebări să poată fi eliminat cel mai repede.

Răspuns

Răspunsul simplu este că jocul portabil 20Q a fost creat din inteligența artificială care trăiește la http://20Q.net . La 20Q.net puteți juca diferite versiuni ale jocului Twenty Questions, similar cu jucăria, cu excepția faptului că jocul învață din fiecare joc jucat. aceiași algoritmi de rețea neuronală. Rețeaua neuronală alege întrebările pe care trebuie să le puneți, precum și să facă presupuneri. Această abordare înseamnă că AI va ghici adesea corect, chiar dacă răspundeți la o întrebare diferit de ceea ce a fost predat AI. Un alt avantaj este că jocul va pune întrebări diferit în fiecare joc, chiar dacă vă gândiți la același lucru.

Algoritmii iar rețeaua neuronală a clasicului joc englezesc (Animal, Vegetable, Mineral) a fost creată în 1988 de Robin Burgener. . . eu.

Vă mulțumim că ați întrebat.

Comentarii

  • Bună Robin, bine ați venit pe site. Cine mai bine să răspundă la această întrebare decât inventatorul însuși. ‘ este interesant să știm cât de complex este de fapt 20Q. Vă mulțumim pentru contribuția dvs. la site și cu atât mai mult contribuția dvs. la inteligența artificială. Sperăm că ‘ veți vizita site-ul ocazional și veți răspunde la A.I. întrebări :).
  • hehe, adoră-l când se întâmplă acest lucru xD.

Răspunde

Am căutat pe Google „cod 20q” și am găsit acest lucru: http://mosaic.cnfolio.com/B142LCW2008A197

Această versiune este doar pentru animale, dar cele 20 de Întrebări reale au probabil un algoritm similar.

Iată o prezentare generală rapidă a codului pe care l-am legat:
Există mai multe răspunsuri diferite codate în program.Mai multe atribute ADEVĂRATE sau FALSE li se atribuie apoi:

#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" ... 

După cum puteți vedea, o albină nu este mamifer, dar zboară etc.

Există o matrice pentru fiecare grup:

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

Când se pune fiecare întrebare:

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

Programul analizează definiția categoriei corespunzătoare și urmărește animalul care este cel mai probabil cel la care vă gândiți pe baza valorilor ADEVĂRATE sau FALSE și a răspunsului dvs. Da sau Nu introdus la întrebare.

Acest lucru se face în:

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

Răspuns

Este „s nu un arbore de decizie masiv sau o grămadă de afirmații codificate cu duritate if / else. Robin Burgener, inventatorul, și-a documentat complet algoritmul în depunerea brevetului din 2005. „este ingenios de simplu.

Comentarii

  • În loc să vă uitați la celelalte răspunsuri, vă recomandăm să dați o scurtă descriere a algoritmului în loc de doarpostând un link către acesta.
  • în cazul în care ați ratat celelalte răspunsuri, el a comentat mai sus! poate @ user22025 ar putea oferi și o scurtă explicație aici: D

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *