|
using UnityEngine.Profiling; |
|
|
|
namespace Unity.MLAgents.Actuators |
|
{ |
|
|
|
|
|
|
|
internal class VectorActuator : IActuator, IBuiltInActuator |
|
{ |
|
IActionReceiver m_ActionReceiver; |
|
IHeuristicProvider m_HeuristicProvider; |
|
|
|
ActionBuffers m_ActionBuffers; |
|
internal ActionBuffers ActionBuffers |
|
{ |
|
get => m_ActionBuffers; |
|
private set => m_ActionBuffers = value; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public VectorActuator(IActionReceiver actionReceiver, |
|
ActionSpec actionSpec, |
|
string name = "VectorActuator") |
|
: this(actionReceiver, actionReceiver as IHeuristicProvider, actionSpec, name) { } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public VectorActuator(IActionReceiver actionReceiver, |
|
IHeuristicProvider heuristicProvider, |
|
ActionSpec actionSpec, |
|
string name = "VectorActuator") |
|
{ |
|
m_ActionReceiver = actionReceiver; |
|
m_HeuristicProvider = heuristicProvider; |
|
ActionSpec = actionSpec; |
|
string suffix; |
|
if (actionSpec.NumContinuousActions == 0) |
|
{ |
|
suffix = "-Discrete"; |
|
} |
|
else if (actionSpec.NumDiscreteActions == 0) |
|
{ |
|
suffix = "-Continuous"; |
|
} |
|
else |
|
{ |
|
suffix = $"-Continuous-{actionSpec.NumContinuousActions}-Discrete-{actionSpec.NumDiscreteActions}"; |
|
} |
|
Name = name + suffix; |
|
} |
|
|
|
|
|
public void ResetData() |
|
{ |
|
m_ActionBuffers = ActionBuffers.Empty; |
|
} |
|
|
|
|
|
public void OnActionReceived(ActionBuffers actionBuffers) |
|
{ |
|
Profiler.BeginSample("VectorActuator.OnActionReceived"); |
|
m_ActionBuffers = actionBuffers; |
|
m_ActionReceiver.OnActionReceived(m_ActionBuffers); |
|
Profiler.EndSample(); |
|
} |
|
|
|
public void Heuristic(in ActionBuffers actionBuffersOut) |
|
{ |
|
Profiler.BeginSample("VectorActuator.Heuristic"); |
|
m_HeuristicProvider?.Heuristic(actionBuffersOut); |
|
Profiler.EndSample(); |
|
} |
|
|
|
|
|
public void WriteDiscreteActionMask(IDiscreteActionMask actionMask) |
|
{ |
|
m_ActionReceiver.WriteDiscreteActionMask(actionMask); |
|
} |
|
|
|
|
|
public ActionSpec ActionSpec { get; } |
|
|
|
|
|
public string Name { get; } |
|
|
|
|
|
public virtual BuiltInActuatorType GetBuiltInActuatorType() |
|
{ |
|
return BuiltInActuatorType.VectorActuator; |
|
} |
|
} |
|
} |
|
|