ヘキサポーン Hexapawn
簡単なゲームを題材にした学習機械です。数学者で数学パズル研究家のマーチン・ガードナー(Martin Gardner)氏によって紹介されことで有名になりました。
ゲームのルール
チェスを簡略化したゲームです。
3×3の盤上で白黒それぞれ三つの駒(ポーン)を使用します。白の先手で交互に一手ずつ指すのはチェスと同じです。
駒の動き
- 1マス前に進む。
- 斜め前に相手の駒があるときは取ることができる。
勝敗の決め方
次の条件に当てはまった側が勝ちとなります。
- 3マス目に自分の駒を進める。
- 相手の駒を全て取る。
- 相手の駒が動けないような配置にする。
学習するマッチ箱
ヘキサポーンは、マッチ箱とビーズ玉によって作成された学習機械と人間が対戦を行います。何回か対戦を繰り返すうちに、マッチ箱が学習を行い、だんだんと強くなります。
マッチ箱の準備
- 後手(黒)が打つ全ての盤面が書かれたラベルと、ラベルと同数のマッチ箱を用意します。
- そのラベルに、次に打てる手を別々の色で記述します。
- 全てのラベルをマッチ箱に貼って、記述された手と同じ色のビーズを入れます。
ゲームの進め方
マッチ箱の手番では、次の操作を行います。
- 現在の盤面と同じラベルが貼ってあるマッチ箱を探します。
- そのマッチ箱から無作為にビーズを1つ取り出します。
- ラベルを見て取り出したビーズの色に対応した手を打ちます。
以上のように、勝敗が決まるまで行います。マッチ箱が勝った場合には、取り出したビーズを全て元のマッチ箱に戻します。マッチ箱が負けた場合には、最後に打った手のビーズを取り除き、他のビーズを元の箱に戻します。
プログラムについて
プログラムでは、ラベルの貼ってあるマッチ箱とビーズ玉をシミュレートするのではなく、負けに至った手を記録し、その手を打たないようにしています。
具体的には、以下のようにします。
- ルール上、可能な手を選びます。
- もし、それが、記録してある負けに至る手であれば他の手を選びます。
- コンピュータが負けた場合には、ビーズを取り除く代わりに、負けに至った最後の手(盤面と駒の動き)を記録します。
+---+---+---+
3 | ○| ○| ○| 7 8 9
+---+---+---+
2 | |:::| | 4 5 6
+---+---+---+
1 | ●| ●| ●| 1 2 3
+---+---+---+
a b c
駒を選んでください(1~9):1
どこに動かしますか?(1~9):4
+---+---+---+
3 | ○| ○| ○| 7 8 9
+---+---+---+
2 | ●|:::| | 4 5 6
+---+---+---+
1 |:::| ●| ●| 1 2 3
+---+---+---+
a b c
マッチ箱: b3 を b2 へ
+---+---+---+
3 | ○| | ○| 7 8 9
+---+---+---+
2 | ●| ○| | 4 5 6
+---+---+---+
1 |:::| ●| ●| 1 2 3
+---+---+---+
a b c
駒を選んでください(1~9):3
どこに動かしますか?(1~9):5
+---+---+---+
3 | ○| | ○| 7 8 9
+---+---+---+
2 | ●| ●| | 4 5 6
+---+---+---+
1 |:::| ●|:::| 1 2 3
+---+---+---+
a b c
マッチ箱: a3 を b2 へ
+---+---+---+
3 |:::| | ○| 7 8 9
+---+---+---+
2 | ●| ○| | 4 5 6
+---+---+---+
1 |:::| ●|:::| 1 2 3
+---+---+---+
a b c
駒を選んでください(1~9):4
どこに動かしますか?(1~9):7
+---+---+---+
3 | ●| | ○| 7 8 9
+---+---+---+
2 | | ○| | 4 5 6
+---+---+---+
1 |:::| ●|:::| 1 2 3
+---+---+---+
a b c
白の勝ちです。
終了する場合は'Q'、続ける場合は他のキーを押してください
ソース・コード