Example #1
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);
        }
Example #2
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()));
        }
Example #3
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);
        }
Example #4
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);
        }
Example #5
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);
     }
 }
Example #6
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);
        }
Example #7
0
        public void TestFailOnSameActuatorName()
        {
            var manager   = new ActuatorManager();
            var actuator1 = new TestActuator(ActionSpec.MakeContinuous(3), "actuator1");
            var actuator2 = new TestActuator(ActionSpec.MakeContinuous(3), "actuator1");

            manager.Add(actuator1);
            manager.Add(actuator2);
            manager.ReadyActuatorsForExecution(new[] { actuator1, actuator2 }, 3, 10, 4);
            LogAssert.Expect(LogType.Assert, "Actuator names must be unique.");
        }
Example #8
0
        public void TestFailOnMixedActionSpace()
        {
            var manager   = new ActuatorManager();
            var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3, 4 }), "actuator1");
            var actuator2 = new TestActuator(ActionSpec.MakeContinuous(3), "actuator2");

            manager.Add(actuator1);
            manager.Add(actuator2);
            LogAssert.Expect(LogType.Assert, "Actuators on the same Agent must have the same action SpaceType.");
            manager.ReadyActuatorsForExecution(new[] { actuator1, actuator2 }, 3, 10, 4);
        }
Example #9
0
        public void TestAllowMixedActions()
        {
            // Make sure discrete + continuous actuators are allowed.
            var manager   = new ActuatorManager();
            var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3, 4 }), "actuator1");
            var actuator2 = new TestActuator(ActionSpec.MakeContinuous(3), "actuator2");

            manager.Add(actuator1);
            manager.Add(actuator2);
            manager.ReadyActuatorsForExecution(new[] { actuator1, actuator2 }, 3, 10, 4);
        }
Example #10
0
 /// <summary>
 /// Initializes the singleton instance of the class
 /// </summary>
 static Context()
 {
     AppQuit                 = false;
     AppWindowPosition       = Windows.WindowPosition.TopRight;
     _actuatorManager        = ActuatorManager.Instance;
     _agentManager           = AgentManager.Instance;
     _panelManager           = PanelManager.Instance;
     _ttsManager             = TTSManager.Instance;
     _automationEventManager = AutomationEventManager.Instance;
     _wordPredictionManager  = WordPredictionManager.Instance;
     _spellCheckManager      = SpellCheckManager.Instance;
     _themeManager           = ThemeManager.Instance;
 }
Example #11
0
        public void TestIndexSet()
        {
            var manager   = new ActuatorManager();
            var actuator1 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3, 4 }),
                                             "actuator1");
            var actuator2 = new TestActuator(ActionSpec.MakeDiscrete(new[] { 1, 2, 3 }), "actuator2");

            manager.Add(actuator1);
            Assert.IsTrue(manager.NumDiscreteActions == 4);
            Assert.IsTrue(manager.SumOfDiscreteBranchSizes == 10);
            manager[0] = actuator2;
            Assert.IsTrue(manager.NumDiscreteActions == 3);
            Assert.IsTrue(manager.SumOfDiscreteBranchSizes == 6);
        }
Example #12
0
        /// <summary>
        /// Initializes the singleton instance of the class
        /// </summary>
        static Context()
        {
            AppQuit           = false;
            AppWindowPosition = Windows.WindowPosition.MiddleRight;

            //Initialize all the manager singleton objects
            _actuatorManager        = ActuatorManager.Instance;
            _agentManager           = AgentManager.Instance;
            _panelManager           = PanelManager.Instance;
            _ttsManager             = TTSManager.Instance;
            _automationEventManager = AutomationEventManager.Instance;
            _wordPredictionManager  = WordPredictionManager.Instance;
            _spellCheckManager      = SpellCheckManager.Instance;
            _themeManager           = ThemeManager.Instance;
        }
Example #13
0
        public void TestUpdateActionsContinuous()
        {
            var manager   = new ActuatorManager();
            var actuator1 = new TestActuator(ActionSpec.MakeContinuous(3),
                                             "actuator1");
            var actuator2 = new TestActuator(ActionSpec.MakeContinuous(3), "actuator2");

            manager.Add(actuator1);
            manager.Add(actuator2);
            var continuousActionBuffer = new[] { 0f, 1f, 2f, 3f, 4f, 5f };

            manager.UpdateActions(new ActionBuffers(continuousActionBuffer,
                                                    Array.Empty <int>()));

            Assert.IsTrue(manager.StoredActions.ContinuousActions.SequenceEqual(continuousActionBuffer));
        }
Example #14
0
        public void TestSortActuators(string culture)
        {
            List <IActuator> actuators = new List <IActuator>();
            var actuator0 = new TestActuator(ActionSpec.MakeContinuous(2), "Apple");
            var actuator1 = new TestActuator(ActionSpec.MakeContinuous(2), "Æble");

            actuators.Add(actuator0);
            actuators.Add(actuator1);

            var originalCulture = CultureInfo.CurrentCulture;

            CultureInfo.CurrentCulture = new CultureInfo(culture);
            ActuatorManager.SortActuators(actuators);
            CultureInfo.CurrentCulture = originalCulture;

            Assert.AreEqual(actuator1, actuators[0]);
            Assert.AreEqual(actuator0, actuators[1]);
        }
Example #15
0
        public void TestHeuristic()
        {
            var manager = new ActuatorManager(2);
            var va1     = new TestActuator(ActionSpec.MakeDiscrete(1, 2, 3), "name");
            var va2     = new TestActuator(ActionSpec.MakeDiscrete(3, 2, 1, 8), "name1");

            manager.Add(va1);
            manager.Add(va2);

            var actionBuf = new ActionBuffers(Array.Empty <float>(), new[] { 0, 0, 0, 0, 0, 0, 0 });

            manager.ApplyHeuristic(actionBuf);

            Assert.IsTrue(va1.m_HeuristicCalled);
            Assert.AreEqual(va1.m_DiscreteBufferSize, 3);
            Assert.IsTrue(va2.m_HeuristicCalled);
            Assert.AreEqual(va2.m_DiscreteBufferSize, 4);
        }
Example #16
0
        public void TestUpdateActionsDiscrete()
        {
            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);
            var discreteActionBuffer = new[] { 0, 1, 2, 3, 4, 5 };

            manager.UpdateActions(new ActionBuffers(Array.Empty <float>(),
                                                    discreteActionBuffer));

            Debug.Log(manager.StoredActions.DiscreteActions);
            Debug.Log(discreteActionBuffer);
            Assert.IsTrue(manager.StoredActions.DiscreteActions.SequenceEqual(discreteActionBuffer));
        }
Example #17
0
        public void TestExecuteActionsDiscrete()
        {
            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 discreteActionBuffer = new[] { 0, 1, 2, 3, 4, 5, 6 };

            manager.UpdateActions(new ActionBuffers(Array.Empty <float>(),
                                                    discreteActionBuffer));

            manager.ExecuteActions();
            var actuator1Actions = actuator1.LastActionBuffer.DiscreteActions;
            var actuator2Actions = actuator2.LastActionBuffer.DiscreteActions;

            TestSegmentEquality(actuator1Actions, discreteActionBuffer); TestSegmentEquality(actuator2Actions, discreteActionBuffer);
        }
Example #18
0
        public void TestExecuteActionsContinuous()
        {
            var manager   = new ActuatorManager();
            var actuator1 = new TestActuator(ActionSpec.MakeContinuous(3),
                                             "actuator1");
            var actuator2 = new TestActuator(ActionSpec.MakeContinuous(3), "actuator2");

            manager.Add(actuator1);
            manager.Add(actuator2);

            var continuousActionBuffer = new[] { 0f, 1f, 2f, 3f, 4f, 5f };

            manager.UpdateActions(new ActionBuffers(continuousActionBuffer,
                                                    Array.Empty <int>()));

            manager.ExecuteActions();
            var actuator1Actions = actuator1.LastActionBuffer.ContinuousActions;
            var actuator2Actions = actuator2.LastActionBuffer.ContinuousActions;

            TestSegmentEquality(actuator1Actions, continuousActionBuffer);
            TestSegmentEquality(actuator2Actions, continuousActionBuffer);
        }