所以,我已经完成了对数独谜题生成的一些阅读.据我所知,具有所需难度的数独谜题的标准方法是生成谜题,然后对其进行评分,并重复直到您具有可接受的评级之一.这可以通过使用一些更复杂的解决模式(XY翼,箭鱼等)生成回溯来改进,但这不是我想要在这里做的.
我想做的,但一直无法找到任何真正的资源,是从"难度值"生成一个谜题(0-1.0值,0是最简单的,1.0是最难的).
例如,我想创建一个中等难度的谜题,因此选择值.675.现在使用该值我希望能够产生一个中等难度的谜题.
有人知道这样的事吗?或者也许有类似方法的东西?
添加另一个答案,用于即时生成所需难度的数独。
这意味着与其他方法不同,该算法仅运行一次并返回与所需难度匹配的数独配置(在一定范围内的概率较高或概率=1)
生成(和评级)数独难度的各种解决方案都与基于人类的技术和方法有关,可以轻松评级。
然后(在生成数独配置之后)使用类人求解器重新求解数独,并根据求解器使用的技术(例如pairs、x-wing、swordfish等)还分配难度率。
这种方法的问题 (以及我的用例的要求)
为了生成给定难度的数独,使用以前的方法需要求解数独两次(一次使用基本算法,一次使用类人求解器)。
人们必须(预)生成许多数独,只有在类人解算器解决后才能将其评定为难度。因此,人们无法一次性生成所需的数独。
类人求解器可能很复杂,并且在大多数情况下(如果不是全部)与 9x9 数独网格紧密耦合。因此不能简单地推广到其他数独(例如 4x4、16x16、6x6 等)
类人技术的难度等级是非常主观的。例如,为什么X 翼被认为比隐藏单打更难?(个人手动解决了许多困难的已发表的数独难题,但从未使用过此类技术)
使用了另一种方法,该方法具有以下优点:
怎么运行的?
首先,一个简单的事实是,谜题越困难,需要解决的时间就越多。
但要解决的时间与线索(给定)的数量和每个空单元格要研究的平均替代方案密切相关。
扩展我之前的答案,有人提到,对于任何数独谜题,最小线索数是谜题的客观属性(例如,对于 9x9 网格,有效数独的最小线索数是 17)
人们可以从那里开始计算每个难度级别的最小线索数(线性相关)。
此外,在数独生成过程的每一步中,我们都可以确保每个空单元格的平均替代方案(待研究)在给定范围内(作为所需难度的函数)
根据算法是否使用回溯(对于所讨论的用例,算法不回溯),可以以概率 = 1 或在边界内高概率(分别)达到所需的难度。
使用该算法生成的数独和基于先前方法(类人求解器)的难度评级的测试显示了期望难度率和估计难度率的相关性,以及对任意数独配置的更强泛化能力。
该代码可在 github 上免费获得 sudoku.js(以及示例演示应用程序),它是 CrossWord.js 的缩小版,是 JavaScript 中的专业填字游戏生成器,由同一作者编写
它并不像您要求的那么优雅,但您可以通过缓存模拟此行为:
然后,当用户请求某个难度的谜题时,从他们选择的存储桶中为他们提供一个缓存的谜题。您可能还需要考虑交换数字并更改具有已知难度的谜题的方向,以生成具有相同难度级别的类似谜题。然后,当您需要用新拼图重新装满水桶时,请根据需要重复上述操作。
归档时间: |
|
查看次数: |
4449 次 |
最近记录: |