謹賀新年:人工知能でナンプレ問題集をつくる


2017年 01月 01日

新年明けましておめでとうございます

本年も技術的に尖ったこと、変なこと、色々紹介できればと思っております。

DSCF5095 (300x400).jpg       DSCF5098 (300x400).jpg


VS人工知能難問ナンプレ.jpg正月休みということで、変なプログラミング三昧のエンジニアも多いかと思いますが、
ちょっとプログラミングの話はお休みにして、プログラムを使って作っているものを紹介します。

右の写真は、この12月16日に発売になったばかりの『VS人工知能難問ナンプレ』です。
このナンプレ問題集は、タイトルにもあるように実際に人工知能、要するにプログラムを使って自動生成して作りました。

というより、我々というか、パズルの問題の既に多くの問題が人工知能技術により自動生成されています。将棋、囲碁が人工知能の脅威にさらされている昨今ですから、パズルの問題が人工知能によって作られていることに何の不思議もないでしょう。

パズルの問題は人間が作るから良いという人も未だにいますが、もう遠い過去の思い出になってしまいました。人工知能が作った問題とパズル作家が頑張って作った問題の区別はできません。いや、凄い問題の方が人工知能で、普通のが作家という判断はかなり正しいのです。これは、囲碁や将棋で、人工知能が指す手が意味不明でプロ棋士も解説できないけれど、結局人工知能が勝ってしまうのと同様といえます。

とくに本書は、パズル作家と呼ばれる人々ではほとんど作るのが困難なような問題をできるだけ多く入れています。
問題の数字の個数(ヒント数)が少ないだけの問題集は他にもありますが、ヒント数が少ない状態で難易度をきちんと調整し、配置にも美を重視しています。

ヒント数が少ないと必ず難問になるという誤解も多いですが、そんなことはありません。難易度の調整が難しくなるだけで、本書でも、全部が難問ではなく、かなりやさしい中級レベルの問題から、本当に難しい問題まで、人工知能によりバランスよく作らせています。

今は、人工知能と言うと何でもディープラーニングという考えがありますが、パズル問題の自動生成は別のタイプの人工知能を使うのが一般的です。
人工知能は生物、人間をモデルにすることが多いのですが、超大雑把に言って、脳をモデルにしたのがディープラーニングで、生物の進化をモデルにしたのが進化的計算で、なかでも遺伝的アルゴリズムが有名です。遺伝的アルゴリズムはアルゴリズムや人工知能の授業でも普通に教えられることで、そのタイプの人工知能を利用してこの問題集も作られました。

Pythonでナンプレを解く方法を書いている最中ですが、ナンプレを作るにはナンプレを解くプログラム(ソルバー)が必要ですが、問題作成中にソルバーを延々と呼び出すので、ソルバーはできるだけ高速でないといけません。そのため、Pythonは使っておらず、JavaやC/C++を利用しています。まあ、1ミリ秒程度で問題を解けないと、良い問題集を作るのは無理でしょう。

まあ、そういう背景を知った上で、本書で正月休み、さらにはその後の暇つぶしに本書を利用していただければ嬉しいかぎりです。あるいは、お年寄りのボケ防止にもなるでしょう。とくに母親がパズル好きというパターンは非常に多くなっています。親孝行にぜひ1冊いかがでしょうか。

最初の2枚の写真は、本ができて送られてきた200冊の本をつかって、パズルタワーを作ったところです。
昔、大手書店のスーパー書店員が多数売りたい本をこんな風に積み上げていたのを思い出して、つい作ったものです。
本書を入手希望の方は、弊社入り口ロビーにこのタワーがありますので、タワーが倒れないように1冊持っていってください。
万一倒れた場合には、積み直しておいていただければ助かります。