模拟退火是一种生成和解决数独问题的好算法吗?为什么或者为什么不?
我实现了一个带有回溯的数独游戏,但现在我想用Java中的本地搜索算法来实现。但是,我不知道从哪里开始。我可以使用任何可用的库吗?
答案 0 :(得分:3)
数独是面包屑的问题导致最佳解决方案(即使在最困难的情况下)。我的意思是,约束限制了搜索空间的组合爆炸不是太大(当然相对而言):进展的方式很明确。这些问题的其他例子是爱因斯坦/斑马拼图,SendMoreMoney拼图和n-queens。那些是完美的回溯案例。虽然模拟退火对那些有用,但它不是正确的工具(回溯是)。另一方面,模拟退火(和其他元启发式)在实际问题上表现优异,例如课程时间表,员工排班,vrp,......
您可以使用的可用库是OptaPlanner(Java,开源):2年前Someone已经为它编写了一个Sudoku solver,用于旧版本的OptaPlanner(然后它仍被称为Drools Planner)。默认情况下,它看起来像configured Tabu搜索,但是将其切换为Simulated Annealing是一个2行更改。
答案 1 :(得分:1)
回答关于simulating annealing
算法的第一个问题,
好:快速找到最低
错误:可能找不到全局最低值(最佳解决方案)
至于你在Java中解决算法的第二个问题,see here了解完整的源代码。希望这可以帮助!