@@ -7,15 +7,66 @@ changelog:
77 date : 2021-02-28T00:00:00+09:00
88tags : algorithm
99algorithm :
10- input :
11- output :
10+ input : |
11+ 有向グラフ $G = (V, E)$ と頂点に対する評価関数 $\varphi : V \to \mathbb{R}$ と初期解 $x_0 \in V$ と終了時刻 $t_e$ と採択確率関数 $p : \mathbb{R} _ {\gt 0} \times \lbrack 0, 1 \rbrack \to \lbrack 0, 1 \rbrack$
12+ output : 解 $x \in V$
1213 time_complexity :
1314 space_complexity :
1415 aliases : []
1516 level : yellow
16- description : 焼きなまし法はグラフ探索アルゴリズムのひとつである。山登り法を改良したものであり、評価値が悪化する場合であっても、評価値の変化量と実行開始からの経過時刻などの関数として定まる確率に従ってランダムにそのような遷移を行う。これには局所最適解から抜け出す効果がある。ビームサーチと並んで、ヒューリスティックコンテストで頻繁に利用されるアルゴリズムである。
17- draft : true
18- draft_urls : ["https://shindannin.hatenadiary.com/entry/2021/03/06/115415", "https://qiita.com/tsukammo/items/b410f3202372fe87c919"]
17+ description : 焼きなまし法はグラフ探索アルゴリズムのひとつである。山登り法を改良したものであり、評価値が悪化する場合であっても、評価値の変化量と実行開始からの経過時刻などの関数として定まる確率に従ってランダムにそのような遷移を行う。これには局所最適解から抜け出す効果がある。
1918---
2019
2120# 焼きなまし法
21+
22+ ## 概要
23+
24+ 焼きなまし法はグラフ探索アルゴリズムのひとつである。
25+ 山登り法を改良したものであり、評価値が悪化する場合であっても、評価値の変化量と実行開始からの経過時刻などの関数として定まる確率に従ってランダムにそのような遷移を行う。
26+ これには局所最適解から抜け出す効果がある。
27+
28+
29+ ## 詳細
30+
31+ 焼きなまし法は次のような疑似コードで定義される。
32+ ただし採択確率関数 $p$ には定数 $k \in \mathbb{R} _ {\gt 0}$ を使って $p(\Delta, T) = \exp(k \Delta / T)$ と定義されるものを使うことが多い。
33+
34+ ``` plaintext-katex
35+ $\mathtt{SimulatedAnnealing}(G, \varphi, x_0, t_e, p)$
36+ 1. // 入力: 有向グラフ $G = (V, E)$、評価関数$\varphi : V \to \mathbb{R}$、初期解 $x_0 \in V$、終了時刻 $t_e$、採択確率関数 $p : \mathbb{R} _ {\gt 0} \times \lbrack 0, 1 \rbrack \to \lbrack 0, 1 \rbrack$
37+ 2. // 出力: 解 $z \in V$
38+ 3. $t_s \gets t$ (ただし $t$ は現在時刻)
39+ 4. $x \gets x_0$
40+ 5. $z \gets x$
41+ 6. $\mathtt{while}$ 現在時刻 $t$ が $t \lt t_e$:
42+ 7. $T \gets 1 - \frac{t - t_s}{t_e - t_s}$
43+ 8. $(x, y) \in E$ であるような頂点 $y \in V$ をランダムにひとつ選ぶ。
44+ 9. $\varphi(x) \gt \varphi(y)$ のとき、真偽値 $q$ を確率 $p(\varphi(y) - \varphi(x), T)$ で真になるようにランダムに選ぶ。
45+ 7. $\mathtt{if}$ $\varphi(x) \le \varphi(y)$ または $q$ が真:
46+ 8. $x \gets y$
47+ 7. $\mathtt{if}$ $\varphi(z) \lt \varphi(x)$:
48+ 9. $z \gets x$
49+ 10. $\mathtt{return}$ $z$
50+ ```
51+
52+
53+ ## その他
54+
55+ - 焼きなまし法とビームサーチが両方使える問題においては、一般に焼きなまし法の方が良い解を出力することが多い。ただし解空間が広すぎる場合などにはビームサーチの方が良い解を出力することもある。
56+ - 焼きなまし法の初期解には、貪欲法などの他のアルゴリズムから得られた解を利用してもよい。
57+
58+
59+ ## 関連項目
60+
61+ - [ 山登り法] ( /#hill-climbing )
62+ - 山登り法を修正して評価が悪化するような遷移も確率的に行うようにしたものが焼きなまし法である。
63+ - [ ビームサーチ] ( /#beam-search )
64+ - 焼きなまし法はビームサーチと並んでヒューリスティックコンテストで頻繁に利用されるアルゴリズムである。
65+
66+
67+ ## 外部リンク
68+
69+ - [ 焼きなまし法のコツ Ver. 1.3 - じじいのプログラミング] ( https://shindannin.hatenadiary.com/entry/2021/03/06/115415 ) <sup >[ archive.org] ( https://web.archive.org/web/20210313210319/https://shindannin.hatenadiary.com/entry/2021/03/06/115415 ) </sup >
70+ - <a class =" handle " >shindannin</a > によるブログ記事。
71+ - [ 競技プログラミングにおいて焼きなまし法に堕ちずに落とすコツ - Qiita] ( https://qiita.com/tsukammo/items/b410f3202372fe87c919 ) <sup >[ archive.org] ( https://web.archive.org/web/20210305024810/https://qiita.com/tsukammo/items/b410f3202372fe87c919 ) </sup >
72+ - <a class =" handle " >tsukammo</a > による Qiita 記事。
0 commit comments