我刚刚意识到我几年前编写的算法中犯了一个错误。
在这个流程中,我没有使用 r < p,而是检查了 p <= r。老实说,我现在还无法确定这是否是一个重大的错误。
delta = old state - new stateP = exp(delta / T) * 100if(delta > 0 or P <= random(100)){ accept(new state)}
回答:
随着温度的升高,P
的值会越来越小。当你检查r < p
时,搜索从当前状态切换到更差的新状态的可能性会变得越来越小。这就是模拟退火的核心思想。
你检查的是p <= r
,这使得搜索在最后阶段更有可能切换到更差的状态,而在开始阶段则不太可能。我认为这样做会导致结果非常混乱,因为你先进行了开发(exploitation),然后才进行探索(exploration)。