#ifndef OPTIMIZERBASE_H #define OPTIMIZERBASE_H #include "IOptimizer.h" #include "exprtk.hpp" namespace mdd { //////////////////////////////////////////////////////////// // //Optimization is always minimization! // //////////////////////////////////////////////////////////// class OptimizerBase : public IOptimizer { protected: json _base_config; std::string key; const std::string type = "optimizer"; std::shared_ptr _module; std::vector> _inputs; std::vector> _outputs; std::vector _output_vals; exprtk::expression _func_expr; struct opt_state { state module_state = state::STATE_ERROR; double opt_value = 0; }; opt_state updateOutputs(); OptimizerBase(const std::string& base_config); bool configureChild(const json& config) override; public: bool connect(std::shared_ptr module) override; void updateLayout(); bool setEvaluation(std::string func) override; bool configure(const json& config) override; const json& getConfiguration() override; //virtual std::string getGeneratorID() = 0; void load(const json& j); json dump(); json getIdentifier() override; //state update() override; }; } #endif