Scratchで人工知能


2016年 07月 04日

最近は、猫も杓子も「人工知能」と「小学生からプログラミング」を話題にするようだ。
それで、「子供+人工知能」について考えてみた。子供向けプログラミング言語としては、MITのメディアラボが作って提供しているScratchが非常に有名であるので、これで何かAI的なものを作ってみようというのが普通の考えだろう。

Scratchのサイトに行くと、いろいろ公開されているアプリを見ることができる。簡単なゲームなどが多数あり、そのなかにはSUDOKU(ナンプレ、数独はニコリの®)というパズルを解くものも多数ある。ナンプレを解くくらいは簡単に動くだろうと思われるが、それではAIというには情けない。もっと頑張ったものを作ってみないとダメだ。

ということで、実は3年前に、ナンプレの問題を自動生成するプログラムを組んでみた。いや、正しくは、インターンシップに来た学生に作ってもらい、Scratchの評価をしたのだった。

Scratch-sudoku.jpg
Scratchで子供だましのプログラムを作って、これで小学生がプログラムを学習だけではいけないのだ。
将来のプログラミングは、Scrachの遣り方が主流になるかも知れないではないか。
このようにつまんでくっつける遣り方だと、文法エラーになる場合は、そもそもくっつかないので、文法エラーになるコードが作れない。

実際の動きをぜひ確認してみよう。http://scratch.mit.edu/projects/25661093/
この中にある旗をクリックすると、問題を自動生成し始める。 数字の個数(ヒント数)は25個に固定。でも、配置は、90度回転対称の配置を自動的に決めて、問題を作り始める。

旗を押すと盤面の上のバーが進んでいくが、右端まで到達しそうになっても消えてしまって、左端からやり直しに なることがある。これは、自動生成に失敗したことを示しているようだ。

生成時間は、運と、コンピュータの性能に依存するが、数分以内でできるはず。幸運な場合には1分以内。
Scratchはとても遅い言語で、普通にCなどで組むのに比べれば、数百倍遅くなってしまうが、これでも、ナンプレ雑誌、ナンプレ問題集に載っている普通の問題程度なら楽々できることが確認できた。

実際に自動生成された問題を解いてみよう。 ヒント数が25個だが、十分に易しい問題が出来る。 これは、自動生成から呼び出すナンプレソルバー(問題を解くプログラム)に組み込まれている手筋が、基本的なものだけになっているためだ。 インターンシップ期間が短いこともあって、手筋は基本的なものだけになった。

以上が、インターンシップの前半(1週間)で行われたのだった。