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