中毒化させる技術 / 「倉庫番」ソルバー

雨。
五時頃に目が覚める。世界を回転させていく。

共同体をつくる科学の言葉 (後篇) | ドミニク・チェン×全卓樹「共同体をつくる科学の言葉」 | ドミニク・チェン , 全卓樹 | 対談・インタビュー | 考える人 | 新潮社
おもしろい。「FacebookAppleといった大企業は、人々を中毒化させる技術を、認知心理学行動経済学の知識を幅広く集めてつくろうとしていて…」、というのはなるほどという感じ。「非倫理的に、人の行動を強化学習やオペラント学習でいくらでも制御できるようにすること」。こういう発想はもっと普遍化するだろう。「中毒化させる技術」というのが、まさに現代だ。考える、考えさせるのではなく、中毒、中毒化させる。この流れは止まらないだろう。皆んな気持ちのよいのが好きだからね。つまりは、内面を支配するということ。究極的な管理だ。「考える」というのも、ゲームを見ればわかるように、「パズルを解く」ことは気持ちがよい、ゆえに中毒化する。

スーパー。

倉庫番」というよく知られたパズルゲームがあるが、ふとそのソルバー(自動的に解くプログラム)というのはどうすればよいのかなと考えた。Brute Force(総当り法)ならば実装はそれほどむずかしくなさそうだなとすぐに思ったのだが、あまり考えることなく検索してみたら、「倉庫番」のソルバーはじつに奥が深いことがわかって驚いてしまった。例えばこのサイトなどはよくまとまっていて、倉庫番は問題としては「PSPACE完全」というのである。とかしらっと書いたが、わたしは「NP完全」くらいなら多少なじみがあるけれども、「PSPACE完全」というのは知らなかったね。「NP完全」以上にむずかしいというのである。つまり、人間には解けているけれどコンピュータには無理という問題がたくさんあって、実際ゲームソフト内の問題でもそうだというのだ。
 Brute Force でも、まず人の動きは経路がループし得るからどうするか。倉庫番は基本的に荷物の動きになるのだから、荷物ベース(つまりある荷物の上下左右に到達できるか)で考えればよいだろう。で、荷物をひとつ動かしただけで局面ががらっと替わる、というかまったく新しい問題になってしまう。荷物の動きもループし得るから、局面を何らかの形で記憶させておかねばならない。そしてむずかしそうのが「手詰まり」の判定だ。これは重要だが、これこそがむずかしそう。Brute Force なのだから、既出の局面以外に出られなくなったら「手詰まり」としておくか。いや、Brute Force でも面倒くさいじゃん。

倉庫番ソルバー(Brute Force) · GitHub
というわけで、一日かけて「倉庫番」ソルバー、Ruby で実装してみました。勢いでやったのだが、疲れたー。アホやね。