OptimizerBase.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #pragma once
  2. #include "IOptimizer.h"
  3. #include "exprtk.hpp"
  4. namespace mdd {
  5. ////////////////////////////////////////////////////////////
  6. //
  7. //Optimization is always minimization!
  8. //
  9. ////////////////////////////////////////////////////////////
  10. class OptimizerBase
  11. : public IOptimizer
  12. {
  13. protected:
  14. json _base_config;
  15. std::string key;
  16. const std::string type = "optimizer";
  17. std::shared_ptr<IModule> _module;
  18. std::vector<std::shared_ptr<IInput>> _inputs;
  19. std::vector<std::shared_ptr<IOutput>> _outputs;
  20. std::vector<double> _output_vals;
  21. exprtk::expression<double> _func_expr;
  22. struct opt_state {
  23. state module_state = state::STATE_ERROR;
  24. double opt_value = 0;
  25. };
  26. opt_state updateOutputs();
  27. OptimizerBase(const std::string& base_config = "{}");
  28. bool configureChild(const json& config) override;
  29. public:
  30. bool connect(std::shared_ptr<IModule> module) override;
  31. void updateLayout();
  32. bool setEvaluation(std::string func) override;
  33. bool configure(const json& config) override;
  34. const json& getConfiguration() override;
  35. //virtual std::string getGeneratorID() = 0;
  36. void load(const json& j);
  37. json dump();
  38. json getIdentifier() override;
  39. //state update() override;
  40. };
  41. }