我正在构建一个用Javascript编写的数独游戏 一切正常,每次都可以通过一个解决方案完全生成电路板。
我唯一的问题是,这就是让我无法将项目发布到公众的原因 是我不知道如何评估我的板的难度级别。我一直在寻找, 发布在论坛等等。我不想自己编写算法,这不是重点 项目,左侧和旁边,它们对我来说太复杂了,因为我不是数学家。
我唯一接近的是this website that does grading via JS
但问题是,代码是以一种糟糕的无证,非常特别的方式编写的,因此无法借用...
我会说到这一点 -
任何人都可以请我指出一个提供数独评级/评级源代码的地方吗?
由于
更新22.6.11:
这是我的Sudoku game,我已经实施了自己的评分系统,它依赖于
关于基本的人类逻辑解决技巧,请查看。
答案 0 :(得分:5)
我自己已经考虑过这个问题,我能做的最好的事情就是通过实际解决和分析游戏树来决定解决难题的难度。
最初: 使用“人类规则”实现求解器,而不是人类玩家不太可能使用的算法。 (这本身就是一个有趣的问题。)根据人类使用的难度,对求解器中的每个逻辑规则进行评分。使用数百或更大的值,这样您就可以自由地相对于彼此调整分数。
解决难题。在每个位置:
拼图的整体难度是游戏树路径中各个位置得分的总和。
编辑:替代位置得分:不是使用更难的规则完全排除扣除,而是计算每个规则(或复合应用程序)的总体难度并选择最小值。 (这里的逻辑是,如果规则A得分为50,规则B得分为400,规则A可以应用于一个单元格,但规则B可以应用于十,则位置得分为40,因为玩家更有可能发现十个较难的游戏中的一个比一个更容易的游戏。但这需要你计算所有可能性。)
编辑:Briguy37建议的替代方案:包括位置分数中的所有扣除。将每个排名评为1 / (1/d1 + 1/d2 + ...)
,其中d1
,d2
等是个人扣除额。 (这基本上是在给予个人“扣除抵抗”d1
,d2
等的位置上计算“抵制任何扣除”等等。但这需要你计算所有可能性。)
希望这种评分策略能够为谜题制定一个指标,随着您对难度的主观评估的增加而增加。如果没有,那么调整规则的分数(或从上述选项中选择启发式)可以实现所需的相关性。一旦你在得分和主观经验之间取得了一致的相关性,你就应该能够判断“简单”,“难”等数字阈值应该是多少。然后你就完成了!
答案 1 :(得分:4)
Donald Knuth研究了这个问题,想出了Dancing Links algorithm来解决数独,然后对它们的难度进行评分。
谷歌周围,有几个Dancing Links引擎的实现。
答案 2 :(得分:2)
我有一个简单的求解器,只能在行,列和方块中查找唯一的可能性。当它解决了通过这种方法可解决的几个单元格时,它然后选择剩余的候选者尝试它并查看简单解算器是否导致解决方案或单元格没有可能性。在第一种情况下解决了谜题,在第二种情况下,一种可能性已被证明是不可行的并因此被消除。在第三种情况下,既没有最终解决方案也没有不可行性,没有 可以达到扣除。
循环通过此程序的主要结果是消除可能性,直到采摘 正确的单元格条目会导致解决方案。到目前为止,这个程序已经解决了最困难的问题 谜题没有失败。它解决了多种解决方案的难题。如果 试验候选人随机挑选,它将产生所有可能的解决方案。
然后我根据必须的非法候选人数量产生难题 在简单解算器找到解决方案之前被淘汰。
我知道这就像猜测,但如果简单的逻辑可以消除一个可能的候选人,那么一个 更接近最终解决方案。
麦克
答案 3 :(得分:1)
也许你可以对拼图的一般“约束”进行评分?考虑一个新的谜题(只有提示)可能有一定数量的单元格,可以简单地通过消除它不能包含的值来确定。我们可以说这些细胞被“约束”到比典型细胞更少数量的可能值,并且存在的高度受限的细胞可以在没有猜测的情况下在拼图上进行更多的进展。 (这里我们认为“猜测”的要求是难以解决的问题。)
然而,在某些时候,玩家必须开始猜测,而且,细胞的约束性很重要,因为对于给定的细胞,要选择的值越少,就越容易找到正确的值(并增加约束力)其他细胞)。
当然,我实际上并不玩Sudoku(我只是喜欢为它编写游戏和求解器),所以我不知道这是否是一个有效的指标,只是大声思考=)
答案 4 :(得分:1)
我过去做过这个。
关键是你必须从人类逻辑的角度来确定使用哪些规则。您提供的示例详细介绍了许多不同的人类逻辑模式作为右侧列表。
您实际上需要使用这些规则而不是计算机规则来解决难题(使用简单的模式替换可以在几毫秒内解决它)。每次更换电路板时,您都可以从“最简单”的模式(例如,单元格或行中的单个打开的框)重新开始,然后向下移动直到您找到下一个要使用的逻辑“规则”。
在对sodoku进行评分时,会为每种方法分配一些点值,您可以为需要填写的每个字段添加该值。虽然“单个空单元格”可能会得到0,但“XY链”可能会得到100.您可以将所需的所有方法(和频率)制成表格,然后最终加权。有很多地方列出了这些权重的预期值,但它们都是相当经验的。你正试图模拟人类的逻辑,所以你可以随意提出自己的权重或增强系统(如果你真的只使用XY链,那么这个难题可能比需要更高级的东西更容易机制)。
你也可能会发现即使你有一个独特的sodoku,它也无法通过人类逻辑来解决。
并且还要注意,这比以标准的图案化方式解决它更加耗费CPU。几年前,当我编写我的代码时,它需要多次(我完全忘记,但可能甚至多达15秒)来解决我创建的一些生成的谜题。
答案 5 :(得分:0)
假设难度与用户解决难题所需的时间成正比,这里是人工智能解决方案,随着时间的推移接近理想算法的结果。
使用上述方法,解决方案的评级从0(已经解决/没有时间解决)到1(用户可能会在平均时间内解决这个难题)到2(用户可能需要两倍的时间来解决这个难题比平均时间到无穷大(用户将永远寻找解决这个难题的方法)。