退火
设当前最优解为 $Q$,当前指针为 $ans$,跳到的新位置为 $now$。
如图,$now$ 与 $ans$ 比是优解,而 $now$ 与 $Q$ 比是劣解。
无论哪种写法,当前方案对应 $ans$ 的方案。
- $now$ 与 $ans$ 比:形如
int del = now - ans;
if(del < 0 || exp(-del / T) * RAND_MAX > rand()) ans = now;
else 把方案恢复原状;
用 ans 更新 Q;
- $now$ 与 $Q$ 比:形如
int del = now - Q;
if(del < 0) Q = now;
else if(exp(-del / T) * RAND_MAX < rand()) 把方案恢复原状;
特别地,如果需要输出方案,更新 Q 的同时更新 Q 对应的方案。