数独模拟退火

时间:2014-01-19 18:18:03

标签: java algorithm artificial-intelligence sudoku

模拟退火是一种生成和解决数独问题的好算法吗?为什么或者为什么不?

我实现了一个带有回溯的数独游戏,但现在我想用Java中的本地搜索算法来实现。但是,我不知道从哪里开始。我可以使用任何可用的库吗?

2 个答案:

答案 0 :(得分:3)

数独是面包屑的问题导致最佳解决方案(即使在最困难的情况下)。我的意思是,约束限制了搜索空间的组合爆炸不是太大(当然相对而言):进展的方式很明确。这些问题的其他例子是爱因斯坦/斑马拼图,SendMoreMoney拼图和n-queens。那些是完美的回溯案例。虽然模拟退火对那些有用,但它不是正确的工具(回溯是)。另一方面,模拟退火(和其他元启发式)在实际问题上表现优异,例如课程时间表,员工排班,vrp,......

您可以使用的可用库是OptaPlanner(Java,开源):2年前Someone已经为它编写了一个Sudoku solver,用于旧版本的OptaPlanner(然后它仍被称为Drools Planner)。默认情况下,它看起来像configured Tabu搜索,但是将其切换为Simulated Annealing是一个2行更改。

答案 1 :(得分:1)

回答关于simulating annealing算法的第一个问题,

模拟退火的优点+缺点

  • 好:快速找到最低

  • 错误:可能找不到全局最低值(最佳解决方案)

  • 温度升高使得速度变慢,但我们不太可能陷入局部最低限度

来源:cs.mercer.edu

至于你在Java中解决算法的第二个问题,see here了解完整的源代码。希望这可以帮助!