OptimizerEvolutionary.h 1004 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #pragma once
  2. #include "OptimizerBase.h"
  3. #include <iostream>
  4. namespace mdd {
  5. class OptimizerEvolutionary : public OptimizerBase {
  6. protected:
  7. static int random_num(double min, double max, double inc = 1.0)
  8. {
  9. int range = (max - min) / inc + 1;
  10. return min + inc * (std::rand() % range);
  11. }
  12. Permutation generatePermutation();
  13. Permutation combine(Permutation par1, Permutation par2);
  14. std::vector<Permutation> _children;
  15. std::vector<Permutation> _bests;
  16. int _min_generations;
  17. double _max_fitness;
  18. size_t _grow_generation;
  19. size_t _converges;
  20. double _precision;
  21. void evolve(std::vector<Permutation> parents);
  22. void evaluate(size_t ignore_len = 0);
  23. std::vector<double> mutateGene(std::shared_ptr<IInput> input, std::vector<double> seed = std::vector<double>());
  24. bool configureChild(const json& config) override;
  25. public:
  26. OptimizerEvolutionary();
  27. double update() override;
  28. std::vector<Permutation> getBests();
  29. double evaluateFitness(const Permutation& ind);
  30. };
  31. }