26 #ifndef CASADI_BLOCKSQP_HPP
27 #define CASADI_BLOCKSQP_HPP
29 #include <casadi/interfaces/blocksqp/casadi_nlpsol_blocksqp_export.h>
30 #include "casadi/core/linsol.hpp"
31 #include "casadi/core/nlpsol_impl.hpp"
32 #include "../qpoases/qpoases_interface.hpp"
58 qpOASES::SymSparseMat *
H;
60 qpOASES::SQProblem*
qp;
114 double *lbx_qp, *ubx_qp, *
lba_qp, *uba_qp;
136 std::set< std::pair<double, double> >
filter;
160 std::string
class_name()
const override {
return "Blocksqp";}
174 void init(
const Dict& opts)
override;
180 int init_mem(
void* mem)
const override;
186 void set_work(
void* mem,
const double**& arg,
double**& res,
187 casadi_int*& iw,
double*& w)
const override;
190 int solve(
void* mem)
const override;
206 casadi_int run(
BlocksqpMemory* m, casadi_int maxIt, casadi_int warmStart = 0)
const;
209 const double* lam_x,
const double* lam_g,
210 const double* grad_f,
const double *jacNz,
211 double *grad_lag, casadi_int flag)
const;
214 void calcLagrangeGradient(
BlocksqpMemory* m,
double* grad_lag, casadi_int flag)
const;
227 casadi_int solveQP(
BlocksqpMemory* m,
double* deltaXi,
double* lambdaQP,
228 bool matricesChanged =
true)
const;
231 void computeNextHessian(
BlocksqpMemory* m, casadi_int idx, casadi_int maxQP)
const;
240 const double* lambdaQP,
double alpha, casadi_int nSOCS)
const;
250 bool pairInFilter(
BlocksqpMemory* m,
double cNorm,
double obj)
const;
252 void augmentFilter(
BlocksqpMemory* m,
double cNorm,
double obj)
const;
254 bool secondOrderCorrection(
BlocksqpMemory* m,
double cNorm,
double cNormTrial,
255 double dfTdeltaXi,
bool swCond, casadi_int it)
const;
257 void reduceSOCStepsize(
BlocksqpMemory* m,
double *alphaSOC)
const;
259 casadi_int feasibilityRestorationHeuristic(
BlocksqpMemory* m)
const;
278 void calcHessianUpdate(
BlocksqpMemory* m, casadi_int updateType, casadi_int hessScaling)
const;
281 casadi_int updateType, casadi_int hessScaling)
const;
285 void calcSR1(
BlocksqpMemory* m,
const double* gamma,
const double* delta,
288 void calcBFGS(
BlocksqpMemory* m,
const double* gamma,
const double* delta,
298 const double* delta, casadi_int b, casadi_int option)
const;
301 const double* delta, casadi_int b)
const;
319 double *grad_f,
double *jac_g)
const;
323 double *f,
double *g)
const;
327 double *exact_hess_lag)
const;
330 double lInfConstraintNorm(
BlocksqpMemory* m,
const double* xk,
const double* g)
const;
'blocksqp' plugin for Nlpsol
casadi_int conv_strategy_
std::string class_name() const override
Get type name.
static Nlpsol * creator(const std::string &name, const Function &nlp)
Create a new NLP Solver.
casadi_int fallback_update_
casadi_int fallback_scaling_
void free_mem(void *mem) const override
Free memory block.
std::string linsol_plugin_
QP solver for the subproblems.
std::vector< casadi_int > dim_
const char * plugin_name() const override
casadi_int max_consec_skipped_updates_
static const Options options_
Options.
bool print_maxit_reached_
static const std::string meta_doc
A documentation string.
casadi_int which_second_derv_
casadi_int max_consec_reduced_steps_
std::vector< casadi_int > blocks_
void * alloc_mem() const override
Create memory block.
casadi_int max_line_search_
bool skip_first_globalization_
static ProtoFunction * deserialize(DeserializingStream &s)
Deserialize into MX.
Sparsity exact_hess_lag_sp_
const Options & get_options() const override
Options.
Helper class for Serialization.
NLP solver storage class.
Base class for FunctionInternal and LinsolInternal.
Helper class for Serialization.
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.
casadi_int reducedStepCount
QpoasesMemory * qpoases_mem
std::vector< int > colind
casadi_int nRestHeurCalls
casadi_int nRestPhaseCalls
casadi_int nTotalSkippedUpdates
double averageSizingFactor
casadi_int * noUpdateCounter
std::set< std::pair< double, double > > filter
qpOASES::SymSparseMat * H
Options metadata for a class.