Gyermekkorom óta kíváncsi vagyok, hogyan működik a 20Q elektronikus játék. Gondolsz egy tárgyra, dologra vagy állatra (pl. burgonya vagy szamár ). Ezután az eszköz kérdéseket tesz fel Önnek, például:

  • nagyobb-e, mint egy cipó kenyér?
  • A szabadban található?
  • Szabadidős célokra használják?

Minden kérdésre válaszolhat igen , nem , talán vagy ismeretlen . Mindig azt képzeltem, hogy hatalmas, beágyazott feltételekkel működik (if -megállapítások). Úgy gondolom azonban, hogy ez valószínűtlen magyarázat a programozó számára összetettsége miatt.

Hogyan valósítanám meg egy ilyen rendszert?

Válasz

Nem tudom, hogy a 20Q hogyan csinálta konkrétan, de rengeteg információ található a 20 kérdés .

Ennek megoldására sokféle módszer létezik, de az egyik módját leírom . Ezek a játékok valamilyen döntési fát megvalósíthatnak. Egy olyan elektronikus játékhoz, mint a 20Q, ez a fa előre kiszámított, és meglehetősen könnyen átjárható. Vannak módszerek az tanulási döntési fák használatára, ahol a játék új objektumokat tud fogadni a kérdései végén, ha nem tudja kitalálni, mi a felhasználó kérdezés.

Ha a kérdések igen vagy nem válaszok, akkor bináris fát kapsz. Minden csomópont kérdés, a levelek pedig válaszok. Ha a kérdésekre ismeretlen válasz adódik, vagy nem biztos, akkor a gyermek csomópontjai egyesíthetők, és kérdéseiket sorozatosan tehetik fel a lehetséges válaszok további felszámolása érdekében.

írja ide a kép leírását

Alapvetően ez a folyamat:

  1. Kezdje az objektumok teljes listájával. Mindezek ugyanolyan valószínűséggel indulhatnak, vagy szétválogathatók aszerint, hogy milyen valószínűséggel választották az objektumot a tesztelés során.
  2. Kezdje a döntési fa első kérdésével. Tolja rá a kérdéssorra.
  3. Tegye fel a kérdést a sor tetején.
  4. Folyamatválasz:
    1. Igen / Nem válaszok eltávolít / hozzáad egy előre meghatározott mennyiséget valószínűség minden válaszból a kérdés alapján.
    2. A “Talán” válasz eltávolítja / hozzáadja az “előre” előre meghatározott mennyiségének töredékét.
    3. Az “Ismeretlen” nem változtatja meg a valószínűségeket
  5. Az “Ismeretlen” vagy “Talán” válasz a következő csomópont mindkét kérdését a kérdéssorba tolja. Az „Igen” vagy „Nem” válasz csak hozzáadja a megfelelő igen / nem csomópontot a kérdéssorhoz.
  6. Folytassa a 3. lépéssel, amíg a kérdésekből vagy az egyetlen válasz valószínűsége meghaladja az előre meghatározott “bizonyosságot” “küszöb.
  7. Adja meg a legvalószínűbb választ.

A fa generálása valószínűleg egy másik kérdés témája. De alapvetően olyan kérdéseket választ, amelyek a válaszokat a lehető legjobban megosztják. Tedd azokat a kérdéseket, amelyek a kérdéseket egyformán osztják el az elején, hogy a legtöbb kérdést a leggyorsabban fel lehessen dobni.

Válasz

Az egyszerű válasz az, hogy a kézi 20Q játékot a http://20Q.net . A 20Q.net oldalon a Húsz Kérdés játékának különböző verzióit játszhatja le, hasonlóan a játékhoz, azzal a különbséggel, hogy a játék minden játszott játékból tanul. A kézi játék a ugyanazok a neurális hálózati algoritmusok. A neurális hálózat kiválasztja a feltett kérdéseket, és találgatásokat is végez. Ez a megközelítés azt jelenti, hogy az AI gyakran helyesen tippel, még akkor is, ha egy kérdésre eltérően válaszol, mint amit az AI tanított. További előnye, hogy a játék minden játékban másképp tesz fel kérdéseket, még akkor is, ha ugyanarra gondolsz.

Az algoritmusok és a klasszikus angol játék (Animal, Vegetable, Mineral) ideghálózatát 1988-ban hozta létre Robin Burgener. . . én.

Köszönöm, hogy megkérdezted.

Megjegyzések

  • Helló Robin, üdvözlünk a webhelyen. Ki válaszolhat jobban erre a kérdésre, mint maga a feltaláló. ‘ érdekes tudni, mennyire összetett a 20Q. Köszönjük a webhelyhez való hozzájárulását és még inkább a mesterséges intelligenciához való hozzájárulását. Remélhetőleg ‘ időnként felkeresi a webhelyet, és A.I. kérdések :).
  • hehe, szeretem, ha ez megtörténik xD.

Válasz

Google-ba kerestem a “20q code”, és ezt találtam: http://mosaic.cnfolio.com/B142LCW2008A197

Ez a verzió csak állatok esetében, de a tényleges 20 kérdés valószínűleg hasonló algoritmussal rendelkezik.

Itt van egy rövid áttekintés az általam linkelt kódról:
Számos különféle válasz van hardveresen kódolva a programba.Ezután több IGAZ vagy HAMIS attribútumot rendelnek hozzájuk:

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

Mint látható, egy méh nem emlős, de repül stb.

Minden csoportnak van tömbje:

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

Amikor minden kérdést feltesznek:

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

A program megvizsgálja a megfelelő kategória meghatározását, és az IGAZ vagy HAMIS értékek, valamint a kérdésre adott igen vagy nem válasz alapján követi nyomon, hogy melyik állatra gondolsz valószínűleg.

Ez a következő nyelveken történik:

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

Válasz

It nem egy hatalmas döntési fa vagy egy csomó keményen kódolt if / else nyilatkozat. Robin Burgener, a feltaláló, teljesen dokumentálta algoritmusát 2005-ös szabadalmi bejelentésében. “zseniálisan egyszerűek.

Megjegyzések

  • A többi válasz helyett a rövid válasz helyett inkább az algoritmus rövid leírását kell megadnia.linket tesz közzé.
  • ha elmulasztotta a többi választ, fentebb megjegyzést tett! talán @ user22025 itt is rövid magyarázatot tudna adni: D

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük