1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Unity】ML-AgentsでIDiscreteActionMaskを使って五目並べのアクションを制限してみる

Last updated at Posted at 2021-12-13

実行環境

  • macOS Big Sur 11.6
  • Unity 2019.4
  • ML-Agents 0.27.0
  • Python 3.6.12
  • pip 21.2.4

IDiscreteActionMaskとは?

強化学習時に、次の環境では特定のアクションを制限(以降マスキングと呼ぶ)
したい場合がある。
(例)○xゲームでいうと、既に○かxが置かれている場所には置けないようにする。など

そんな時にアクションを制限してくれるのがIDiscreteActionMaskだ。

五目並べのルール

  • 10x10のマスで先に5つ揃えた方の勝ちとする
    スクリーンショット 2021-12-10 16.13.36.png

マスキングの実装

SetMask.cs
public override void WriteDiscreteActionMask(IDiscreteActionMask actionMask)
    {
        for(int i=0;i < masking_array.Count;i++)
        {
            actionMask.SetActionEnabled(0, masking_array[i], false);
        }
    }

ここで一点注意。
公式ドキュメントによると、
When using Discrete Actions, it is possible to specify that some actions are impossible for the next decision.
と記載されており、ここでマスキングしたアクションは次の環境でのみ適応される。

以降もマスキングしたい場合は、エピソード毎にマスキングをする必要があるようだ。
よって、マスを上書きしないようゲーム終了時までマスキングし続けるために、配列を作って1個ずつマスキングを行った。

実行結果

実行してみると、マスに上書きがされていないことが分かる。
画面収録_2021-12-10_16_32_59_SparkVideo.gif

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?