对于这样的规则,有一个相对简单的游戏:
有一个保险柜需要解锁。
保险箱的代码是一个没有重复的4位数字(1234,4867,1092等等,像1231这样的代码在这个游戏中是不可能的)。
游戏给出5次猜测正确代码的尝试。
假设我开始一个新游戏,在第一次尝试时,我测试代码类似于0123。
游戏的回应是2-1.2意味着代码0123有两个正确的数字,我需要在最终解锁代码中使用。1表示这两个数字中的一个已经在正确的位置。
在此之后,我有4个更精确的相同的步骤,我尝试不同的代码,根据先前测试的数字和反应从游戏。
目标是获得最终代码,假设9135(基于prev 0123的尝试)和响应需要4-4(4个正确的号码,4个就位)。它发生得越早-越好。
我知道,这可以用组合学解决,只是排除一些组合,但我不知道如何选择最加权的组合,为下一次尝试,并希望AI能做得更好。
我是一个前端开发人员和一个绝对的初学者在人工智能。我真的不明白解决这个问题需要多复杂的代码,以及它需要付出什么努力。如果您能向我解释并分享一些类似已解决任务的链接/代码示例(lang并不重要,但如果是JS或Python),我将非常感激,因此我可以在此基础上解决我的问题。
请告诉我,如果我的解释不清楚,我会尝试更简单的话:))谢谢!
发布于 2020-07-07 09:46:56
发布于 2020-07-07 15:35:48
虽然@AKX是正确的,这是Mastermind的一个变体,但遗传算法可能并不是第一个可以查看的地方,因为这可能比简单的方法更复杂。
唐纳德·克努斯因想出游戏的解决方案而闻名(除其他外)。这个方法在令人困惑的堆栈交换站点上有一个很好的概述,如果您查看关于这个问题的其他答案,也会讨论如何编写解决方案。
在您的例子中,简单的方法是编写一个从0000到9999的迭代函数。这些都是潜在的答案。但是,当您遍历要删除的数字时,要删除(1)带有重复数字的所有数字,以及(2)所有与猜测不一致的数字。任何其他数字都可以放在存储潜在答案的数组或列表中。从这些剩余的数字,您只需猜测任何数字,然后继续这个过程。
一种更复杂的方法是使用类似于ID3的算法进行下一次猜测,试图找到最大限度地提高响应信息增益的猜测。但是,考虑到你从每个猜测中得到的信息,这是不太可能需要的。
https://stackoverflow.com/questions/62772414
复制相似问题