人工知能

割とギリギリに起きたものの、久しぶりに遅刻せずに到着。
今日の授業は問題解決に関するお話。
テーブルの上に積み木AとBが載っていて、積み木Aの上に積み木Cが載っている。これをクレーンで動かして、テーブルの上に積み木C、その上に積み木B、その上に積み木Aが載っている状態にしたい。…というような場合、人間であれば直観的にCをテーブルの上に下ろし、その上にB、Aの順に積み上げればいいと分かるんだが、これを計算機にやらせようとするとそう簡単にはいかない。
この問題を解くには、まず積み木の状態を把握し、その状態から最終状態に至るまでの可能な操作を行うためにオペレータというのを定義してやらんといけない。たとえばテーブルに載った積み木Xを持ち上げるだけでも、「クレーンが何も持っていない」「Xが別の積み木の上ではなくテーブルに載っている」「Xの上に別の積み木が載っていない」という点を調べてから初めて持ち上げることができる。そして持ち上げる前の状態からチェックした三点を消去し、新しい状態として「クレーンが積み木Xを持っている」という状態を追加する。
今日やったのは実際にどういう手順で積み木を操作するかというのはあらかじめ分かってるものとして、操作を行う際に上記のようなどんな点をチェックして初期状態から最終状態にもっていくのかという点。より一般的なアルゴリズムを求めるのはハノイの塔なんかよりよっぽど難しそうだなぁ。
こういうプログラムはPrologとかLispとかで書いたら楽なんだろうけどJavaでチャレンジしてみようなどという無謀なことを思い立つ。とりあえず操作部分の実装ができたら公開してみようかしら。

ランキング投票→