diff --git a/com.unity.ml-agents.extensions/Runtime/Input/InputActionActuator.cs b/com.unity.ml-agents.extensions/Runtime/Input/InputActionActuator.cs index 9b9cea1dba..867c716c37 100644 --- a/com.unity.ml-agents.extensions/Runtime/Input/InputActionActuator.cs +++ b/com.unity.ml-agents.extensions/Runtime/Input/InputActionActuator.cs @@ -14,7 +14,7 @@ namespace Unity.MLAgents.Extensions.Input /// 's indicate that the Agent is running in Heuristic Mode, /// this Actuator will write actions from the to the object. /// - public class InputActionActuator : IActuator, IHeuristicProvider, IBuiltInActuator + public class InputActionActuator : IActuator, IBuiltInActuator { readonly BehaviorParameters m_BehaviorParameters; readonly InputAction m_Action; diff --git a/com.unity.ml-agents/CHANGELOG.md b/com.unity.ml-agents/CHANGELOG.md index 345bd586b8..88754c5009 100755 --- a/com.unity.ml-agents/CHANGELOG.md +++ b/com.unity.ml-agents/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to - The interface for disabling discrete actions in `IDiscreteActionMask` has changed. `WriteMask(int branch, IEnumerable actionIndices)` was replaced with `SetActionEnabled(int branch, int actionIndex, bool isEnabled)`. See the +- IActuator now implements IHeuristicProvider. (#5110) [Migration Guide](https://github.com/Unity-Technologies/ml-agents/blob/release_14_docs/docs/Migrating.md) for more details. (#5060) #### ml-agents / ml-agents-envs / gym-unity (Python) diff --git a/com.unity.ml-agents/Runtime/Actuators/ActuatorManager.cs b/com.unity.ml-agents/Runtime/Actuators/ActuatorManager.cs index fb7c3724d9..e8914aeab0 100644 --- a/com.unity.ml-agents/Runtime/Actuators/ActuatorManager.cs +++ b/com.unity.ml-agents/Runtime/Actuators/ActuatorManager.cs @@ -244,9 +244,7 @@ public void ApplyHeuristic(in ActionBuffers actionBuffersOut) discreteStart, numDiscreteActions); } - - var heuristic = actuator as IHeuristicProvider; - heuristic?.Heuristic(new ActionBuffers(continuousActions, discreteActions)); + actuator.Heuristic(new ActionBuffers(continuousActions, discreteActions)); continuousStart += numContinuousActions; discreteStart += numDiscreteActions; } diff --git a/com.unity.ml-agents/Runtime/Actuators/IActuator.cs b/com.unity.ml-agents/Runtime/Actuators/IActuator.cs index 9a97771060..aa2675905a 100644 --- a/com.unity.ml-agents/Runtime/Actuators/IActuator.cs +++ b/com.unity.ml-agents/Runtime/Actuators/IActuator.cs @@ -3,7 +3,7 @@ namespace Unity.MLAgents.Actuators /// /// Abstraction that facilitates the execution of actions. /// - public interface IActuator : IActionReceiver + public interface IActuator : IActionReceiver, IHeuristicProvider { /// /// The specification of the actions for this IActuator. diff --git a/com.unity.ml-agents/Runtime/Actuators/VectorActuator.cs b/com.unity.ml-agents/Runtime/Actuators/VectorActuator.cs index 29f8b8a60a..586058aad3 100644 --- a/com.unity.ml-agents/Runtime/Actuators/VectorActuator.cs +++ b/com.unity.ml-agents/Runtime/Actuators/VectorActuator.cs @@ -5,7 +5,7 @@ namespace Unity.MLAgents.Actuators /// /// IActuator implementation that forwards calls to an and an . /// - internal class VectorActuator : IActuator, IHeuristicProvider, IBuiltInActuator + internal class VectorActuator : IActuator, IBuiltInActuator { IActionReceiver m_ActionReceiver; IHeuristicProvider m_HeuristicProvider; diff --git a/docs/Migrating.md b/docs/Migrating.md index a9bd15b496..dbfc55201d 100644 --- a/docs/Migrating.md +++ b/docs/Migrating.md @@ -41,6 +41,8 @@ public override void WriteDiscreteActionMask(IDiscreteActionMask actionMask) actionMask.SetActionEnabled(branch, 3, false); } ``` +- The `IActuator` interface now implements `IHeuristicProvider`. Please add the corresponding `Heuristic(in ActionBuffers)` +method to your custom Actuator classes. ## Migrating to Release 13 ### Implementing IHeuristic in your IActuator implementations