説明

数理パズル自動生成システム

【課題】
唯一解の数理パズルを高速に生成することができるシステムを提供する。

【解決手段】
複数解を持つようなパズルであれば一般に生成は容易である。
そこで本パズル自動生成エンジンはパズルの持つ解の個数に着目し、
その値が減少するように制約条件を部分的に繰り返し変更してやることで
最終的に唯一解のパズルを得ることを特徴とする。
但し解の個数を計算するのは通常困難であるため
その代用として、不確定変数の個数もしくは候補数の総和を用いる。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、雑誌などでよく見かける筆記具を用いて解くタイプの数理パズルの
自動生成手法に関するものである。

【背景技術】
【0002】
従来、パズルの問題のほとんどは作家による手作りであった。
一部のパズルではプログラムを用いて問題の自動生成も行われていた。

【発明の開示】
【発明が解決しようとする課題】
【0003】
これは次のような欠点があった。
従来の方法では、見栄え・解き心地ともに一定のレベルを満たした問題を
高速かつ大量に生成することはできなかった。
本発明は、以上の欠点をなくすためになされたものである。

【課題を解決するための手段】
【0004】
複数解を持つようなパズルであれば一般に生成は容易である。
そこでパズルの持つ解の個数に着目し、その値が減少するように
制約条件を部分的に繰り返し変更してやることで最終的に
唯一解のパズルを得る。但し解の個数を計算するのは一般に困難であるため
その代用として、不確定変数の個数もしくは候補数の総和を用いる。

【0005】
本発明は、主として盤面状態を管理するステータス部(Status)、問題を解くためのソルバー部(Solver)、それらを用いて問題を生成するジェネレータ部(Generator)からなる。以下ではパズルの定義と各部の役割について説明する。

【0006】
パズルに関する諸定義:
ここで扱うパズルとは数学的観点からすれば制約充足問題に位置づけられる。これはいくつかの変数に対して与えられた制約を満たすようにそれらの値を決定する問題である。

全ての制約充足問題のうち、変数とその制約に対してある種の枠組みを設けたものをパズルと呼ぶ。パズルの例としてはナンプレ・魔方陣・虫食い算などが挙げられる。世間一般に広く知られているパズルの特徴として、人が感覚的に理解しやすい制約が設けられているという点が挙げられる。
あるパズルのルールとして定められた枠組みの中で、変数の組とそれらに対する制約を具体的に決めたものをそのパズルに対する問題と呼ぶ。
ある問題に対し、どの制約も満たしているように変数の値が与えられたものをその問題の解と呼ぶ。通常パズルの問題は解が唯一に定まるように作られているが、ここでは説明の便宜上、解が存在しない又は複数の解があるようなものも問題と呼ぶことにする。

【0007】
ステータス部の役割:
ステータス部は盤面状態を管理する部分である
変数の値及びそれらが取り得る候補、並びにそれらに付随する情報を管理する。

【0008】
ソルバー部の役割:
ソルバー部は問題を解く部分である。
入力された問題に対し、制約から値が一意に確定する変数に対してはその値を出力。
複数解が存在し、変数の値が一意に定まらない場合は不定として出力。
妥当な値が存在しない場合は解なしと出力する。

【0009】
ジェネレータ部の役割:
ジェネレータ部は問題を生成する部分である。
入力された初期解とヒント配置から特定のパズルの唯一解の問題を出力する。

【0010】
アルゴリズムの概要:
ジェネレータは初期解とヒント配置から種となる問題(唯一解とは限らない)を生成し、ソルバーに通す。ジェネレータはソルバーの出力結果における未確定変数の個数をチェックする。これが0のとき、即ち全ての変数が一意に確定したとき問題は唯一解となり完成である。

未確定変数の個数が0でない場合、ジェネレータは問題に対して局所的な変更を行い再びソルバーに通す。このとき出力結果における未確定変数の個数が先ほどの結果より減少しているならば唯一解の問題に近づいたと判断し、その変化を残して次の変更を行う。未確定変数の個数が減少しないもしくは解が存在しない場合は変更箇所を元に戻して再び変更を行う。
以上の操作を繰り返し、未確定変数の個数が0になる(生成成功)もしくは規定以上の変更を施しても不確定変数の個数が減少しない場合(生成失敗)手続きを終了する。
本発明は、以上のアルゴリズムを適用したパズル自動生成システムである。

【発明の効果】
【0011】
本発明の有効性を実証すべく「ナンバープレース」(以下ナンプレ)と呼ばれる種類のパズルに対して実際に自動生成エンジンを作成し問題の自動生成を試みた。

【0012】
ナンプレのルール:
ナンプレとは3×3の九つの領域に分けられた9×9の盤面の各列および各領域に、1から9までの数を一つずつ配置するパズルである。盤面にはヒントとしてあらかじめいくつかの数字が与えられている。

【0013】
仕様:

入力
表出数字(ヒント)の位置を意味する9×9のブーリアン配列
ナンプレの解としての条件を満たした9×9の整数配列

出力(成功時):trueの位置を表出数字とする唯一解のナンプレ
出力(失敗時):ジェネレータ部での処理を終えた最終盤面

【0014】
実現方法:
アルゴリズムの概要で記した処理はパズルの種類によって具体的な実現方法が大きく異なる。ここではナンプレに特化した自動生成エンジンについて説明を行う。まずジェネレータは入力された初期解とヒント配置から種となる問題を一つ生成する。これは単に初期解から与えられたヒントパターンだけを残して他の数字を除くことで実現する。続いて種となる問題はソルバーに通され、その結果に応じてジェネレータは問題に対し局所的な変更を行っていく。ナンプレにおいてこの処理は単純に表出数字の変更である。ただし今回の仕様では表出数字となるべきパターンが固定されているため許されるのはあくまでもパターン上にある数字の変更だけで、ヒントの箇所の移動や追加は行わない。具体的な変更手順については割愛する。

【0015】
実験内容:
一試行ごとに異なるヒント配置と初期解を入力として計一万問のナンプレを作成し、それに要した時間を計測した。用いるヒント配置のパターンはパズル作家が問題を作成する上で平均とされるヒント数が24個付近で、かつヒントの配置が点対称になっているものとした。

【0016】
結果:
パソコン(Windows XP, Celeron®
CPU 2.80GHz)で1問当たり約20ミリ秒程度で作成することができた。数十分程度かかっていた手作りはもとより従来の高速とされるナンプレ自動生成エンジンと比べても二桁から三桁ほど高速化されている。


【発明を実施するための最良の形態】
【0017】
以下、本発明を実施するための最良の形態についてナンプレを例に取り説明する。
パズルによって最適な適用法は異なる。

【0018】
ステータス部:変数の値とその候補に加え、各列各ブロックにおいてある数が入る候補となるマス数、あるマスに入る候補数などを保持する。ソルバーはこれらの値を参照することで解答作業を効率よく行うことができる。

【0019】
ソルバー部:いくつかの状態遷移規則(一般には手筋と呼ばれる)に基づく代入を繰り返すことで論理的に演繹できる部分のみ変数を確定させるものを使用する。ジェネレータを通して呼び出される際、他と一部だけが異なる似通った問題を高速に多数解くことが要求されるため、変化のあった周辺のみを次の探索対象にする再帰型ソルバーを用いるのが望ましい。

【0020】
ジェネレータ部:ヒントの数字を変化させる度にソルバーを呼び出して一から解き直すのは非常に無駄である。このため、共通した箇所を持つ問題を一括りにして共通部分のみを残して解かせたものを保存しておく。その上で、異なる部分のヒントを新たに注ぎ足し、その箇所だけソルバーにかけるようにする。ここで上で述べたような特性を備えたソルバーが必要となる。

【0021】
本アルゴリズムは単純な原理で実現されており、非常に短いコードで実現できるため
携帯、小型ゲーム機などでの利用も考えられる。


【図面の簡単な説明】
【0022】
【図1】本発明の模式図である。

【特許請求の範囲】
【請求項1】
唯一解の数理パズル(制約充足問題)を自動生成することを目的としたシステムで、
問題の生成過程において以下に示すような特徴を有するもの。

(イ)
複数解を持つ問題に部分的な変更を繰り返して唯一解に近づける。
(ロ)
唯一解までの距離が何らかの形で定義されている。
(ハ)
距離が減少するように制約条件の変更を行う。

【図1】
image rotate


【公開番号】特開2009−28428(P2009−28428A)
【公開日】平成21年2月12日(2009.2.12)
【国際特許分類】
【出願番号】特願2007−197610(P2007−197610)
【出願日】平成19年7月30日(2007.7.30)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.WINDOWS
【出願人】(399124738)株式会社タイムインターメディア (1)
【Fターム(参考)】