コード例 #1
0
 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);
     }
 }
コード例 #2
0
ファイル: ApplierImpl.cs プロジェクト: zereyak13/ml-agents
 public DiscreteActionOutputApplier(ActionSpec actionSpec, int seed, ITensorAllocator allocator)
 {
     m_ActionSize  = actionSpec.BranchSizes;
     m_Multinomial = new Multinomial(seed);
     m_Allocator   = allocator;
     m_ActionSpec  = actionSpec;
 }
コード例 #3
0
        /// <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);
                }
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
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);
        }
コード例 #6
0
 public TestActuator(ActionSpec actuatorSpace, string name)
 {
     ActionSpec           = actuatorSpace;
     TotalNumberOfActions = actuatorSpace.NumContinuousActions +
                            actuatorSpace.NumDiscreteActions;
     Name = name;
 }
コード例 #7
0
        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);
        }
コード例 #8
0
ファイル: GrpcExtensions.cs プロジェクト: vanreusVU/ml-agents
        /// <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);
        }
コード例 #9
0
        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()));
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
        }
コード例 #12
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);
        }
コード例 #13
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();
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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 });
        }
コード例 #16
0
        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);
        }
コード例 #17
0
ファイル: GrpcExtensions.cs プロジェクト: cn00/ml-agents
        /// <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);
        }
コード例 #18
0
        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]
                );
        }
コード例 #19
0
ファイル: GrpcExtensions.cs プロジェクト: vanreusVU/ml-agents
        /// <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);
        }
コード例 #20
0
        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);
        }
コード例 #21
0
 public HashSetActionMask(ActionSpec spec)
 {
     HashSets = new HashSet <int> [spec.NumDiscreteActions];
     for (var i = 0; i < spec.NumDiscreteActions; i++)
     {
         HashSets[i] = new HashSet <int>();
     }
 }
コード例 #22
0
        /// <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>();
        }
コード例 #23
0
        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();
 }
コード例 #25
0
 /// <inheritdoc />
 public RemotePolicy(
     ActionSpec actionSpec,
     string fullyQualifiedBehaviorName)
 {
     m_FullyQualifiedBehaviorName = fullyQualifiedBehaviorName;
     m_Communicator = Academy.Instance.Communicator;
     m_Communicator.SubscribeBrain(m_FullyQualifiedBehaviorName, actionSpec);
     m_ActionSpec = actionSpec;
 }
コード例 #26
0
        BrainParameters GetDiscrete1vis0vec_2_3action_recurrModelBrainParameters()
        {
            var validBrainParameters = new BrainParameters();

            validBrainParameters.VectorObservationSize        = 0;
            validBrainParameters.NumStackedVectorObservations = 1;
            validBrainParameters.ActionSpec = ActionSpec.MakeDiscrete(2, 3);
            return(validBrainParameters);
        }
コード例 #27
0
        BrainParameters GetContinuous2vis8vec2actionBrainParameters()
        {
            var validBrainParameters = new BrainParameters();

            validBrainParameters.VectorObservationSize        = 8;
            validBrainParameters.NumStackedVectorObservations = 1;
            validBrainParameters.ActionSpec = ActionSpec.MakeContinuous(2);
            return(validBrainParameters);
        }
コード例 #28
0
        /// <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);
        }
コード例 #29
0
        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;
        }
コード例 #30
0
ファイル: GrpcExtensions.cs プロジェクト: vanreusVU/ml-agents
        /// <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);
        }