using System;
using UnityEngine;
using UnityEngine.Serialization;
namespace Unity.MLAgents.Policies
{
///
/// Whether the action space is discrete or continuous.
///
public enum SpaceType
{
///
/// Discrete action space: a fixed number of options are available.
///
Discrete,
///
/// Continuous action space: each action can take on a float value.
///
Continuous
}
///
/// Holds information about the brain. It defines what are the inputs and outputs of the
/// decision process.
///
///
/// Set brain parameters for an instance using the
/// component attached to the agent's [GameObject].
///
/// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html
///
[Serializable]
public class BrainParameters
{
///
/// The size of the observation space.
///
/// An agent creates the observation vector in its
///
/// implementation.
///
/// The length of the vector containing observation values.
///
[FormerlySerializedAs("vectorObservationSize")]
public int VectorObservationSize = 1;
///
/// Stacking refers to concatenating the observations across multiple frames. This field
/// indicates the number of frames to concatenate across.
///
[FormerlySerializedAs("numStackedVectorObservations")]
[Range(1, 50)] public int NumStackedVectorObservations = 1;
///
/// The size of the action space.
///
/// The size specified is interpreted differently depending on whether
/// the agent uses the continuous or the discrete action space.
///
/// For the continuous action space: the length of the float vector that represents
/// the action.
/// For the discrete action space: the number of branches in the action space.
///
[FormerlySerializedAs("vectorActionSize")]
public int[] VectorActionSize = new[] {1};
///
/// The list of strings describing what the actions correspond to.
///
[FormerlySerializedAs("vectorActionDescriptions")]
public string[] VectorActionDescriptions;
///
/// Defines if the action is discrete or continuous.
///
[FormerlySerializedAs("vectorActionSpaceType")]
public SpaceType VectorActionSpaceType = SpaceType.Discrete;
///
/// The number of actions specified by this Brain.
///
public int NumActions
{
get
{
switch (VectorActionSpaceType)
{
case SpaceType.Discrete:
return VectorActionSize.Length;
case SpaceType.Continuous:
return VectorActionSize[0];
default:
return 0;
}
}
}
///
/// Deep clones the BrainParameter object.
///
/// A new BrainParameter object with the same values as the original.
public BrainParameters Clone()
{
return new BrainParameters
{
VectorObservationSize = VectorObservationSize,
NumStackedVectorObservations = NumStackedVectorObservations,
VectorActionSize = (int[])VectorActionSize.Clone(),
VectorActionDescriptions = (string[])VectorActionDescriptions.Clone(),
VectorActionSpaceType = VectorActionSpaceType
};
}
}
}