public void ApplyContinuousActionOutput()
        {
            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();

            var agentIds = new List<int>() { 0, 1 };
            // Dictionary from AgentId to Action
            var actionDict = new Dictionary<int, float[]>() { { 0, null }, { 1, null } };

            applier.Apply(inputTensor, agentIds, actionDict);


            Assert.AreEqual(actionDict[0][0], 1);
            Assert.AreEqual(actionDict[0][1], 2);
            Assert.AreEqual(actionDict[0][2], 3);

            Assert.AreEqual(actionDict[1][0], 4);
            Assert.AreEqual(actionDict[1][1], 5);
            Assert.AreEqual(actionDict[1][2], 6);
        }
Пример #2
0
        public void ApplyContinuousActionOutput()
        {
            var inputTensor = new TensorProxy()
            {
                shape = new long[] { 2, 3 },
                data  = new Tensor(2, 3, new float[] { 1, 2, 3, 4, 5, 6 })
            };
            var agentInfos = GetFakeAgentInfos();

            var applier = new ContinuousActionOutputApplier();

            applier.Apply(inputTensor, agentInfos);
            var agents = agentInfos;

            var agent = agents[0] as TestAgent;

            Assert.NotNull(agent);
            var action = agent.GetAction();

            Assert.AreEqual(action.vectorActions[0], 1);
            Assert.AreEqual(action.vectorActions[1], 2);
            Assert.AreEqual(action.vectorActions[2], 3);

            agent = agents[1] as TestAgent;
            Assert.NotNull(agent);
            action = agent.GetAction();
            Assert.AreEqual(action.vectorActions[0], 4);
            Assert.AreEqual(action.vectorActions[1], 5);
            Assert.AreEqual(action.vectorActions[2], 6);
        }
        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);
        }
Пример #4
0
        public void ApplyContinuousActionOutput()
        {
            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();

            var action0   = new AgentAction();
            var action1   = new AgentAction();
            var callbacks = new List <AgentIdActionPair>()
            {
                new AgentIdActionPair {
                    agentId = 0, action = (a) => action0 = a
                },
                new AgentIdActionPair {
                    agentId = 1, action = (a) => action1 = a
                }
            };

            applier.Apply(inputTensor, callbacks);


            Assert.AreEqual(action0.vectorActions[0], 1);
            Assert.AreEqual(action0.vectorActions[1], 2);
            Assert.AreEqual(action0.vectorActions[2], 3);

            Assert.AreEqual(action1.vectorActions[0], 4);
            Assert.AreEqual(action1.vectorActions[1], 5);
            Assert.AreEqual(action1.vectorActions[2], 6);
        }
Пример #5
0
        public void ApplyContinuousActionOutput()
        {
            var inputTensor = new Tensor()
            {
                Shape = new long[] { 2, 3 },
                Data  = new float[, ] {
                    { 1, 2, 3 }, { 4, 5, 6 }
                }
            };
            var agentInfos = GetFakeAgentInfos();

            var applier = new ContinuousActionOutputApplier();

            applier.Apply(inputTensor, agentInfos);
            var agents = agentInfos.Keys.ToList();
            var agent  = agents[0] as TestAgent;
            var action = agent.GetAction();

            Assert.AreEqual(action.vectorActions[0], 1);
            Assert.AreEqual(action.vectorActions[1], 2);
            Assert.AreEqual(action.vectorActions[2], 3);
            agent  = agents[1] as TestAgent;
            action = agent.GetAction();
            Assert.AreEqual(action.vectorActions[0], 4);
            Assert.AreEqual(action.vectorActions[1], 5);
            Assert.AreEqual(action.vectorActions[2], 6);
        }
        public void ApplyHybridActionOutput()
        {
            var actionSpec            = new ActionSpec(3, new[] { 2, 3 });
            var continuousInputTensor = new TensorProxy()
            {
                shape = new long[] { 2, 3 },
                data  = new Tensor(2, 3, new float[] { 1, 2, 3, 4, 5, 6 })
            };
            var discreteInputTensor = new TensorProxy()
            {
                shape = new long[] { 2, 2 },
                data  = new Tensor(
                    2,
                    2,
                    new[] { 1f, 1f, 1f, 2f }),
            };
            var continuousApplier = new ContinuousActionOutputApplier(actionSpec);
            var alloc             = new TensorCachingAllocator();
            var discreteApplier   = 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 }
            };


            continuousApplier.Apply(continuousInputTensor, agentIds, actionDict);
            discreteApplier.Apply(discreteInputTensor, 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[0].DiscreteActions[0], 1);
            Assert.AreEqual(actionDict[0].DiscreteActions[1], 1);

            Assert.AreEqual(actionDict[1].ContinuousActions[0], 4);
            Assert.AreEqual(actionDict[1].ContinuousActions[1], 5);
            Assert.AreEqual(actionDict[1].ContinuousActions[2], 6);
            Assert.AreEqual(actionDict[1].DiscreteActions[0], 1);
            Assert.AreEqual(actionDict[1].DiscreteActions[1], 2);
            alloc.Dispose();
        }