実行環境
- 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
だ。
五目並べのルール
マスキングの実装
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個ずつマスキングを行った。