Пример #1
0
        public double[] CreateInput(NeuralAgent agent, CardinalMovement action)
        {
            var input = InputCoder.Encode(agent);

            InputCoder.EncodeAction(input, action);
            return(input);
        }
Пример #2
0
        public void EncodeState(double[] input, NeuralAgent agent)
        {
            var space = agent.Anchor.Field.Space;
            int px    = agent.Anchor.Field.X - ViewRadius;
            int py    = agent.Anchor.Field.Y - ViewRadius;
            int i     = ObstaclesOffset;

            for (int y = 0; y < ViewLength; y++)
            {
                for (int x = 0; x < ViewLength; x++)
                {
                    var field = space[px + x, py + y];
                    input[i++] = field.IsOutside || field.HasObstacle ? 1 : 0;
                }
            }

            px = agent.Anchor.Field.X - ViewRadius;
            py = agent.Anchor.Field.Y - ViewRadius;
            i  = AgentsOffset;

            for (int y = 0; y < ViewLength; y++)
            {
                for (int x = 0; x < ViewLength; x++)
                {
                    var field = space[px + x, py + y];
                    input[i++] = field.HasAgent ? 1 : 0;
                }
            }
        }
Пример #3
0
 public double[] Encode(NeuralAgent agent)
 {
     double[] input = new double[EncodedSize];
     EncodeState(input, agent);
     EncodeGoal(input, agent);
     return(input);
 }
Пример #4
0
        public void EncodeGoal(double[] input, NeuralAgent agent)
        {
            int dx = agent.Goal.Position.X - agent.Anchor.Field.X;
            int dy = agent.Goal.Position.Y - agent.Anchor.Field.Y;

            if (dx == 0 && dy == 0)
            {
                input[DirectionOffset]     = 0;
                input[DirectionOffset + 1] = 0;
            }
            else
            {
                var dn = Vector2.Normalize(new Vector2(dx, dy));
                input[DirectionOffset]     = dn.X;
                input[DirectionOffset + 1] = dn.Y;
            }
            //var v1 = Vector2.Normalize(agent.Direction);
            //var v2 = Vector2.Normalize(agent.Goal - agent.Position);
            //var sin = Vector2.Dot(v2, v1);
            //var cos = v1.CrossProduct(v2);
        }
Пример #5
0
 public AgentNetworkPrediction Predict(NeuralAgent agent)
 {
     return(Predict(InputCoder.Encode(agent)));
 }