| using System; |
| using UnityEngine; |
| using UnityEngine.Serialization; |
| using Unity.MLAgents.Actuators; |
|
|
| namespace Unity.MLAgents.Policies |
| { |
| |
| |
| |
| [Obsolete("Continuous and discrete actions on the same Agent are now supported; see ActionSpec.")] |
| internal enum SpaceType |
| { |
| |
| |
| |
| Discrete, |
|
|
| |
| |
| |
| Continuous |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| [Serializable] |
| public class BrainParameters : ISerializationCallbackReceiver |
| { |
| |
| |
| |
| |
| |
| |
| |
| [FormerlySerializedAs("vectorObservationSize")] |
| public int VectorObservationSize = 1; |
|
|
| |
| |
| |
| |
| [FormerlySerializedAs("numStackedVectorObservations")] |
| [Range(1, 50)] public int NumStackedVectorObservations = 1; |
|
|
| [SerializeField] |
| internal ActionSpec m_ActionSpec = new ActionSpec(0, null); |
|
|
| |
| |
| |
| public ActionSpec ActionSpec |
| { |
| get { return m_ActionSpec; } |
| set |
| { |
| m_ActionSpec.NumContinuousActions = value.NumContinuousActions; |
| m_ActionSpec.BranchSizes = value.BranchSizes; |
| SyncDeprecatedActionFields(); |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| [Obsolete("VectorActionSize has been deprecated, please use ActionSpec instead.")] |
| [SerializeField] |
| [FormerlySerializedAs("vectorActionSize")] |
| internal int[] VectorActionSize = new[] { 1 }; |
|
|
| |
| |
| |
| [FormerlySerializedAs("vectorActionDescriptions")] |
| public string[] VectorActionDescriptions; |
|
|
| |
| |
| |
| [Obsolete("VectorActionSpaceType has been deprecated, please use ActionSpec instead.")] |
| [SerializeField] |
| [FormerlySerializedAs("vectorActionSpaceType")] |
| internal SpaceType VectorActionSpaceType = SpaceType.Discrete; |
|
|
| [SerializeField] |
| [HideInInspector] |
| internal bool hasUpgradedBrainParametersWithActionSpec; |
|
|
| |
| |
| |
| |
| public BrainParameters Clone() |
| { |
| |
| #pragma warning disable CS0618 |
| return new BrainParameters |
| { |
| VectorObservationSize = VectorObservationSize, |
| NumStackedVectorObservations = NumStackedVectorObservations, |
| VectorActionDescriptions = (string[])VectorActionDescriptions.Clone(), |
| ActionSpec = new ActionSpec(ActionSpec.NumContinuousActions, ActionSpec.BranchSizes), |
| VectorActionSize = (int[])VectorActionSize.Clone(), |
| VectorActionSpaceType = VectorActionSpaceType, |
| }; |
| #pragma warning restore CS0618 |
| } |
|
|
| |
| |
| |
| private void UpdateToActionSpec() |
| { |
| |
| #pragma warning disable CS0618 |
| if (!hasUpgradedBrainParametersWithActionSpec |
| && m_ActionSpec.NumContinuousActions == 0 |
| && m_ActionSpec.NumDiscreteActions == 0) |
| { |
| if (VectorActionSpaceType == SpaceType.Continuous) |
| { |
| m_ActionSpec.NumContinuousActions = VectorActionSize[0]; |
| } |
| if (VectorActionSpaceType == SpaceType.Discrete) |
| { |
| m_ActionSpec.BranchSizes = (int[])VectorActionSize.Clone(); |
| } |
| } |
| hasUpgradedBrainParametersWithActionSpec = true; |
| #pragma warning restore CS0618 |
| } |
|
|
| |
| |
| |
| private void SyncDeprecatedActionFields() |
| { |
| |
| #pragma warning disable CS0618 |
|
|
| if (m_ActionSpec.NumContinuousActions == 0) |
| { |
| VectorActionSize = (int[])ActionSpec.BranchSizes.Clone(); |
| VectorActionSpaceType = SpaceType.Discrete; |
| } |
| else if (m_ActionSpec.NumDiscreteActions == 0) |
| { |
| VectorActionSize = new[] { m_ActionSpec.NumContinuousActions }; |
| VectorActionSpaceType = SpaceType.Continuous; |
| } |
| else |
| { |
| VectorActionSize = null; |
| } |
| #pragma warning restore CS0618 |
| } |
|
|
| |
| |
| |
| public void OnBeforeSerialize() |
| { |
| UpdateToActionSpec(); |
| SyncDeprecatedActionFields(); |
| } |
|
|
| |
| |
| |
| public void OnAfterDeserialize() |
| { |
| UpdateToActionSpec(); |
| SyncDeprecatedActionFields(); |
| } |
| } |
| } |
|
|