/// <summary> /// Convert a ActionSpecProto to a ActionSpec struct. /// </summary> /// <param name="actionSpecProto">An instance of an action spec protobuf object.</param> /// <returns>An ActionSpec struct.</returns> public static ActionSpec ToActionSpec(this ActionSpecProto actionSpecProto) { var actionSpec = new ActionSpec(actionSpecProto.NumContinuousActions); if (actionSpecProto.DiscreteBranchSizes != null) { actionSpec.BranchSizes = actionSpecProto.DiscreteBranchSizes.ToArray(); } return(actionSpec); }
/// <summary> /// Convert a ActionSpec struct to a ActionSpecProto. /// </summary> /// <param name="actionSpec">An instance of an action spec struct.</param> /// <returns>An ActionSpecProto.</returns> public static ActionSpecProto ToActionSpecProto(this ActionSpec actionSpec) { var actionSpecProto = new ActionSpecProto { NumContinuousActions = actionSpec.NumContinuousActions, NumDiscreteActions = actionSpec.NumDiscreteActions, }; if (actionSpec.BranchSizes != null) { actionSpecProto.DiscreteBranchSizes.AddRange(actionSpec.BranchSizes); } return(actionSpecProto); }
/// <summary> /// Converts an ActionSpec into to a Protobuf BrainInfoProto so it can be sent. /// </summary> /// <returns>The BrainInfoProto generated.</returns> /// <param name="actionSpec"> Description of the action spaces for the Agent.</param> /// <param name="name">The name of the brain.</param> /// <param name="isTraining">Whether or not the Brain is training.</param> public static BrainParametersProto ToBrainParametersProto(this ActionSpec actionSpec, string name, bool isTraining) { var brainParametersProto = new BrainParametersProto { BrainName = name, IsTraining = isTraining }; var actionSpecProto = new ActionSpecProto { NumContinuousActions = actionSpec.NumContinuousActions, NumDiscreteActions = actionSpec.NumDiscreteActions, }; if (actionSpec.BranchSizes != null) { actionSpecProto.DiscreteBranchSizes.AddRange(actionSpec.BranchSizes); } brainParametersProto.ActionSpec = actionSpecProto; var supportHybrid = Academy.Instance.TrainerCapabilities == null || Academy.Instance.TrainerCapabilities.HybridActions; if (!supportHybrid) { actionSpec.CheckAllContinuousOrDiscrete(); if (actionSpec.NumContinuousActions > 0) { brainParametersProto.VectorActionSizeDeprecated.Add(actionSpec.NumContinuousActions); brainParametersProto.VectorActionSpaceTypeDeprecated = SpaceTypeProto.Continuous; } else if (actionSpec.NumDiscreteActions > 0) { brainParametersProto.VectorActionSizeDeprecated.AddRange(actionSpec.BranchSizes); brainParametersProto.VectorActionSpaceTypeDeprecated = SpaceTypeProto.Discrete; } } // TODO handle ActionDescriptions? return(brainParametersProto); }