木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

18
木木木木木木 木木木 CSP (Tree search algorithms for solving CSPs) 木木木木木木木 木木木木2 木木木木木木木木木木木木木木木木木木 木木木木木木木木 木木木木木木木木木 木木木木木木

description

認知システム論 制約充足( 2 ) 制約をみたす組合せを探すエージェント. 木探索によるCSPの解法 (Tree search algorithms for solving CSPs).  バックトラック法  フォワードチェック  動的変数順序. 制約充足問題 ( CSP) とは(復習). x 1 x 2 … x n. CSP. D 1 D 2 … D n. 変数 (variable) の集合  各変数の 領域 (domain) 変数間の 制約 (constraint) の集合. C ij ={(a,b),(c,d),…} - PowerPoint PPT Presentation

Transcript of 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

Page 1: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

木探索によるCSPの解法(Tree search algorithms for

solving CSPs)

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

 バックトラック法

 フォワードチェック

 動的変数順序

Page 2: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

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

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

CSP

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

x1 x2 … xn

D1 D2 … Dn

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

変数 xi-xj 間で許される値の組の集合.

与えられた組 (u,v) が許されるか否かを判定する関数

allowed(i,j,u,v) でも良い.x1=a1 x2=a2 … xn=an

Page 3: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

制約充足問題の例(復習)

n クイーン問題 (n queens problem)

クロスワードパズル (crossword puzzles)グラフ彩色問題 (graph coloring)線画解釈 (interpretation of line

drawings)レイアウト (layout)スケジューリング (scheduling)

Page 4: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

制約充足アルゴリズム(Constraint Solving)

 バックトラック法

 + フォワードチェック

 + 動的変数順序

Page 5: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

バックトラック法 (1)深さ優先探索各レベルで1つの変数の値を選択する解となる可能性のない経路を早めに検出して後戻り (backtrack) する

フォワードチェック (forward checking)動的な変数順序付け (dynamic variable ordering)

などと組み合わせると

効果的

Backtracking

1x

2x

3x

1

2

3 4

5

6 7

Page 6: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

バックトラック法 (2)  概要

前進

これまでの部分解との間に制約違反がないように部分解を拡張

後退

a1

x1

a2

x2

a3

x3

a4

x4部分解

a1

x1

a2

x2

a3

x3

a’4

x4x1 x2 x3 x4 x5

a1 a2 a3 a4 a5

OK!

拡張できないときは,後戻りをして直前の選択をやりなおす

前 進 後 退

a1

x1

a2

x2

a3

x3

a4

x4 x5

Page 7: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

バックトラック法 (3) 4クイーンでの動作

1 2 3 4

1 2 3 4

1 2 3 4

1 2 3 4

x1x2x3x4

Page 8: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

バックトラック法 (4) アルゴリズム

/* メイン */  すべての変数 x[ i ] の値を⊥(未設定)にする.         BACKTRACK( 1 );boolean BACKTRACK(int depth) {  if( すべての i について x[ i ] ≠⊥) return true; int j ← x[j]=⊥ であるような変数番号 j から任意の1つ;

...  

x1 x2 x3 x4 x5

a1 a2 a7a4 ⊥

x6

x7

x8

j = 5

Page 9: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

バックトラック法 (5) アルゴリズム(続き)

boolean BACKTRACK(int depth) {  if( すべての i について x[ i ] ≠⊥) return true; int j ← x[j]=⊥ であるような変数番号 j から任意の1つ;

  for each b in list D[j] {    if(x[j]=b と現在の x の設定間に制約違反がない ) {      x[j]←b ;           if(BACKTRACK(depth+1)) return true;    x[j]← ;⊥    }  }  return false;}

LOOK BACK

Page 10: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

boolean BACKTRACK(int depth) {  if(depth > n) return true; int j ← depth ; for each b in list D[j] {    OK ←true;

for i ← 1 to j - 1 {       if(!allowed(i,j,x[i],b)) { OK ←   false; break; } } if(OK){ x[j]←b ;      if(BACKTRACK(depth+1)) return true;    x[j]← ;⊥    }  }  return false;}

LOOK BACK

X1 , X2, … , Xn の順序で値を割り当てていく.

x1 x2 x3 x4 x5

a1 a2 a3 a4 ⊥

x6

x7

x8

j = depth = 5

Page 11: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

制約充足アルゴリズム(Constraint Solvers)

 バックトラック法

 + フォワードチェック

 + 動的変数順序

Page 12: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

フォワードチェック (1)

a1

x1

a2

x2

a3

x3

a4

x4部分解

前進部分解を拡張

すでにOKとなっている

これ以降の変数の領域から

a5 と矛盾するすべての値を削除

a1

x1

a2

x2

a3

x3

a4

x4

a5

x5 x6 x7 xn

いずれかの領域が空になったら

後戻り

先読みにより前方をチェックするForward

Checking

Page 13: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

フォワードチェック (2) うまくいく例

1 2 3

4 5

6 7

8

AFTALEEELHEELHIKEHOSESKEELKNOTLASERLEELINESAILSSHEETSTEERTIE

x1x2

x8 に入る

単語がない!

H O S E

E

E

T

H

S

Page 14: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

フォワードチェック (3) アルゴリズム

boolean BACKTRACK-FC(int depth) {  if( すべての  i について x[i] ≠⊥) return true; int j ← x[j]=⊥ であるような変数番号 j から任意の1つ;

  for each b in list D[j] {    x[i] =⊥ であるすべての変数 x[i] の領域 D[i] から x[j] = b と矛盾する値を削除する ; if( 空の領域が生じなかった ) {      x[j]←b ;           if(BACKTRACK-FC(depth+1)) return true;    x[j]← ;⊥    } 変数の領域を,値の削除前の状態に戻す;   }  return false;}

LOOK FORWARD

Page 15: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

制約充足アルゴリズム(Constraint Solvers)

 バックトラック法

 + フォワードチェック

 + 動的変数順序

Page 16: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

動的変数順序 (1)Dynamic Variable

Orderingboolean BACKTRACK-FC(int depth) { if ( 全変数に値の割当てがある ) return true; int j ← x[j]=⊥ であるような変数番号 j から任意の1つ; .........どの変数を選んだらよいか?

最小領域ヒューリスティック  領域に含まれる値の個数が最小である変数を選ぶ

最大制約ヒューリスティック  まだ値の割当てられていない変数との間の制約の個数が最大である変数を選ぶ

タイブレイク(引き分けのとき)

Page 17: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

6x

動的変数順序 (2)

4x5x

3x

2x

グラフ彩色の例(3色)

R G B 領域=3 制約=2

R G B

R G B

R G B

R G B

領域=3 制約=4

領域=3 制約=3

領域=3 制約=3

領域=3 制約=4

領域=2 制約=1

R G B領域=3 制約=2

領域=2 制約=2

領域=2 制約=2

領域=2 制約=3

領域=3 制約=2

1x

Page 18: 木探索によるCSPの解法 (Tree search algorithms for solving CSPs)

実験による性能比較Problem BT BT+DV

OBT+FC BT

+FC+DVO

USA >1,000,000

>1,000,000

2,000 60

n-Queens

>40,000,000

13,500,000

40,000,000

817,000

Zebra 3,859,000

1,000 35,000 500

Random 1

415,000 3,000 26,000 2,000

Random 2

942,000 27,000 77,000 15,000

BT=backtracking FC=forward checking DVO=dynamic variable ordering数値は制約のチェック回数