public void SaveLearningProcess(string path)
 {
     if (learningProcess.Serialize(path))
     {
         Debug.Log("Zapisano w " + path + " , smochodzików " + learningProcess.PopulationCount);
     }
     else
     {
         Debug.Log("Błąd serializacji!");
     }
 }
Esempio n. 2
0
        public void Run()
        {
            Stopwatch t = new Stopwatch();

            t.Start();
            int counter = 0;

            while (true)
            {
                double[] scores = new double[populationCount];

                var testData = new[]
                {
                    new[] { 0.2, -1.1, 0.9 },
                    new[] { 0.3, -2.1, -3 },
                    new[] { 1, -1, 1.0 },
                    new[] { 0, 0, 0.0 },
                    new[] { -0.2, 1.1, -0.9 },
                };

                double[,] scores2 = new double[populationCount, testData.Length];
                for (int k = 0; k < testData.Length; k++)
                {
                    for (int i = 0; i < populationCount; i++)
                    {
                        var result = process.Population[i].Calculate(testData[k]);
                        var a      = FitnessFunction(testData[k], result);
                        scores[i]    += a;
                        scores2[i, k] = a;
                    }
                }

                process.Learn(scores);
                var data = process.HistoricalData.Last();
                Console.WriteLine(
                    $"Gen: {data.GenerationIndex} Max: {data.BestScore} Min: {data.WorstScore} Avg: {data.AverageScore} Med: {data.MedianScore}");

                //Thread.Sleep(1000);

                if (counter == 50)
                {
                    var test = new[]
                    {
                        rand.NextDouble() * 2 - 1,
                        rand.NextDouble() * 2 - 1,
                        rand.NextDouble() * 2 - 1
                    };

                    var spec = process.HistoricalData.Last().BestSpecimen;
                    for (int i = 0; i < testData.Length; i++)
                    {
                        Console.WriteLine("----------------------------");
                        var a = spec.Calculate(testData[i]);
                        Console.WriteLine($"network: {a[0]} {a[1]}");
                        var a2 = Problem(testData[i]);
                        Console.WriteLine($"exptected: {a2[0]} {a2[1]}");

                        Console.WriteLine("Fitness " + FitnessFunction(testData[i], a));
                    }
                    Console.WriteLine("----------------------------");
                    var a1 = spec.Calculate(test);
                    Console.WriteLine($"network: {a1[0]} {a1[1]}");
                    var fit = FitnessFunction(test, a1);
                    a1 = Problem(test);
                    Console.WriteLine($"exptected: {a1[0]} {a1[1]}");
                    var neuron0 = spec.Layers[0].Neurons[0].GetWeights();
                    var neuron1 = spec.Layers[0].Neurons[1].GetWeights();
                    Console.WriteLine("Fitness " + fit);
                    Console.WriteLine("----------------------------");
                    Console.WriteLine(
                        $"({Math.Round(neuron0[0], 2)}x1 {Math.Round(neuron0[1], 2)}x2 {Math.Round(neuron0[2], 2)}x3 {Math.Round(neuron0[3],3)})({Math.Round(neuron1[0], 2)}x1 {Math.Round(neuron1[1], 2)}x2 {Math.Round(neuron1[2], 2)}x3 {Math.Round(neuron1[3], 3)})");
                    Console.WriteLine("Expected: ");
                    Console.WriteLine($"(x1 + x2 - 2x3 + 0)(x1 - x2 + x3 + 1)");

                    t.Stop();

                    TimeSpan ts = t.Elapsed;

                    string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                                                       ts.Hours, ts.Minutes, ts.Seconds,
                                                       ts.Milliseconds / 10);
                    Console.WriteLine("RunTime " + elapsedTime);

                    var key = Console.ReadKey();
                    if (key.Key == ConsoleKey.S)
                    {
                        process.Serialize("leariningtest.xml");
                    }
                    counter = 0;
                    t.Reset();
                    t.Start();
                }

                counter++;
            }
        }