一款简单的AI机器人游戏

2024-09-25 00:26:40 发布

您现在位置:Python中文网/ 问答频道 /正文

有这样一个相对简单的游戏规则:

有一个保险箱需要解锁

保险柜的密码是一个4位数字,没有重复(123448671092等,像1231这样的密码在这个游戏中是不可能的)

游戏给出了5次尝试来猜测正确的代码

假设我开始了一个新游戏,第一次尝试时我测试了0123这样的代码

游戏以2-1回应。2表示代码0123有2个正确的数字,我需要在最终解锁代码中使用。1表示这两个数字中的一个已经位于正确位置

在这之后,我有了4个完全相同的步骤,根据之前测试的数字和游戏的反应,我尝试了不同的代码

目标是获得最终代码,比如9135(基于prev 0123的尝试),游戏的响应需要4-4(4个正确的数字,4个到位)。越早发生越好

我知道这可以通过排除一些组合使用组合数学来解决,但我不知道如何为下一次尝试选择最加权的组合,希望AI能做得更好

我是一名前端开发人员,也是人工智能的绝对初学者。我真的不明白解决这个问题的代码有多复杂,需要付出多大的努力。如果您能向我解释并分享一些类似已解决任务的链接/代码示例(lang不重要,但如果是JS或Python就更好),我将非常感激,因此我可以在此基础上解决我的问题

如果我的解释不清楚,请随时告诉我,我会尝试更简单的词语:) 谢谢


Tags: 代码游戏密码目标人员步骤数字数学
2条回答

您的游戏听起来与Mastermind类似,只使用数字而不是彩色钉子

谷歌搜索“智囊团AI”会导致例如this implementation使用遗传算法来解决智囊团问题,你可能会从中获得灵感

虽然@AKX认为这是智囊团的一个变种是正确的,但遗传算法可能不是第一个考虑的地方,因为这可能比简单的方法更复杂

Donald Knuth是著名的(在许多其他事情中)解决方案的游戏。在Puzzling Stack Exchange站点上有一个很好的关于这种方法的概述,如果您查看关于这个问题的其他答案,也会讨论如何编写解决方案的代码

在您的例子中,简单的方法是编写一个从0000到9999迭代的函数。这些都是可能的答案。但是,当您遍历这些数字时,您希望删除(1)所有具有重复数字的数字和(2)所有与目前猜测不一致的数字。任何其他数字都可以放入存储潜在答案的数组或列表中。根据这些剩余的数字,您可以猜测任何数字,然后继续此过程

一种更复杂的方法是使用类似于ID3的算法进行下一次猜测,以试图找到能够最大限度地从响应中获得信息的猜测。但是,考虑到你从每次猜测中获得的信息量,这不太可能是必要的

相关问题 更多 >