-#include <iostream>
-#include <vector>
-
-#include <cstdlib>
+#include <command/command.h>
+#include <command/option.h>
#include "gene.h"
#include "chromosome.h"
+#include "generation.h"
+#include "generator/bitGenerator.h"
+
+#include "selection/rouletteSelection.h"
+#include "selection/linearRankSelection.h"
+#include "crossover/crossover.h"
+#include "mutation/mutation.h"
+#include "fitness/wsti.h"
+
+#include "algorithm.h"
+#include "condition/condition.h"
+#include "condition/generationLimitCondition.h"
-using namespace std;
using namespace genetic;
-int main() {
- typedef Gene<int> _Gene;
+int chromosomeSize = 10;
+int generationSize = 10;
+int generationLimit = 100;
+double crossoverChance = 0.75;
+double mutationChance = 0.01;
+
+int main(int argc, char* argv[]) {
+ typedef Gene<bool> _Gene;
+ typedef Chromosome<_Gene> _Chromosome;
+
+ typedef WSTI<_Chromosome> _Fitness;
+ typedef LinearRankSelection<_Chromosome> _Selection;
+ typedef Crossover<_Chromosome> _Crossover;
+ typedef Mutation<_Chromosome> _Mutation;
+
+ typedef generator::BitGenerator<_Chromosome> _Generator;
+ typedef Algorithm<_Chromosome, _Selection, _Crossover, _Mutation, _Fitness> _Algorithm;
+ typedef GenerationLimitCondition<_Chromosome> _Condition;
+
+ command::Command command(argc, argv, {
+ new command::Option<int>("--chromosome-size", "Chromosome size", [](int value)->void { chromosomeSize = value; }),
+ new command::Option<int>("--generation-size", "Generation size", [](int value)->void { generationSize = value; }),
+ new command::Option<float>("--crossover", "Crossover chance", [](float value)->void { crossoverChance = value; }),
+ new command::Option<float>("--mutation", "Mutation chance", [](float value)->void { mutationChance = value; }),
+ new command::Option<float>("--generation-limit", "Limit of generations", [](float value)->void { generationLimit = value; }),
+ });
- time_t t;
- srand((unsigned)time(&t));
+ _Fitness fitness(0.5, 2.5);
+ _Generator generationGenerator(generationSize, chromosomeSize);
- vector<_Gene> genes;
+ _Algorithm algorithm(generationGenerator, fitness, crossoverChance, mutationChance);
+ _Condition condition(generationLimit);
- for (int i = 0; i < 20; i++) {
- _Gene gene(rand() % 255);
- cout << "Generated gene: " << gene.get() << "\n";
- genes.push_back(gene);
- }
- Chromosome<_Gene> chromosome(genes);
+ algorithm.searchForResult(condition);
return 0;
}