OptimizerBase.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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. std::function<json(const json&)> _callback;
  23. struct opt_state {
  24. state module_state = state::STATE_ERROR;
  25. double opt_value = 0;
  26. };
  27. opt_state updateOutputs();
  28. OptimizerBase(const std::string& base_config = "{}");
  29. bool configureChild(const json& config) override;
  30. public:
  31. bool connect(std::shared_ptr<IModule> module) override;
  32. void updateLayout();
  33. bool setEvaluation(std::string func) override;
  34. bool configure(const json& config) override;
  35. const json& getConfiguration() override;
  36. //virtual std::string getGeneratorID() = 0;
  37. void load(const json& j);
  38. json dump();
  39. json getIdentifier() override;
  40. void attachCallback(std::function<json(const json&)> callback) override;
  41. //state update() override;
  42. };
  43. }