X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=src%2Fmain.cpp;h=a208bbf863505071fd5af846174d223d045840c2;hb=1e175fb658e55f4cc8b894fff288be22998e78af;hp=958c2410403fe2017250815208a807a0179e0875;hpb=971fed67ac2e5a01b5232853c08e03ed05bebbe0;p=genetic.git diff --git a/src/main.cpp b/src/main.cpp index 958c241..a208bbf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,41 +1,45 @@ -#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" -using namespace std; +#include "algorithm.h" +#include "condition/condition.h" +#include "condition/generationLimitCondition.h" + using namespace genetic; int main() { - typedef Gene _Gene; + 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 GenerationLimitCondition<_Chromosome> _Condition; - for (int i = 0; i < 20; i++) { - _Gene gene(rand() % 2); - cout << "Generated gene: " << (int)gene.get() << "\n"; - genes.push_back(gene); - } + const int chromosomeSize = 10; + const int generationSize = 500; + 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 (int i = 0; i < 20; i++) { - cout << chromosome.get()[i].get(); - } - cout << endl; - WSTI<_Chromosome> fitness(chromosome, 0.5, 2.5); + _Algorithm algorithm(generationGenerator, fitness, crossoverChance, mutationChance); + _Condition condition(10000); - cout << "Fitness is equal to: " << (double)fitness.calculate() << "\n"; + algorithm.searchForResult(condition); return 0; }