スライド 1

OBDDを用いた
ナンバーリンクの解法
古妻浩一・武永康彦
(電気通信大学)
研究の背景
• 二分決定グラフ
(Ordered Binary Decision Diagram : OBDD)
– 論理関数の効率的表現方法
• ナンバーリンク : パズルの一種
– 決まった解法が知られていない
本研究
• ナンバーリンクを論理関数で表し、
OBDDを用いて解を求める
• 与えた問題の正当性の判定
OBDD(二分決定グラフ)
•
論理関数の表現方法の一つ
例:f = x1x2 + x2x3
変数の順序を決めた順に
変数節点が現れる
•
x1
0
1
特長
•
•
•
変数順序を決めると、
OBDDの表現が一つに定まる
実用的な論理関数をコンパクトに
表現
関数同士の論理演算を
少ない計算量で実現
0
x2
1
x2
0
x3
0
0
1
1
1
ナンバーリンクのルール1
•
入力
m×nの盤面に1からsまでの数字を
それぞれ2つずつ盤面上のマスに与える
•
数字を与えた点を基点と呼ぶ
1
2
1
2
ナンバーリンクのルール2
•
解の条件
1. 1つのマスに上下左右のうち2つを結ぶ直線、
または折れ線が一本だけ引かれる
2. 同じ数字の基点のマス同士を線で結ぶ
3. 全ての線は2つの基点同士を結ぶ
4. 基点以外の全てのマスに線を引く
全て満たすなら
正当解
3、4を満たさない(空白を許す)
解は短絡解
1
1
2
1
2
2
1
2
ナンバーリンクの符号化
•
•
盤面の数字をrビットの2進数で符号化(空白は0)
繋がれたマスは同じ数字を割り当てる
1
2
2
3
01 00 10 10
01 11
1
3
11
11
01 01 01 11
ナンバーリンクの符号化2
論理変数を
x i , j ,k  1 : マス(i,j)上の数字のkビット目が1
〃
が0
0 :
と定義
例:マス(i,j)に数字1001(2)を割り当てる
j
i
1001
j
i
xi , j , 3  xi , j , 2  xi , j ,1  xi , j ,0
解の制約条件
ある解(後述する)を求める関数
C1:基点における接続条件
C2:基点でない点における接続条件
CONNECT(P,S) = 1 となるような充足解を求める
ことで解を得ることができる。
基点の接続条件
•
関数C1の表す条件
1. 基点(i,j)に数字tを割り当てる
2. 上下左右のうち、
1方向だけ同じ数字をとる
それ以外の方向には違う数字をとる
3. 4方向についての論理和をとる
SET:マス(i,j)に
値tを割り当てる関数
S1-S4:
マス(i,j)の左(上右下)に
値tを割り当てる関数
i
j
t
基点でないマスの接続条件
•
関数C2の表す条件
1. マス(i,j)に対して上下左右のうち、
2方向はマス(i,j)と同じ数、
それ以外は異なる数を割り当て
j
る
2. 全ての選び方について
論理和をとる
M1-M4:
マス(i,j)の値と左(上右下)
の値が一致する
ことを表す関数
i
得られる解について
・明らかに短絡解が存在する場合
3 3
3
1
3
1
2
1
2
1
2
この場合には正当解を得られない
2
得られる解について2
線のループが存在する場合
1
1
2
3
01 01 10 11
11 11 10 11
2
3
11 11 10 11
上のようなことが起こりうる
正当解の条件のうち
「全ての線は2つの基点同士を結ぶ」
という条件を除いた解が得られることになる
短絡解を許す制約条件
• 基点でないマスの接続条件において、
0を割り当てても良いようにする
つまりマスの空白を許す条件
i
j
i
または
j
0
問題の正当性の判定
• 正当な問題の定義
唯一の正当解を持ち、
短絡解を持たない問題
短絡解を許す場合と許さない場合
の両方について唯一の解を持つ
問題の正当性の判定
短絡解を許さない場合にただ一つ解を
持つがそれが正当解でないとき、
(つまり線のループを持つとき)
短絡解を許す場合の条件では
必ず複数の解を持つ
(線のループは空白と同等であるため)
両方の場合で正当解を唯一つ持つ
ことが正当な問題の条件となる
解を求める実験
実際に問題を与えて解を求めた
•8×8 その1
短絡解
実行時間
OBDDサイズ
許さない
0.2秒
10,393
許す
1.7秒
41,412
•8×8 その2
短絡解
許さない
許す
実行時間
OBDDサイズ
0.7秒
23,540
20.9秒
466,246
解を求める実験
実際に問題を与えて解を求めた
•10×10 その1
短絡解
許さない
許す
実行時間
OBDDサイズ
1.6秒
58,873
8分40秒
13,400,524
•10×10 その2
短絡解
許さない
許す
実行時間
OBDDサイズ
0.3秒
8,960
1分4秒
1,114,248
・15×20以上では正当解も短絡解も求められなかった
解を求める実験2
同じ問題でもマスに対する条件の適用順序によって
最大OBDDサイズが大きく変わる
• 左上のマスから実行
短絡解
実行時間
許さない
許す
5
1
OBDDサイズ
0.3秒
4,813
46.8秒
1,598,287
2
4
3
2
• 右上のマスから実行
短絡解
許さない
許す
実行時間
1
5
OBDDサイズ
5.8秒
141,906
1時間58分53秒
84,586,122
3
4
出展:ニコリ「ナンバーリンク1」
接続条件の適用順序
• 基点でない点の接続条件を
適用順序を変更して
BDDの最大サイズの変化を観察する
接続が決定しそうなところから実行する
•基点の周囲
● ○ ●
•4隅(実験中)
○
t
○
●
○
●
●
●
○
適用順序の実験1
• 先ほどの左上からの結果との比較
OBDDサイズ
・元の結果 短絡解 実行時間
許さない
許す
・周囲4マス
短絡解
許さない
許す
・周囲8マス
短絡解
許さない
許す
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
適用順序の実験2
• 先ほどの左上からの結果との比較
OBDDサイズ
・元の結果 短絡解 実行時間
許さない
・周囲4マス
5.8秒
141,906
許す
1時間58分53秒
84,586,122
短絡解
実行時間
許さない
3分50秒
5,533,526
----
----
許す
・周囲8マス
メモリ不足で
計算出来ず
短絡解
許さない
許す
OBDDサイズ
実行時間
OBDDサイズ
6分4秒
5,345,051
----
----
適用順序の実験3
基点の周囲を先に適用するだけでは
サイズは大幅に増加してしまった
基点の周囲4マスと8マスの比較では
8マスを適用した方が小さくなることもあった
・基点同士の位置関係が重要か
今後の課題
•
正当解だけを得るプログラムの実装
–
•
最大OBDDサイズを小さくする
–
–
•
アルゴリズムは考案済
変数順序を変更してみる
条件の適用、条件の追加を行う
問題の作成、列挙への応用