この論文をより深く理解するための準備を続けよう。今回は先生が例題として掲げられた12枚の金貨のパズルを理解することに挑戦してみよう。
楽しいパズルなので、ぜひ回答を見る前に自分で考えて欲しい。
ちなみに先生のAIは Intel Core(TM) I7-6600U CPU @2.6GHz 16GBのPC環境で0.074秒で解いてしまったようだ。あなたは何秒?何時間?
※今回からこのブログで絵を描くやり方を工夫しようやく採用できました。今まで文章ばかりで失礼しました。
これからは得意の図や表を入れて行きますので引き続きごヒイキに。
問題(天秤のコインのパズル)
ここに、12枚のコインと一つの天秤があります。
12枚のコインのうち1枚は偽物で、他の11枚のコインより少し重くなっているか、少し軽くなっています。どのコインが偽物かはわかりません。
あなたは12枚のコインから数枚のコインをとって、天秤を使って重さを比較することができます。ただし、天秤は3回しか使えません。3回の重さを比べて、1枚の偽物のコインを見つけることができるでしょうか?
※1 この問題文は、武藤先生の著書「OTTER(論理パズルからのアプローチ)」(近代科学社)
P2より引用、加筆したもの)オリジナルは11枚のコインでの出題
※2 このパズルは、コンピュータアルゴリズムの例題として有名なもののようで ※1によれば、1945年にE.シェルという
人が、American Mathematical Monthly に発表したのが最初と言われています。
※3 この問題はもっと数学的に表現できるようで、コインの枚数をN、天秤で量る回数をkとすると、
偽物のコインが重いか軽いかわかっていない場合は
N=(3のK乗ー1)➗2が、特定できるコインの枚数の上限であることが知られているようです。
今回はN=12、量る回数は3ですから、 (3*3*3−1)÷2=13ですので、12枚は13枚の内側ですので
全て特定できることになります。
※3から全部特定できるようです。 AIに頼らずまず自分の頭で解いてみましょう。
パズルの解答例
この回答はあくまで私の自力での回答のため、ベストかどうかの検証はやっていません。
1回目 左右に4枚ずつ、コインを天秤にかける
(1)釣り合わなかった場合(重く下がった方をABCDとする)
これにより、天秤にかけなかった残りの4枚は正しい金貨であることが確定する
(1−2)2回目 8枚の中から6枚をとり、ABEとCDFという組み合わせで天秤にかける
(1ー2−1)釣り合わなかった場合
(1ー2ー1ー1)ABEが重く、CDFが軽く 傾いた場合
ABCDはEFGHと比べて重いことは第1回目でわかっている。
疑われる1枚は
・ABCDの中で、重い1枚としてあるか
・EDFGの中で、軽い1枚としてあるか
のどちらになるはず
・ABEとCDFの天秤でABEが重いと
重い側の3枚で重いと疑われるABの2枚のどちらかが重いか(あ)
軽い側の3枚で軽いと疑われるFの1枚が軽い(い)(この場合はここで詰み)
に絞られる
そこで3回目
AFと正しい金貨2枚 という形で組み合わせて天秤にかける
(1ー2ー1ー1ーあ)3回目の結果
釣り合わなかった場合
AFが重かった場合はAが偽物(詰み)
AFが軽かった場合はFが偽物(詰み)
釣り合った場合
残りの疑いはB、Bが偽物(詰み)
この続きはこう展開される
上の解答例がどれくらい賢いのかはわからないが、途中まででこれだけの記述が必要になった。
当たり前だが、3回の天秤に対して、釣り合うか傾くか その2×2×2通りの場合分けになる。
(緑色の部分が上で私が書いた解答部分)
(1)1回目で天秤が傾いた場合
(1ー1)2回目で天秤が傾いた場合
(1ー1ー1)3回目で天秤が傾く場合
(1ー1ー2)3回目で天秤が釣り合う場合
(1ー2)2回目で天秤が釣り合った場合
(1ー2ー1) 3回目で天秤が傾く場合
(1ー2ー2)3回目で天秤が釣り合う場合
(2)1回目で天秤は釣り合った場合
(2ー1)2回目で天秤が傾いた場合
(2ー1ー1)3回目で天秤が傾く場合
(2ー1ー2)3回目で天秤が釣り合う場合
(2ー2)2回目で天秤が釣り合った場合
(2ー2ー1) 3回目で天秤が傾く場合
(2ー2ー2)3回目で天秤が釣り合う場合
わかったこと
このシリーズでわかりたい2つのこと
私はこのパズルを解くのに2時間半かかった。
最初に4枚のコインの数を天秤にかけるのを探すのに30分、そして2回目にコインを組み合わせを考えるのに1時間、あとはその組み合わせをやりきるのに1時間。
武藤先生のAIは1秒とかからないで解いてしまう。
この人間とAIの思考の違いをこのシリーズできちんと解き明かしてゆきたい。
これが1つ目である。
上で人間が考えたことを単純な業務系のプログラム言語(例えばC言語等)でやらせたらどうなるだろう。最初につまずくのが、4枚のコインを選んで最初の天秤にかける部分の判断・推論である。どうやって4枚を選ぶのか? そして2回目の3枚の入れ替えの組み合わせはどうだろう。
判断した結果を単純にデータ処理するなら多くのシステムエンジニアは対応できるだろうが、こうした推論は全く別の形のソフトウエアであることを理解しないといけないようである。
ここをきちんと理解したい。これもこのシリーズで解き明かしてゆきたいテーマである。
これが2つ目である。
このあたりの話を少し武藤先生の著書を引用して書いておきます。
「人工知能のアルゴリズムは、最適化、教師あり学習、教師なし学習の3つに分類できる。」
「プログラミング実行系は、命令(手続き系)型、関数(宣言)型、そして定理証明系の3つに分類できる」
先生の著書「OTTER 論理パズルからのアプローチ」(近代化学社刊)P1より引用。
武藤先生の開発されたプログラムは、学習を超えた推論のための言語で、最適化や定理証明系の分類に入るものと思われます。
いやぁ、DEEPですねぇ。