Made Algorithm functions more generic.
[genetic.git] / src / main.cpp
index 9388101bd3d90fd26752d108b802a990011a07ed..f2aec1380acfd130482c57cc364305fdb6da4876 100644 (file)
@@ -1,5 +1,7 @@
 #include <iostream>
 #include <vector>
+#include <map>
+#include <string>
 
 #include "gene.h"
 #include "chromosome.h"
@@ -7,9 +9,13 @@
 #include "generator/generation.h"
 
 #include "selection/roulette.h"
-
+#include "crossover/crossover.h"
+#include "mutation/mutation.h"
 #include "fitness/wsti.h"
 
+#include "algorithm.h"
+#include "condition/condition.h"
+
 using namespace std;
 using namespace genetic;
 
@@ -17,33 +23,27 @@ int main() {
     typedef Gene<int> _Gene;
     typedef Chromosome<_Gene> _Chromosome;
 
-    const int chromosomeSize = 11;
-    const int generationSize = 20;
-    WSTI<_Chromosome> fitness(0.5, 2.5);
-
-    generator::Generation<_Chromosome> generationGenerator(generationSize, chromosomeSize);
-    Generation<_Chromosome> generation = generationGenerator.breed();
-
-    cout << "Generation:\n";
-    for (unsigned int i = 0; i < generation.get().size(); i++) {
-        cout << "# ";
-        for (unsigned int j = 0; j < generation.get()[i].get().size(); j++) {
-            cout << generation.get()[i].get()[j].get();
-        }
-        cout << "\n";
-    }
-
-    Roulette<_Chromosome> roulette(generation, fitness);
-    Generation<_Chromosome> newGeneration = roulette.draw();
-
-    cout << "New Generation:\n";
-    for (unsigned int i = 0; i < newGeneration.get().size(); i++) {
-        cout << "# ";
-        for (unsigned int j = 0; j < newGeneration.get()[i].get().size(); j++) {
-            cout << newGeneration.get()[i].get()[j].get();
-        }
-        cout << "\n";
-    }
+    typedef WSTI<_Chromosome> _Fitness;
+    typedef Roulette<_Chromosome> _Selection;
+    typedef Crossover<_Chromosome> _Crossover;
+    typedef Mutation<_Chromosome> _Mutation;
+
+    typedef generator::Generation<_Chromosome> _Generator;
+    typedef Algorithm<_Chromosome, _Selection, _Crossover, _Mutation, _Fitness> _Algorithm;
+    typedef Condition<_Chromosome> _Condition;
+
+    const int chromosomeSize = 10;
+    const int generationSize = 200;
+    const double crossoverChance = 0.75;
+    const double mutationChance = 0.01;
+
+    _Fitness fitness(0.5, 2.5);
+    _Generator generationGenerator(generationSize, chromosomeSize);
+
+    _Algorithm algorithm(generationGenerator, fitness, crossoverChance, mutationChance);
+    _Condition condition;
+
+    algorithm.searchForResult(condition);
 
     return 0;
 }