using System; using System.Collections.Generic; using Unity.MLAgents.Actuators; namespace Unity.MLAgents { /// /// The DiscreteActionMasker class represents a set of masked (disallowed) actions and /// provides utilities for setting and retrieving them. /// /// /// Agents that take discrete actions can explicitly indicate that specific actions /// are not allowed at a point in time. This enables the agent to indicate that some actions /// may be illegal. For example, if an agent is adjacent to a wall or other obstacle /// you could mask any actions that direct the agent to move into the blocked space. /// public class DiscreteActionMasker : IDiscreteActionMask { IDiscreteActionMask m_Delegate; internal DiscreteActionMasker(IDiscreteActionMask actionMask) { m_Delegate = actionMask; } /// /// Modifies an action mask for discrete control agents. /// /// /// When used, the agent will not be able to perform the actions passed as argument /// at the next decision for the specified action branch. The actionIndices correspond /// to the action options the agent will be unable to perform. /// /// See [Agents - Actions] for more information on masking actions. /// /// [Agents - Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_5_docs/docs/Learning-Environment-Design-Agents.md#actions /// /// The branch for which the actions will be masked. /// The indices of the masked actions. public void SetMask(int branch, IEnumerable actionIndices) { m_Delegate.WriteMask(branch, actionIndices); } public void WriteMask(int branch, IEnumerable actionIndices) { m_Delegate.WriteMask(branch, actionIndices); } public bool[] GetMask() { return m_Delegate.GetMask(); } public void ResetMask() { m_Delegate.ResetMask(); } } }