?????? CSP ?? ?? variable ??? ?????? by RLGwsP

VIEWS: 26 PAGES: 36

									知能情報処理 制約充足(1)
制約をみたす意志決定をするエージェント



   制約充足問題(つづき)
   (Constraint Satisfaction Problems)

       制約充足問題
       制約充足アルゴリズム
          バックトラック法
          フォワードチェック
          動的変数順序
制約充足問題(CSP)とは
問題             x1 x2 … xn
変数(variable)の集合     D1 D2 … Dn
各変数の領域(domain)
変数間の制約(constraint)の集合
             Cxy ={(a,b),(c,d),…}
解            変数 x-y 間で許される値の組

すべての制約を満たすような
変数への値の割当て
                   x1=a1 x2=a2 … xn=an
制約充足問題の例
 n クイーン問題 (n queens problem)
 クロスワードパズル(crossword puzzles)
 グラフ彩色問題 (graph coloring)
 線画解釈 (interpretation of line drawings)
 レイアウト (layout)
 スケジューリング (scheduling)
バックトラック法 概要
   前 進                    後 退
                 部分解
x1 x2 x3 x4            x1 x2 x3 x4 x5
a1 a2 a3 a4            a1 a2 a3 a4

         前進                      後退

x1 x2 x3 x4 x5         x1 x2 x3 x4
a1 a2 a3 a4 a5         a1 a2 a3 a’4
               O
              K!

  これまでの部分解との間に             拡張できないときは,
制約違反がないように部分解を拡張       後戻りをして最近の選択をやりなおす
バックトラック法(4)アルゴリズム
                                        変数への割当て
/* メイン */    BACKTRACK( { } );         たとえば:{ x=3, y=2 }

assignment BACKTRACK( assignment ) {                 解
  if (全変数に値の割当てがある) return assignment;
  x ← 値の割当てがない変数;
  for each a in Dx {
      if ( x=a が制約違反を生じない) {
                                                前進
            x=a をassignment に追加する;
            result ← BACKTRACK( assignment );
            if (result ≠ null) return result; 解
            x=a をassignmentから削除する;
       }
                   後退
   }
   return null;
}
フォワードチェック(1)                  先読みにより前方をチェックする
Forward Checking

                        部分解
 x1 x2 x3 x4
 a1 a2 a3 a4
                                   いずれかの領域が
 部分解を拡張            前進               空になったら
                                      後戻り
 x1 x2 x3 x4 x5 x6 x7 xn
 a1 a2 a3 a4 a5


     すでにOKと               これ以降の変数の領域から
      なっている
                         a5と矛盾するすべての値を削除
フォワードチェック(2) うまくいく例
 1 H O 2S                       AFT
              E 3S   x1         ALE
         H                      EEL
                     x2         HEEL
     4   E 5                    HIKE
                                HOSES
 6       7E                     KEEL
                      x8に入る     KNOT
 8       T                単語が   LASER
                          ない!   LEE
                                LINE
                                SAILS
                                SHEET
                                STEER
                                TIE
  フォワードチェック(3)アルゴリズム
assignment BACKTRACKwithFC( assignment ) {
  if (全変数に値の割当てがある) return assignment;
  x ← 値の割当てがない変数;
  for each a in Dx {
      x=a をassignment に追加する;                値の割当てがない変数の領域
      フォワードチェック;                            から x=a と矛盾する値を削除
      if (空の領域がない) {
          result ← BACKTRACKwithFC( assignment );
          if (result ≠ null) return result;
      }
      変数の領域をフォワードチェック前の状態に戻す;
      x=a をassignmentから削除する;
   }
   return null;
}
動的な変数順序付け(1)
 Dynamic Variable Ordering

Assignment BACKTRACKwithFC( assignment ) {
 if (全変数に値の割当てがある) return assignment;
 x ← 値の割当てがない変数;
 .........
    どの変数を選んだらよいか?

1    最小領域
      領域に含まれる値の個数が最小である変数を選ぶ
     タイブレイク(引き分けのとき)


2    最大制約
      まだ値の割当てられていない変数との間の制約の個数
     が最大である変数を選ぶ
動的変数順序(2)                         グラフ彩色の例(3色)



                        x1        R   G   B   領域=3
                                              制約=2
                                  領域=2
領域=3   R   G   B
制約=3
                   x5             制約=1
           領域=2                               領域=3
           制約=2
                             x4   R   G   B
                                              制約=4
領域=3   R   G   B   x3
制約=4
           領域=2
           制約=3         x2        R   G   B   領域=3
                                              制約=3
領域=3                              領域=2
制約=2   R   G   B   x6             制約=2
           領域=3
           制約=2
 実験による性能比較
Problem         BT               BT+DVO BT+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
数値は制約のチェック回数
知能情報処理 制約充足(2)
制約をみたす意志決定をするエージェント



      局所整合と局所探索
  (Local Consistency and Local Search)

      局所整合アルゴリズム
      局所探索アルゴリズム
局所整合と局所探索
 制約をすべて(大域的に)満たすのは困難
              global
  局所的に満たしながら大域に拡大する
    local
  局所整合アルゴリズム
  local consistency
      局所的にバックトラック不要になるように不適切な値
                    backtrack-free を事前に削除

  局所探索アルゴリズム
  local search
     局所的に制約違反を修復し,バックトラックをしない
               repair
      局所整合アルゴリズム
   (Local Consistency Algorithms)


1. アーク整合
 arc consistency

2. 制約伝播
constraint propagation
制約ネットワークと制約グラフ
      constraint network               constraint graph

C x y  { ( 0 , 0 ), ( 0 ,1), (1,1)} C y z  { (1, 0 ), (1,1)}

制約ネットワーク                                  制約グラフ
                       y
              0    1                                  y
   x                           z             x            z
  0     1                  0       1
                                           制約のある変数ノード
                                             を辺で結ぶ
        許された値の組を
          辺で結ぶ
1.アーク整合(1)
  arc consistency

■ 値 x=a は y にサポートをもつ         
                             b  D y    ( a , b )  C xy
             support
       x               y
        a                        x=a のサポート
   c
        a'
       Dx              Dy
  x=c は y にサポートをもたない
       Dx から値c を削除 (アーク整合アルゴリズム)
アーク整合(2)
■ アーク (x, y) はアーク整合 している
           arc consistent
 =すべての x=a が y にサポートをもつ

       x                    y
       a


      Dx                    Dy
     (y, x) はアーク整合 していない
アーク(x, y)の整合アルゴリズム
    boolean REVISE(x, y) {
     changed ← false;
     for each a in Dx {
        if (x=a が y にサポートをもたない) {
                Dx から a を除去する.
                changed ← true;
          }
         }
        return changed;       値を1つでも除去したら true
    }

               計算量(制約チェック回数)
                          2
                    O (d )
              d は領域Dx,Dyの要素数の最大値
アーク整合(3)
■ 制約ネットワーク はアーク整合 している
 =すべてのアーク(x, y) がアーク整合 している
■ アーク整合アルゴリズム
  =アーク整合 していない制約ネットワークから
   最小限の要素を削除してアーク整合させる.
   空の領域が生じたら,CSPには解がない.

          y

                   アーク整合 していても解がないことがある
   x                z
                            制約グラフが閉路を
                              含むとき
       グラフ彩色(2色)
アーク整合アルゴリズムの動作例

              ①


   X                       X
                                        ③
                制約伝播
           constraint propagation
       ②


       ④    X      ⑤
                                            X

                                    ⑦

   X                   X
            ⑥
アーク整合アルゴリズム 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か所だけ変化しても,全アークをスキャンしなおすので効率が悪い
アーク整合アルゴリズム AC-3                  Qは First-In First-Out の
                                    キュー(待ち行列)
 AC-3(CSP G) {
   Q ← Gのすべての有向アークの集合.
   while ( Q が空でない ) {
    Qから先頭のアークを取り出し, (x, y) とする.
    if ( REVISE(x,y) )
         for each z in y を除く xの隣接ノードのすべて{
            Qの末尾にアーク (z,x) を追加する.
        }
   } (x, y) の整合の結果,x の領域から要素が削除されたら
 }     x へ向かうすべての有向アーク (z, x) (ただし,z≠y)をQに追加する.
    z      x      y       計算量(制約チェック回数)
                                  2               3
                           O (d        de)  O (d e)
    X      X              d は領域の要素数の最大値
                          e は制約グラフのアーク数
    高々 d 回Qに追加
アーク整合の利用法
 前処理
 バックトラック法で,変数の値を選択したときに,
 フォワードチェックのかわりに使う
   x          y    z    この例では,z の2つの値を削除して,
                   X       失敗を早期に検知できる
   X          X    X
 制約グラフが木のときに,
 バックトラックなしで解を求める
  backtrack-free

       制約グラフが木であるCSPは
       アーク数についての線形時間
          で解くことができる
           局所探索アルゴリズム
          (Local Search Algorithms)

1. 山登り法
 hill climbing
2. 制約違反最小化
 min-conflicts
3. 焼きなまし法
 simulated annealing
反復改良の考え方
iterateive improvement

      Q                      Q
           Q                         Q
      Q                      Q
           Q                     Q
すべての変数に                  改良をくりかえす        Q
 (ランダムに)                 (後戻りはしない)               Q
初期値を設定
                          一般には       Q
                         完全性がない              Q
評価関数 z=f(x,y) の山を登る
    最適解    局所最適解からの
             脱出       局所最適解
z



    y

          最適化問題          x
1. 山登り法
 hill climbing
近傍の状態のうち評価値が最大の状態に進む.
決して下り坂を降りない.
                     近傍
                 neighborhood
              それにもかかわらず
               有効なことがある
山登り法の欠点
            高原

 局所最適




 局所最適解で停止する.
  対策:ランダムな初期状態から再出発する
     ( random restart) など.
 高原では進むべき方向を判断できない.
2. ヒューリスティック修復法
   heuristic repair
 山登り法により制約違反を反復的に改善する




許される値
 の組                     現在の状態
制約違反最小化ヒューリスティック
  min-conflicts
                            制約違反=2
制約違反=2            制約違反=1




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


  百万クイーン問題: 平均50ステップ


  ハッブル天体望遠鏡の観察スケジュール
     3週間から10分に短縮
3. 焼きなまし法
Simulated Annealing (SA)

近傍の状態から次の状態をランダムに選ぶ.
エネルギが減少するなら,必ずそこに進む.
エネルギが増加するなら,温度に応じた確率でそこに進む.
                 最小化すべき関数をエネルギと呼ぶ
エネルギ
                          局所解を
                       ある確率で脱出できる




    局所最適解                           最適解
熱的なノイズによるランダムな揺れの表現

     エネルギ              温度
                                            x
                                1
                                    y  e
ΔE                     E/T
             確率= e
            確率=1           確率        大


                           エネルギ      小
             温度はじょじょに
                           増加分ΔE
              下げていく
                           温度 T      大
冷却スケジュール:徐々に冷やしていく
    T = schedule (k), k=1,2,…

    線形冷却                          指数冷却
T   T k 1  T k  c              T k  1  cT k
                   対数冷却
                   T k  c / log( k  1 )




                                             k
焼きなまし法の最適性

 温度T を十分ゆっくり下げるならば,確率1
で大域的最適解を見つける.
 対数冷却 Tk=c/log(k+1) はこの条件を満
たすが,収束時間はO(n!)より長い.


             温度はすごくゆっくり
               下げていく

								
To top