Skip to content

Commit 39c2530

Browse files
committed
焼きなまし法の記事を追加
1 parent cd729ef commit 39c2530

File tree

2 files changed

+58
-5
lines changed

2 files changed

+58
-5
lines changed

_algorithms/simulated-annealing.md

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,66 @@ changelog:
77
date: 2021-02-28T00:00:00+09:00
88
tags: algorithm
99
algorithm:
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 記事。

_sass/user-colors.scss

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@
2222
.user-noshi91 { color: $rating-color-red; }
2323
.user-potetisensei { color: $rating-color-orange; }
2424
.user-rsk0315 { color: $rating-color-yellow; }
25+
.user-shindannin { color: $rating-color-blue; }
2526
.user-sigma425 { color: $rating-color-red; }
2627
.user-sky58 { color: $rating-color-red; }
2728
.user-snuke { color: $rating-color-red; }
2829
.user-tempura0224 { color: $rating-color-red; }
2930
.user-tmaehara { color: $rating-color-black; }
31+
.user-tsukammo { color: $rating-color-brown; }
3032
.user-udon1206 { color: $rating-color-blue; }
3133
.user-uwi { color: $rating-color-red; }
3234
.user-yosupo { color: $rating-color-red; }

0 commit comments

Comments
 (0)