【クラッシュロワイヤル】デッキ編成を機械学習に助けてもらった結果

こんにちは!

今回は、人気スマホゲームの「クラッシュロワイヤル(クラロワ)」を遊んでいきたいと思います!

クラロワはキャラの組み合わせによって攻め方等が変わってくるため、戦略要素が大きいゲームです。なので、「デッキ編成」も楽しみの一つだと思います。

ところが、私自身デッキ編成が苦手なんです(笑)

毎回結局同じような編成になってしまうんですよね…

ということで、簡単な機械学習にデッキ編成を手伝ってもらおうと思います。

とりあえず、「バランスのとれたデッキ」というのをコンセプトにしていきます。

これでいつもと違うデッキが作れればと思います^^

全キャラをクラスタリングで分類する

今回は、クラスタリングという手法を用いて、キャラクターをいくつかのグループに分類していきます。

クラスタリングとは、似たような特徴を持ったデータごとに分類していく機械学習の手法の総称です。その中で、「k-means法」という手法を用います。

クラロワでは、1つのデッキは8枚のキャラクター(呪文含む)で構成されます。

今回のコンセプトは「バランスの取れたデッキ」なので、全キャラを8つのクラスターに分け、各クラスターから1枚ずつ選んでデッキを組むという方法をとりたいと思います。

k-menas法とは

「k-means法」とは、データを指定した数のクラスタ(グループ)に分類するアルゴリズムです。

このアルゴリズムでは、まずデータを指定したクラスタ数に分けます(このときは適当)。

その後、クラスタの平均を使っていい感じにデータが分かれるまで調整を繰り返していきます。

そうした処理が終わると、各クラスタには似たような特徴を持ったデータが集まっているということになります。

平均(mean)を用いて任意の数(k個)のクラスタに分類するアルゴリズムなので、「k-means法」と呼ばれています^^

データを用意する

今回のデータは、以下のサイトから取ってきました。

https://www.kaggle.com/rodsaldanha/clash-royale-matches

データの内容はこんな感じです(上位20件)。

レベルごとにHPとダメージの情報が入っています。

名前が英語でわかりづらくてすいません^^;

クラロワ内のイベント等では、一律でレベル9としてエントリーすることも多いので、今回はレベル9でのデータをもとにクラスタリングしていきます。

実際に扱うのは上記のようなデータです。

k-means 法を実行する

それでは、k-means法を実行していきましょう。

今回クラスタリングに用いるデータ項目は、

  • 召喚コスト(エリクサー)
  • HP
  • 攻撃力

の3つです。めちゃくちゃシンプルです^^

ということで、以下、コードです。

元となるデータは、dfUseに入っています。fit()の部分では、名前列を除外するためにilocを使っています。

from sklearn.cluster import KMeans 

kmeans_model = KMeans(n_clusters=8, random_state=10).fit(dfUse.iloc[:, 1:])
result = pd.DataFrame(kmeans_model.labels_, columns = ["cluster"])

Pythonにはとても便利なライブラリがあるので、これだけのコードでk-means法の計算ができちゃいます^^

ちなみに、データフレームに変換する前のresultの中身はこんな感じです

array([6, 6, 6, 6, 6, 6, 6, 6, 6, 2, 0, 6, 6, 6, 6, 6, 1, 6, 6, 2, 2, 6,
       0, 2, 6, 0, 1, 0, 6, 6, 6, 6, 2, 6, 2, 2, 2, 2, 1, 2, 2, 7, 2, 1,
       1, 2, 5, 2, 2, 6, 2, 2, 7, 2, 0, 6, 2, 2, 2, 2, 2, 0, 6, 1, 4, 1,
       1, 2, 2, 1, 2, 7, 1, 7, 2, 7, 1, 0, 4, 7, 0, 2, 4, 0, 1, 4, 7, 6,
       5, 4, 4, 4, 3, 2, 6])

この数字が、所属するクラスターを表しています。この数字が同じだと、同じクラスターに属するということになります。

今回は8つのクラスターに分けたので、0~7の数字で振り分けられています。

これだけではわかりづらいので、元データとくっつけて見てみましょう。

dfUsePlus = dfUse.merge(result, left_index=True, right_index=True)

どのキャラクターがどのクラスターに属するのかわかるようになりました^^

機械学習の出番はこれまで。あとは自分で選んでいきます。

ありがとう、機械学習。

クラスターごとにキャラを選ぶ

さてここからは自分でキャラを選んでいきます。

とはいっても、選択肢は絞られているので、1からデッキを組むよりも相当楽なハズです(希望)

クラスターごとにキャラを選びます。

1体目

dfUsePlus[dfUsePlus["cluster"] == 0]

いや、早速めちゃくちゃ多い(笑)

ここから1体だけ選ぶのが逆に難しい気が、、

悩んだ末、Goblin Gangを選ぶことに。

2体目

今回は重量級クラスターのようです。

普段もよく使うGiant Skeletonを選びます。

3体目

またまた多い(泣)

なんか結構幅が広いクラスターにも感じますが、、、

Baby Dragonを選ぶことにします。

4体目

ダメージ重視のクラスターでしょうか?

Skeleton Armyにします。

5体目

HP高めクラスターといったところでしょうか。

Hog Riderにしましょう。

6体目

まさかの2択(笑)

ここではFurnaceを選びます。

7体目

出ました(笑)選択肢なし(笑)

しかもめちゃくちゃ重いデッキになりそうな…

8体目

ラスト1体はMini P.E.K.K.Aにします。

これでデッキが完成しました!

実際に遊んでみる

さて、完成したデッキで遊んでみましょう!

キャラによってレベルの差異があるのはご容赦ください^^;

しかし遊ぶ前に気づいてしまいました、、、

このデッキに呪文系がないことに、、、

「バランスの取れたデッキ」というコンセプトは一体どこへ行ってしまったのでしょう?

まあ嘆いてもしょうがないので、とりあえず遊んでみましょう。勝てればいいんです。勝てれば。

バトル始まりました。

あれれ

惨敗

まあ、初めて使う組合わせなんで無理もないですが^^;

クラスターごとに選ぶ際も考えて選ぶ必要がありそうです(当たり前)。

クラスターごとという制限がある分、勝てるデッキを組むとなるとかえってデッキ編成が難しくなってる気もします(笑)

まあ、気分転換にデッキを変えるという意味では面白い試みだったと思います。

まとめ

機械学習にクラロワのデッキ編成を助けてもらって遊んでみました。

ゴーレムとかは普段使わないので、新鮮な感覚でした。

今回は、クラスタリングだけでその後は自分でキャラを選びましたが、全部機械学習に任せたデッキでも遊んでみたいですね^^

結局、楽しく遊べたので今回の結果でも満足です^^

ではでは👋