65 lines
2.0 KiB
C++
65 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include <filesystem>
|
|
|
|
#include <functional>
|
|
#include <variant>
|
|
#include <vector>
|
|
#include "autoopt/parabola_new.hpp"
|
|
#include "autoopt/ellipse_new.hpp"
|
|
#include "autoopt/importer.hpp"
|
|
|
|
namespace autoopt {
|
|
|
|
enum CurveType {
|
|
Parabola,
|
|
Ellipse
|
|
};
|
|
|
|
using curves = std::variant<parabola_new, ellipse_new>;
|
|
|
|
struct optimizer {
|
|
|
|
public:
|
|
void import_file(std::filesystem::path file_path);
|
|
void set_lower_bound(double lb);
|
|
void set_upper_bound(double ub);
|
|
|
|
void set_curve_type(int curve_type);
|
|
void set_initial(size_t i, double value);
|
|
void set_delta(size_t i, double value);
|
|
void flip_curve();
|
|
void calc_fit();
|
|
|
|
void set_plot_input_cb(std::function<void(Eigen::VectorXd xs, std::vector<Eigen::VectorXd> yss)> cb);
|
|
void set_plot_slope_cb(std::function<void(Eigen::VectorXd xs, Eigen::VectorXd ys, Eigen::VectorXd ys_curve)> cb);
|
|
void set_init_bounds_cb(std::function<void(double lb, double ub, double step)> cb);
|
|
void set_update_table_cb(std::function<void(std::vector<std::tuple<std::string, double, double>> entries)> cb);
|
|
void set_plot_error_cb(std::function<void(Eigen::VectorXd xs, Eigen::VectorXd ys)> cb);
|
|
|
|
private:
|
|
struct data {
|
|
raw_data _raw;
|
|
double lb, ub;
|
|
};
|
|
std::optional<data> _data;
|
|
std::optional<test_data> _test_data;
|
|
curves _curve;
|
|
std::optional<std::pair<Eigen::VectorXd, double>> _fit_result;
|
|
|
|
std::function<void(Eigen::VectorXd xs, std::vector<Eigen::VectorXd> yss)> _plot_input_cb;
|
|
std::function<void(double lb, double ub, double step)> _init_bounds_cb;
|
|
std::function<void(Eigen::VectorXd xs, Eigen::VectorXd ys, Eigen::VectorXd ys_curve)> _plot_slope_cb;
|
|
std::function<void(std::vector<std::tuple<std::string, double, double>> entries)> _param_table_cb;
|
|
std::function<void(Eigen::VectorXd xs, Eigen::VectorXd ys)> _plot_error_cb;
|
|
|
|
void update_test_data();
|
|
void init_bounds_cb();
|
|
void plot_input_cb();
|
|
void plot_slope_cb();
|
|
void update_table_cb();
|
|
void plot_error_cb();
|
|
};
|
|
|
|
} // namespace autoopt
|