Esempio n. 1
0
        public static void Main(string[] args)
        {
            if (args.Length < 1)
            {
                Console.Error.WriteLine("You have to at least specify the data file path");
                return;
            }

            var mutation  = new UniformMutation(MutationProbability);
            var selection = new KTournamentSelection(TournamentSize);
            var crossover = new ArithmeticCrossover();

            var fitnessFunction = new FitnessFunction(args[0]);

            IGeneticAlgorithm <DecimalArrayChromosome> geneticAlgorithm;

            if (args.Length == 2 && args[1].ToLower() == "gen")
            {
                geneticAlgorithm = new GenerationGeneticAlgorithm(mutation, selection, crossover, fitnessFunction,
                                                                  IterationLimit, FitnessTerminator, PopulationSize);
            }
            else
            {
                geneticAlgorithm = new EliminationGeneticAlgorithm(mutation, selection, crossover, fitnessFunction,
                                                                   IterationLimit, FitnessTerminator, PopulationSize);
            }

            var optimum = geneticAlgorithm.FindOptimum();

            Console.WriteLine();
            Console.WriteLine(optimum);
        }
Esempio n. 2
0
        private static void Run()
        {
            var       dataset        = new Dataset();
            var       nn             = new NeuralNetwork(dataset, 8); //8, 4
            const int populationSize = 10;
            const int iterations     = 1_000_000;
            var       crossovers     = new ICrossover[]
            {
                new BlxDoubleCrossover(),
                new ArithmeticCrossover(),
                new DiscreteUniformRecombination(),
                new OnePointCrossover(),
                new SimpleArithmeticRecombination()
            };
            var mutations = new IMutation[]
            {
                new GaussianAdditiveMutation(mutationProbability: 0.02, deviation: 0.2),
                new GaussianAdditiveMutation(mutationProbability: 0.02, deviation: 0.4),
                new GaussianSwapMutation(mutationProbability: 0.02, deviation: 0.5)
            };
            var desirability = new[] { 18.0, 4.0, 2.0 };

            var combinedCrossover = new CombinedCrossover(crossovers);
            var combinedMutation  = new CombinedMutation(mutations, desirability);

            var selection =
                new KTournamentSelection(nn.MeanSquareError, combinedCrossover, combinedMutation, k: 3);

            var parametersCount = nn.GetNumberOfRequiredParameters();
            var parameters      = new double[parametersCount];
            var doubleGa        = new DoubleGa(nn, parameters, parametersCount, populationSize, iterations);

            var bestNetworkParameters = doubleGa.FindBestIndividual(speedRun: true, selection).Representation;

            var success = 0;

            Console.WriteLine($"\nPrediction | Actual");
            foreach (var sample in dataset)
            {
                var prediction = nn.CalculateOutput(sample.X, sample.Y, bestNetworkParameters);
                var A          = prediction[0] < 0.5 ? 0 : 1;
                var B          = prediction[1] < 0.5 ? 0 : 1;
                var C          = prediction[2] < 0.5 ? 0 : 1;
                Console.WriteLine($"[{A} {B} {C}] | [{sample.A} {sample.B} {sample.C}]");

                if (A == sample.A && B == sample.B && C == sample.C)
                {
                    success++;
                }
            }

            Console.WriteLine(
                $"Prediction rate: {success}/{dataset.DatasetCount()} = {(double) success / dataset.DatasetCount() * 100}%");
        }
Esempio n. 3
0
        public static void Main(string[] args)
        {
            var dataset = new Dataset.Dataset(DatasetFilePath);
            var ann     = new ANN(Architecture);

            var fitness = new FitnessFunction(ann, dataset);

            var mutation   = new GaussMutation(MutationThreshold, MutationProbability, Sigma1, Sigma2);
            var selection  = new KTournamentSelection <DoubleArrayChromosome>(TournamentSize);
            var crossovers = new List <ICrossover <DoubleArrayChromosome> >()
            {
                new ArithmeticCrossover(),
                new HeuristicCrossover(),
                new UniformCrossover()
            };

            var geneticAlgorithm =
                new EliminationGeneticAlgorithm(mutation, selection, crossovers, fitness, IterationLimit, ErrorLimit, PopulationSize);

            var optimum = geneticAlgorithm.FindOptimum();
            var correctClassification = 0;

            foreach (var sample in dataset)
            {
                var classification = ann.CalculateOutput(sample.Input, optimum.Values);
                var correct        = true;

                for (int i = 0; i < classification.Length; i++)
                {
                    classification[i] = classification[i] < 0.5 ? 0 : 1;
                    if (Math.Abs(classification[i] - sample.Classification[i]) > 10e-9)
                    {
                        correct = false;
                    }
                }

                Console.WriteLine(classification[0] + " " + classification[1] + " " + classification[2] +
                                  " <=> " + sample.Classification[0] + " " + sample.Classification[1] + " " + sample.Classification[2] + " ");

                if (correct)
                {
                    correctClassification++;
                }
            }

            Console.WriteLine("Correct => " + correctClassification + ", Total => " + dataset.Count());

            ann.WriteNeuronLayerParametersToFile(ParametersFilePath, 1, optimum.Values);
        }
Esempio n. 4
0
        public static void Main(string[] args)
        {
            FitnessFunction.Rides         = ParseData(out int fleetSize, out int bonus, out int steps);
            Chromosome.FleetSize          = fleetSize;
            FitnessFunction.NumberOfSteps = steps;
            FitnessFunction.Bonus         = bonus;

            var mutation        = new UniformMutation(MutationProbability);
            var selection       = new KTournamentSelection(TournamentSize);
            var crossover       = new UniformCrossover();
            var fitnessFunction = new FitnessFunction();

            var geneticAlgorithm = new EliminationGeneticAlgorithm(mutation, selection, crossover, fitnessFunction,
                                                                   IterationLimit, FitnessTerminator, PopulationSize, FitnessFunction.Rides.Count);

            var optimum = geneticAlgorithm.FindOptimum();

            WriteOutput(optimum);
        }
Esempio n. 5
0
        public static void Main(string[] args)
        {
            var busStops = new List <BusStop>();
            var students = new List <Student>();

            ParseFromFile(busStops, students);

            var mutation        = new StudentBusMutation(MutationProbability);
            var selection       = new KTournamentSelection(TournamentSize);
            var crossover       = new StudentBusCrossover();
            var fitnessFunction = new FitnessFunction.FitnessFunction();

            var geneticAlgorithm = new EliminationGeneticAlgorithm(mutation, selection, crossover, fitnessFunction,
                                                                   IterationLimit, FitnessTerminator, PopulationSize, students, busStops, InstanceFilePath);

            var optimum = geneticAlgorithm.FindOptimum();

            Console.WriteLine();
            Console.WriteLine(optimum.Fitness);

            optimum.Students = optimum.Students.OrderBy(x => x.Id).ToList();

            HelperMethods.WriteToFile(optimum.ToString(), InstanceResultFilePath);
        }