26 #ifndef CASADI_NLPSOL_IMPL_HPP
27 #define CASADI_NLPSOL_IMPL_HPP
30 #include "oracle_function.hpp"
31 #include "plugin_interface.hpp"
40 struct CASADI_EXPORT NlpsolMemory :
public OracleMemory {
59 Nlpsol :
public OracleFunction,
public PluginInterface<Nlpsol> {
78 casadi_int callback_step_;
81 std::string sens_linsol_;
82 Dict sens_linsol_options_;
84 std::vector<char> detect_simple_bounds_is_simple_;
85 Function detect_simple_bounds_parts_;
86 std::vector<casadi_int> detect_simple_bounds_target_x_;
87 std::vector<casadi_int> detect_simple_bounds_target_g_;
93 bool eval_errors_fatal_;
94 bool warn_initial_bounds_;
95 bool iteration_callback_ignore_errors_;
96 bool calc_multipliers_;
97 bool calc_lam_x_, calc_lam_p_, calc_f_, calc_g_;
98 bool bound_consistency_;
101 std::vector<bool> discrete_;
102 std::vector<bool> equality_;
109 mutable WeakRef kkt_;
111 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
113 mutable std::mutex kkt_mtx_;
119 void serialize_body(SerializingStream &s)
const override;
123 void serialize_type(SerializingStream &s)
const override;
128 static ProtoFunction* deserialize(DeserializingStream& s);
133 std::string serialize_base_function()
const override {
return "Nlpsol"; }
136 Nlpsol(
const std::string& name,
const Function& oracle);
139 ~Nlpsol()
override = 0;
145 size_t get_n_in()
override {
return NLPSOL_NUM_IN;}
146 size_t get_n_out()
override {
return NLPSOL_NUM_OUT;}
153 Sparsity get_sparsity_in(casadi_int i)
override;
154 Sparsity get_sparsity_out(casadi_int i)
override;
161 std::string get_name_in(casadi_int i)
override {
return nlpsol_in(i);}
162 std::string get_name_out(casadi_int i)
override {
return nlpsol_out(i);}
169 static const Options options_;
170 const Options& get_options()
const override {
return options_;}
176 void disp_more(std::ostream& stream)
const override;
179 void init(
const Dict& opts)
override;
184 void* alloc_mem()
const override {
return new NlpsolMemory();}
189 int init_mem(
void* mem)
const override;
194 void free_mem(
void *mem)
const override {
delete static_cast<NlpsolMemory*
>(mem);}
199 virtual void check_inputs(
void* mem)
const;
204 double get_default_in(casadi_int ind)
const override {
return nlpsol_default_in(ind);}
207 virtual bool integer_support()
const {
return false;}
212 void set_work(
void* mem,
const double**& arg,
double**& res,
213 casadi_int*& iw,
double*& w)
const override;
216 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w,
void* mem)
const final;
219 virtual int solve(
void* mem)
const = 0;
224 void codegen_declarations(CodeGenerator& g)
const override;
229 void codegen_body_enter(CodeGenerator& g)
const override;
234 void codegen_body_exit(CodeGenerator& g)
const override;
239 bool uses_output()
const override {
return true;}
242 Dict get_stats(
void* mem)
const override;
248 bool has_forward(casadi_int nfwd)
const override {
return true;}
249 Function get_forward(casadi_int nfwd,
const std::string& name,
250 const std::vector<std::string>& inames,
251 const std::vector<std::string>& onames,
252 const Dict& opts)
const override;
259 bool has_reverse(casadi_int nadj)
const override {
return true;}
260 Function get_reverse(casadi_int nadj,
const std::string& name,
261 const std::vector<std::string>& inames,
262 const std::vector<std::string>& onames,
263 const Dict& opts)
const override;
267 int callback(NlpsolMemory* m)
const;
270 Function kkt()
const;
273 static void bound_consistency(casadi_int n,
double* z,
double* lam,
274 const double* lbz,
const double* ubz);
277 typedef Nlpsol* (*Creator)(
const std::string& name,
const Function& oracle);
283 static std::map<std::string, Plugin> solvers_;
285 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
286 static std::mutex mutex_solvers_;
290 static const std::string infix_;
293 static std::string shortname() {
return "nlpsol";}
298 std::string class_name()
const override {
return "Nlpsol";}
303 bool is_a(
const std::string& type,
bool recursive)
const override;
306 virtual DM getReducedHessian();
309 virtual void setOptionsFromFile(
const std::string & file);
312 template<
typename Type>
static void append_to_vec(GenericType& t,
Type el) {
313 std::vector<Type> v = t;
319 template<
typename XType>
320 static Function create_oracle(
const std::map<std::string, XType>& d,
327 explicit Nlpsol(DeserializingStream& s);
329 void set_nlpsol_prob();
CASADI_EXPORT std::vector< std::string > nlpsol_in()
Get input scheme of NLP solvers.
CASADI_EXPORT std::vector< std::string > nlpsol_out()
Get NLP solver output scheme of NLP solvers.
CASADI_EXPORT double nlpsol_default_in(casadi_int ind)
Default input for an NLP solver.
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.
Type
Variable type (FMI 3)