Algorithm n位主脑变异算法

Algorithm n位主脑变异算法,algorithm,probability,Algorithm,Probability,几天前,我在大学举办的比赛中遇到了这样一个问题: 考虑到智囊团游戏中使用数字进行猜测的历史 以成对(x,y)的形式表示颜色,其中x表示猜测,y表示如何猜测 许多数字的位置正确,请猜正确的数字。每个 输入保证有一个解决方案 5位游戏示例: (90342,2) (70794,0) (39458,2) (34109,1) (51545,2) (12531,1) 应产生: 39542 创建一个算法以正确猜测n位的结果 有史以来的主谋 因此,我唯一的想法是,根据给定猜测中的正确快照,保持每个数字正确的概率

几天前,我在大学举办的比赛中遇到了这样一个问题:

考虑到智囊团游戏中使用数字进行猜测的历史 以成对(x,y)的形式表示颜色,其中x表示猜测,y表示如何猜测 许多数字的位置正确,请猜正确的数字。每个 输入保证有一个解决方案

5位游戏示例:

(90342,2)
(70794,0)
(39458,2)
(34109,1)
(51545,2)
(12531,1)

应产生:

39542

创建一个算法以正确猜测n位的结果 有史以来的主谋

因此,我唯一的想法是,根据给定猜测中的正确快照,保持每个数字正确的概率,然后尝试生成最可能的数字,然后生成下一个数字,依此类推-例如,我们第一个位置的9是40%可能(因为第一个猜测有2/5=40%正确),7是不可能的,依此类推。然后我们对数字中的其他地方做同样的操作,最后生成一个概率最高的数字,以测试所有猜测

然而,这种方法的问题是,生成下一个可能的数字,下一个,等等(因为我们可能不会在第一次尝试中获得一个本垒打)是非常重要的(或者至少我看不到一个简单的实现方法),因为这场比赛有90分钟的时间,这不是唯一的问题,我不认为如此复杂的事情是预期的方法


那么,如何才能更容易地做到这一点呢

概率在这里不适用。在这种情况下,数字不是对就是错。没有“部分正确”

对于5位数字,您可以根据给定的历史记录测试所有100000个可能的数字,并抛出匹配不正确的数字。这种方法在某些情况下对于较大的数字变得不切实际。您将得到一个符合条件的数字列表。如果列表中只有一个,那么您已经解决了它

python代码,其中
匹配
计算其2个参数的匹配位数:

for k in range(0,100000):
    if matches(k,90342)==2 and matches(k,70794)==0 and matches(k,39458)==2 and matches(k,34109)==1 and matches(k,51545)==2 and matches(k,12531):
        print k
印刷品:

39542

我想到的一种方法是编写一个例程,该例程通常可以根据特定的尝试及其分数过滤组合枚举

因此,对于您的示例,您首先会选择一个最受约束的尝试(分数为2的尝试之一)作为筛选器,然后枚举满足它的所有组合

然后,该枚举的输出将用作下一次未处理尝试的筛选器运行的输入,依此类推,直到尝试列表用尽为止


从最终枚举中得出的候选尝试就是解决方案。

听起来您可以使用约束编程工具来实现这一点。