k-SATアルゴリズムの 実験的性能評価 西関研究室 8668 高木 康彰 研究背景 • 充足可能性問題(SAT)は計算機科学における最も基本的な 問題 • 論理合成,システム検証,スケジューリング問題など様々な分 野に応用されている • SATを高速に解くアルゴリズムの研究がされている • k-SATを解くアルゴリズムに本研究で提案したヒューリスティッ クスを用いると,どれだけ高速化できるのか? 充足可能性問題(SAT) • CNF論理式が与えられたとき、その論理式を充足させる変数 の割り当てが存在するかどうかの判定問題 全ての変数にtrueを割り当てるとF1はtrue Yesを出力 変数にどんな割当を行ってもF2はfalse Noを出力 充足可能性問題(SAT) • 与えられる論理式の各節に含まれる変数の個数が高々k個のSAT k-SAT 例: 3-SAT x x x x x x x x x ... 1 2 3 1 2 4 4 5 6 4-SAT x x x x x x x x x x x x ... 1 • SAT, 2 3 4 1 であるk-SATはNP完全 2 5 6 3 5 7 8 Schöningのアルゴリズム • 入力 : F (n個の変数を持つk-CNF論理式) • 出力 : Yes/No (1)以下を指定された回数繰り返す (1.1)n個の変数の初期割り当てa∈{0,1}nをランダムに選ぶ (1.2)以下を3n回繰り返す (1.2.1)aで Fが充足しているなら, Yesを出力し終了 (1.2.2)aで 充足していない節Cを任意に選ぶ (1.2.3)節Cの中の変数xをランダムに選び、フリップして 割当aを更新 (2)Noを出力 Heuristic1 • 入力 : F (n個の変数を持つk-CNF論理式) • 出力 : Yes/No (1)以下を指定された回数繰り返す (1.1)n個の変数の初期割り当てa∈{0,1}nをランダムに選ぶ (1.2)以下を3n回繰り返す (1.2.1)aで Fが充足しているなら, Yesを出力し終了 (1.2.2)aで 充足していない節Cを任意に選ぶ (1.2.3)節Cの変数でフリップ後に充足する節数が一番多 い変数一つをフリップして,割当aを更新 (2)Noを出力 Heuristic2 • 入力 : F (n個の変数を持つk-CNF論理式) • 出力 : Yes/No (1)以下を指定された回数繰り返す (1.1)n個の変数の初期割り当てa∈{0,1}nをランダムに選ぶ (1.2)以下を3n回繰り返す (1.2.1)aで Fが充足しているなら, Yesを出力し終了 (1.2.2)aで 充足していない節Cを任意に選ぶ (1.2.3) 節Cのk個の変数の一部か全部をフリップして 充足する節数が一番多くなるように割当aを更新 (2)Noを出力 実験1 : 概要 • 変数の個数 : n=20, 節の個数 : c=91, n=50, c=218, n=100, c=430, このような3-SAT入力例題を用意 1000例 1000例 100例 • 入力例題は全て充足解を持つ • 3つのアルゴリズムを実行し,充足解を得るまでの 計算時間, 初期割当回数を計測し,比較する • 使用機器 CPU : Core i7 i7-870 2.93GHz メモリ : 4.00GB OS : Windows7 実験1 : 結果 計算時間 秒 初期割当回数 回数 10000 10000000 1000 1000000 100 100000 10 Schöning 10000 Schöning 1 Heuristic1 1000 Heuristic1 Heuristic2 0.1 Heuristic2 100 10 0.01 1 0.001 20 50 変数の個数 : n 100 20 50 100 変数の個数 : n • 入力例題の変数の個数が50, 100のとき、 ヒューリスティックスを用いた2つは高速に解を得ている 実験2 : 概要 • 変数の個数は50 • 節数を200から1500まで100ずつ増加させ 100例ずつ計算時間と初期割当回数を計測 • 例題は全て充足解を持つ3-SAT • 使用機器 CPU : Core i7 i7-870 2.93GHz メモリ : 4.00GB OS : Windows7 実験2 : 結果 1500 1400 1300 1200 1100 1000 Heuristic2 900 1500 1400 1300 1200 1100 1000 900 800 700 600 500 400 300 200 0 Heuristic1 700 2 Schöning 600 4 500 6 400 8 300 10 1800 1600 1400 1200 1000 Schöning 800 600 Heuristic1 400 Heuristic2 200 0 200 12 節数 : c 割当回数 回数 800 計算時間 秒 節数 : c Schöningのアルゴリズムは節数が増えると解を得るまで時間がかかる ランダムに変数をフリップしても充足しない節数が増えることが多い 実験2 : 結果 秒 計算時間 0.45 0.4 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 割当回数 回数 30 25 20 15 Heuristic1 Heuristic2 Heuristic1 10 Heuristic2 5 節数 1500 1400 1300 1200 1100 1000 900 800 700 600 500 400 300 200 0 節数 • ヒューリスティックスを用いたアルゴリズムは節数が増えるほど高速に解を得ている – ヒューリスティックスの効果が大きくなり、充足解を得やすくなっている • ヒューリスティックスを用いた2つは,ほとんどの節が充足しているとき、同じ探索路を 繰り返し巡回する場合がある – 一度に複数の変数をフリップするHeuristic2の方がこれに陥りやすい まとめ • Schöningのアルゴリズムと比較して,ヒューリスティックスを用 いたアルゴリズムは,変数,節数が多い3-SATを高速に解く – 50変数の場合に約9倍、100変数の場合に約150倍の高速化を達成 • 貪欲なヒューリスティックスを用いる場合、フリップする変数 の個数は一つの方が望ましい • 今後の課題としては同じ初期割当を与えた場合の比較実験 やアルゴリズムの理論的な解析があげられる 既存のヒューリスティックスとの違い • SATを局所探索で解くアルゴリズムにはあまりヒュー リスティックスは用いられていない – ヒューリスティックスは主に探索域の削減を目的 • 既存のヒューリスティックス – 充足していない節全体で最も多く含まれている変数をフ リップ 乱数生成について • Mersenne Twister – 疑似乱数生成アルゴリズム • 長周期, 高次元均等分布 • 生成速度が速い 実験データ • 実験1 SATLIB - Benchmark Problemsから引用 • 実験2 入力式生成アルゴリズムで作成 入力式生成アルゴリズム • パラメータ : 変数の個数 : n 節の個数 : c 各節に含まれる変数の個数 : k (1)n個の変数の充足解a*∈{0,1}nをランダムに選ぶ (2)以下をc個の節に対して行う (2.1)k個の変数 をランダムに選ぶ (2.2)k個の変数及びその否定形からなる2k通りの組 み合わせから, a*で充足する組み合わせ一つをラン ダムに選び,その節はそれらの論理和とする (3)C個の節の論理積を論理式として出力 SATソルバー • SATソルバは2種類 – 確率的な探索をする事で、素早く充足可能性を見つける。 しかし充足不可能性は見出せない – 虱潰しに探索域を削っていき、最終的に充足可能か 充足不可能か判断可能 • 現在はDPLLアルゴリズムをベースにしたものが主流 Heuristic Heuristic1/Heuristic2で遷移可能 Heuristic2のみ遷移可能 ex)100個の節を持つ論理式が与えられた場合 a*(充足解) 100 a1 99 98 97 充足している節の個数 a3 a2 a4 a(現在の割当)
© Copyright 2024 ExpyDoc