Home
パズル問題自動生成時代
ナンプレ
はじめに
プログラムで問題を解く
プログラムで問題を自動生成
- 手作りの方法
- 破綻の判定が欲しい
- 序盤の数字のばらまき方
- 多重解にならないために
- 中盤は統計的にごまかそう
- 終盤へのつなぎ方
- 良い問題を目指して
- 終盤は問題の選択
- 見かけが大切
- 隠れた工夫
- 面白さの実現について
- 自動生成プログラムのススメ
乱数の乱用だけでは限界
将来展望
- もしミリ秒で問題生成できたら
- 誰でも簡単に問題が作れたら
- 自動生成も多種多様
- 解き方を見て問題を提供
- パズル作家風の問題生成
- 自動生成プログラムの自動生成
- 多種パズルに適用可能な汎用的アルゴリズム
- いつごろ実現できるか (1)
- オープンソースでの公開
- パズル作家は何をすべきか
パズル問題自動生成時代 -- ナンプレ
手作りに期待すること
2つの方法
ナンプレの問題は、非常に解くのが上手になれば、 どうすれば問題を作ることができるか想像できるようになる。 ごく簡単に言えば、「解くように作る」でよいだろう。
手作りの方法については、今は説明しない。どうしても作り方を知りたい場合は、
ナンプレの問題を手作りしてみよう(初級)
ナンプレの問題を手作りしてみよう(中級編-24ヒント)
に一例を示しているので参考になるだろう。
さて、手作りはコンピュータで自動的に作るのに比べて時間がかかるのだが、それでも非常に重要だ。なぜなら、プログラムで自動的に作ろうとしても、いきなり自動生成するプログラムを組むことは少ない。
すこし、手作りしてみて、でき上がった問題を解いてみて、パズルをコンピュータで攻略する方法を考える。これは、解くプログラムでも、問題を作るプログラムでも同じだ。
人間のやり方をプログラムで実現
プログラムの最も普通の利用方法は、人間が解いたり作ったりするときの手順、方法を、コンピュータにさせてしまうことだ。
自分のやり方をきちんとまとめて、プログラムにしてしまえばOKだ。
しかし、実はかなり面倒である。プログラムにできるほどきちんとまとめるのは簡単ではない。解く方はそれほどでもない。
しかし問題を作る方はより面倒になる。また、多くのプログラマは、問題の手作りの方法を知らないので、この方法を最初から放棄している場合が多い。
非人間的(プログラムならではの)方法
もう1つは、プログラムでないかぎり不可能な方法である。まず、コンピュータは虱潰しで調べることは得意だ。コンピュータの性能が上がったので、最近になってかなり有効な方法になってきた。
それ以外にも、人間だったら不可能だが、大量のデータを処理できるコンピュータならではの方法が色々考えられる。これらの方法のいくつかは、後で説明するつもりだ。
ただし、注意が必要だ。非人間的に作った問題は、多くの場合、非人間的な問題になってしまい、解いても面白くなくなる。やたらに淡白な問題だったり、やたらに難しいだけの問題になりがちだ。
そういう問題点はあるものの、ちゃんと注意をして、人間的立場から見て面白いかどうかの判定を何等かの方法で取り込めば問題の品質はぐーんと上昇する。
コンピュータへの期待
まず、コンピュータに期待できること、期待したいことを書いておこう。
つまらないことを延々とやってくれる
人間は、面倒なことをやりたがらないし、やっても間違えてしまう。しかし、コンピュータは、大変な速度で調べ尽くすのがとても得意だ。もちろん速度にも限界があるが、つまらない処理をやらせれば人間と比較すれば1万倍以上高速だろう。
実は、今回紹介するナンプレの問題自動生成では、「延々と調べる」という到底人間には不可能なことをさせている。せっかくコンピュータを使うのだから、コンピュータ無しでは不可能な方法で問題を作った方が面白いではないか。
見逃し、勘違いをしない
人間は、極めてしばしば見逃しや勘違いをする。問題を作るとき、うっかり見逃すことがある。そして、ナンプレは、作問の途中で見逃しをやってしまうと、もうその先は無駄なんだが、人間はなかなか気がつかない。
途中まで作ったところで、まだ問題として成立するかどうかを検査ができればどんなに楽かと思う手作り作家は多いはずだ。
問題が正しいかどうかの確認
ちゃんとした手順を踏んで作れば、解は1つに決まっているのだが、人間がやった場合にはミスが発生している場合も考えられる。また、プログラムで自動で作った場合でも、プログラムにバグは潜む可能性があるので、でき上がった問題のチェックは重要だ。
問題のチェックは、人手でやるととても時間がかかる上に間違いも犯す。だから、問題として大丈夫かどうかは、コンピュータで判定して欲しい。今では、インターネット上に、問題を入れれば、解が一意かどうかを調べてくれるサービスが多数転がっている。つまり、その程度のプログラムは簡単に作れるということでもある。
少ない表出数字の問題づくり
コンピュータに対する期待のレベルも色々ある。その中で代表的なのが、できるだけ数字を少くしても成立する問題を見つけることだ。
点対称の場合、18個が最小らしい。点対称でなく、線対称でもよければ17でもできる。
こういう問題を人手で作ろうとすると大変だ。見逃しなどしていたら、けっして出来ない。人間の集中力には限界がある。まあ、一部のパズル作家の集中力は、常識では考えられないくらいあるので、出来る作家もいるにはいる。
コンピュータなら、条件に合う問題ができるまで、プログラムを何時間も何日も走らせ続けても大丈夫だ。いくら長時間実行させても文句を言わない。せいぜい多少の電気が必要なくらいで、人間のように面倒ではない。
量産
コンピュータの場合、量産できる。現状では、質の悪い問題なら瞬時にできるが、品質を考えるともう少し時間がかかる。それでも、一晩で100問くらい作るのは容易なことだ。人間は、通常1問作るのに、簡単な場合でも30分くらいかかるであろうか。パズル問題集を1冊作ろうと思うと、作業量はかなりなものとなろう。
量産できてしまうと、できた問題を惜しげもなく捨てることが可能になる。ちょっと見た目が面白くないからとか、解き味が悪いからとか、ほんのちょっとした不満点があったときでさえ捨てられる。
人間が手作りする場合、そうはいかない。気に入らないから修正とか、もう1問と言われたら、また頑張って問題を作らねばならない。だから、人間が手作りしていては、問題を捨てるということに強い抵抗がある。
評価
ただ作るだけでなく、評価をしなければならない。評価も、常に人がやっていれば、その作業量は大変だ。評価が出来る人というのは、当然問題が作れるレベルでないとまともな評価ができない。そうなると、大変な手間、要するにコストが発生する。たとえ無料で問題を入手しても、評価に人手がかかっていればやはり問題は高価になってしまう。つまり、手作りとほとんど変わらない。
問題の正当性だけでなく、難易度や面白さも評価できれば、非常に助かる。今までのプログラムは、このあたりまで突っ込んだ評価を試みていなかったようだが、今後は様々な基準で評価まで行うのが重要になろう。
手作りへの期待
コンピュータでさまざまなことが可能になっている。だから、手作りには、当然のことながら、コンピュータでは出来ないこと、上手くいかないことを期待する。
パズル作家は多数いるのだが、作家毎に問題に傾向があるのを御存じだろうか。それぞれの作家には、作るときに秘法(?)がある。秘法というよりも、癖というべきだろうか。それによって、問題に傾向が出てくる。
問題を解くとき、あるテクニックばかりを多用しないと解けない問題を作る作家は多い。あまり使われないテクニックを、1問の中で何度も使わねばならないなどその典型だ。
ある作家の問題は相性がよいのか解きやすく感じられ、別の作家のはどうも途中でミスを犯しやすいことがあるだろう。そういうのが、作家、作問の特徴だ。
問題をどう組み立てるか、そういう企画、演出部分でいかに斬新な方法を示すかが重要だ。それにより、多くのパズラーは新鮮さを感じる。
コンピュータで問題を解いたり作ったりするとき、根本の部分では既知の方法と乱数を組み合わせて何とかしている。新しい方法を自動的に見つけるプログラムはまだ当分できないのではないかと思う。
たとえできたにしても、自動的に見つける方法を見つける方法は人間が考えたものになろう。どこまでいっても、人間が考えてやらないとだめではないかと思うが、それでもどんどん進歩はしていくだろう。
最も根底になる部分は、まだまだ人間が考えないといけない。人間が考え、人手またはコンピュータで問題を作ってみて、新たな方法を採用すべきかどうかを考える。
コンピュータで問題を作れるようになると、手作業で問題を作っていた時代が懐かしくなる。それでも、手作りは必要だ。なんたって、作り手が変ると、いままでにない方法で作る可能性がある。プログラムの作り手のパズル理解度で、作られる問題の品質、傾向が左右される。
手作りの重要性というよりも、様々な考え方、多樣性が必要ということだ。

