Files
2026-10-06 17:20:47 +02:00

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