Ejemplo n.º 1
0
        public MainWindow()
        {
            Formatter     = d => d.ToString("0.####", CultureInfo.InvariantCulture);
            _milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();

            AlgorithmErrorValues      = new ChartValues <ObservablePoint>();
            AlgorithmValidationValues = new ChartValues <ObservablePoint>();

            ActivationFunctionChartValues = new ChartValues <ObservablePoint>();

            for (var i = -10.0; i < 10.0; i += 0.25)
            {
                ActivationFunctionChartValues.Add(new ObservablePoint(i, 0.0));
            }

            Function = new TanHFunction();

            Layers = new ObservableCollection <LayerModel>();

            InitializeComponent();
            InitializeDataSetSettings();
            InitializeNeuralNetworkSettings();
            InitializeGeneticAlgorithmSettings();

            DataContext = this;
        }
Ejemplo n.º 2
0
        public void Test1([Values(100, 200)] int populationSize,
                          [Values(10, 50, 250, 1000)] int iterations,
                          [Values(30)] int dataSize)
        {
            var neuralNetwork = new NeuralNetwork.NeuralNetwork {
                MinWeight = -5, MaxWeight = 5
            };
            var activationFunction = new TanHFunction();

            neuralNetwork.ActivationFunction = activationFunction;
            neuralNetwork.AddLayer(new Layer(4, 2));
            neuralNetwork.AddLayer(new Layer(1, 4));

            var genetic = new GeneticAlgorithm.GeneticAlgorithm(populationSize, neuralNetwork.GetConnectionCount())
            {
                Selection = new TournamentSelection(populationSize, populationSize / 10),
                Crossover = new TwoPointCrossover(0.65, populationSize),
                Mutation  = new FlipBitMutation(0.05)
            };

            var data = new List <SampleData>();

            for (var i = 0; i < dataSize; i++)
            {
                data.Add(new SampleData());
            }

            for (var it = 0; it < iterations; it++)
            {
                foreach (var chromosome in genetic.Population)
                {
                    neuralNetwork.SetWeights(chromosome.Genome);

                    foreach (var sampleData in data)
                    {
                        var res = neuralNetwork.GetResult(sampleData.Data);

                        lock (genetic)
                        {
                            chromosome.Fitness += Math.Abs(res[0] - sampleData.ObjectClass);
                        }
                    }
                }

                if (it < iterations - 1)
                {
                    genetic.NextGeneration();
                }
            }

            var best = genetic.Population.MinBy(chromosome => chromosome.Fitness).First();

            neuralNetwork.SetWeights(best.Genome);

            var correct = data.Count(d => Math.Abs(neuralNetwork.GetResult(d.Data)[0] - d.ObjectClass) < 0.3);

            Console.WriteLine(
                $@"Population: {populationSize}, iterations: {iterations} - fitness: {best.Fitness:0.0} " +
                $@"| correctly recognized: {correct}");

            foreach (var d in data)
            {
                var results = neuralNetwork.GetResult(d.Data)[0];
                Console.WriteLine(
                    $@"[{d.Data[0]: 0.00;-0.00} {d.Data[1]: 0.00;-0.00}] - class: {d.ObjectClass: 0;-0} " +
                    $@"| recognized: {results: 0.00;-0.00} " +
                    $@"| is correct: {Math.Abs(results - d.ObjectClass) < 0.3}");
            }
        }