局所探索によるCSPの解法 (Local search algorithms for solving CSPs)

Slides:



Advertisements
Similar presentations
組合せ最適化輪講 2.3 連結性 川原 純. 2.3 連結性 内容 – グラフ上の節点をすべてたどるアルゴリズム 計算機上でのグラフの表現 – 強連結成分を求めるアルゴリズム トポロジカル順序を求める方法も – k- 連結、 k- 辺連結について – 2- 連結グラフの耳分解について.
Advertisements

©2008 Ikuo Tahara探索 状態空間と探索木 基本的な探索アルゴリズム 横形探索と縦形探索 評価関数を利用した探索アルゴリズム 分岐限定法 山登り法 最良優先探索 A ( A* )アルゴリズム.
木探索によるCSPの解法 (Tree search algorithms for solving CSPs) 認知システム論 制約充足( 2 ) 制約をみたす組合せを探すエージェント バックトラック法 フォワードチェック 動的変数順序.
到着時刻と燃料消費量を同時に最適化する船速・航路計画
3次元nクイーン問題の 解に関する研究 論理工学研究室 伊藤精一
ネットワーク理論講義補助資料 Text. 組合せ最適化とアルゴリズム 4.5 節 主・双対法 pp
データ構造と アルゴリズム 第十二回 知能情報学部 知能情報学科 新田直也.
近似アルゴリズム 第10章 終了時刻最小化スケジューリング
© Yukiko Abe 2014 All rights reserved
5.チューリングマシンと計算.
5.チューリングマシンと計算.
整数計画法を用いた スリザーリンクの解法 杉村 由花 (東京大学)
An Algorithm for Enumerating Maximal Matchings of a Graph
Approximation of k-Set Cover by Semi-Local Optimization
先端論文紹介ゼミ Role-based Context-specific Multiagent Q-learning
Natural Semantics 実行過程の、最初と最後の状態(state)の関係を考える。
データ構造と アルゴリズム 第二回 知能情報学部 新田直也.
9.NP完全問題とNP困難問題.
最尤推定によるロジスティック回帰 対数尤度関数の最大化.
第11講: 平成18年12月 8日 (金) 4限 E352教室 グラフ (1).
(ラプラス変換の復習) 教科書には相当する章はない
5.5 The Linear Arboricity of Graphs (グラフの線形樹化数)
データ構造と アルゴリズム 第十一回 理工学部 情報システム工学科 新田直也.
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
二分探索木によるサーチ.
第7回 条件による繰り返し.
7-3.高度な木 (平衡木) AVL木 平衡2分木。回転操作に基づくバランス回復機構により平衡を保つ。 B木
局所整合と局所探索 (Local Consistency and Local Search)
局所探索によるCSPの解法 (Local search algorithms for solving CSPs)
第6章 連立方程式モデル ー 計量経済学 ー.
制約充足と反復改良 (Constraint Satisfaction and Iterative Improvement)
第25章 単一始点最短路 3節 Bellman-Fordのアルゴリズム
ネットワーク理論 Text. Part 3 pp 最短路問題 pp 最大流問題 pp.85-94
第7回 条件による繰り返し.
6. ラプラス変換.
制約充足問題(つづき) (Constraint Satisfaction Problems)
第3回 アルゴリズムと計算量 2019/2/24.
レジスタの割付け 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第12章5節.
Introduction to Soft Computing (第11回目)
木探索によるCSPの解法 (Tree search algorithms for solving CSPs)
第9回 優先度つき待ち行列,ヒープ,二分探索木
25. Randomized Algorithms
計算量理論輪講 chap5-3 M1 高井唯史.
アルゴリズムとプログラミング (Algorithms and Programming)
連続領域におけるファジィ制約充足問題の 反復改善アルゴリズムによる解法 Solving by heuristic repair Algorithm of the Fuzzy Constraint Satisfaction Problems with Continuous Domains 北海道大学.
ファジィ制約充足問題への 連続領域の導入 Introducing continuous domains to
電機情報工学専門実験 6. 強化学習シミュレーション
プログラミング 4 探索と計算量.
適応的近傍を持つ シミュレーテッドアニーリングの性能
ベイジアンネットワーク概説 Loopy Belief Propagation 茨城大学工学部 佐々木稔
ナップサック問題 クマさん人形をめぐる熱いドラマの結末.
Data Clustering: A Review
情報経済システム論:第13回 担当教員 黒田敏史 2019/5/7 情報経済システム論.
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
第16章 動的計画法 アルゴリズムイントロダクション.
第9回 優先度つき待ち行列,ヒープ,二分探索木
5.チューリングマシンと計算.
2009/11/27 グラフ (1) 第9講: 平成21年11月27日 (金) 4限 E252教室 コンピュータアルゴリズム.
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
平面走査法を使った 一般線分の 交点列挙アルゴリズム
分枝カット法に基づいた線形符号の復号法に関する一考察
4.プッシュダウンオートマトンと 文脈自由文法の等価性
ヒープソート.
コストのついたグラフの探索 分枝限定法 A*アルゴリズム.
参考:大きい要素の処理.
データ構造と アルゴリズムI 第三回 知能情報学部 新田直也.
情報処理Ⅱ 第3回 2004年10月19日(火).
グラフの帯域幅連続多重彩色 を求めるアルゴリズム (Bandwidth Consective Multicolorings of Graphs) 西関研究室 西川和秀.
アルゴリズム ~すべてのプログラムの基礎~.
プログラミング論 バイナリーサーチ 1.
Presentation transcript:

局所探索によるCSPの解法 (Local search algorithms for solving CSPs) 認知システム論 制約充足(3) 制約をみたす組合せを探すエージェント 局所探索によるCSPの解法 (Local search algorithms for solving CSPs)  局所整合アルゴリズム  局所探索アルゴリズム  制約充足問題(CSP)は,一般には,NP完全問題なので,それを解くアルゴリズムは多くの計算量を必要とする.その計算量は,「すべての制約」を大域的に満たすために必要となるものである.今回は,これを軽減するための方法として,「大域的」(global)というキーワードの反対の意味をもつ「局所的」(local)というキーワードで表される2つのアルゴリズムを学ぶ.それらは,制約を局所的(local)に満たす「局所整合アルゴリズム」,および制約の満たし具合の評価値を局所的に改善する「局所探索アルゴリズム」である.これらのアルゴリズムは,制約を一部しか満たさないとか,大域的な解を見つけられる保障がないという点で問題解決能力は弱いけれども,バックトラックをあまりしないか,または,全くしない点で効率的なときが多く,難しい問題の大域的な解を見つけるための補助として利用価値がある.また,実用上,すべての制約を満たす最も良い解(大域的最適解)でなくてもよいときは,準最適解(局所的最適解,小さな修正ではそれ以上の改良ができない解)を見つけるのに役に立つことが多いのである.

制約充足問題(CSP)とは(復習) x1 x2 … xn D1 D2 … Dn Cxy ={(a,b), (c,d),…} 変数(variable)の集合 X  各変数の領域(domain) D 変数間の制約(constraint)の集合 C D1 D2 … Dn Cxy ={(a,b), (c,d),…} 変数 x-y 間で許される値の組 解 (復習)  制約充足問題(CSP)は,変数の集合,各変数の領域,変数間の制約の集合を具体的に示すことにより定義される.CSPの解は,すべての制約を満たすような変数への値の割当てである. すべての制約を満たすような変数への値の割当て x1=a1 x2=a2 … xn=an

局所的に制約違反を修復し,バックトラックをしない 局所整合と局所探索 制約をすべて(大域的に)満たすのは困難 global 局所的に満たしながら大域に拡大する local  局所整合アルゴリズム local consistency 局所的にバックトラック不要になるように,不適切な値を事前に削除 backtrack-free  局所探索アルゴリズム  一般に,制約をすべて(大域的に)満たすのは計算量的に困難(NP困難:最悪のケースは指数オーダーの計算時間となる)なので,何らかの意味で局所的に制約を満たしながら,それを大域的に拡大する方法をとる.  その方法は,基本的につぎの2つに大別できる.  局所整合(local consistency)アルゴリズムは,制約グラフの局所的な制約違反を事前に解消するために,変数の領域から明らかに不適切な値を削除して,局所的にバックトラック不要(backtrack-free)になるように問題を変換する.また,この処理は「事前」ばかりではなく,探索過程の最中にはさみ込むこともできる.  局所探索(local search)アルゴリズムは,最初に適当な方法で(例えばランダムに)すべての変数に値を割り当てる.ほとんどの場合,それが偶然に解となることはないが,制約違反の局所的な修復(repair)を反復し,バックトラックを(する必要があっても)しないで,すべての制約を満たすことを目指す.この反復は終了する理論的な保証がないので,解があってもそれを発見する保証(完全性)は失われる.しかし,たとえ理論的には完全性があっても,実用的な時間内で解を発見できないような非常に難しい問題において,(いちかばちか)実用的な時間内で解を発見する可能性を追求する.また,適切なヒューリスティクスを用いて,実用的な時間内で解を発見できる可能性を高めることができる.応用上,最適解を求めなくても良いときは,準最適解を比較的容易に求められることが多い. local search 局所的に制約違反を修復し,バックトラックをしない repair

局所整合アルゴリズム (Local Consistency Algorithms) 1. アーク整合 arc consistency 2. 制約伝播 constraint propagation

準備:制約ネットワークと制約グラフ x y z x z y constraint network constraint graph 1 x y z 許された値の組を辺で結ぶ 制約ネットワーク x z y 制約のある変数ノードを辺で結ぶ 制約グラフ  X,D,Cからなる制約充足問題(CSP)をこのスライドの左側のような図で表現した場合に,それを制約ネットワーク(constraint network)と呼ぶことにしよう.すなわち,各変数の取りうる値をグラフのノードとし,変数はその領域の要素全体を包含するスーパーノードとして表現する.さらに,制約によって,同時に値を取ることが許されている要素どうしはグラフの辺で結ぶこととする.  制約グラフ(constraint graph)とは,スライドの右側の図のように,変数をノードとし,制約のある変数ノードを辺で結ぶことによって得られるグラフである.制約ネットワークよりも大まかにCSP全体の構造を把握するのに役立つ.

1.アーク整合 (1/3) y x Dy Dx x=c は y にサポートをもたない arc consistency ■ 値 x=a は y にサポートをもつ support y x x=a のサポート a c a' Dy Dx  変数 x,y 間に制約 Cxy があるものとする.x への値の割当て x=a に対して,y=b が整合する(この組合せが許される,すなわち,(a,b)∈Cxy)とき,y=b を「y における x=a のサポート」と呼ぶ.そのような y=b が y の領域 Dy に存在するとき,「値 x=a は y にサポートをもつ」という.  このスライドの状況では,値 x=a および x=a' は y にサポートをもつ.  しかし, x=c は y にサポートをもたないので,x=c がCSPの解に含まれることはあり得ない.yの値が何であっても制約違反となるからである.したがって,x=c を x の領域 Dx から削除してよい.その処理を行うのが,アーク整合アルゴリズムである. x=c は y にサポートをもたない (アーク整合アルゴリズム) Dx から値c を削除

アーク整合 (2/3) y x Dx Dy ■ アーク (x, y) はアーク整合 している =xのすべての値が y にサポートをもつ a arc consistent =xのすべての値が y にサポートをもつ y x a  (x, y) が制約グラフのアーク(有向辺)であるとする.  x の領域に含まれるすべての 値が y にサポートをもつとき,「アーク (x, y)はアーク整合 している」という.  アークには向きがあるので,アーク (x, y)がアーク整合 していることと,その逆向きのアーク(y, x)がアーク整合していることは別である.このスライドの状況では, (x, y)はアーク整合 しているが, (y, x) はアーク整合 していない. Dx Dy (y, x) はアーク整合 していない

アーク整合 (3/3) y x z =すべてのアーク(x, y) がアーク整合 している ■ 制約ネットワーク はアーク整合 している =すべてのアーク(x, y) がアーク整合 している ■ アーク整合アルゴリズム =アーク整合 していない制約ネットワークから   最小限の要素を削除してアーク整合させる.   空の領域が生じたら,CSPには解がない. x y z グラフ彩色(2色) バックトラックなしで, 局所的な(長さ2の)部分解を求められる. アーク整合 していても解がないことがある  さきほど学んだ「アーク整合する」の主語は「アーク」だったが,こんどは,主語が「制約ネットワーク」のときにも使える言葉として定義する.  すべてのアーク(x, y) がアーク整合しているとき,「制約ネットワーク はアーク整合 している」という.アークには向きがあるので,制約グラフのそれぞれの無向辺 (x, y) ごとに,(x, y) と (y, x) の両方のアークを考える必要があることに注意しよう.  アーク整合アルゴリズム は,アーク整合していない制約ネットワークから最小限の要素を削除してアーク整合させる.その結果,空の領域が生じたら,CSPには解がないことがわかる.すなわち,  - アーク整合の結果,空の領域が生じたら,そのCSPには解がない.  - 解があるCSPでは,アーク整合の結果,空の領域が生じることはない.  この命題の逆,すなわち,  - アーク整合の結果,空の領域が生じなければ,そのCSPには解がある.  - 解がないCSPでは,アーク整合の結果,必ず空の領域が生じる. は,一般に成り立たない.CSPに解がなくても,空の領域が生じないことがあるからである.このスライドの2色のグラフ彩色問題はそのような例である.この問題には解が存在しないにもかかわらず,最初の状態ですでにアーク整合していて,空の領域が生じていない.  この例では,制約グラフに閉路が含まれていることに注意しよう.閉路が含まれていないときには,いま述べた「逆」が成り立つことを後に説明する. 制約グラフが閉路を含むとき

2.制約伝播 constraint propagation X1 X2 X X X3 X4 X X X X X5 X6 ① ③ ② アーク整合アルゴリズムの動作例 X X ④ ⑤  このスライドは,アーク整合アルゴリズムの動作例をアニメーションで示している.  最初は,X6の1つの要素だけがサポートをもっていないので,それを削除する.また,削除した要素とともに,それに接続されているアークも削除する.その結果,X3とX5のそれぞれ1つずつの要素がサポートを持たなくなるので,その2つの要素およびそれに接続するアークを削除する.  このように,ある変数の領域から要素を1つ削除したことの影響が,次々と隣接ノードに伝わっていき,多数の要素が削除されていく様子が見て取れる.これを制約伝播(constraint propagation,せいやくでんぱ)という. ⑦ X X X5 X6 ⑥

アーク(x, y)の整合アルゴリズム REVISE boolean REVISE(x, y) { changed ← false; for each a in Dx { if (x=a が y にサポートをもたない) { Dx から a を除去する. changed ← true; } } return changed; } 値を1つでも除去したら true a x y Dx Dy  アーク(x, y)の整合アルゴリズムは,ここに示したとおりである.このアルゴリズム REVISE は,アーク (x, y)が与えられたとき,それがアーク整合するように,必要に応じて x の領域Dx から値を削除する.戻り値は,値を1つでも除去したら true,1つも削除しなければ false である.  手続きは,すでに学んだアーク整合の定義のとおりである.各 x=a について, x=a が y にサポートをもつかどうかを,yの領域Dy内の値を走査することによって判定し,サポートをもたなければ x=a を領域Dxから除去する.サポートをもてば,単にその x=a をスキップし,Dx内の別な値をxの値としてループを継続する.  このアルゴリズムの計算量を考察しよう.ここでは,制約チェックの実行回数によって時間計算量を評価する.領域 Dx, Dy のサイズ(要素数)が高々 d だとしよう.たとえば,3色によるグラフ彩色問題では,色の数が3なので d=3 である.  if 文の条件部でx=a が y にサポートをもつかどうかの判定には O(d) 回の制約チェックが必要である.そして,この if 文はforループにより O(d) 回実行されるので,制約チェックの総回数はO(d2) (dの2乗のオーダー)となる. 計算量(制約チェック回数) d は領域Dx,Dyの要素数の最大値

Qは First-In First-Out のキュー(待ち行列) アーク整合アルゴリズム AC-3 AC-3(CSP G) { Q ← Gのすべての有向アークの集合. while ( Q が空でない ) { Qから先頭のアークを取り出し, (x, y) とする. if ( REVISE(x,y) ) for each z in (y を除く xの隣接ノードのすべて){ Qの末尾にアーク (z,x) を追加する.     } } } Qは First-In First-Out のキュー(待ち行列) (x, y) の整合の結果,x の領域から要素が削除されたら  x へ向かうすべての有向アーク (z, x) (ただし,z≠y)をQに追加する. z x y  単純なアーク整合アルゴリズムとしてAC-1というものがあり,参考までにこのスライドの最後に付録として付けてあるが,それは効率が悪い.これから説明するAC-3 は,AC-1 の改良版である.AC-3は,整合性をチェックしたいアーク(向きがあるので,それぞれの向きごとに1つ)を待ち行列Qに保持する.最初は全アークをQに保持する.メインループでは,Qからアーク (x, y) を取り出し,REVISE(x, y) でアーク整合させる.もし,x の領域に変化がなければ,スキップ.  もし,x の領域から値が削除されたなら,その影響を受ける可能性のあるすべてのアーク (z, x) をQに追加する.なぜなら,xの領域から値が削除されたことで,変数zのどれかの値がxにサポートを持たなくなった可能性があるので,アーク (z, x) の整合性を再チェックする必要が生じるからである.このように,整合性をチェックする必要性のあるアークのみがQに保持され,順々に取り出されてチェックされる.  制約チェックの回数によってAC-3の時間計算量を評価する.このアルゴリズムで制約チェックが行われるのは,REVISE(x, y) の実行の中だけである.その計算量はO(d2) なので,REVISEが最大で何回実行されるかを求めて,両者の掛け算をすればよい.REVISEの実行回数は,その直前にQからアークを取り出す回数と一致する.アルゴリズムが終了するときにはQは空なので,その回数はQにアークを追加する回数と一致する.これを求めよう.まず,初期設定のときに,Qに 2e 本のアークを追加している.(アークは向きが2通りあるので制約グラフのアーク数eの2倍.)つぎに,特定のアーク (z, x) について考えると,これがQに追加されるのは高々 d 回である.なぜなら,x の領域(要素数は高々 d)から値を1個削除するときに限って追加されるからである.これは他の2e本のすべてのアークについても当てはまる.以上から,Qに追加されるアーク数は,高々 2e+d・2e = O(de) となる.したがって,制約チェックの総数は,O(d2)*O(de) = O(d3 e) となる.d が定数のときには,アーク数に比例した線形時間で制約ネットワーク全体のアーク整合が完了することになる. 計算量(制約チェック回数) X X d は領域の要素数の最大値 e は制約グラフのアーク数 高々 d 回Qに追加

アーク整合の利用法 前処理 バックトラック法で,変数の値を選択したときに, フォワードチェックのかわりに使う x y z X X X X この例では,z の2つの値を削除して,失敗を早期に検知できる X X X X 制約グラフが木のときに, バックトラックなしで解を求める backtrack-free  CSPは一般にNP完全問題であるため,それを解くアルゴリズムの計算量は最悪で指数オーダーである.したがって,多項式オーダー(dが一定のときは線形オーダー)で処理の済むアーク整合アルゴリズムAC-3は,効率を改善するための補助手段として手軽である.その使い方にはつぎのようなものがある.  ●いかなる制約充足アルゴリズムを使うにしても,アーク整合をその前処理に使うのが得策である.この処理だけで空の領域が生じて「解なし」と判定できることもある.空の領域が生じなかったときでも,不要な要素を事前に削除できるので,探索木の大きさを抑制できる.  ●バックトラック法で,変数の値を選択したときに,フォワードチェックのかわりに使うこともできる.このスライドは,xの値を選択したときに,他のxの値を領域から削除し,その直後にアーク整合を実行した様子である.x-z間に直接の制約はないので,フォワードチェックだと,yの要素は削除できるがzの要素は削除できない.しかし,アーク整合を使うと,zの値をすべて削除することができるので,xの値の選択が間違いであることがすぐにわかる.  ●特別な場合として,制約グラフが木(閉路をもたないグラフ)のときには,アーク整合を単独で用いて解が求められる場合がある.アーク整合の後に空の領域が生じていなければ,任意の変数を1つ選び,その領域から任意の値を1つ選ぶ.この変数を根とする木を作る感じで,選択された値のサポートを次々とたどっていけば,アーク整合の定義により,バックトラックなし(backtrack-free)で,O(de)の時間ですべての変数の値を制約違反なしで決定することができる.したがって,AC-3による前処理の時間O(d3e)の方が支配的であるから,制約グラフが木であるCSPは多項式時間(dが一定のときは線形時間)で解けることがわかる. 制約グラフが木であるCSPは 多項式時間 で解くことができる

局所探索アルゴリズム (Local Search Algorithms) 1. 山登り法 hill climbing 2. 制約違反最小化 min-conflicts 3. 焼きなまし法 simulated annealing

反復改良の考え方 iterative improvement Q Q すべての変数に (ランダムに) 初期値を設定 改良をくりかえす (後戻りはしない) Q  局所探索(local search)アルゴリズムに共通した考え方は,反復改良(iterative improvement)である.バックトラック法のように変数への割当てが部分的にしか決まっていない状態を考えるのではなく,制約違反があってもよいから,すべての変数に値を割り当て,その後,それを反復的に改良しながら,制約違反を減少させるのである.ただし,変数への値の変更が「改良」になっているかどうかを判断するために,事前に,適切な評価関数を用意しておくことが必要である.たとえば,「制約違反の数」を評価値とし,この値が少ないほど良いとする.  ふつうは,初期状態として,すべての変数にランダムな初期値を設定する.  それを反復的に改良していくプロセスが局所探索アルゴリズムである.改良は局所的に行われ,通常は,1つの変数の値だけを変更するような局所性が要求される.  また,いまおこなった局所的な変更を後に取り消すようなバックトラックを行わない.そのため,特別なメカニズムを用意しない限りは,基本的に,反復改良アルゴリズムには完全性はない.すなわち,解が存在しても,それを見つける保証はない.また,解がない場合でも,解がないことを判定できない.こうして,限りなく反復が継続するか,または,それ以上の局所的な改良ができない状態で止まることになる.  しかし,非常に難しい問題で,かつ,必ず解が存在するような問題では,バックトラック法やそれを多少改善したものよりも効率よく解が求められることがある. 一般には 完全性がない

z y x 評価関数 z=f(x,y) の山を登る 最適解 最適化問題 optimum 局所最適解 escape local optimum 局所最適解からの 脱出 optimum 局所最適解 z escape local optimum y  反復的に「改良」するということは,数学的には,現在の状態(仮に (x, y) とする)の良さを表す評価関数 z =f(x, y) が与えられており,(x, y) を少しずつ変更しながら,z の最大値(最適解:optimum)を探す問題となる.  このような問題は一般に最適化問題(optimization problem)と呼ばれている.  このような問題を解くときの難しさは,局所最適解(local optimum)の存在である.これは最大値ではない,いわゆる,「極大値」のことで,局所的なピークを形成しているものである.局所最適解の周辺では , (x, y)を少し改善したくらいでは,zの値を現在より大きくすることはできない.したがって,評価関数の値を改良することが難しい状態になっている.  局所最適解からいかに脱出(escape)するかが,アルゴリズム設計のポイントとなる. x 最適化問題 optimization problem

1. 山登り法 hill climbing 近傍の状態のうち評価値が最大の状態に進む. 決して下り坂を降りない. 近傍 neighborhood  局所探索アルゴリズムのうちで最も簡単な山登り法(hill climbing)は,(何らかの意味での)「近傍」の状態のうち評価値が最大の状態に進む.そして,決して下り坂を降りることはしない.「近傍」とは,たとえば,現在の状態から,変数の値を1つだけ変更することによって遷移することのできる遷移先の状態の集合のことである.実際には,問題やアルゴリズムに応じて,「近傍」の定義を変えることができる.

山登り法の欠点 plateau 局所最適解で停止する. 対策:ランダムな初期状態から再出発する ( random restart) など. それにもかかわらず 有効なことがある 山登り法の欠点 高原 plateau 局所最適 局所最適解で停止する.  対策:ランダムな初期状態から再出発する      ( random restart) など. 高原では進むべき方向を判断できない.  山登り法には,局所最適解で停止したり,評価値が一定の「高原」(plateau)と呼ばれる広い範囲においては進むべき方向を判断できないというような欠点がある.  しかし,それにもかかわらず,初期値をランダムに設定しながら何度も繰り返して山登り法を実行するランダム再出発(random restart)などと組み合わせて,非常に難しい問題の解を求められることがある.

山登り法により制約違反を反復的に改善する 2. ヒューリスティック修復法 heuristic repair 山登り法により制約違反を反復的に改善する 許される値の組 現在の状態  ヒューリスティック修復法(heuristic repair)は,山登り法の一般的な考え方を制約充足問題に適用したもので,ただ1つの変数の値を変更することにより制約違反を反復的に改善する.このスライドの例では,4つの変数の値のうち,1つだけを変更している.

制約違反最小化ヒューリスティック min-conflicts 制約違反=2 制約違反=2 制約違反=1 これを 選ぶ 変数は,ランダムに選ぶ. 値は,制約違反の数が最小のものを選ぶ.  では,どの変数の値をどれに変更すれば良いのだろうか? ヒューリスティック修復法で良く用いられるのが,制約違反最小化ヒューリスティック(min-conflicts)である.この方法は,まず変数を1つランダムに選ぶ.(仮にそれを x としよう.)そして,現在の x の値を,制約違反の数が最小となるように変更する.すなわち,x の領域に含まれる各値 v ごとに,現在の値をその値 v に変更したときに解消される制約違反の数をA(v),新たに生じる制約違反の数をB(v)とすると,B(v)-A(v) が最小となるような v を選び,その値に変更する.

Simulated Annealing (SA) 3. 焼きなまし法 Simulated Annealing (SA) 近傍の状態から次の状態をランダムに選ぶ. エネルギが減少するなら,必ずそこに進む. エネルギが増加するなら,温度に応じた確率でそこに進む. 最小化すべき関数をエネルギと呼ぶ エネルギ 局所解を ある確率で脱出できる  焼きなまし法(simulated annealing)は,金属分子の分子運動のような物理学のモデルからの類推によって設計されたアルゴリズムである.鋼などの固い金属を作るために,金属が溶解している状態から徐々に温度を冷やして固化させていく「焼きなまし」(annealing)という技術がある.それのシミュレーションから発想されたアルゴリズムなので,simulated annealing (SA) と呼ばれている.  焼きなまし法の慣例では,評価関数による評価値は「エネルギ」と呼ばれ,これを最小化する最適化問題になっている.  山登り法との違いは,まず,近傍の状態から1つをランダムに選ぶことである.  さらに,選んだ状態へ進むかどうかは,現在の状態とのエネルギ差に依存する.  エネルギが減少するときには,必ずそこに進む.これは山登り法の考え方に通じている.  特徴的なのは,このアルゴリズムは温度と呼ばれるパラメータを持っており,次状態でエネルギが増加するなら,温度に応じた確率でそこに進むことである.これによって,局所最適解でストップすることなく,そこから脱出する可能性を生じさせている. 局所最適解 最適解

熱的なノイズによるランダムな揺れの表現 確率= 温度 ΔE 確率 大 エネルギ 増加分ΔE 小 温度 T 大 エネルギ 確率=1   ΔE>0のときには,物理学(熱力学)で知られている結果からの類推で定義された確率 exp(-ΔE/T)でその状態に進む.その状態に進まないときには,再度近傍から状態を選び直す.  ここで, exp(-ΔE/T)という式は,自然対数の底 e=2.71... の-ΔE/T乗という意味だが,べき乗の底がeであることは重要ではなく,かわりに2を用いてもよい.  この遷移確率は,エネルギ差ΔEが小さいほど大きい.したがって,エネルギが少し増える程度の状態遷移は結構起こることになる.  また,遷移確率は,温度Tが大きいほど大きい.それは物理学では,温度が高いほど粒子の運動エネルギが大きく,活発に運動しており,運動エネルギーが多少減少することによって位置エネルギーが増加する方向に飛び跳ねる確率が高くなるからである. 温度はじょじょに 下げていく

k T = schedule (k), k=1,2,… 冷却スケジュール:徐々に冷やしていく 線形冷却 指数冷却 T 対数冷却  そこで,計算の初期段階では温度を高くしておくことによって広い範囲の探索を行い,その後,時間とともに温度を徐々に低くしていくことによって探索の収束をはかるような制御がなされる.その具体的な方法を冷却スケジュールとしい,代表的にはこのスライドで示したような線形冷却,指数冷却,対数冷却などがある.この図では,時刻を自然数で表現し,時刻 k における温度をTkで表している.実用上,よく使われるのは指数冷却である. k

温度T を十分ゆっくり下げるならば,確率1で大域的最適解を見つける. 焼きなまし法の最適性 温度T を十分ゆっくり下げるならば,確率1で大域的最適解を見つける. 対数冷却 Tk=c/log(k+1) はこの条件を満たすが,収束時間はO(n!)より長い. 現実的には  驚くべきことに,ある条件のもとで,焼きなまし法には最適性がある.つまり,大域的な最適解があれば,必ず(確率1で)それを見つけることができる.  その条件は,温度T を十分ゆっくり下げるということである.これは「十分」という言葉を含むので数学的にややあいまいな表現だが,前のスライドで示した対数冷却はそのような条件を満たすことが知られている.  しかし,残念なことに,対数冷却は温度が十分に下がるまでの収束時間は指数関数的に長いものであり,実用的ではない.つまり,いつかは最適解に収束するのだが,それまでの時間が長すぎて,待ちきれないことが多い.ふつうは,指数冷却の範囲でなるべくゆっくり冷却し,最適性をあきらめて,実用的な時間内で準最適解を得ることで妥協する. 温度は適度にゆっくり 下げていく

1か所だけ変化しても,全アークをスキャンしなおすので効率が悪い 付録:アーク整合アルゴリズム AC-1 AC-1(CSP G) { Q ← Gのすべての有向アークの集合. do { changed ← false; for each (x, y) in Q if ( REVISE(x, y) ) changed ← true; } while ( changed ); } 全アークをそれぞれ整合  AC-1は最も素朴なアーク整合アルゴリズムである.  このアルゴリズムは,与えられた制約ネットワークGの制約グラフに含まれるすべてのアーク (x, y) を走査(スキャン)しながら,REVISE(x, y) によって,各アークをアーク整合させる.すべてのアークを走査したときに,REVISEが毎回 falseを返したら,もう削除できる値がないということなので,このアルゴリズムは終了する.このとき,結果として得られた制約ネットワークは,アーク整合している.  このアルゴリズムが非効率的なのは明らかである.走査のほとんどではアーク (x, y)に変化がなく,終わりの方で1つだけ変化があったとしよう.それでもこのアルゴリズムは,全アークをまた始めから走査しなおすという不必要な動作をしてしまう. 1か所だけ変化しても,全アークをスキャンしなおすので効率が悪い