我搜索过但没有找到答案。
我正在尝试使用Java中实现的模拟退火(SA)算法来解决8皇后谜题(更具体地说是N皇后谜题),但是当涉及到目标函数时,我有点卡住了。我怎么知道我是否接近目标(最佳解决方案)?
我想出了两种尝试“点数”的方法(更好的尝试点数):
合法的董事会中有多少个皇后
合法的董事会中有多少个皇后+下一个女王合法放置的可用点数
但我无法确定这些是否有益。你们能为我提供一些提示或任何其他输入吗? :)
答案 0 :(得分:1)
距离解决方案的距离通常定义为相互攻击的皇后数量。
模拟退火采用的一种方法是随机放置所有皇后,然后选择一个被攻击的随机女王并将其移动到同一列中的随机列行。
而不是试图逐个放置它们。
这不是随机解决方案吗?
没有
我们选择随机移动,但实际发生此移动的可能性取决于移动的程度以及我们与解决方案的距离。
一个好的举动将永远发生,但是,如果这是一个糟糕的举动,实际发生的移动的可能性开始很高,但随着我们接近解决方案而变得越来越低。所以,仍然有可能做出不好的举动,所以它最终会摆脱困境,但总的来说,它主要是试图做出好的举动。
这是simulated annealing背后的基本思想 - 它有一个'温度'的概念(与解决方案的距离有关) - 随着温度的降低(它越接近解决方案),做出不良行动的可能性会降低。
为什么不在接近解决方案时选择最佳动作?
这也有效,只要仍然有可能选择一个不好的举动(虽然我不确定这仍然会被归类为模拟退火,或者这是否会导致一个高效的解决方案 - 分析所有的动作步骤相当昂贵)。
需要有一个不好的举动的机会,因为有时你需要摆脱局部最优,一个只说两个皇后互相攻击,但你不能直接从那里到解决方案 - 和最好的举动的反面将是下一步的最佳举措。
答案 1 :(得分:-1)