Janus 2.0.0
High-performance C++20 dual-mode numerical framework
Loading...
Searching...
No Matches
OptiSweep.hpp
Go to the documentation of this file.
1
3
4#pragma once
5
6#include "OptiSol.hpp"
8#include <optional>
9#include <vector>
10
11namespace janus {
12
34 std::vector<double> param_values;
35
37 std::vector<std::optional<OptiSol>> solutions;
38
40 std::vector<int> iterations;
41
43 bool all_converged = true;
44
46 std::vector<bool> converged;
47
49 std::vector<std::string> errors;
50
53 size_t size() const { return param_values.size(); }
54
60 double objective(size_t i, const SymbolicScalar &objective_expr) const {
61 if (i >= solutions.size()) {
62 throw InvalidArgument("SweepResult::objective: index out of range");
63 }
64 if (!solutions[i].has_value()) {
65 throw InvalidArgument("SweepResult::objective: solve did not converge at index " +
66 std::to_string(i));
67 }
68 return solutions[i]->value(objective_expr);
69 }
70
75 // Count converged points
76 int n_converged = 0;
77 for (const auto &sol : solutions) {
78 if (sol.has_value()) {
79 ++n_converged;
80 }
81 }
82 NumericVector result(n_converged);
83 int j = 0;
84 for (const auto &sol : solutions) {
85 if (sol.has_value()) {
86 result(j++) = sol->value(var);
87 }
88 }
89 return result;
90 }
91
96 // Collect converged solutions
97 std::vector<size_t> converged_indices;
98 for (size_t i = 0; i < solutions.size(); ++i) {
99 if (solutions[i].has_value()) {
100 converged_indices.push_back(i);
101 }
102 }
103 if (converged_indices.empty()) {
104 return NumericMatrix(0, 0);
105 }
106 auto first = solutions[converged_indices[0]]->value(var);
107 NumericMatrix result(first.size(), static_cast<int>(converged_indices.size()));
108 result.col(0) = first;
109 for (size_t j = 1; j < converged_indices.size(); ++j) {
110 result.col(static_cast<int>(j)) = solutions[converged_indices[j]]->value(var);
111 }
112 return result;
113 }
114};
115
116} // namespace janus
Custom exception hierarchy for Janus framework.
Solution wrapper for extracting optimized values.
Input validation failed (e.g., mismatched sizes, invalid parameters).
Definition JanusError.hpp:31
Definition Diagnostics.hpp:19
JanusVector< SymbolicScalar > SymbolicVector
Eigen vector of MX elements.
Definition JanusTypes.hpp:72
JanusMatrix< NumericScalar > NumericMatrix
Eigen::MatrixXd equivalent.
Definition JanusTypes.hpp:66
JanusVector< NumericScalar > NumericVector
Eigen::VectorXd equivalent.
Definition JanusTypes.hpp:67
casadi::MX SymbolicScalar
CasADi MX symbolic scalar.
Definition JanusTypes.hpp:70
Result of a parametric sweep.
Definition OptiSweep.hpp:32
bool all_converged
Whether all solves converged successfully.
Definition OptiSweep.hpp:43
NumericVector values(const SymbolicScalar &var) const
Extract scalar variable values across converged sweep points.
Definition OptiSweep.hpp:74
NumericMatrix values(const SymbolicVector &var) const
Extract vector variable values across converged sweep points.
Definition OptiSweep.hpp:95
std::vector< double > param_values
Parameter values that were swept.
Definition OptiSweep.hpp:34
std::vector< bool > converged
Per-point convergence status (true = converged).
Definition OptiSweep.hpp:46
std::vector< std::optional< OptiSol > > solutions
Solutions at each parameter value (nullopt for failed solves).
Definition OptiSweep.hpp:37
std::vector< std::string > errors
Error messages for failed points (empty string if converged).
Definition OptiSweep.hpp:49
double objective(size_t i, const SymbolicScalar &objective_expr) const
Get objective value at sweep index.
Definition OptiSweep.hpp:60
std::vector< int > iterations
Number of iterations for each solve.
Definition OptiSweep.hpp:40
size_t size() const
Number of sweep points.
Definition OptiSweep.hpp:53