数独パズルの解探索 - NIPPON INSTITUTE of TECHNOLOGY

The 15th J-C Workshop 2016&日本設備管理学会 2015 年度知能技術応用研究会(2016.2.18 石川四高記念文化交流会館)
組合せ最適問題の厳密解探索のためのGAによる解法の検討
(数独パズルの解探索)
椋田
實(日本工業大学 特別研究員)、江藤
香(日本工業大学)
Solution method of the elucidation by GA for exact solution searches of the combinatorial optimization
Minoru Mukuda*, Kaoru Eto* ( *Nippon Institute of Technology)
キーワード:遺伝的アルゴリズム、バックトラック法、組合せ最適化、厳密解探索、数独パズル
(Genetic Algorithm, backtracking, depth-first search, combinatorial optimization, exact solution, search tree, Sudoku puzzle)
1.
はじめに
多数であり、多数の局所解が存在する。このパズルと同じ
ルールでも最初のマスの数字設定(図1の1,3,2,3)
我々は組合せ最適問題の厳密解の解法として遺伝的アル
により複数の解が存在する。なお、解の探索には組み合せ
ゴリズム(GA: Genetic Algorithm)を考察した。GAは多目
を探索木に形成できる。
的で複雑な組合せ問題の近似解を探索する方法として効果
厳密解を組合せにより求めるには、全ての探索木を根から
的である[1]。しかし、厳密解を解くには苦手な事が知られ
辿ることで発見できる。これらの探索は再帰的に行うと手
ている。本論文では、厳密解を解くためのGAの手法につ
続きが容易となる。
いて「どの様な方法が考えられるか」
「どの様な点を考慮す
探索速度を早くするには、枝を制約条件で「刈り取る」こ
るのか」、実例を用いて検討した。
とで実現する。この様な方法をバックトラック法と呼ぶ。
問題には「数独パズル[2](ナンバープレースも同じルー
また、全ての組合せを単純に生成し、制約条件で判定する
ル)」を採用した。探索方法の比較対象としてバックトラッ
ことでも探索できるが、組合せが膨大になるため、効率的
ク法(backtracking)を使用した。バックトラック法は探索
ではない。次に数字置きパズルの例を用いて説明する。
木を“刈り取る”ので、全組合せ探索よりも早く厳密解を
得ることができる。GAでは厳密解を得られない場合があ
<数字置きパズル>
るが、バックトラック法は処理時間を考えなければ必ず発
1
見できる。
GAは、染色体の初期値や突然変異、交叉の方法が探索時
3
間に大きく影響する。本稿では、①全組合せから基本的な
制約条件を適用して解空間を縮小する。②GAにより解空
間をさらに絞り込む、③力まかせ探索により厳密解を探索
する、と言う3段階の手順で解の探索を行った。
2.
2
組合せ最適化と数独パズル
3
①4×4の空マスに
1,2,3,4の数
字を次のルールに従
って入れる。
②横・縦列に1〜4、
2×2ブロックに1
〜4の数字を置く。
なお、縦・横・ブロ
ックに置く数字はユ
ニークとする。
※この例では解が2
個ある。
図1 数字置きパズル
厳密解とは、近似解ではなく全ての制約条件を満足した最
Fig.1 Set Number Puzzle
良の解である。数独パズルは近似解がなく、解が1つ(あ
るいは2つ)程度に設定されている。厳密解をGAで探索
数独パズルは、図1の4×4マスを9×9マスにして、
する例として、数独パズル(同様のルールを持つパズルを
1〜9の数字を置くパズルであり、仕組みは同じである。
数字置きパズルと呼ぶ)は制約条件を満足すれば最適解で
3.遺伝的アルゴリズムの適用
あること、近似解がないことから実験対象に採用した。
なお、パズルには解空間は957個程度の解候補が存在す
数独パズルの解を探索するのに遺伝的アルゴリズム(G
る。これらの中から1つの解を探索するので、非実行解が
A)を適用する。図 1 の数字置きパズルを使用して,GA の
1
The 15th J-C Workshop 2016&日本設備管理学会 2015 年度知能技術応用研究会(2016.2.18 石川四高記念文化交流会館)
この探索木は表1の遺伝子座番号1から2,3 ,… ,16と
遺伝子表現を説明する。
空マスに置ける数字はルール(制約条件)を複数回に渡り
16段階(深度16)で構成される。全組合せの生成は、
適用すると表1の様に各マスの数字候補が得られる。最初
図2の木を全て辿ることで実現できる。これに制約条件を
から数字が設定されているマスは確定であるが、制約条件
加えて枝の刈り込みを行えば効率よく解を探索できる。
を適用すると候補がひとつになるマスもある。この候補が
遺伝子から実際のパズルにデコードするには、表1の候
ひとつなら数字は確定である。この段階で解が得られる場
補表を用いて変換する。
合もあるが、これは初心者向けの問題である。図1の問題
に制約条件を適用した結果を表1に示す。
遺伝子には候補数字に付けた“順序番号”を使用する。た
にエンコードすると表2の様になる。
表1 マスに置く数字の候補表
表2 遺伝子
Table 1 Set Candidate Number table
Table 2 Gene
1
2
3
1
2
1
3
2
3
2
3
2
1
2
2
1
2
3
4
3
遺伝子
1
1
3
1
1
1
2
2
2
1
2
2
1
2
1
1
4
4
4
4
3
4
2
4
4
4
4
4
4
2
4
1
1
3
4
4
3
1
2
4
2
4
1
3
・・・・
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
4
2
2
1
1
3
2
2
1
1
1
2
2
1
1
3
解候補
1
1
3
1
1
1
2
2
2
1
2
2
1
2
1
1
・・・・
候補数
遺伝子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
表1のマスに置く数字の候補表
とえば、2個の候補があれば1と2である。図1を遺伝子
No.
図3 デコード(遺伝子→候補数字)
Fig.3
Decord (Gene -> Candidate Number)
4×4パズル
4
1
3
2
(注)基本的な制約条件の適用後
この例における遺伝子座は16座あり、10,368通り
の組合せがある。このパズルの探索木を図2に示す。
2
3
1
4
4
4
2
1
1
4
4
3
1次元を2次元
に展開する。
No.1→1 行 1 列
No.2→1 行2列
No.3→1 行3列
図4 候補数字を埋めた4×4マス
深度は16段階
1
1
2
1
1 ・・・
1
・・・・・・
2
・・・・・・
Fig.4
Put Candidate Number on 4x4 Puzzle
遺伝子は表1の候補表から順序番号を使用して、実際の
数字を得る。これが図3の右側にある「解候補」である。
この候補数字は図4の様に4×4のマスに配置される。
1
3
1
・・・・・・
≪2-1 GAによる進化手順≫
1
1
・・・・・・
①第1段階:空マスに制約条件を適用して候補数字を置く
2
1
・・・・・・
3
1
・・・・・・
本稿の探索手順は3段階(図5参照)で構成している。
ことで解空間を縮小する。制約条件は横・縦・ブロックの
2
数字が1〜4のユニークであること。なお、9×9マスで
は1〜9である。この段階で解が得られれば終了である。
②第2段階:GAにより解空間をさらに絞り込む。表1の
候補表と染色体(遺伝子)を用いて、交叉、突然変異、選
図2 4×4数字置きパズルの組合せの探索木
Fig.2
択を行い、解空間を縮小する。GAは初期値を変えて評価
Search Tree of 4x4 Puzzle
値が一定以上になるまで反復処理する。この処理で得られ
2
The 15th J-C Workshop 2016&日本設備管理学会 2015 年度知能技術応用研究会(2016.2.18 石川四高記念文化交流会館)
た組合せを10個保存する。もちろん、この段階で解が得
横列に同じ数字が存在することが多数ある。この時、縦列
られれば終了である。
と横列の数字を異なる数字の候補(遺伝子)に変更する。
③第3段階:力まかせ探索により厳密解を探索する。GA
ただし、その数字が突然変異で選んだ数字と同じで、候補
で保存した解候補の10個を2×2マスブロック(9×9
数が1の場合はその突然変異を中止する。
マスでは3×3マスブロック)単位に組み合せる。組合せ
親個体
総数は10 9通りとなる。この段階で解が得られない場合
は、②の処理で再探索回数を増やす、進化世代数を多くす
るなどの変更を行い、第1段階から解探索を行う。
はじめ
第1段階
制約条件を適用して解空間
を減少させる
第2段階
GAにより解空間の絞り込
む
Yes
再探索か?
No
第3段階
10個の途中解を使い全組
合せで探索する
おわり
4
2
4
1
1
3
4
4
遺伝子座の10(3
行2列)が選ばれた
とする。この数字は
【第1段階】
制約条件を適用して空
マスに解候補となる数
字を記録する。
【第2段階】
GAにより解を探索す
る。評価基準を満たした
途中解を10個探し保
存する。10個未満なら
ば再探索する。
【第3段階】
ブロック単位に全部の
組合せを行い、解を探索
する。ブロックとは9×
9の場合、3×3マスを
ブロックと呼ぶ。
4であるが突然変異
で1となると、横列
1
4
2
4
と縦列に1があり、
制約条件を満たさな
1
2
3
1
い。
突然変異で生成された子個体
そこで、3行2列の
4
4
2
1
数字を4から1にし
た場合、3行1列の
1
4
3
4
数字は3に変えた。
また、4行2列の数
図5 解探索の3段階の流れ
Fig. 5 Solution searches of 3 steps flow
3
1
2
4
字は4に変えた。も
2
4
1
3
数字に変えることは
ちろん、候補以外の
できない。
図7 突然変異の操作
≪2-2 交叉・突然変異≫
Fig.7
交叉は一般的な1点交叉と数字置きパズルを考慮した特
別な交叉を適用する。1点交叉は81個の遺伝子を一様ラ
Operation of Mutation
≪2-3 選択≫
ンダム(以後単にランダムと呼ぶ)な1点で交叉させる。
選択はエリート選択で、親個体は30とする。なお、選
つまり、ランダムに選んだ2個の親個体から2個の子個体
択する時に、良い個体を複数個、残すために上位の5個体
を生成する。もう一つの交叉はランダムに選んだ個体で、
は常に保存する。評価値は全て81個のマスを対象に、縦・
ランダムで指した遺伝子座に候補が2個の場合、異なる候
横・3×3ブロックに「ない数字」があればその数を計数
補を組み込んだ1個の個体を生成する。この交叉を局所探
して、合計値を評価値とする。つまり、1〜9の数字が必
索的な交叉と呼ぶ。なお、交叉の対象は5%である。
ず「1個ある」のが解である。評価値が小さいほど解に近
いことになり、解の評価値はゼロとなる。
親個体
1
1
3
2
1
≪2-4 ブロック単位の全組合せ≫
1
4×4パズルで、第3段階の総組合せは、図7の2×2
ブロックの4個×10 枚を組合せる。
遺伝子座に候補が2個の場合、異なる候
補の個体を生成する
子個体
1
・・・・
2
3
・・・・
2
1
1
4
1
3
2
図6局所探索的な交叉
Fig.6
Crossover with Local Search
突然変異はランダムに選んだ個体で、ランダムで指した
遺伝子座の候補をランダムに変更する。この場合、縦列と
3
3
21
33
12
2
43
41
24
4
1
3
1
43
132
42
41
3
2
3
11
24
4
3
3
4
2
1
1
2
4
3
2×2ブロック
が組合せの単位
である。数独パズ
ルの場合、3×3
ブロックである。
図8 保存したパズルの解候補
Fig.8 Candidate solution of puzzle
The 15th J-C Workshop 2016&日本設備管理学会 2015 年度知能技術応用研究会(2016.2.18 石川四高記念文化交流会館)
データ101の試行では解の未発見が多くあった。試行
3.バックトラック法で解探索
回数の比で言えば、約80%が未発見であった。難易度が
バックトラック法は全ての厳密解を探索する方法として
上がると未発見回数が増加する。
効率的な方法である。この方法は深さ優先探索+刈り込み
と同じ方法である。探索には探索木を用いるが、深度を進
表4
数独パズルの解探索の結果(2)
Table 4 Result of Solution searches in Sudoku puzzle (2)
めるごとに制約条件を調べ満足しなければ、これ以下の深
度への探索を中止(枝を刈り取る)する。この刈り込みに
バックトラック法
より無駄な探索を省いている。
データ
番号
実際の探索は図2の様な探索木を適用して、全ての枝を
再帰構造で辿ることで実現する。なお、この探索では深度
がひとつ進むごとに、制約条件による判断とそのノードの
101
9×9マス(例では4×4マス)の状態を保存する。保存
104
発見(秒)
人間
最大深度
32
1,620
1
20
1,800
105
56
24
1,800
本稿のプログラムでは染色体(遺伝子)に使用した表2
300
1
1
-
の1次元データを利用して探索木を作成している。実際の
339
1
4
-
387
1
7
-
398
1
7
-
1
15
-
した9×9マスデータは枝を辿って戻ってきた時に、9×
9マスの状態を再生するために使用する。
数字データではなく、数字データの格納位置を示す順序番
号(1〜n連番)を使用する(表1参照)。この方法で組合
せを生成することで、探索処理が効率よく実現できる。
901
4.数値実験
※1秒とは1秒以下を含む。
本稿の厳密解の探索は3段階で実施する。使用したパソ
コンは、MPU:Intel® Core™ i7-4770 CPU @ 3.40GHz、メ
表4はバックトラック法と人で解を探索した結果であ
モリ:16.0GB、OS:64 ビット Windows 8.1 Pro である。
る。バックトラック法では探索木の深度が深いほど組合せ
GAによる解探索は,親個体は30個体、個体群の最大
数が多くなり、解発見に時間を要する。しかし、組合せの
格納数は800個体、染色体の遺伝子数は81座、進化世
最初に解がある場合は早く発見できる。
代数は40,000から90,000世代、第3段階用に探索
人間の場合、操作速度が遅いが、解を探索するアルゴリ
結果を10個保存する。保存の評価基準は18から64で
ズムの中で、①局所解を早期に飛ばす、②候補数字をトラ
ある。また、染色体の初期値は時刻から乱数の種を生成さ
イする、③候補数字が少ない所を優先する、④3ヵ所や4
せる。再探索は事前の乱数列を継続する。
ヵ所が相互に関連して同じ数字が競合する時の仮置きな
数字置きパズルの問題の多くは“激辛数独7”[1]から引
ど、探索操作をジャンプすることができる。そのため、デ
用した。実験結果の1例を表3、表4に示す。
表3
8,931
発見(秒)
ータ101、104、105の処理時間が約1,800秒と
同じ程度になる。
数独パズルの解探索の結果(1)
本稿のGAによる解探索は染色体の初期値で探索時間が
Table 3 Result of Solution searches in Sudoku puzzle (1)
大きく変化する。次にデータ104の例を示す。表5の様
本稿の探索結果(カッコの数字は秒)
に、発見までの探索時間のバラツキが非常に大きい。これ
データ
番号
第1段階
総組数(組)
第2段階
10個生成時間(秒)
第3段階(秒)
101
1.80×10 41
発見(3,416)
-
104
8.56×10
35
発見(580)
-
105
7.7×10 33
発見(3,651)
-
Table 5 Result of Solution searches in data104
300
発見(1)
-
-
339
1.87×10 27
発見(36)
-
387
7.26×10 24
229
発見(294)
398
4.16×10 23
発見(776)
-
GA4回目
GA3回目
GA2回目
GA1回目
平均
901
3.72×10 30
1209
発見(1,427)
は、染色体の初期値が大きく影響していると思われる。し
かし、GAの再探索回数を多くしても変わらないことがあ
る(例えば300回)。
表5 データ番号104の解探索結果
580
1,274
68
2,233
1,039
秒
秒
秒
秒
秒
※最短で68秒、
最長で2,233
秒と探索時間が大
きく異なり、平均
は1,039秒であ
った。
図9のグラフはデータ104の進化過程である。GA
※第1段階の総組数とは、制約条件を適用した後の組数。
(1)は解を発見したケースで、40,000世代付近で解
を発見している。GA(2),(3),(4)は局所解に落ち
4
The 15th J-C Workshop 2016&日本設備管理学会 2015 年度知能技術応用研究会(2016.2.18 石川四高記念文化交流会館)
たケースである。進化世代から見ると、一定世代の間、進
厳密解を探索した。なお、多くの場合、数独パズルはGA
化が止まると、局所解に落ちていると判断できる。本稿の
段階で発見されている。この段階での発見の可否は難易度
突然変異では局所解に落ちると抜け出すことが難しかった
に依存しない(親個体の初期設定に依存)。なお、GAでの
ので、初期値を変えて再探索を行った。
解発見は組合せ数が多い(深度が深い)と“再探索の回数
が多くなる”傾向がある。
厳密解の探索の場合、次のような点を考慮すると良い。
350
評価値
300
250
GA(1)
①解空間が広く、解が少ないと考えられるので、局所解に
GA(2)
落ちる確率が高いので、落ちた場合の対策が重要である。
GA(3)
200
本稿では初期染色体の値を変えて、再探索を行っている。
GA(4)
②局所解に落ちたことを早期に発見する仕組みを組み込
150
み、処理時間を短縮する。本稿では評価値が連続する回数
100
を決めて打ち切る。
50
0
③親個体の初期設定(初期の染色体)は解空間を広く網羅
0
20000
40000
60000
する。単純にランダムな数値を使う方が良いが制約条件を
80000
適用する等の操作も考えられる。本稿では遺伝子を一様な
世代
乱数で生成している。
図9 進化過程の例(データ104)
Fig.9 Sample of Evolution process (data104)
④遺伝的操作は問題に対応した突然変異や交叉が効果的で
ある。本稿では、一般的な1点交叉に加えて問題対応の突
然変異と交叉を組み合せている。選択は一般的なエリート
第3段階の力まかせ探索で解を発見できないケース(デ
ータ番号101の例)がある。理由はGAで解の一部とな
る3×3ブロックが得られなかったことによる。なお、図
10は第3段階で解が得られた時に保存された途中結果の
ひとつである。網掛けの12マスが解と異なるが、5つの
3×3ブロックは解と同じである。
選択を用いている。
⑤進化処理は単純な構造とし、世代進化や再探索回数を増
やすのに影響が少ない方が良い。本稿では標準的なGAの
処理手順を使用している。
⑥GAで解を得られない場合、絞り込んだ解候補から部分
を切り出して、組み合わせることで解を求める(第3段階)。
5
8
2
6
4
1
9
7
3
7
1
3
2
5
9
6
8
4
4
6
9
7
8
3
5
1
2
3
2
5
5
7
4
1
6
9
8
7
4
9
1
6
3
2
8
1
9
6
3
2
8
7
4
5
GAを用いて厳密解を求めるには、問題に対応した交叉や
2
3
8
1
9
7
4
5
6
個体の初期値を変えた再探索が重要である。探索時間の短
9
5
1
4
6
2
8
3
7
6
4
7
8
3
5
2
9
1
本稿では候補とする9×9パズルの10個を3×3ブロッ
ク単位に切り出して組み合せている。
⑦GA処理の前に制約条件を適用して、組み合せ回数を減
らすことが必要である。本稿では、第1段階で、縦と横方
向の制約条件により、組み合せ回数を減らしている。
6.おわりに
本稿では容易に解か否かを判断でき、解が相互に
独立している問題として、数独パズルを採用した。
突然変異、選択が必要である。局所解に落ち易いため、親
縮は初期の親個体に大きく依存する。現在、初期値生成の
良い方法は見つかっていない。また、選択では、2目的に
して、優先順序を付けることも考えられる[3]。3×3ブ
ロックの評価を順位1位、縦・横の評価を順位2位とする。
図10 評価18で保存された数独パズル
Fig.10 Saved Sudoku puzzle by evaluation 18
現状で、探索速度は人間とバックトラック法の方が早い。
しかし、親個体の初期設定によってはGAが早くなる。親
7.まとめ
個体の初期設定や遺伝的操作の仕組みを問題に対応させ
ることで厳密解を発見できると考える。
本稿では3段階方式の解探索を検証した。第1段階では、
参考文献
制約条件(縦・横・ブロックのユニーク性)による解空間
の縮小。第2段階ではGAによる解空間の絞り込み。突然
[1] Gen, M. and Cheng, R.: Genetic Algorithms and Engineering
Optimization, John Wiley and Sons, New York, (2000).
[2] 荒川正幹他:激辛数独7,KKニコリ,2009
[3] 椋田實,江藤香:遺伝的アルゴリズムの経路選択順方式による順
序付き最適化,第3回知能技術応用研究会,SOPEJ,2013
変異に縦・横ユニーク性の補正を組込み、一定の評価が得
られるまで初期値を変えて反復処理し10個の途中解を得
る。第3段階では3×3ブロック単位の全組合せにより、
5
The 15th J-C Workshop 2016&日本設備管理学会 2015 年度知能技術応用研究会(2016.2.18 石川四高記念文化交流会館)
解答
付録(実験データ)
8
4
7
1
5
2
3
6
9
3
1
9
8
6
4
2
7
5
5
6
2
7
3
9
4
8
1
4
5
8
3
2
7
9
1
6
6
9
3
4
8
1
5
2
7
2
7
1
5
9
6
8
3
4
5
7
3
6
2
4
5
1
9
8
6
9
8
4
6
1
3
7
5
2
1
2
5
9
7
8
6
4
3
Data file: data0101.txt
// Lebel 難しい問題、作:不明
5
7
9
8
1
9
4
1
7
8
1
1
4
7
3
5
1
Data file: data0105.txt
// 105(激辛数独7)株式会社ニコリ 発行:2010 年
// Level10 作:おく山みつゆき
解答
5
8
2
6
4
1
9
7
3
7
1
3
2
5
9
6
8
4
4
6
9
7
8
3
5
1
2
8
2
5
3
7
4
1
6
9
9
7
4
5
1
6
3
2
8
1
3
6
9
2
8
7
4
5
2
9
8
1
3
7
4
5
6
6
5
1
4
9
2
8
3
7
3
4
7
8
6
5
2
9
1
5
6
3
3
8
4
7
4
2
2
6
8
9
3
6
1
7
8
2
9
5
3
5
7
解答
Data file: data0104.txt
// 104(激辛数独7) 株式会社ニコリ
// Leval10 作:高由良りむ
発行:2010 年
8
9
1
4
2
3
7
4
7
3
7
5
5
6
8
1
1
4
6
1
5
3
6
9
8
2
4
7
1
3
6
5
6
5
1
2
3
8
4
7
9
7
4
3
5
6
9
8
1
2
5
3
6
7
9
4
1
2
8
1
9
4
8
2
5
6
3
7
8
2
7
6
1
3
5
9
4
2
7
8
1
5
6
9
4
3
4
1
9
3
8
7
2
5
6
3
6
5
9
4
2
7
8
1