X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmain.cpp;h=336285a52c5175239d4b074d1500f429710e7cab;hb=8073598d4f17151be4493880517c30dc416d34f9;hp=60ea330e26472e87d88fab8058eeaff5d3df8d59;hpb=46357591de1336612d4c26170cd59c13543b5169;p=genetic.git diff --git a/src/main.cpp b/src/main.cpp index 60ea330..336285a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,13 +1,23 @@ #include #include - -#include +#include +#include #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/generationLimit.h" + using namespace std; using namespace genetic; @@ -15,27 +25,27 @@ int main() { typedef Gene _Gene; typedef Chromosome<_Gene> _Chromosome; - time_t t; - srand((unsigned)time(&t)); + typedef WSTI<_Chromosome> _Fitness; + typedef LinearRankSelection<_Chromosome> _Selection; + typedef Crossover<_Chromosome> _Crossover; + typedef Mutation<_Chromosome> _Mutation; - vector<_Gene> genes; + typedef generator::BitGenerator<_Chromosome> _Generator; + typedef Algorithm<_Chromosome, _Selection, _Crossover, _Mutation, _Fitness> _Algorithm; + typedef GenerationLimit<_Chromosome> _Condition; - for (int i = 0; i < 11; i++) { - _Gene gene(rand() % 2); - cout << "Generated gene: " << (int)gene.get() << "\n"; - genes.push_back(gene); - } + const int chromosomeSize = 10; + const int generationSize = 200; + const double crossoverChance = 0.75; + const double mutationChance = 0.01; - _Chromosome chromosome(genes); + _Fitness fitness(0.5, 2.5); + _Generator generationGenerator(generationSize, chromosomeSize); - cout << "Entire chromosome: "; - for (unsigned int i = 0; i < chromosome.get().size(); i++) { - cout << chromosome.get()[i].get(); - } - cout << endl; - WSTI<_Chromosome> fitness(chromosome, 0.5, 2.5); + _Algorithm algorithm(generationGenerator, fitness, crossoverChance, mutationChance); + _Condition condition(1000); - cout << "Fitness is equal to: " << fitness.calculate() << "\n"; + algorithm.searchForResult(condition); return 0; }