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

26
局局局局局局局 局局局 CSP (Local search algorithms for solving CSPs) 局局局局局局局 局局局局 (3) 局局局局局局局局局局局局局局局局局局 局局局局局局局局局局 局局局局局局局局局局

description

認知システム論 制約充足 (3) 制約をみたす組合せを探すエージェント. 局所探索によるCSPの解法 (Local search algorithms for solving CSPs).  局所整合アルゴリズム  局所探索アルゴリズム. 制約充足問題 ( CSP ) とは(復習). x 1 x 2 … x n. 問題. 変数 (variable) の集合  X 各変数の 領域 (domain) D 変数間の 制約 (constraint) の集合  C. D 1 D 2 … D n. C xy ={(a,b), (c,d),…} - PowerPoint PPT Presentation

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

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

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

CSPs)

認知システム論 制約充足 (3)制約をみたす組合せを探すエージェント

 局所整合アルゴリズム

 局所探索アルゴリズム

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

制約充足問題 (CSP) とは(復習)

変数 (variable) の集合  X  各変数の領域 (domain)   D変数間の制約 (constraint) の集合  C

問題

すべての制約を満たすような変数への値の割当て

x1 x2 … xn

D1 D2 … Dn

Cxy ={(a,b), (c,d),…}

変数 x-y 間で許される値の組

x1=a1 x2=a2 … xn=an

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

局所整合と局所探索

 局所探索アルゴリズム

制約をすべて(大域的に)満たすのは困難

局所的に満たしながら大域に拡大するglobal

local 局所整合アルゴリズム

局所的にバックトラック不要になるように,不適切な値を事前に削除

local consistency

backtrack-free

局所的に制約違反を修復し,バックトラックをしない

local search

repair

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

局所整合アルゴリズム(Local Consistency

Algorithms)

2. 制約伝播

1. アーク整合

arc

consistency constraint

propagation

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

準備:制約ネットワークと制約グラフ

{(0,0), (0,1), (1,1)}xyC {(1,0), (1,1)}yzC

x z

y

制約のある変数ノードを辺で結ぶ

制約グラフ

0 1

0 1

0 1

x

y

z

許された値の組を辺で結ぶ

制約ネットワーク

constraint graph

constraint network

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

1.アーク整合 (1/3)arc

consistency

a

a'

x y

DxDy

( , )y xyb D a b C ■ 値 x=a は y にサポートをもつsupport

x=c は y にサポートをもたない

c

Dx から値 c を削除

( アーク整合アルゴリズム )

x=a のサポート

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

アーク整合 (2/3)

a

x y

Dx Dy

■ アーク (x, y) はアーク整合 しているarc

consistent = x のすべての値が y にサポートをもつ

(y, x) はアーク整合 していない

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

アーク整合 (3/3)■ 制約ネットワーク はアーク整合 して

いる=すべてのアーク (x, y) がアーク整合 している

■ アーク整合アルゴリズム =アーク整合 していない制約ネットワークから  最小限の要素を削除してアーク整合させる.  空の領域が生じたら,CSPには解がない.

x

y

z

グラフ彩色(2色)

アーク整合 していても解がないことがある

制約グラフが閉路を含むとき

バックトラックなしで,局所的な(長さ2の)部分解を求めら

れる.

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

アーク整合アルゴリズムの動作例

④ ⑤

X X

constraint

propagation 2.制約伝播

X1 X2

X3 X4

X6X5

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

boolean REVISE(x, y) { changed ← false; for each a in Dx { if (x=a が y にサポートをもたない ) {

Dx から a を除去する. changed ← true; } } return changed;}

アーク (x, y) の整合アルゴリズム REVISE

計算量(制約チェック回数)

d は領域 Dx,Dy の要素数の最大値

2( )O d

値を1つでも除去したら true

ax y

Dx Dy

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

アーク整合アルゴリズム 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に追加する.

x yz 計算量(制約チェック回数)

d は領域の要素数の最大値e は制約グラフのアーク数

2 3( ) ( )O d de O d e

高々 d 回Qに追加

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

アーク整合の利用法前処理バックトラック法で,変数の値を選択したときに,フォワードチェックのかわりに使う

制約グラフが木のときに,バックトラックなしで解を求める

x y z

X XX

backtrack-free

この例では,z の2つの値を削除して,失敗を早期に検知できる

制約グラフが木であるCSPは多項式時間

で解くことができる

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

局所探索アルゴリズム(Local Search Algorithms)

hill climbing

1. 山登り法2. 制約違反最小化3. 焼きなまし法

min-conflicts

simulated annealing

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

反復改良の考え方

Q

Q

Q

Q

すべての変数に(ランダムに)初期値を設定

Q

Q

Q

Q

改良をくりかえす

(後戻りはしない)

Q

Q

Q

Q

iterative improvement

一般には完全性がない

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

評価関数 z=f(x,y) の山を登る

最適解局所最適解

x

y

z

最適化問題

局所最適解からの

脱出

optimization problem

local optimum

optimum escape

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

1. 山登り法

近傍の状態のうち評価値が最大の状態に進む.

決して下り坂を降りない.近傍

neighborhood

hill climbing

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

山登り法の欠点

局所最適

高原

局所最適解で停止する. 対策:ランダムな初期状態から再出発する      ( random restart) など.

高原では進むべき方向を判断できない.

それにもかかわらず有効なことがある

plateau

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

2. ヒューリスティック修復法

現在の状態許される値

の組

山登り法により制約違反を反復的に改善する heuristic repair

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

制約違反最小化ヒューリスティック

制約違反=2制約違反=1制約違反=2

これを選ぶ

min-conflicts

変数は,ランダムに選ぶ.値は,制約違反の数が最小のものを選ぶ.

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

3. 焼きなまし法

エネルギ

近傍の状態から次の状態をランダムに選ぶ.

エネルギが減少するなら,必ずそこに進む.

エネルギが増加するなら,温度に応じた確率でそこに進む.

最適解局所最適解

局所解をある確率で脱出できる

最小化すべき関数をエネルギと呼ぶ

Simulated Annealing (SA)

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

熱的なノイズによるランダムな揺れの表現

E/Te

確率 大

エネルギ

確率=1

ΔE確率=

エネルギ増加分 ΔE

温度  T 大

温度

温度はじょじょに下げていく

xey 1

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

冷却スケジュール:徐々に冷やしていく

cTT kk 1 kk cTT 1

T = schedule (k), k=1,2,…

T

k

)1log(/ kcTk

線形冷却 指数冷却

対数冷却

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

焼きなまし法の最適性

温度 T を十分ゆっくり下げるならば,確率1で大域的最適解を見つける.

対数冷却 Tk=c/log(k+1) はこの条件を満たすが,収束時間は O(n!) より長い.

温度は適度にゆっくり下げていく

現実的には

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

レポート課題と定期試験について

すでに授業および掲示で連絡してあるとおり

レポート課題: 課題 A,B,C から1つ選択して,          定期試験時に提出

定期試験: 7月28日 (火 ) の授業時間内で実施

7月21日 (火 ) (予備日)は休講とする.

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

授業アンケート

1)授業を改善するために毎年実施

2)10分間程度で回答してください.

3)教員が指名する受講生の代表2名が回収し,この場で封をして,工学部①窓口に届けてもらいます.(窓口が閉まっていたら教員まで.)

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

付録:アーク整合アルゴリズム 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 );}

全アークをそれぞれ整合

1か所だけ変化しても,全アークをスキャンしなおすので効率が悪い