public void GetInputDataTest()
        {
            NeuralNetworkParameters myNetworkParameters = new NeuralNetworkParameters();

            myNetworkParameters.MyTankPosition    = new[] { 1.0, 2.0 };
            myNetworkParameters.EnemyTankPosition = new[] { 3.0, 4.0 };
            myNetworkParameters.LinearBumper1     = new[] { 5.0, 6.0 };
            myNetworkParameters.LinearBumper2     = new[] { 7.0, 8.0 };
            myNetworkParameters.CircularBumper1   = new[] { 9.0, 10.0 };
            myNetworkParameters.CircularBumper2   = new[] { 11.0, 12.0 };
            myNetworkParameters.CircularBumper3   = new[] { 13.0, 14.0 };
            myNetworkParameters.Portal1           = new[] { 15.0, 16.0 };
            myNetworkParameters.Portal2           = new[] { 17.0, 18.0 };
            myNetworkParameters.Wind = 19;

            double[] inputArray    = myNetworkParameters.GetInputData();
            double[] expectedArray = new[] { 1.0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
            Assert.AreEqual(expectedArray, inputArray);
        }
Пример #2
0
        static void Main(string[] args)
        {
            //Initialise everything
            World                   newWorld             = new World();
            Portal                  newPortal            = new Portal(10, 35, 5, 100, 30);
            Bumper                  newBumper            = new Bumper();
            SuvatSolver             newSuvatSolver       = new SuvatSolver(newWorld.g, newWorld.WindConstant);
            ODESolution             newOde               = new ODESolution(newWorld.g, newWorld.WindConstant);
            NeuralNetworkParameters networkParameters    = new NeuralNetworkParameters();
            BruteForceMethods       newBruteForceMethods = new BruteForceMethods(newOde, newBumper, networkParameters);

            for (int i = 1; i < 1000; i++)
            {
                Console.WriteLine("Starting simulation " + i + " of this batch");
                // Generate the random values and save to sheet
                RandomPositionGenerator newGenerator = new RandomPositionGenerator();
                SaveMethods             saveMethods  = new SaveMethods(_filePath);
                newGenerator.GenerateRandomValues();
                saveMethods.SaveInputs(newGenerator);
                // Save to file

                //Create a 'fake' ShellshockWindow app or something
                var keyCollection   = newGenerator.AllVariables.Keys;
                var valueCollection = newGenerator.AllVariables.Values;

                double[] xVals = new double[keyCollection.Count];
                double[] yVals = new double[valueCollection.Count];

                keyCollection.CopyTo(xVals, 0);
                valueCollection.CopyTo(yVals, 0);

                //Wind
                newWorld.Wind = (int)yVals[9];

                // Tanks
                var myNewXPosition    = xVals[0];
                var myNewYPosition    = yVals[0];
                var enemyNewXPosition = xVals[1];
                var enemyNewYPosition = yVals[1];

                // Portals
                newPortal.BlueLeft   = xVals[7];
                newPortal.BlueTop    = yVals[7];
                newPortal.OrangeLeft = xVals[8];
                newPortal.OrangeTop  = yVals[8];

                // Linear bumpers
                newBumper.LinearBumper1LeftPosition = xVals[2];
                newBumper.LinearBumper1TopPosition  = yVals[2];
                newBumper.LinearBumper2LeftPosition = xVals[3];
                newBumper.LinearBumper2TopPosition  = yVals[3];

                // Circular bumpers
                newBumper.CircularBumper1Left = xVals[4];
                newBumper.CircularBumper1Top  = yVals[4];
                newBumper.CircularBumper2Left = xVals[5];
                newBumper.CircularBumper2Top  = yVals[5];
                newBumper.CircularBumper3Left = xVals[6];
                newBumper.CircularBumper3Top  = yVals[6];


                //Run methods to generate wind and power
                newBumper.isRebound = true;
                var isMirrored = myNewXPosition > enemyNewXPosition ? -1 : 1;

                double horizontalPixelDistance = Math.Abs(enemyNewXPosition - myNewXPosition);
                double horizontalMmDistance    = horizontalPixelDistance * newWorld.ScreenWidthRatio * World.PixelToMm;
                newWorld.X = horizontalMmDistance;

                double verticalPixelDistance = myNewYPosition - enemyNewYPosition;
                double verticalMmDistance    = verticalPixelDistance * newWorld.ScreenWidthRatio * World.PixelToMm;
                newWorld.Y = verticalMmDistance;

                // Now update portal positions
                newOde.BluePosition = newPortal.BluePosition(myNewXPosition, myNewYPosition,
                                                             newWorld.ScreenWidthRatio, isMirrored);
                newOde.OrangePosition = newPortal.OrangePosition(myNewXPosition, myNewYPosition,
                                                                 newWorld.ScreenWidthRatio, isMirrored);

                newBumper.FindAllRelativePositions(myNewXPosition, myNewYPosition, newWorld.ScreenWidthRatio,
                                                   isMirrored);
                newOde.NewBumper  = newBumper;
                newOde.IsMirrored = isMirrored;
                Console.WriteLine("Finding power and angle ...");
                double[] powerAngleGuess = BruteForceAsync(newBruteForceMethods, newWorld).Result;
                string   powerGuess      = powerAngleGuess[0].ToString("0");
                string   angleGuess      = powerAngleGuess[1].ToString("0");
                saveMethods.SaveOutputs(powerGuess, angleGuess);
                Console.WriteLine("Completed simulation " + i + " of this batch");
            }
        }