Answers:
我不知道20Q具体是怎么做到的,但是关于如何实施20个问题的游戏,有很多信息。
解决此问题的方法有很多,但我将描述一种方法。这些游戏可以实现某种决策树。对于20Q这样的电子游戏,该树将被预先计算并且相当容易遍历。有一些使用学习决策树的方法,如果游戏无法猜出用户在问什么,则游戏可以在问题结束时接受新对象。
当问题是一系列的是或否答案时,您将得到一棵二叉树。每个节点都是一个问题,叶子就是答案。当问题的答案不确定或不确定时,可以合并子节点,并依次询问其问题,以进一步考虑可能的答案。
基本上这是一个过程:
生成树可能是另一个问题的主题。但基本上,它选择的问题是尽可能将答案分开的问题。将最能平分问题的问题放在开头,这样可以最快地剔除最多数量的问题。
简单的答案是,掌上游戏20Q是由位于http://20Q.net的人工智能创建的。在20Q.net,您可以玩“二十个问题”游戏的不同版本,类似于玩具,不同之处在于该游戏可以从每个游戏中学习。手持玩具使用相同的神经网络算法。神经网络选择要提出的问题以及进行猜测。这种方法意味着,即使您回答的问题与AI所教的内容不同,AI也会经常正确猜测。另一个优点是,即使您在思考同一件事,游戏也会在每个游戏中提出不同的问题。
经典英语游戏(动物,蔬菜,矿物)的算法和神经网络由Robin Burgener于1988年创建。。。我。
感谢您的询问。
我在Google上搜索了“ 20q代码”并找到了它:http : //mosaic.cnfolio.com/B142LCW2008A197
此版本仅适用于动物,但实际的20个问题可能具有类似的算法。
这是我链接的代码的快速概述:
程序中硬编码了几个不同的答案。然后将几个TRUE或FALSE属性分配给它们:
#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"
...
如您所见,蜜蜂不是哺乳动物,但它确实会飞,等等。
每个组都有一个数组:
int mammals[ TOTAL_ANIMALS ] = { 0 };
int flying_animals[ TOTAL_ANIMALS ] = { 0 };
int water_animals[ TOTAL_ANIMALS ] = { 0 };
...
提出每个问题时:
askUserQuestion( guesses, "\nQuestion %d: Is your animal a mammal? \n", mammals );
该程序将查看适当类别的定义,并根据TRUE或FALSE值以及输入的问题的是或否来跟踪您最想考虑的动物。
可以通过以下方式完成:
void askUserQuestion( int guessNumber, char* question, int* animalData );
它不是一个庞大的决策树,也不是一堆硬编码的if / else语句。发明人Robin Burgener 在2005年的专利申请中完全记录了他的算法。这很巧妙。