14#include <Eigen/Sparse>
16namespace smooth::feedback {
31concept NLP =
requires(
32 std::decay_t<T> & nlp,
const Eigen::Ref<const Eigen::VectorXd> x,
const Eigen::Ref<const Eigen::VectorXd> lambda)
35 {nlp.n()} -> std::convertible_to<std::size_t>;
36 {nlp.m()} -> std::convertible_to<std::size_t>;
39 {nlp.xl()} -> std::convertible_to<Eigen::VectorXd>;
40 {nlp.xu()} -> std::convertible_to<Eigen::VectorXd>;
43 {nlp.f(x)} -> std::convertible_to<double>;
44 {nlp.df_dx(x)} -> std::convertible_to<Eigen::SparseMatrix<double>>;
47 {nlp.g(x)} -> std::convertible_to<Eigen::VectorXd>;
48 {nlp.gl()} -> std::convertible_to<Eigen::VectorXd>;
49 {nlp.gu()} -> std::convertible_to<Eigen::VectorXd>;
50 {nlp.dg_dx(x)} -> std::convertible_to<Eigen::SparseMatrix<double>>;
58concept HessianNLP =
NLP<T> &&
requires(std::decay_t<T> & nlp, Eigen::VectorXd x, Eigen::VectorXd lambda)
61 {nlp.d2f_dx2(x)} -> std::convertible_to<Eigen::SparseMatrix<double>>;
62 {nlp.d2g_dx2(x, lambda)} -> std::convertible_to<Eigen::SparseMatrix<double>>;
Nonlinear Programming Problem with Hessian information.
Nonlinear Programming Problem.
@ PrimalInfeasible
Solution satisfies optimality condition but is not polished.
@ Unknown
Max time was reached, returned solution is not optimal.
@ MaxIterations
A certificate of dual infeasibility was found, no solution returned.
@ MaxTime
Max number of iterations was reached, returned solution is not optimal.
@ DualInfeasible
A certificate of primal infeasibility was found, no solution returned.
Solution to a Nonlinear Programming Problem.
Eigen::VectorXd zl
Inequality multipliers.
double objective
Objective.
Eigen::VectorXd lambda
Constraint multipliers.
Eigen::VectorXd x
Variable values.
Status status
Solver status.
std::size_t iter
Number of iterations.
Eigen::VectorXd zu
Inequality multipliers.