「OSSのRPA」+「自作の三目並べマシン」でGoogleに挑む!

Pocket

前回の記事において、三目並べにおける推奨の手を学習したマシンを作成し、成績もよかったように見えました。

しかし、その成績とは、自身で準備したシミュレーション環境におけるものであり、井の中の蛙である可能性があります。

そこで、今回は、前回学習した「三目並べマシン」を、外部の環境(=Googleが提供している無料ゲーム)で勝負させてみようと思います。前回の記事にも書きましたが、Google検索で「三目並べ」と検索すると見つかります。そして、手動操作の手間を省くため、この環境の利用をオープンソースRPAソフトである「SikuliX」を用いて、自動化してみます。

 

1.SikuliXについて

SikuliXは、OpenCVを利用したGUIオートメーションツールで、Java実行環境の上で動作します。また、スクリプトをJythonかJRubyで記述でき、例えば、Jythonであれば、Python2のコードでJavaを操作することになります。
(イメージ図: 引用:How Sikuli Works

このソフトウェアは、MITのUser Interface Design Groupが始めたOSS「Sikuli」が大本らしく、そのプロジェクトが終了した後に、RaiMan氏が開発とサポートを引き継ぎ「SikuliX」として公開しているようです。
(参考: Sikuli is God’s Eye

※その他、参考ページ:

2.SikuliXのインストール

SikuliXのインストール手順を説明します。

【環境】
 ・Windows 10 pro
 ・java version “10.0.2” 2018-07-17

  1. Sikuliより、インストーラ「sikulixsetup-1.1.3.jar」をダウンロードします
    ※執筆時点の最新バージョンは「1.1.4」のようなのですが、
     インストールが簡単であるとの記事がネット上で見受けられたので、「1.1.3」を利用しました。
  2. 「sikulixsetup-1.1.3.jar」を実行します
  3. 「はい」をクリックします
  4. 「1-Pack1」「2-Pack2」をONにします
    ※プロキシ環境下で利用する場合は「Hostname or IP-Address」、「Portnumber」も設定します

    上記設定で「Setup Now」をクリックします(※下の画面は上記設定と異なります)

  5. 「はい」をクリックします
  6. 「はい」をクリックします
  7. インストール成功時のメッセージ
  8. インストーラのあったフォルダに、以下のようにファイルが展開されます。

    1.  

3.実装内容(1):学習済み重みの出力と推論処理の作成

学習内容の詳細は、下記の「暗記学習(Rote Learning)で三目並べを強くする」の記事を参照頂ければと思いますが、今回は、その中でも、「先攻/後攻マシンを同時に最初から学習させる」というものを利用しました。

  • サンプルコード:
    ※このコードで、学習済み重み「learning_weight_for_python2_7.pickle」を作成します

次に、学習済み重みを基に、「盤面の状況から次の手を推奨する」処理を作成します。

  • サンプルコード:  

     

4.実装内容(2):RPA部分の開発

SikuliXではJythonが利用でき、Pythonコードでコードが書けるということですが、やはり完全にPythonと同じように利用できるわけではありません。前述の実装内容(1)でpyファイルを作成しましたが、このモジュールをJythonでImportして利用することができませんでした。理由は、Pythonでライブラリ「Numpy」を利用していますが、Jythonでは「Numpy」をImportできなかったからです。その為、外部Pythonプログラムとして実行して、その結果を受け取るようにしました。

SikuliXのコードは以下のようになりました。





上記コードを見てもらったら分かるように、画像がコード内に挿入されています。
例えば、以下は、画面上から碁盤の画像を探し出し(類似度30%以上)、その座標を取得という処理であり、

以下は、画面上から「ゲームを再開」という画像を探し出し、その中心座標をクリックするという処理になります。

5.動作デモ

それでは、実装が全て完了したので、いよいよRPAを用いて、前回開発した「三目並べマシン」をGoogleのゲームと勝負をさせてみます。

    1. 今回のRPAを実行する前の準備作業として、ブラウザで三目並べの画面を表示しておきます
    2. 作成済みのRPAを実行します
    3. 最初に、三目並べを連続で何回対戦させたいかを、ポップアップさせた画面に入力します
    4. 以降は、指定した回数分だけ、RPAが処理を実行します
    5. 最後に、処理結果(勝率、勝ち数、引き分け数)を表示して、終了になります

 

6.最後に

今回のRPA開発では、処理対象を画像を基に特定していくことになったので、盤面のクリックする位置がずれてしまうし、テストケースの実行準備に手間がかかったりしました。このような、処理毎に画像が変化していくことへの考慮といったRPA特有の対応処理が必要でした。

また、SikuliXの今回のバージョンでは、IDEでの入力補助がありませんでしたし、Jythonにおいては、普段使い慣れているPythonライブラリを利用できず、コーディングに手間取りました。開発中ではありますが、Pythonからpy4jを用いてSikuliXを動かすというプロジェクトも存在しているようですし、これがうまくいくと、さらに便利に使えるようになりそうです。

sikulix4python

それから、暗記学習で学習した「三目並べマシン」の性能ですが、デモの動画を見ても分かるように、あまりよろしくないことが明確になりました。ゲームの難易度を「低」にすれば、なんとか勝てましたが、「中」以上ではほとんど勝てませんでした。やはり強化学習でやってみないといけませんね。

お問い合わせ先

執筆者プロフィール

takos
takostdi デジタルイノベーション技術部
入社以来、C/S型の業務システム開発に従事してきました。ここ数年は、SalesforceやOutSystemsなどの製品や、スクラム開発手法に取り組み、現在のテーマは、DeepLearning/機械学習です。
Pocket

関連記事