24
OBDD をををを をををををををををを ををを をををを ををををををを ()

OBDD を用いた ナンバーリンクの解法

Embed Size (px)

DESCRIPTION

OBDD を用いた ナンバーリンクの解法. 古妻浩一・武永康彦 (電気通信大学). 研究の背景. 二分決定グラフ (Ordered Binary Decision Diagram : OBDD) 論理関数の効率的表現方法. ナンバーリンク : パズルの一種 決まった解法が知られていない. 本研究. ナンバーリンクを論理関数で表し、 OBDD を用いて解を求める 与えた問題の正当性の判定. 例: f = x 1 x 2 + x 2 x 3. x 1. 0. 1. x 2. x 2. 0. 1. 0. 1. x 3. 0. 1. 0. 1. - PowerPoint PPT Presentation

Citation preview

Page 1: OBDD を用いた ナンバーリンクの解法

OBDDを用いたナンバーリンクの解法

古妻浩一・武永康彦(電気通信大学)

Page 2: OBDD を用いた ナンバーリンクの解法

研究の背景• 二分決定グラフ

(Ordered Binary Decision Diagram : OBDD)–論理関数の効率的表現方法

• ナンバーリンク : パズルの一種–決まった解法が知られていない

Page 3: OBDD を用いた ナンバーリンクの解法

本研究• ナンバーリンクを論理関数で表し、

OBDDを用いて解を求める• 与えた問題の正当性の判定

Page 4: OBDD を用いた ナンバーリンクの解法

OBDD(二分決定グラフ )

• 論理関数の表現方法の一つ変数の順序を決めた順に変数節点が現れる

• 特長• 変数順序を決めると、

OBDDの表現が一つに定まる• 実用的な論理関数をコンパクトに表現

• 関数同士の論理演算を少ない計算量で実現

例: f = x1x2 + x2x3

1

x1

x2 x2

x3

0 1

0 1

0 1 0

0 1

Page 5: OBDD を用いた ナンバーリンクの解法

ナンバーリンクのルール 1• 入力

m×n の盤面に 1 から s までの数字をそれぞれ 2 つずつ盤面上のマスに与える• 数字を与えた点を基点と呼ぶ

1

2 1

2

Page 6: OBDD を用いた ナンバーリンクの解法

ナンバーリンクのルール 2• 解の条件

1. 1つのマスに上下左右のうち 2つを結ぶ直線、または折れ線が一本だけ引かれる

2. 同じ数字の基点のマス同士を線で結ぶ3. 全ての線は 2つの基点同士を結ぶ4. 基点以外の全てのマスに線を引く

全て満たすなら正当解

1

2 1

2

1

2 1

2

3、 4を満たさない(空白を許す)解は短絡解

Page 7: OBDD を用いた ナンバーリンクの解法

ナンバーリンクの符号化• 盤面の数字を r ビットの 2 進数で符号化 ( 空

白は 0)• 繋がれたマスは同じ数字を割り当てる

1

3

2 2

1 3

01 00

01 11

10

11

10

11

01 01 01 11

Page 8: OBDD を用いた ナンバーリンクの解法

ナンバーリンクの符号化 2

論理変数を : マス (i,j) 上の数字の k ビッ

ト目が 1   :   〃 

が 0と定義 例:マス (i,j) に数字 1001(2) を割り当

てる

0

1,, kjix

0,,1,,2,,3,, jijijiji xxxx

j

i1001

j

i

Page 9: OBDD を用いた ナンバーリンクの解法

解の制約条件

ある解(後述する)を求める関数

  C1:基点における接続条件C2:基点でない点における接続条件

CONNECT(P,S) = 1 となるような充足解を求めることで解を得ることができる。

Page 10: OBDD を用いた ナンバーリンクの解法

基点の接続条件• 関数 C1 の表す条件

1. 基点 (i,j) に数字 t を割り当てる2. 上下左右のうち、

1 方向だけ同じ数字をとるそれ以外の方向には違う数字をとる

3. 4 方向についての論理和をとる

i

j t

SET :マス (i,j) に値 t を割り当てる関数

S1-S4 :マス (i,j) の左(上右下)に値 t を割り当てる関数

Page 11: OBDD を用いた ナンバーリンクの解法

基点でないマスの接続条件• 関数 C2 の表す条件

1. マス (i,j) に対して上下左右のうち、2 方向はマス (i,j) と同じ数、それ以外は異なる数を割り当てる

2. 全ての選び方について論理和をとる

i

j

M1-M4 :マス (i,j) の値と左(上右下)の値が一致することを表す関数

Page 12: OBDD を用いた ナンバーリンクの解法

得られる解について

1

2 1

2

33

・明らかに短絡解が存在する場合

1

2 1

2

33

この場合には正当解を得られない

Page 13: OBDD を用いた ナンバーリンクの解法

得られる解について 2線のループが存在する場合

上のようなことが起こりうる

正当解の条件のうち「全ての線は 2つの基点同士を結ぶ」という条件を除いた解が得られることになる

1 1 2 3

2 3

01 01

11 11

11 11

10 11

10 11

10 11

Page 14: OBDD を用いた ナンバーリンクの解法

短絡解を許す制約条件• 基点でないマスの接続条件において、

0を割り当てても良いようにするつまりマスの空白を許す条件

0

i

j

i

j または

Page 15: OBDD を用いた ナンバーリンクの解法

問題の正当性の判定

短絡解を許す場合と許さない場合の両方について唯一の解を持つ

• 正当な問題の定義唯一の正当解を持ち、短絡解を持たない問題

Page 16: OBDD を用いた ナンバーリンクの解法

問題の正当性の判定短絡解を許さない場合にただ一つ解を持つがそれが正当解でないとき、(つまり線のループを持つとき)短絡解を許す場合の条件では必ず複数の解を持つ(線のループは空白と同等であるため)

両方の場合で正当解を唯一つ持つことが正当な問題の条件となる

Page 17: OBDD を用いた ナンバーリンクの解法

解を求める実験

•8×8 その1

実際に問題を与えて解を求めた

短絡解 実行時間 OBDDサイズ許さない

0.2秒 10,393

許す 1.7秒 41,412

短絡解 実行時間 OBDDサイズ許さない

0.7秒 23,540

許す 20.9秒 466,246

•8×8 その2

Page 18: OBDD を用いた ナンバーリンクの解法

解を求める実験

•10×10 その1

実際に問題を与えて解を求めた

・ 15×20以上では正当解も短絡解も求められなかった

短絡解 実行時間 OBDDサイズ許さない

1.6秒 58,873

許す 8分 40秒 13,400,524

短絡解 実行時間 OBDDサイズ許さない

0.3秒 8,960

許す 1分 4秒 1,114,248

•10×10 その2

Page 19: OBDD を用いた ナンバーリンクの解法

解を求める実験 2

同じ問題でもマスに対する条件の適用順序によって最大 OBDDサイズが大きく変わる• 左上のマスから実行

• 右上のマスから実行3

45

21

1

2 4

5 3短絡解 実行時間 OBDDサイ

ズ許さない 0.3秒 4,813

許す 46.8秒 1,598,287

短絡解 実行時間 OBDDサイズ

許さない 5.8秒 141,906

許す 1時間 58分 53秒

84,586,122出展:ニコリ「ナンバーリンク 1」

Page 20: OBDD を用いた ナンバーリンクの解法

接続条件の適用順序• 基点でない点の接続条件を適用順序を変更してBDDの最大サイズの変化を観察する

● ○

○ t

● ○

接続が決定しそうなところから実行する•基点の周囲•4隅(実験中)

Page 21: OBDD を用いた ナンバーリンクの解法

適用順序の実験1• 先ほどの左上からの結果との比較・元の結果

・周囲 4マス

・周囲 8マス

短絡解 実行時間 OBDDサイズ

許さない 0.3秒 4,813

許す 46.8秒 1,598,287

短絡解 実行時間 OBDDサイズ

許さない 33.2秒 697,762

許す 17分 14秒 16,588,110短絡解 実行時間 OBDDサイ

ズ許さない 2分 13秒 1,053,016

許す 13分 37秒 6,774,414

Page 22: OBDD を用いた ナンバーリンクの解法

適用順序の実験 2

• 先ほどの左上からの結果との比較・元の結果

・周囲 4マス

・周囲 8マス

短絡解 実行時間 OBDDサイズ

許さない 3分 50秒 5,533,526

許す ---- ----短絡解 実行時間 OBDDサイ

ズ許さない 6分 4秒 5,345,051

許す ---- ----

短絡解 実行時間 OBDDサイズ

許さない 5.8秒 141,906

許す 1時間 58分 53秒

84,586,122

メモリ不足で計算出来ず

Page 23: OBDD を用いた ナンバーリンクの解法

適用順序の実験 3

基点の周囲を先に適用するだけではサイズは大幅に増加してしまった

・基点同士の位置関係が重要か

基点の周囲 4マスと 8マスの比較では8マスを適用した方が小さくなることもあった

Page 24: OBDD を用いた ナンバーリンクの解法

今後の課題• 正当解だけを得るプログラムの実装

– アルゴリズムは考案済• 最大 OBDDサイズを小さくする

– 変数順序を変更してみる– 条件の適用、条件の追加を行う

• 問題の作成、列挙への応用