よくある焼きなまし法の擬似コードってこんな感じだと思います。評価値は小さい方が良いとします。
for t in 1, ..., n:
遷移先の評価値 ← 評価関数(遷移先)
if exp((現在の評価値 - 遷移先の評価値) / 温度) ≧ random(0, 1):
現在の状態 ← 遷移先の状態
現在の評価値 ← 遷移先の評価値
ifの中身の式を変形します。log(random(0, 1))は負の値になることに注意してください。
for t in 1, ..., n:
遷移先の評価値 ← 評価関数(遷移先)
if 遷移先の評価値 ≦ 現在の評価値 - 温度 * log(random(0, 1)):
現在の状態 ← 遷移先の状態
現在の評価値 ← 遷移先の評価値
右辺は遷移先に依存しないので先に計算しておきます。
for t in 1, ..., n:
閾値 ← 現在の評価値 - 温度 * log(random(0, 1))
遷移先の評価値 ← 評価関数(遷移先)
if 遷移先の評価値 ≦ 閾値:
現在の状態 ← 遷移先の状態
現在の評価値 ← 遷移先の評価値
この形に書き直すと評価関数より前に閾値を決められるので、評価値が閾値を超えることが分かったタイミングで評価関数を打ち切ることができます。
例:https://atcoder.jp/contests/future-contest-2019-qual/submissions/3600324
以上、焼きなまし法の説明でよく見る exp((e-e')/T) ≧ p って微妙だよね、という話でした。