X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmain.cpp;h=5ca1684b259efac96f60b37df9f045c19b444d78;hb=fdbe06445323de1f82bcd6a61279c3ca46a4b826;hp=60ea330e26472e87d88fab8058eeaff5d3df8d59;hpb=46357591de1336612d4c26170cd59c13543b5169;p=genetic.git diff --git a/src/main.cpp b/src/main.cpp index 60ea330..5ca1684 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,41 +1,57 @@ -#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" -using namespace std; +#include "algorithm.h" +#include "condition/condition.h" +#include "condition/generationLimitCondition.h" + using namespace genetic; -int main() { - typedef Gene _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 _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 < 11; i++) { - _Gene gene(rand() % 2); - cout << "Generated gene: " << (int)gene.get() << "\n"; - genes.push_back(gene); - } + command::Command command(argc, argv, { + new command::Option("--chromosome-size", "Chromosome size", [](int value)->void { chromosomeSize = value; }), + new command::Option("--generation-size", "Generation size", [](int value)->void { generationSize = value; }), + new command::Option("--crossover", "Crossover chance", [](float value)->void { crossoverChance = value; }), + new command::Option("--mutation", "Mutation chance", [](float value)->void { mutationChance = value; }), + new command::Option("--generation-limit", "Limit of generations", [](float value)->void { generationLimit = value; }), + }); - _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(generationLimit); - cout << "Fitness is equal to: " << fitness.calculate() << "\n"; + algorithm.searchForResult(condition); return 0; }