Lige siden barndommen har jeg spekuleret på, hvordan det elektroniske spil 20Q fungerede. Du tænker på et objekt, en ting eller et dyr (fx kartoffel eller æsel ). Enheden stiller dig derefter en række spørgsmål såsom:

  • Er den større end et brød brød?
  • Findes det udendørs?
  • Bruges det til rekreation?

For hvert spørgsmål kan du svare ja , nej , måske eller ukendt . Jeg har altid forestillet mig, at det fungerer med enorme, indlejrede betingelser (if -udtalelser). Jeg synes dog, det er en usandsynlig forklaring på grund af dets kompleksitet for programmøren.

Hvordan ville jeg implementere et sådant system?

Svar

Jeg ved ikke, hvordan 20Q gjorde det specifikt, men der er masser af information om, hvordan man implementerer et spil med 20 spørgsmål .

Der er mange måder at løse dette på, men jeg beskriver en måde . Disse spil kan implementere en slags beslutningstræ . For et elektronisk spil som 20Q ville dette træ være forudregnet og temmelig let at krydse. Der er metoder til at bruge lære beslutningstræer , hvor spillet kan acceptere nye objekter i slutningen af spørgsmålene, hvis det ikke er i stand til at gætte, hvad brugeren er spørger.

Når spørgsmålene er en række ja eller nej-svar, ender du med et binært træ. Hver knude er et spørgsmål, og bladene er svar. Når spørgsmål besvares med ukendt eller ikke sikker, kan underordnede noder kombineres, og deres spørgsmål stilles i serie for yderligere at få de mulige svar.

indtast billedbeskrivelse her

Grundlæggende er dette processen:

  1. Start med en komplet liste over objekterne. Disse kan alle starte med lige sandsynlighed, eller de kan sorteres efter, hvor sandsynligt objektet skulle vælges ved testning.
  2. Start med det første spørgsmål i beslutningstræet. Skub det ind i spørgsmålskøen.
  3. Stil spørgsmålet øverst i køen.
  4. Processvar:
    1. Ja / Nej svar fjerner / tilføjer en forudbestemt mængde sandsynlighed fra hvert svar baseret på spørgsmålet.
    2. “Måske” svar fjerner / tilføjer en brøkdel af den forudbestemte mængde af et “ja”.
    3. “Ukendt” ændrer ikke sandsynligheder
  5. Et svar “Ukendt” eller “Måske” skubber begge de næste nodespørgsmål ind i spørgsmålskøen. Et “ja” eller “nej” svar tilføjer bare den respektive ja / nej node til spørgsmålskøen.
  6. Gå til trin 3, indtil ud af spørgsmål eller sandsynligheden for et enkelt svar er uden for en foruddefineret “sikkerhed ” Grænseværdi.
  7. Giv det mest sandsynlige svar.

Generering af træet er sandsynligvis emnet for et andet spørgsmål. Men dybest set er det at vælge spørgsmål, der opdeler svarene så meget som muligt. Stil de spørgsmål, der opdeler spørgsmålene lige lige nær begyndelsen, så det flest antal spørgsmål kan slettes hurtigst.

Svar

Det enkle svar er, at det håndholdte spil 20Q blev oprettet ud fra den kunstige intelligens, der lever ved http://20Q.net . På 20Q.net kan du spille forskellige versioner af spillet Twenty Questions, der ligner legetøjet, bortset fra at spillet lærer af hvert spil, der spilles. Det håndholdte legetøj bruger samme neurale netværksalgoritmer. Neural netværk vælger de spørgsmål, der skal stilles, såvel som at gætte. Denne tilgang betyder, at AI ofte vil gætte korrekt, selvom du besvarer et spørgsmål anderledes end hvad AI er blevet lært. En anden fordel er, at spillet stiller spørgsmål forskelligt hvert spil, selvom du tænker på det samme.

Algoritmerne og det neurale netværk af det klassiske engelske spil (Animal, Vegetable, Mineral) blev oprettet i 1988 af Robin Burgener. . . mig.

Tak for spørgsmålet.

Kommentarer

  • Hej Robin, velkommen til siden. Hvem er bedre til at besvare dette spørgsmål end opfinderen selv. Det er ‘ interessant at vide, hvor kompleks 20Q faktisk er. Tak for dit bidrag til webstedet og mere så dit bidrag til kunstig intelligens. Forhåbentlig besøger du ‘ lejligheden lejlighedsvis og svarer A.I. spørgsmål :).
  • hehe, elsker det, når dette sker xD.

Svar

Jeg googlede “20q-kode” og fandt dette: http://mosaic.cnfolio.com/B142LCW2008A197

Denne version er kun for dyr, men de faktiske 20 spørgsmål har sandsynligvis en lignende algoritme.

Her er en hurtig oversigt over koden, jeg linkede:
Der er flere forskellige svar, der er hårdt kodet i programmet.Der tildeles derefter flere SANDE eller FALSKE attributter:

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

Som du kan se, er en bi ikke pattedyr, men den flyver osv.

Der er en matrix for hver gruppe:

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

Når hvert spørgsmål stilles:

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

Programmet ser på definitionen af den relevante kategori og sporer hvilket dyr, der mest sandsynligt er det, du tænker på, baseret på de SANDE eller FALSKE værdier og dit input Ja eller Nej svar på spørgsmålet.

Dette gøres i:

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

Svar

It “s ikke et massivt beslutningstræ eller en flok hårdkodede hvis / ellers udsagn. Robin Burgener, opfinderen, dokumenterede fuldstændigt sin algoritme i sin patentansøgning fra 2005. Det “er genialt simpelt.

Kommentarer

  • I stedet for at pikke på de andre svar, vil du måske give en kort beskrivelse af algoritmen i stedet for bareudstationering af et link til det.
  • hvis du gik glip af de andre svar, kommenterede han ovenfor! måske @ user22025 kunne også give en kort forklaring her: D

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *