模拟退火中的概率计算和比较

Probability calculation and comparison in Simulated Annealing

我刚刚意识到我在几年前写的算法中犯了一个错误。

https://www.researchgate.net/publication/298209081/figure/fig7/AS:341632911200275@1458463041655/Flowchart-of-simulated-annealing-algorithm.png

在此流程中,我没有检查 r < p,而是检查 p <= r。老实说,我无法集中精力决定这是否是一个巨大的错误。

delta = old state - new state
P = exp(delta / T) * 100
if(delta > 0 or P <= random(100))
{
 accept(new state)
}

P随着温度的升高越来越小。当您检查 r < p 时,它变得 越来越不可能 您的搜索将从当前状态切换到更糟糕的新状态。这就是模拟退火的思想。

您检查 p <= r,这使得您的搜索 越来越有可能结束,不太可能在开始。我假设你会得到非常复杂的结果,因为你先进行开发,然后再进行探索。