Enterprise Blue Ocean ◮

神谷町RPAブログ

  • Blue Prism 初級者向け
    • Blue Prism を 無料で利用する 方法はこちら
    • Blue Prism の Blue Prism 事始め!オンボーディングの記事はこちら
    • Blue Prism で Excelを操作 する記事はこちら
  • Blue Prism、ちょっと進んだコンテンツ☆
    • Blue Prism の ベストプラクティス 記事はこちら
    • Blue Prism の 逆引きナレッジ wiki こちら
    • Blue Prism を リアルタイムで起動する 方法はこちら
  • RPA、そもそも論!
    • Youtube で、あらためて振り返る RPA とは?・・・はこちら☆

Blue Prism でマインスイーパーを自動化する(改善編)

前回、とりあえず軽い気持ち

Blue Prism によるマインスイーパーの

自動化を行いました。

www.ebocean.work

 

今回は、ちょっとだけ真面目

取り組んでみます。

 

 

部品化をしよう

前回、使ったオブジェクトがこちら☆

f:id:EnterpriseBlueOcean:20200327201737p:plain

我ながら・・・ひどい出来だ。。

(もう、グチャグチャ☆)

 

調査や検証のフェーズなら、

こんなんでも意味はありますが、

ある程度、わかってきたら、

オブジェクトの作り、プロセスの作りを

考えることができます。

 

良く使う細かい処理を部品化する

まずは同じ処理がたくさんあるので、 

これをまとめていきます。

 

マインスイーパーなので、

セルの状態を調べるというのは、

基本的な処理であり、

多用される処理になります。

 

前回、書いたように、

セルの中身は HTML 的にこんな風になっているので、

f:id:EnterpriseBlueOcean:20200323185203p:plain

  • セルの場所(X, Y)を指定したら(入力
  • そのセルの数値開いてるかどうか旗が立ってるかどうかを調べる(出力

 みたいなアクションがあると便利です。

こんな感じですね。

f:id:EnterpriseBlueOcean:20200327202339p:plain

同様にして、

  • 左クリックしてセルを開ける
  • 右クリックして旗を立てる
  • セルの周囲を調べる

といった処理も、共通的なアクションにしていきます。

 

似たような処理を汎用的にする

最初に作った(ひどい出来の)オブジェクトでは、

「1」の周囲のセルを開ける処理とか

「2」の周囲のセルを開ける処理は、

それぞれ別々に作られていました

 

しかし、これらは本質的には同じ処理です。

要するに、そのセルの周囲に、

セルの値と同じだけ閉じているセルがあれば、

旗を立てるわけです。

こんな感じですね。

f:id:EnterpriseBlueOcean:20200327203443p:plain

f:id:EnterpriseBlueOcean:20200327203500p:plain

一方で、セルの値と同じだけ旗が立っていれば、

それ以外の閉じたセルを開けるわけです。

こんなときですね。

f:id:EnterpriseBlueOcean:20200327203530p:plain

f:id:EnterpriseBlueOcean:20200327203553p:plain

したがって、

  • 周囲に旗を立てる
  • 周囲を開ける

というアクションがあれば、

セルの値にかかわらず、使うことができます。

 

無駄な処理をなくそう

さっきの(ひどい出来の)オブジェクトでは、 

かなり甘い基準でクリックしています。

それこそ、すでに開いているセルを左クリックしたり・・・

(判定ロジックを作るのを後回しにした)

 

そのあたりにも、メスを入れます。 

 

無駄なクリックを減らす

まずはきちんと判定ロジックを入れ、

無駄なクリックを減らします。

 

たとえば、左クリックなら、

閉じている時だけ左クリックをします。

こんな感じです。

f:id:EnterpriseBlueOcean:20200327204224p:plain

  

調査が不要なセルを再調査しない

これも重要です。

セルの状態を調べて、セルの周囲も調査する

これが非常に時間がかかります

 

たとえば、セルの数値が0、つまり

何も書いてないセルの周りを調べても時間の無駄です。

 

また、すでに周囲に旗を立てきり、

周囲のセルを開け切った場合、

再調査は不要です。

 

これについては、

マインスイーパーのセル(初級だと9×9)と

同じ大きさのコレクションを用意し、

再調査の必要のないセルの場所を管理するようにしました。

  

改善後

改善後は、以下のような呼び出し関係になります。

f:id:EnterpriseBlueOcean:20200327212727p:plain

完璧には程遠いが、、

だいぶスッキリ☆

 

改善後の動きはこんな感じです。 

youtu.be

 

マインの配置が良ければ、

まぁまぁ見られるスピードになってきた。。

f:id:EnterpriseBlueOcean:20200327201529p:plain

やったぜ。

 

まとめ

  • ちょっとだけマインスイーパーの自動化を真面目にやった
  • 部品化と、処理の無駄を除いて、少しは見られる形にした 
  • 処理速度もまぁまぁ上がり、ようやくスタートラインに立てた? 

 

とはいえ、マインの配置が良くても、

100秒かかっちゃうんだな。。

 

もっと詳細な分析をしたい。。

プロセスマイニングとか、使えないだろうか・・・?