internal IPolicy GeneratePolicy(ActionSpec actionSpec, ActuatorManager actuatorManager) { switch (m_BehaviorType) { case BehaviorType.HeuristicOnly: return new HeuristicPolicy(actuatorManager, actionSpec); case BehaviorType.InferenceOnly: { if (m_Model == null) { var behaviorType = BehaviorType.InferenceOnly.ToString(); throw new UnityAgentsException( $"Can't use Behavior Type {behaviorType} without a model. " + "Either assign a model, or change to a different Behavior Type." ); } return new BarracudaPolicy(actionSpec, m_Model, m_InferenceDevice, m_BehaviorName); } case BehaviorType.Default: if (Academy.Instance.IsCommunicatorOn) { return new RemotePolicy(actionSpec, FullyQualifiedBehaviorName); } if (m_Model != null) { return new BarracudaPolicy(actionSpec, m_Model, m_InferenceDevice, m_BehaviorName); } else { return new HeuristicPolicy(actuatorManager, actionSpec); } default: return new HeuristicPolicy(actuatorManager, actionSpec); } }
public DiscreteActionOutputApplier(ActionSpec actionSpec, int seed, ITensorAllocator allocator) { m_ActionSize = actionSpec.BranchSizes; m_Multinomial = new Multinomial(seed); m_Allocator = allocator; m_ActionSpec = actionSpec; }
/// <summary> /// Returns a new TensorAppliers object. /// </summary> /// <param name="actionSpec"> Description of the action spaces for the Agent.</param> /// <param name="seed"> The seed the Appliers will be initialized with.</param> /// <param name="allocator"> Tensor allocator</param> /// <param name="memories">Dictionary of AgentInfo.id to memory used to pass to the inference model.</param> /// <param name="barracudaModel"></param> public TensorApplier( ActionSpec actionSpec, int seed, ITensorAllocator allocator, Dictionary <int, List <float> > memories, object barracudaModel = null) { actionSpec.CheckNotHybrid(); if (actionSpec.NumContinuousActions > 0) { m_Dict[TensorNames.ActionOutput] = new ContinuousActionOutputApplier(); } else { m_Dict[TensorNames.ActionOutput] = new DiscreteActionOutputApplier(actionSpec.BranchSizes, seed, allocator); } m_Dict[TensorNames.RecurrentOutput] = new MemoryOutputApplier(memories); if (barracudaModel != null) { var model = (Model)barracudaModel; for (var i = 0; i < model?.memories.Count; i++) { m_Dict[model.memories[i].output] = new BarracudaMemoryOutputApplier(model.memories.Count, i, memories); } } }
public void TestCheckModelThrowsActionHybrid() { var model = ModelLoader.Load(hybridONNXModel); var brainParameters = GetHybridBrainParameters(); brainParameters.ActionSpec = new ActionSpec(3, new[] { 3 }); // Invalid discrete action size var errors = BarracudaModelParamLoader.CheckModel( model, brainParameters, new ISensor[] { sensor_21_20_3.CreateSensors()[0], sensor_20_22_3.CreateSensors()[0] }, new ActuatorComponent[0] ); Assert.Greater(errors.Count(), 0); brainParameters = GetContinuous2vis8vec2actionBrainParameters(); brainParameters.ActionSpec = ActionSpec.MakeDiscrete(2); // Missing continuous action errors = BarracudaModelParamLoader.CheckModel( model, brainParameters, new ISensor[] { sensor_21_20_3.CreateSensors()[0], sensor_20_22_3.CreateSensors()[0] }, new ActuatorComponent[0] ); Assert.Greater(errors.Count(), 0); }
public void TestEnsureBufferSizeContinuous() { var manager = new ActuatorManager(); var actuator1 = new TestActuator(ActionSpec.MakeContinuous(10), "actuator1"); var actuator2 = new TestActuator(ActionSpec.MakeContinuous(2), "actuator2"); manager.Add(actuator1); manager.Add(actuator2); var actuator1ActionSpaceDef = actuator1.ActionSpec; var actuator2ActionSpaceDef = actuator2.ActionSpec; manager.ReadyActuatorsForExecution(new[] { actuator1, actuator2 }, actuator1ActionSpaceDef.NumContinuousActions + actuator2ActionSpaceDef.NumContinuousActions, actuator1ActionSpaceDef.SumOfDiscreteBranchSizes + actuator2ActionSpaceDef.SumOfDiscreteBranchSizes, actuator1ActionSpaceDef.NumDiscreteActions + actuator2ActionSpaceDef.NumDiscreteActions); manager.UpdateActions(new ActionBuffers(new[] { 0f, 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f }, Array.Empty <int>())); Assert.IsTrue(12 == manager.NumContinuousActions); Assert.IsTrue(0 == manager.NumDiscreteActions); Assert.IsTrue(0 == manager.SumOfDiscreteBranchSizes); Assert.IsTrue(12 == manager.StoredActions.ContinuousActions.Length); Assert.IsTrue(0 == manager.StoredActions.DiscreteActions.Length); }
public TestActuator(ActionSpec actuatorSpace, string name) { ActionSpec = actuatorSpace; TotalNumberOfActions = actuatorSpace.NumContinuousActions + actuatorSpace.NumDiscreteActions; Name = name; }
public void TestRemotePolicyEvent() { var behaviorName = "testBehavior"; var sensor1 = new Test3DSensor("SensorA", 21, 20, 3); var sensor2 = new Test3DSensor("SensorB", 20, 22, 3); var sensors = new List <ISensor> { sensor1, sensor2 }; var actionSpec = ActionSpec.MakeContinuous(2); var vectorActuator = new VectorActuator(null, actionSpec, "test'"); var actuators = new IActuator[] { vectorActuator }; var remotePolicyEvent = TrainingAnalytics.GetEventForRemotePolicy(behaviorName, sensors, actionSpec, actuators); // The behavior name should be hashed, not pass-through. Assert.AreNotEqual(behaviorName, remotePolicyEvent.BehaviorName); Assert.AreEqual(2, remotePolicyEvent.ObservationSpecs.Count); Assert.AreEqual(3, remotePolicyEvent.ObservationSpecs[0].DimensionInfos.Length); Assert.AreEqual(20, remotePolicyEvent.ObservationSpecs[0].DimensionInfos[0].Size); Assert.AreEqual(0, remotePolicyEvent.ObservationSpecs[0].ObservationType); Assert.AreEqual("None", remotePolicyEvent.ObservationSpecs[0].CompressionType); Assert.AreEqual(Test3DSensor.k_BuiltInSensorType, remotePolicyEvent.ObservationSpecs[0].BuiltInSensorType); Assert.AreEqual(2, remotePolicyEvent.ActionSpec.NumContinuousActions); Assert.AreEqual(0, remotePolicyEvent.ActionSpec.NumDiscreteActions); Assert.AreEqual(2, remotePolicyEvent.ActuatorInfos[0].NumContinuousActions); Assert.AreEqual(0, remotePolicyEvent.ActuatorInfos[0].NumDiscreteActions); }
/// <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 actions 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, ActionSpec = ToActionSpecProto(actionSpec), }; 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); }
public void TestWriteDiscreteActionMask() { var manager = new ActuatorManager(2); var va1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3 }), "name"); var va2 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 3, 2, 1 }), "name1"); manager.Add(va1); manager.Add(va2); var groundTruthMask = new[] { false, true, false, false, true, true, true, false, true, false, true, false }; va1.Masks = new[] { Array.Empty <int>(), new[] { 0 }, new[] { 1, 2 } }; va2.Masks = new[] { new[] { 0, 2 }, new[] { 1 }, Array.Empty <int>() }; manager.WriteActionMask(); Assert.IsTrue(groundTruthMask.SequenceEqual(manager.DiscreteActionMask.GetMask())); }
public void ActionSpecCombineTest() { var as0 = new ActionSpec(3, new[] { 3, 2, 1 }); var as1 = new ActionSpec(1, new[] { 35, 122, 1, 3, 8, 3 }); var as0NumCon = 3; var as0NumDis = as0.NumDiscreteActions; var as1NumCon = 1; var as1NumDis = as1.NumDiscreteActions; var branchSizes = new List <int>(); branchSizes.AddRange(as0.BranchSizes); branchSizes.AddRange(as1.BranchSizes); var asc = ActionSpec.Combine(as0, as1); Assert.AreEqual(as0NumCon + as1NumCon, asc.NumContinuousActions); Assert.AreEqual(as0NumDis + as1NumDis, asc.NumDiscreteActions); Assert.IsTrue(branchSizes.ToArray().SequenceEqual(asc.BranchSizes)); as0 = new ActionSpec(3); as1 = new ActionSpec(1); asc = ActionSpec.Combine(as0, as1); Assert.IsEmpty(asc.BranchSizes); }
public void TestCheckModelThrowsActionDiscrete(bool useDeprecatedNNModel) { var model = useDeprecatedNNModel ? ModelLoader.Load(discreteNNModel) : ModelLoader.Load(discreteONNXModel); var brainParameters = GetDiscrete1vis0vec_2_3action_recurrModelBrainParameters(); brainParameters.ActionSpec = ActionSpec.MakeDiscrete(3, 3); // Invalid action var errors = BarracudaModelParamLoader.CheckModel( model, brainParameters, new ISensor[] { sensor_21_20_3.CreateSensors()[0] }, new ActuatorComponent[0] ); Assert.Greater(errors.Count(), 0); brainParameters = GetContinuous2vis8vec2actionBrainParameters(); brainParameters.ActionSpec = ActionSpec.MakeContinuous(2); // Invalid SpaceType errors = BarracudaModelParamLoader.CheckModel( model, brainParameters, new ISensor[] { sensor_21_20_3.CreateSensors()[0] }, new ActuatorComponent[0] ); Assert.Greater(errors.Count(), 0); }
public void TestRemove() { var manager = new ActuatorManager(); var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3 }), "actuator1"); var actuator2 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3 }), "actuator2"); manager.Add(actuator1); manager.Add(actuator2); Assert.IsTrue(manager.NumDiscreteActions == 6); Assert.IsTrue(manager.SumOfDiscreteBranchSizes == 12); manager.Remove(actuator2); Assert.IsTrue(manager.NumDiscreteActions == 3); Assert.IsTrue(manager.SumOfDiscreteBranchSizes == 6); manager.Remove(null); Assert.IsTrue(manager.NumDiscreteActions == 3); Assert.IsTrue(manager.SumOfDiscreteBranchSizes == 6); manager.RemoveAt(0); Assert.IsTrue(manager.NumDiscreteActions == 0); Assert.IsTrue(manager.SumOfDiscreteBranchSizes == 0); }
public void ApplyDiscreteActionOutput() { var actionSpec = ActionSpec.MakeDiscrete(2, 3); var inputTensor = new TensorProxy() { shape = new long[] { 2, 2 }, data = new Tensor( 2, 2, new[] { 1f, 1f, 1f, 2f }), }; var alloc = new TensorCachingAllocator(); var applier = new DiscreteActionOutputApplier(actionSpec, 0, alloc); var agentIds = new List <int>() { 0, 1 }; // Dictionary from AgentId to Action var actionDict = new Dictionary <int, ActionBuffers>() { { 0, ActionBuffers.Empty }, { 1, ActionBuffers.Empty } }; applier.Apply(inputTensor, agentIds, actionDict); Assert.AreEqual(actionDict[0].DiscreteActions[0], 1); Assert.AreEqual(actionDict[0].DiscreteActions[1], 1); Assert.AreEqual(actionDict[1].DiscreteActions[0], 1); Assert.AreEqual(actionDict[1].DiscreteActions[1], 2); alloc.Dispose(); }
internal static RemotePolicyInitializedEvent GetEventForRemotePolicy( string behaviorName, IList <ISensor> sensors, ActionSpec actionSpec, IList <IActuator> actuators ) { var remotePolicyEvent = new RemotePolicyInitializedEvent(); // Hash the behavior name so that there's no concern about PII or "secret" data being leaked. remotePolicyEvent.BehaviorName = AnalyticsUtils.Hash(behaviorName); remotePolicyEvent.TrainingSessionGuid = s_TrainingSessionGuid.ToString(); remotePolicyEvent.ActionSpec = EventActionSpec.FromActionSpec(actionSpec); remotePolicyEvent.ObservationSpecs = new List <EventObservationSpec>(sensors.Count); foreach (var sensor in sensors) { remotePolicyEvent.ObservationSpecs.Add(EventObservationSpec.FromSensor(sensor)); } remotePolicyEvent.ActuatorInfos = new List <EventActuatorInfo>(actuators.Count); foreach (var actuator in actuators) { remotePolicyEvent.ActuatorInfos.Add(EventActuatorInfo.FromActuator(actuator)); } remotePolicyEvent.MLAgentsEnvsVersion = s_TrainerPackageVersion; remotePolicyEvent.TrainerCommunicationVersion = s_TrainerCommunicationVersion; return(remotePolicyEvent); }
public void AssertStackingReset() { var agentGo1 = new GameObject("TestAgent"); var bp1 = agentGo1.AddComponent <BehaviorParameters>(); bp1.BrainParameters.NumStackedVectorObservations = 3; bp1.BrainParameters.ActionSpec = ActionSpec.MakeContinuous(1); var aca = Academy.Instance; var agent1 = agentGo1.AddComponent <TestAgent>(); var policy = new TestPolicy(); agent1.SetPolicy(policy); StackingSensor sensor = null; foreach (ISensor s in agent1.sensors) { if (s is StackingSensor) { sensor = s as StackingSensor; } } Assert.NotNull(sensor); for (int i = 0; i < 20; i++) { agent1.RequestDecision(); aca.EnvironmentStep(); } policy.OnRequestDecision = () => SensorTestHelper.CompareObservation(sensor, new[] { 18f, 19f, 21f }); agent1.EndEpisode(); SensorTestHelper.CompareObservation(sensor, new[] { 0f, 0f, 0f }); }
public void ApplyContinuousActionOutput() { var actionSpec = ActionSpec.MakeContinuous(3); var inputTensor = new TensorProxy() { shape = new long[] { 2, 3 }, data = new Tensor(2, 3, new float[] { 1, 2, 3, 4, 5, 6 }) }; var applier = new ContinuousActionOutputApplier(actionSpec); var agentIds = new List <int>() { 0, 1 }; // Dictionary from AgentId to Action var actionDict = new Dictionary <int, ActionBuffers>() { { 0, ActionBuffers.Empty }, { 1, ActionBuffers.Empty } }; applier.Apply(inputTensor, agentIds, actionDict); Assert.AreEqual(actionDict[0].ContinuousActions[0], 1); Assert.AreEqual(actionDict[0].ContinuousActions[1], 2); Assert.AreEqual(actionDict[0].ContinuousActions[2], 3); Assert.AreEqual(actionDict[1].ContinuousActions[0], 4); Assert.AreEqual(actionDict[1].ContinuousActions[1], 5); Assert.AreEqual(actionDict[1].ContinuousActions[2], 6); }
/// <summary> /// Convert a BrainParametersProto to a BrainParameters struct. /// </summary> /// <param name="bpp">An instance of a brain parameters protobuf object.</param> /// <returns>A BrainParameters struct.</returns> public static BrainParameters ToBrainParameters(this BrainParametersProto bpp) { ActionSpec actionSpec; if (bpp.ActionSpec == null) { var spaceType = (SpaceType)bpp.VectorActionSpaceTypeDeprecated; if (spaceType == SpaceType.Continuous) { actionSpec = ActionSpec.MakeContinuous(bpp.VectorActionSizeDeprecated.ToArray()[0]); } else { actionSpec = ActionSpec.MakeDiscrete(bpp.VectorActionSizeDeprecated.ToArray()); } } else { actionSpec = ToActionSpec(bpp.ActionSpec); } var bp = new BrainParameters { VectorActionDescriptions = bpp.VectorActionDescriptionsDeprecated.ToArray(), ActionSpec = actionSpec, }; return(bp); }
public void TestHeuristicPolicyStepsSensors() { // Make sure that Agents with HeuristicPolicies step their sensors each Academy step. var agentGo1 = new GameObject("TestAgent"); var bp1 = agentGo1.AddComponent <BehaviorParameters>(); bp1.BrainParameters.ActionSpec = ActionSpec.MakeContinuous(1); agentGo1.AddComponent <TestAgent>(); var agent1 = agentGo1.GetComponent <TestAgent>(); var aca = Academy.Instance; var decisionRequester = agent1.gameObject.AddComponent <DecisionRequester>(); decisionRequester.DecisionPeriod = 1; decisionRequester.Awake(); agent1.LazyInitialize(); Assert.AreEqual(agent1.GetPolicy().GetType(), typeof(HeuristicPolicy)); var numSteps = 10; for (var i = 0; i < numSteps; i++) { aca.EnvironmentStep(); } Assert.AreEqual(numSteps, agent1.heuristicCalls); Assert.AreEqual(numSteps, agent1.sensor1.numWriteCalls); Assert.AreEqual(numSteps, agent1.sensor2.numCompressedCalls); Assert.AreEqual( agent1.collectObservationsCallsForEpisode, agent1.GetStoredActionBuffers().ContinuousActions[0] ); }
/// <summary> /// Convert a BrainParametersProto to a BrainParameters struct. /// </summary> /// <param name="bpp">An instance of a brain parameters protobuf object.</param> /// <returns>A BrainParameters struct.</returns> public static BrainParameters ToBrainParameters(this BrainParametersProto bpp) { ActionSpec actionSpec; if (bpp.ActionSpec == null) { // Disable deprecation warnings so we can set legacy fields #pragma warning disable CS0618 var spaceType = (SpaceType)bpp.VectorActionSpaceTypeDeprecated; if (spaceType == SpaceType.Continuous) { actionSpec = ActionSpec.MakeContinuous(bpp.VectorActionSizeDeprecated.ToArray()[0]); } else { actionSpec = ActionSpec.MakeDiscrete(bpp.VectorActionSizeDeprecated.ToArray()); } #pragma warning restore CS0618 } else { actionSpec = ToActionSpec(bpp.ActionSpec); } var bp = new BrainParameters { VectorActionDescriptions = bpp.VectorActionDescriptionsDeprecated.ToArray(), ActionSpec = actionSpec, }; return(bp); }
public void TestEnsureBufferDiscrete() { var manager = new ActuatorManager(); var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3, 4 }), "actuator1"); var actuator2 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 1, 1 }), "actuator2"); manager.Add(actuator1); manager.Add(actuator2); var actuator1ActionSpaceDef = actuator1.ActionSpec; var actuator2ActionSpaceDef = actuator2.ActionSpec; manager.ReadyActuatorsForExecution(new[] { actuator1, actuator2 }, actuator1ActionSpaceDef.NumContinuousActions + actuator2ActionSpaceDef.NumContinuousActions, actuator1ActionSpaceDef.SumOfDiscreteBranchSizes + actuator2ActionSpaceDef.SumOfDiscreteBranchSizes, actuator1ActionSpaceDef.NumDiscreteActions + actuator2ActionSpaceDef.NumDiscreteActions); manager.UpdateActions(new ActionBuffers(Array.Empty <float>(), new[] { 0, 1, 2, 3, 4, 5, 6 })); Assert.IsTrue(0 == manager.NumContinuousActions); Assert.IsTrue(7 == manager.NumDiscreteActions); Assert.IsTrue(13 == manager.SumOfDiscreteBranchSizes); Assert.IsTrue(0 == manager.StoredActions.ContinuousActions.Length); Assert.IsTrue(7 == manager.StoredActions.DiscreteActions.Length); }
public HashSetActionMask(ActionSpec spec) { HashSets = new HashSet <int> [spec.NumDiscreteActions]; for (var i = 0; i < spec.NumDiscreteActions; i++) { HashSets[i] = new HashSet <int>(); } }
/// <summary> /// Initializes the Brain with the Model that it will use when selecting actions for /// the agents /// </summary> /// <param name="model"> The Barracuda model to load </param> /// <param name="actionSpec"> Description of the actions for the Agent.</param> /// <param name="inferenceDevice"> Inference execution device. CPU is the fastest /// option for most of ML Agents models. </param> /// <param name="seed"> The seed that will be used to initialize the RandomNormal /// and Multinomial objects used when running inference.</param> /// <exception cref="UnityAgentsException">Throws an error when the model is null /// </exception> public ModelRunner( NNModel model, ActionSpec actionSpec, InferenceDevice inferenceDevice, int seed = 0) { Model barracudaModel; m_Model = model; m_ModelName = model.name; m_InferenceDevice = inferenceDevice; m_TensorAllocator = new TensorCachingAllocator(); if (model != null) { #if BARRACUDA_VERBOSE m_Verbose = true; #endif D.logEnabled = m_Verbose; barracudaModel = ModelLoader.Load(model); WorkerFactory.Type executionDevice; switch (inferenceDevice) { case InferenceDevice.CPU: executionDevice = WorkerFactory.Type.CSharp; break; case InferenceDevice.GPU: executionDevice = WorkerFactory.Type.ComputePrecompiled; break; case InferenceDevice.Burst: executionDevice = WorkerFactory.Type.CSharpBurst; break; case InferenceDevice.Default: // fallthrough default: executionDevice = WorkerFactory.Type.CSharpBurst; break; } m_Engine = WorkerFactory.CreateWorker(executionDevice, barracudaModel, m_Verbose); } else { barracudaModel = null; m_Engine = null; } m_InferenceInputs = barracudaModel.GetInputTensors(); m_OutputNames = barracudaModel.GetOutputNames(); m_TensorGenerator = new TensorGenerator( seed, m_TensorAllocator, m_Memories, barracudaModel); m_TensorApplier = new TensorApplier( actionSpec, seed, m_TensorAllocator, m_Memories, barracudaModel); m_InputsByName = new Dictionary <string, Tensor>(); m_InferenceOutputs = new List <TensorProxy>(); }
BrainParameters GetRank2BrainParameters() { var validBrainParameters = new BrainParameters(); validBrainParameters.VectorObservationSize = 4; validBrainParameters.NumStackedVectorObservations = 2; validBrainParameters.ActionSpec = ActionSpec.MakeDiscrete(3, 3, 3); return(validBrainParameters); }
public void Construction() { var actionSpec = new ActionSpec(); var alloc = new TensorCachingAllocator(); var mem = new Dictionary<int, List<float>>(); var tensorGenerator = new TensorApplier(actionSpec, 0, alloc, mem); Assert.IsNotNull(tensorGenerator); alloc.Dispose(); }
/// <inheritdoc /> public RemotePolicy( ActionSpec actionSpec, string fullyQualifiedBehaviorName) { m_FullyQualifiedBehaviorName = fullyQualifiedBehaviorName; m_Communicator = Academy.Instance.Communicator; m_Communicator.SubscribeBrain(m_FullyQualifiedBehaviorName, actionSpec); m_ActionSpec = actionSpec; }
BrainParameters GetDiscrete1vis0vec_2_3action_recurrModelBrainParameters() { var validBrainParameters = new BrainParameters(); validBrainParameters.VectorObservationSize = 0; validBrainParameters.NumStackedVectorObservations = 1; validBrainParameters.ActionSpec = ActionSpec.MakeDiscrete(2, 3); return(validBrainParameters); }
BrainParameters GetContinuous2vis8vec2actionBrainParameters() { var validBrainParameters = new BrainParameters(); validBrainParameters.VectorObservationSize = 8; validBrainParameters.NumStackedVectorObservations = 1; validBrainParameters.ActionSpec = ActionSpec.MakeContinuous(2); return(validBrainParameters); }
/// <inheritdoc /> public HeuristicPolicy(ActuatorManager actuatorManager, ActionSpec actionSpec) { m_ActuatorManager = actuatorManager; var numContinuousActions = actionSpec.NumContinuousActions; var numDiscreteActions = actionSpec.NumDiscreteActions; var continuousDecision = new ActionSegment <float>(new float[numContinuousActions], 0, numContinuousActions); var discreteDecision = new ActionSegment <int>(new int[numDiscreteActions], 0, numDiscreteActions); m_ActionBuffers = new ActionBuffers(continuousDecision, discreteDecision); }
void CacheActionSpec(string behaviorName, ActionSpec actionSpec) { if (m_SentBrainKeys.Contains(behaviorName)) { return; } // TODO We should check that if m_unsentBrainKeys has brainKey, it equals actionSpec m_UnsentBrainKeys[behaviorName] = actionSpec; }
/// <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); }