ごいたAIの実装手法

しばらく間が空いてしまいましたね^^;
すこしプログラミング欲がでてきたので、ここも書いてしまいましょう。

ごいたAIをどう作るか?という点について

ごいたのAIを作成するためのアプローチは大きく分けて、2通りあります。

  1. ルールベースの実装

  2. 機械学習による実装(本命)

それぞれどういうことか、説明しましょう。

ルールベースの実装

コンピューターが人間の仕事を手伝ったり、置き換わったリするようになって、35年以上経ちました。その間にAIを作成しようという動きは何度かありまして・・・
エキスパートシステムというものを聞いたことがあるでしょうか?エキスパートシステムは、普通であれば大量の知識を抱えた専門家(法律家とか税理士とか、技術屋もですが、そういう人です)に代わって、ある問に対する答えを返すというものです。これを使って業務等に活かしていこうという研究や開発が行われていたこともありました。実装方法はというと、ものすごく大雑把に言えば、

○○ならば××する

というルールを大量に覚えさせて、最終的な答えを導き出すものです。

ごいたは駒の数が、他のゲームに比べれば比較的少なめなので、作成するべきルールも、数えることが出来る程度に収まってくれるのではないでしょうか。それでも数十個のルールを組み込む必要はありそうです。

例えばですが

  • 3香以上持っていれば、攻めは香から行う
  • 王玉があれば、2回目の攻めは王で行う
  • しかし、王玉があっても、角角 or 飛飛があれば2回めの攻めはそちらで行う

とか、そういうのですね。書けば書くほどキリがない気もします。
書いたら書いたで、それはごいたの考え方という解説書になるほど書けるのではないでしょうか。

ルールベースの実装とは、こういった場面毎の判断基準をすべてプログラムに組み込んで、最適な手を判断させる方法です。
これでも、まあ、対戦してて不足のない相手は作れるでしょう。

機械学習による実装

最近、この話題アツいですよね。自動運転車とか、ディープラーニングとか、ニューラルネットワークとか、画像認識、自然言語処理、、、とか。

現実に実用化されているものでは、Facebookの顔認識機能や、Google翻訳は便利ですよね。
これらは、以前はルールベースで判断などをしていたものを、人工知能の研究が進むことで、機械学習の手法に置き換わっていったものです。プログラムは何をしているかというと、正解やお手本となる大量のデータを読み込んで、その中から共通のルールや、特徴などを抽出するという作業を行っています。その抽出した特徴を使って、新しい問いに対しての答えを導き出します。
翻訳機能であれば、人間が翻訳した原版と翻訳版のデータを何冊分も読み込ませるなどして、翻訳のパターンを覚えた結果を使って、あなたが入力した文章の翻訳結果を導き出しています。

最近のニュースになっていましたが、囲碁のプログラムがついにプロレベルになったとか。これも機械学習が使われています。

ごいたは駒が少ないとはいえ、その組み合わせは膨大です。また試合の展開も似ているようで、異なる場面が多く登場します。その中から、勝ちパターンを探すことを機械にやらせようというのが機械学習です。

ルールベース vs 機械学習

突然、ごいたとは関係ない話ですみません。
私は、オセロがわりと強いのですが、オセロというのは、勝ち方の理論がかなり確立されていて、プログラムの作りがいのある題材なのです。過去にオセロプログラムを作ってみたこともあります。
オセロプログラムも、勝ち方の理論をルールベースで組み込んでいけばそれなりに強くすることはできるのですが、どうしても限界があります。有名(?)なところで、パンダオセロというのがあります。パンダパパは強い、と言われているのですが、これはある程度のオセロプレイヤーならまず負けないレベルなので、たいして強くありません。
しかし、機械学習をベースに強くなったロジステロというソフトは、人間のオセロチャンピオンに圧倒的な強さで勝利しました。1997年のことです。
それから20年近く経って、オセロよりも圧倒的に計算量の多い囲碁で同じことが起きようとしています。

ルールベースのルールを人間が一つ一つ組み上げていくのは労力に見合わない・・・と今までの事例が証明しているので、ごいたも機械学習を前提としてAIを考えていきます。

ごいたと機械学習

単純に機械学習でごいたAIを作っていくといっても、これもまた、色々と分類したりすることができるのですが、それは次回、ごいたAI〜機械学習編〜として別途書きましょう。
ごいた特有の課題もあります。