Helt siden barndommen har jeg lurt på hvordan det elektroniske spillet 20Q fungerte. Du tenker på en gjenstand, ting eller et dyr (f.eks. potet eller esel ). Enheten stiller deg en rekke spørsmål som:

  • Er det større enn et brød brød?
  • Finnes det utendørs?
  • Brukes det til rekreasjon?

For hvert spørsmål kan du svare ja , nei , kanskje eller ukjent . Jeg har alltid sett for meg at det fungerer med enorme, nestede betingelser (if -uttalelser). Jeg tror imidlertid det er en usannsynlig forklaring på grunn av kompleksiteten for programmereren.

Hvordan ville jeg implementere et slikt system?

Svar

Jeg vet ikke hvordan 20Q gjorde det spesifikt, men det er rikelig med informasjon om hvordan du implementerer et spill med 20 spørsmål .

Det er mange måter å løse dette på, men jeg vil beskrive en måte . Disse spillene kan implementere en slags beslutningstreet . For et elektronisk spill som 20Q, ville dette treet være forhåndsberegnet og ganske enkelt å krysse. Det er metoder for å bruke lære beslutningstrær der spillet kan godta nye objekter på slutten av spørsmålene hvis det ikke er i stand til å gjette hva brukeren er. spør.

Når spørsmålene er en serie med ja eller nei-svar, ender du opp med et binært tre. Hver node er et spørsmål, og bladene er svar. Når spørsmål blir besvart med ukjent eller ikke usikker, kan barnekodene kombineres og spørsmålene deres stilles i serie for å få ytterligere svar på mulige svar.

skriv inn bildebeskrivelse her

I utgangspunktet er dette prosessen:

  1. Start med en full liste over objektene. Disse kan alle starte like sannsynlig, eller de kan sorteres etter hvor sannsynlig objektet ble valgt under testing.
  2. Start med det første spørsmålet i beslutningstreet. Skyv den inn i spørsmålskøen.
  3. Still spørsmålet på toppen av køen.
  4. Prosesssvar:
    1. Ja / Nei svar fjerner / legger til en forhåndsbestemt mengde sannsynlighet fra hvert svar basert på spørsmålet.
    2. «Kanskje» svar fjerner / legger til en brøkdel av den forhåndsbestemte mengden av et «ja».
    3. «Ukjent» endrer ikke sannsynlighet
  5. Et «ukjent» eller «kanskje» svar skyver begge de neste nodespørsmålene inn i spørsmålskøen. Et «Ja» eller «Nei» svar legger bare til den respektive ja / nei-noden i spørsmålskøen.
  6. Gå til trinn 3 til ut av spørsmål eller sannsynligheten for et enkelt svar er utenfor en forhåndsdefinert «sikkerhet «terskel.
  7. Gi mest sannsynlig svar.

Generering av treet er sannsynligvis temaet for et annet spørsmål. Men i utgangspunktet velger du spørsmål som deler svarene så mye som mulig. Sett spørsmålene som deler spørsmålene likt like nær begynnelsen, slik at flest mulig spørsmål kan slettes raskest.

Svar

Det enkle svaret er at det håndholdte spillet 20Q ble opprettet fra den kunstige intelligensen som lever på http://20Q.net . På 20Q.net kan du spille forskjellige versjoner av spillet Twenty Questions, som ligner på leketøyet, bortsett fra at spillet lærer av hvert spill som spilles. Det håndholdte leketøyet bruker samme nevrale nettverksalgoritmer. Nevrale nettverk velger spørsmålene og gjetter. Denne tilnærmingen betyr at AI ofte vil gjette riktig selv om du svarer på et spørsmål annerledes enn det AI har blitt lært. En annen fordel er at spillet vil stille spørsmål annerledes for hvert spill, selv om du tenker på det samme.

Algoritmene og nevrale nettverk av det klassiske engelske spillet (Animal, Vegetable, Mineral) ble opprettet i 1988 av Robin Burgener. . . meg.

Takk for at du spurte.

Kommentarer

  • Hei Robin, velkommen til siden. Hvem er bedre å svare på dette spørsmålet enn oppfinneren selv. Det ‘ er interessant å vite hvor kompleks 20Q faktisk er. Takk for ditt bidrag til nettstedet og mer så ditt bidrag til kunstig intelligens. Forhåpentligvis vil du ‘ besøke siden innimellom og svare A.I. spørsmål :).
  • hehe, elsker det når dette skjer xD.

Svar

Jeg googlet «20q code» og fant dette: http://mosaic.cnfolio.com/B142LCW2008A197

Denne versjonen er bare for dyr, men de faktiske 20 spørsmålene har sannsynligvis en lignende algoritme.

Her er en rask oversikt over koden jeg koblet:
Det er flere forskjellige svar som er hardkodet i programmet.Flere SANTE eller FALSE attributter blir deretter tildelt dem:

#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 bie ikke pattedyr, men den flyr osv.

Det er en matrise for hver gruppe:

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

Når hvert spørsmål blir spurt:

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

Programmet ser på definisjonen av riktig kategori og sporer hvilket dyr som mest sannsynlig er det du tenker på, basert på de SANNE eller FALSE verdiene og ditt svar Ja eller Nei på spørsmålet.

Dette gjøres i:

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

Svar

It «s ikke et massivt avgjørelsestre eller en haug med hardkodede hvis / annet-uttalelser. Robin Burgener, oppfinneren, dokumenterte fullstendig algoritmen sin i sin 2005-arkivering. Det «er genialt enkelt.

Kommentarer

  • I stedet for å peke på de andre svarene, kan det være lurt å gi en kort beskrivelse av algoritmen i stedet for barelegge ut en lenke til den.
  • i tilfelle du savnet de andre svarene, kommenterte han ovenfor! kanskje @ user22025 også kunne gi en kort forklaring her: D

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *