X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=src%2Fmain.cpp;h=36dd6028c472b0b983d04aaeab8652eb0d04e1c5;hb=5e4a04634f1d31d4c774b44184cf08d3faf4d02a;hp=38bbf42cabfddfa9bf8ba507935c72192083a64f;hpb=ec0bd5c9a9350200f58ec7b84707bca822d145ed;p=genetic.git diff --git a/src/main.cpp b/src/main.cpp index 38bbf42..36dd602 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,36 +1,51 @@ #include #include - -#include +#include +#include #include "gene.h" #include "chromosome.h" #include "generation.h" -#include "generator/generation.h" +#include "generator/bit.h" +#include "selection/roulette.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; int main() { typedef Gene _Gene; typedef Chromosome<_Gene> _Chromosome; - - const int chromosomeSize = 11; - const int generationSize = 20; - time_t t; - srand((unsigned)time(&t)); + typedef WSTI<_Chromosome> _Fitness; + typedef LinearRankSelection<_Chromosome> _Selection; + typedef Crossover<_Chromosome> _Crossover; + typedef Mutation<_Chromosome> _Mutation; + + typedef generator::Bit<_Chromosome> _Generator; + typedef Algorithm<_Chromosome, _Selection, _Crossover, _Mutation, _Fitness> _Algorithm; + typedef GenerationLimit<_Chromosome> _Condition; + + const int chromosomeSize = 10; + const int generationSize = 200; + const double crossoverChance = 0.75; + const double mutationChance = 0.01; - generator::Generation<_Chromosome> generationGenerator(generationSize, chromosomeSize); - Generation<_Chromosome> generation = generationGenerator.breed(); + _Fitness fitness(0.5, 2.5); + _Generator generationGenerator(generationSize, chromosomeSize); - for (unsigned int i = 0; i < generationSize; i++) { - WSTI<_Chromosome> fitness(generation.get()[i], 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; }