我感兴趣的是编写一个类似于twenty questions的akinator算法,以及20q.net在较小程度上使用的算法。后者似乎更关注对象,明确告诉你不要想到人或地方。可以说akinator更通用,允许你从字面上思考任何东西,包括诸如“我的兄弟”之类的抽象。
这个问题在于我不知道这些网站使用的是什么算法,但从我读到的内容来看,他们似乎正在使用一种概率方法,根据问题给出的问题具有一定的适应性。正确的猜测。这个SO question提出了几种技巧,但含糊不清,我会对更多细节感兴趣。
那么,什么是一个准确有效的算法来播放二十个问题呢?
我对以下方面感兴趣:
我意识到这可能并不容易,我不是要求代码或2000字的演示文稿。关于每个操作和底层数据结构的几句话应该足以让我开始。
答案 0 :(得分:11)
好吧,三年后,我做到了(虽然我没有全职工作)。如果有人有兴趣的话,我在http://twentyquestions.azurewebsites.net/举办了一次粗略的实施(请不要教太多错误的内容!)。
这并不难,但我会说,你不会立即想到的那种不直观的不直观的事情。我的方法包括一些基于健康的琐碎排名,来自reinforcement learning的想法和一个安排要问的新问题的round-robin方法。所有这些都是在规范化的关系数据库上实现的。
我的基本想法如下。如果有人有兴趣,我也会分享代码,请联系我。我打算最终把它变成开源,但是一旦我做了更多的测试和改造。所以,我的想法:
A
对问题Q
的回答推动了对问题Q
的多数回答为A
的所有实体; GameEntities
表中当前最高条目相关的适应度最高的那些问题中挑选出下一个问题。预期答案为“是”的问题甚至在适应性之前受到青睐,因为这些问题有更多机会巩固当前排名靠前的实体; 如果有兴趣,我可以提供更多细节。我也愿意合作改进算法和实现。
答案 1 :(得分:4)
我正在尝试使用天真的贝叶斯网络编写一个python实现来学习并在问题被回答为选择问题的标准后最小化预期的熵(ε有机会选择随机问题以便学习关于这个问题的更多信息),遵循http://lists.canonical.org/pipermail/kragen-tol/2010-March/000912.html中的想法。到目前为止,我已经把我所得到的东西放在了github上。
答案 2 :(得分:4)
这是一个非常有趣的问题。不幸的是,我没有完整的答案,让我在10分钟内写下我能提出的想法:
答案 3 :(得分:1)
看看基于决策树的算法能为您提供多好的服务会很有趣。这里的诀窍纯粹是在树的学习/排序中。我想要注意的是,这是我记得AI班和学生在AI工作组中工作的东西,应该用半大粒(或金块)加盐。
回答问题: