#pragma once #include "OptimizerBase.h" #include namespace mdd { class OptimizerEvolutionary : public OptimizerBase { protected: static int random_num(double min, double max, double inc = 1.0) { int range = (max - min) / inc + 1; return min + inc * (std::rand() % range); } Permutation generatePermutation(); Permutation combine(Permutation par1, Permutation par2); std::vector _children; std::vector _bests; int _min_generations; double _max_fitness; size_t _grow_generation; size_t _converges; double _precision; void evolve(std::vector parents); void evaluate(size_t ignore_len = 0); std::vector mutateGene(std::shared_ptr input, std::vector seed = std::vector()); bool configureChild(const json& config) override; public: OptimizerEvolutionary(); double update() override; std::vector getBests(); double evaluateFitness(const Permutation& ind); }; }