三目並べと五目並べのPythonプログラム

このスライドでは三目並べや五目並べを題材にして「ルールベース」と「強化学習」のPythonプログラムの違いについて学びましょう

「ルールベース」と「強化学習」の違いについての重要ポイント

以下の図は、従来の「ルールベース」とAIの「強化学習」のプログラミングの違いをまとめたものです。

このスライドで理解していただきたいのは それぞれプログラミングの「考え方」が全く異なるという点です

特に強化学習のようなAIは プログラムよりも「データ」が重要である点に注目して 確認していきましょう

Pythonプログラムによる盤面の表現について

三目並べと五目並べの「強化学習」を使ったPythonプログラムはどのように書かれるのか確認しましょう

まずは「変数」と「ルールベース」でのPythonプログラムをおさらいしてから 「強化学習」のPythonプログラムを確認しましょう

盤面とマスごとの変数の確認

「三目並べ」の盤面は3×3の合計9マスとなり、左上から順番に、盤面のマスを「masu1」~「masu9」という「変数名」で表します。


一方、「五目並べ」の盤面は5×5の合計25マスとなり、左上から順番に、盤面のマスを「masu1」~「masu25」という「変数名」で表します。


例えば、一番左上に「〇」の石が置かれている場合、「masu1」の中には「〇」が入っている状態になります。

また、何も置かれていないマスには、空いているマスであることが分かるように「―」というデータを入れておくことにします。

本来の「五目並べ」は ゲーム性を高めるために「15×15」や「19×19」の盤面で行われますが このレッスンでは「5×5」の盤面で説明を行います

「ルールベース」のPythonプログラム

以下のPythonプログラムは、前回のレッスンで行った「ルールベース」での三目並べのPythonプログラムの一部です。

現在、先手(〇)の場合、盤面の左上のマス(masu1)とその横のマス(masu2)に相手の「×」の石が並んでおり、右上のマス(masu3)が空いている状態(空いているマスには'-'のデータが入っている)であることが、一行目の条件に記述されています。

次に、二行目には、一行目の条件が成立するとき、空いている右上のマス(masu3)に'〇'の石を置き、相手の勝利を阻止する「勝利阻止」のルールが記述されています。


そして、これと同じように「勝利阻止」の判定を五目並べで記述すると、以下のようなif文になります。


次に、三目並べと五目並べのルールベースのPythonプログラムの全体像を見てみましょう。

ここではプログラムのボリュームの違いを確認するため、文字はとても小さくしてありますので、内容を確認する必要はありません。

三目並べと五目並べで同じようなことを実現しようとした場合に、ルールベースだとこれだけ記述する量が違うことに注目してください。

三目並べと比べると 五目並べの方は 行数も文字数も すごい量になっているな…

今回見ていただいたPythonプログラムは、「勝利阻止」の戦術だけが書かれています。


三目並べでの「勝利阻止」のPythonプログラムで、「縦・横・斜め」を判定するif文は全部で24パターンとなります。

五目並べの場合の「勝利阻止」のPythonプログラムでは、if文のパターンは大幅に増え、全部で60パターンとなります。

これに加えて、前回のレッスンで学んだ「勝利確定」や「中央優先」などの戦術をPythonプログラムで書く場合、大量のif文が必要になります。

こんなにたくさんの量のプログラムなのに 「勝利阻止」の戦術だけしか書かれてないんですか!?

全部の戦略をPythonプログラムで表すとしたら 何行書かなきゃいけないんだろう…

では次に 強化学習を使ったPythonプログラムを見てみましょう

「強化学習」のPythonプログラム

ここでは、三目並べと五目並べの、強化学習のPythonプログラムの全体像を見てみましょう。


あれ?よく読んでみると どっちもほとんど変わらないような気がしますね…

三目並べと五目並べの、強化学習のPythonプログラムは、実は全く同じ書き方になります。

それでは、先ほど確認したPythonプログラムには、どのようなことが書いてあるかを確認してみましょう。



三目並べと五目並べにおけるPythonプログラムの違いは、「Qテーブル」変数に格納されるデータの違いだけです。

このPythonプログラムを実行すると、AIは強化学習を通して対戦を行い、その結果が次々と「Qテーブル」に格納されていきます。

このとき、三目並べと五目並べでは「Qテーブルに格納されるデータ量」にも違いがあります。

「ルールベース」では 特にPythonプログラムの量に違いが出たと思うけど 「強化学習」で大きな違いが無いのは何でだろう?

プログラムの通りに動く「ルールベース」は「プログラムそのもの」が大事になります

ですが「強化学習」では 「プログラムそのもの」よりも AI自身が行う「学習データ」に大きな役割があるため Pythonプログラムに大きな違いは出ないのです

この「学習データ」を格納していく「Qテーブル」について詳しく見ていきましょう

「Qテーブル」とは

強化学習では、対局を繰り返すごとに、盤面ごとの「評価値」を更新し、AIはこれをもとに次に打つ手を考えます。

対戦を繰り返すことで得られたこのデータは、「Qテーブル」変数に格納されます。


例えば、一度も学習をしていない状態の三目並べの「Qテーブル」は、以下のようになります。

「Qテーブル」の中身は{}の中に書かれますが、以下の例では何も書かれておらず「空(何もない状態)」であることが分かります。


次に、学習を行った状態の「Qテーブル」を見てみましょう。

以下の図の左側が「Qテーブル」を表すPythonプログラムです。この「Qテーブル」自体が、三目並べの盤面を示しています。

「Qテーブル」の中に書かれてある「'masu1':'〇'」や「'masu4':'✕'」は、それぞれのマスに置かれた石を表します。また、「―」は石が置かれていない「空白」を表しています。

末尾に書かれてある「:75」という数値は、「〇」を打つ側が強化学習AIのときに、この盤面の評価値は「75点」であることを表しています。


もう一つ、学習を行った状態の「Qテーブル」を見てみましょう。

この「Qテーブル」では、盤面の一番上の横のラインに「〇」が三つ揃っている状態を表しています。

末尾の「:100」は、「〇」を打つ側が強化学習AIのときに、この盤面の評価値は「100点」であることを表しています。

最初は難しそうだなと思ったけど 盤面を「〇」「✕」「―(空白)」の記号で表していることに気づければ そこまで難しくはないな

それでは次は 五目並べの「Qテーブル」を見てみましょう

五目並べの「Qテーブル」は、三目並べとほぼ変わりません。

以下の例では、「〇」を打つ側が「強化学習」AIのときに、盤面の評価値は「75点」であることを表しています。


この仕組みでは、AIが対戦を繰返し行うほど、何パターンもの「盤面」と「評価値」の組み合わせが「過去の対戦データ」として保存されていきます。

「強化学習」では、保存された「Qテーブル」のデータをもとに、「評価値が最も高い手」を次の一手として選択することで、強力なAIを育成することができます。

「ルールベース」と「強化学習」の違いについてのまとめ

それでは最後にもう一度、「ルールベース」と「強化学習」の違いについて、以下の図で確認しましょう。

大量のPythonプログラムが必要な「ルールベース」と違って 「強化学習」の方がプログラムの量も少ないし 経験を活かして学んでいくから 効率よく強いAIを作ることができる気がします

AIが自ら学習する「強化学習」を使ったPythonプログラムについて 理解できましたか?

Well done!

次のステップに進みましょう!

次のステップに進む

← 前のステップにもどる