1-5. AIプレーヤーを作成する!

1-4. reversi を動かしてみる」が正常に動いたなら、いよいよAIプレーヤーを自作してみましょう!
大丈夫、そんなに難しくありませんよ。

AIプレーヤーのアルゴリズムを考える

AIプレーヤーの実装に先立ち、まず、どのようなアルゴリズムで思考させるのかをしっかりと考える必要があります。

ここでは、次のようなアルゴリズムで思考するAIプレーヤーを作成することにしましょう。

  1. 角に打てる場合は角に打つ。
  2. 角に打てない場合は、角から2つ隣のマスに打つ。
  3. 上記のいずれにも打てない場合は、角から対角線上の内側に2つ入ったマスに打つ。
  4. 上記のいずれにも打てない場合は、・・・(以下略)
  5. どこにも打てない場合は、パスを宣言する。

つまり、リバーシ盤のマス目に優先順位を付け、その優先順位に沿って順番に打てるかを確認し、最初に見つけた打てる位置を選択することにします。

aiplayer01a

上図の優先順位は適当に設定したものですので、変更しても構いません。もっと良い順番があるかもしれません。

さて、どれだけ強いAIプレーヤーになるかは分かりませんが、とりあえずアルゴリズムは明確になりました。

なんだ、簡単すぎる、物足りないなとお感じの方は「3-1. AIプレーヤーの思考アルゴリズム」でいくつかのアルゴリズムを紹介していますので、より高度な思考アルゴリズムを考えてみてください!

AIプレーヤーを実装する

ここからは、上で考えたアルゴリズムを実際の Java ソースコードに実装していきます。

xyz.hotchpotch.reversi.framework.Player インタフェースを実装することにより、AIプレーヤーを作成することができます。

A) AIプレーヤークラスの作成

(1) パッケージ・エクスプローラー・ビューの [MyFirstJava] を右クリックし、[新規] – [パッケージ] を選択します。

aiplayer02a

(2) パッケージ名を入力して [OK] を押下します。
パッケージ名は、とりあえず “mypackage” とでもしておけば良いでしょう。

※パッケージは似た役割のクラス群をまとめるためのものです。
自作したプログラムを外部に配布しない限り、好きな名前を付けておいて問題ありません。外部に配布する場合は、自身が取得したドメイン名(reversiの場合はxyz.hotchpotch.reversi.~)を利用することが一般的です。

aiplayer03a

[src] の配下に [mypackage] パッケージが作成されればOKです。

aiplayer04a

(3) 作成したパッケージを選択して右クリックし、[新規] – [クラス] を選択します。

aiplayer05a

(4) 適当なクラス名を入力します。ここでは “MyFirstAIPlayer” としてみました。
クラス名を入力したら、[追加…] ボタンを押下します。

aiplayer06b

(5) テキストボックスに “Player” と入力してください。

下の [一致する項目] に “Player – xyz.hotchpotch.reversi.framework” と出てきたら、それを選択して [OK] を押下します。
[一致する項目] にいくつかの候補が表示された場合は、”Player – xyz.hotchpotch.reversi.framework” を選択してください。

aiplayer07b

もし [一致する項目] に “Player – xyz.hotchpotch.reversi.framework” が出てこない場合は reversi ライブラリの取り込みが出来ていませんので、「1-4. reversi を動かしてみる」をもう一度やり直してみてください。

(6) [インタフェース] 部分に “xyz.hotchpotch.reversi.framework.Player” が追加されていることを確認し、[完了] を押下します。

aiplayer08a

次のように [MyFirstAIPlayer] クラスが表示されれば、クラス作成の完了です。(ビューの配置は異なっていても問題ありません。)

aiplayer09a

B) 思考ロジックの実装

(1) まず、ビューの配置を使いやすいように調整しましょう。

「アウトライン」ビューはあるケースでは非常に便利ですが、当面は無くても困りません。他のビューの表示幅を確保するために、非表示にすることができます。最小化してもよいですし、閉じてしまってもよいでしょう。aiplayer10b

最小化した場合は、サイドのボタンから復元することができます。

aiplayer11a

閉じた場合は、メニューの [ウィンドウ] – [ビューの表示] – [アウトライン] から再表示させることができます。

(2) 自動生成されたソースコード [MyFirstAIPlayer.java] の中身を確認してみましょう。

次のように自動生成されているはずです。

もしかすると、11行目が次のようになっているかもしれません。

1-4. reversi を動かしてみる」で行った「ライブラリの取り込み」で zip ファイルの添付(ソース添付)がうまくいっていないと、このように仮引数名が arg0 などで自動生成されます。

zip ファイルの添付を行わなくてもプログラムの動作上は問題ありませんが、添付しておくとライブラリのソースコードや javadoc の確認が容易になり、なにかと便利です。時間のあるときに「1-4. reversi を動かしてみる」の手順をもう一度確認してみてください。

(3) 思考ロジックを実装します。次のようにソースコードを書き換えてください。

ソースコードを記述したら、[Ctrl + S] キーでソースファイル(MyFirstAIPlayer.java)を保存します。

ソースファイルを編集するとタブの先頭にアスタリスク(*)が付きますが、保存することにより消えます。

aiplayer12a

(4) プログラムをビルドします。

といっても、Pleiades All in One ではソースファイル保存時に自動的にビルドするように設定されているはずです。

[プロジェクト] – [自動的にビルド] にチェックが付いていることを確認してください。
チェックが付いていない場合はチェックを付けてください。

aiplayer12a

画面左下の「問題」ビューに何も表示されなければ、プログラムが正常にビルドされています。

「問題」ビューにエラーが表示されている場合はソースコードに問題がありますので、よく見直して修正してください。

作成したAIプレーヤーを動かしてみる

それでは早速、作成したAIプレーヤーを動かしてみましょう。

A) 他のAIプレーヤーと対戦させてみる

(1) 「パッケージ・エクスプローラー」ビューの [MyFirstJava] プロジェクトを選択した状態で、メニューの [実行] – [実行] – [2 Java アプリケーション] を選択します。

(2) 「コンソール」ビューで reversi が動き出したでしょうか。もしも動かない場合は、「1-4. reversi を動かしてみる」をもう一度確認してみてください。

画面の表示に従って、対話的に入力を行います。

aiplayer14a

プレーヤー選択時に「0 : その他(自作クラス)」を指定し、作成したAIプレーヤークラスを完全修飾クラス名(パッケージ名.クラス名)で指定することにより、自作クラスを動かすことができます。”mypackage.MyFirstAIPlayer” と入力しましょう。

対戦相手には、手をランダムに選ぶ「3 : RandomAIPlayer」を指定してみました。
制限時間は、ゲーム全体の持ち時間として 1 秒(1,000 ミリ秒)もあれば十分でしょう。
ゲームの進行方法には「2: 対話的逐次進行」を指定し、最後の問いかけには何も入力せずに [Enter] を押下します。

ゲームが始まると思いますので、しばらく動かしてみてください。

aiplayer15a



aiplayer16a

お、勝ちました! やったね!!

しばらく色々と動かしてみてください。
プレーヤー選択時に「1 : ConsolePlayer」を選択すると、自分自身(人間)がAIプレーヤーと対戦することもできます。

B) 総当たり戦をさせてみた!

reversi のメニューで「3 : LEAGUE」を選ぶと、複数のAIプレーヤーで総当たり戦をさせることができます。

次の条件で総当たり戦を実施してみました。

  • 参加AIプレーヤー : 6 プレーヤー
  • 一手あたりの制限時間 : 1,000 ミリ秒
  • ゲーム全体での持ち時間 : 20,000 ミリ秒
  • 対戦回数 : 20 回
結果は、ナ・ナ・ナント・・・
aiplayer17a

勝率 44%。うーん、微妙・・・
まぁ初めてのAIプレーヤーですし、こんなものですかね 😕

最強のAIプレーヤーを目指して

ここまで、AIプレーヤーを作成してみましたが、いかがでしたか? 意外と簡単だったのではないでしょうか。今後は是非、自分自身で思考アルゴリズムを考え、色々なAIプレーヤーを作成してみてください。

そのためには、まず Java の文法を知る必要があります。Java 標準ライブラリが提供する様々な機能を利用することで、より高度な処理を簡単に行うこともできます。

その一方で、アルゴリズムに対する理解も深める必要があります。実際のAIプレーヤーの強さを決めるのはアルゴリズムであり、Java プログラミングの巧拙ではありません。

本サイトの題材である reversi プログラムには、いくつかの基本的な思考アルゴリズムを実装したAIプレーヤーが同梱されています。これらのアルゴリズムは、リバーシのみならず、チェスや将棋、囲碁にも通ずるものです。「3-1. AI プレーヤーの思考アルゴリズム」で解説していますので、参考にしてみてください。
また、Java やその他に関する書籍やサイトを「1-6. 書籍&サイトの紹介」で紹介しています。

最強の AIプレーヤーが出来ましたら、ぜひコチラまでお知らせください。
みなさんの挑戦をお待ちしています!

スポンサーリンク
reversi_main 336*280
reversi_main 336*280

シェアする

フォローする