Integrate Command Library.
[genetic.git] / src / main.cpp
1 #include <command/command.h>
2 #include <command/option.h>
3
4 #include "gene.h"
5 #include "chromosome.h"
6 #include "generation.h"
7 #include "generator/bitGenerator.h"
8
9 #include "selection/rouletteSelection.h"
10 #include "selection/linearRankSelection.h"
11 #include "crossover/crossover.h"
12 #include "mutation/mutation.h"
13 #include "fitness/wsti.h"
14
15 #include "algorithm.h"
16 #include "condition/condition.h"
17 #include "condition/generationLimitCondition.h"
18
19 using namespace genetic;
20
21 int chromosomeSize = 10;
22 int generationSize = 10;
23 int generationLimit = 100;
24 double crossoverChance = 0.75;
25 double mutationChance = 0.01;
26
27 int main(int argc, char* argv[]) {
28     typedef Gene<bool> _Gene;
29     typedef Chromosome<_Gene> _Chromosome;
30
31     typedef WSTI<_Chromosome> _Fitness;
32     typedef LinearRankSelection<_Chromosome> _Selection;
33     typedef Crossover<_Chromosome> _Crossover;
34     typedef Mutation<_Chromosome> _Mutation;
35
36     typedef generator::BitGenerator<_Chromosome> _Generator;
37     typedef Algorithm<_Chromosome, _Selection, _Crossover, _Mutation, _Fitness> _Algorithm;
38     typedef GenerationLimitCondition<_Chromosome> _Condition;
39
40     command::Command command(argc, argv, {
41         new command::Option<int>("--chromosome-size", "Chromosome size", [](int value)->void { chromosomeSize = value; }),
42         new command::Option<int>("--generation-size", "Generation size", [](int value)->void { generationSize = value; }),
43         new command::Option<float>("--crossover", "Crossover chance", [](float value)->void { crossoverChance = value; }),
44         new command::Option<float>("--mutation", "Mutation chance", [](float value)->void { mutationChance = value; }),
45         new command::Option<float>("--generation-limit", "Limit of generations", [](float value)->void { mutationChance = value; }),
46     });
47
48     _Fitness fitness(0.5, 2.5);
49     _Generator generationGenerator(generationSize, chromosomeSize);
50
51     _Algorithm algorithm(generationGenerator, fitness, crossoverChance, mutationChance);
52     _Condition condition(generationLimit);
53
54     algorithm.searchForResult(condition);
55
56     return 0;
57 }