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_;
114 void serialize_body(SerializingStream &s)
const override;
118 void serialize_type(SerializingStream &s)
const override;
123 static ProtoFunction* deserialize(DeserializingStream& s);
128 std::string serialize_base_function()
const override {
return "Nlpsol"; }
131 Nlpsol(
const std::string& name,
const Function& oracle);
134 ~Nlpsol()
override = 0;
140 size_t get_n_in()
override {
return NLPSOL_NUM_IN;}
141 size_t get_n_out()
override {
return NLPSOL_NUM_OUT;}
148 Sparsity get_sparsity_in(casadi_int i)
override;
149 Sparsity get_sparsity_out(casadi_int i)
override;
156 std::string get_name_in(casadi_int i)
override {
return nlpsol_in(i);}
157 std::string get_name_out(casadi_int i)
override {
return nlpsol_out(i);}
164 static const Options options_;
165 const Options& get_options()
const override {
return options_;}
171 void disp_more(std::ostream& stream)
const override;
174 void init(
const Dict& opts)
override;
179 void* alloc_mem()
const override {
return new NlpsolMemory();}
184 int init_mem(
void* mem)
const override;
189 void free_mem(
void *mem)
const override {
delete static_cast<NlpsolMemory*
>(mem);}
194 virtual void check_inputs(
void* mem)
const;
199 double get_default_in(casadi_int ind)
const override {
return nlpsol_default_in(ind);}
202 virtual bool integer_support()
const {
return false;}
207 void set_work(
void* mem,
const double**& arg,
double**& res,
208 casadi_int*& iw,
double*& w)
const override;
211 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w,
void* mem)
const final;
214 virtual int solve(
void* mem)
const = 0;
219 void codegen_declarations(CodeGenerator& g)
const override;
224 void codegen_body_enter(CodeGenerator& g)
const override;
229 void codegen_body_exit(CodeGenerator& g)
const override;
234 bool uses_output()
const override {
return true;}
237 Dict get_stats(
void* mem)
const override;
243 bool has_forward(casadi_int nfwd)
const override {
return true;}
244 Function get_forward(casadi_int nfwd,
const std::string& name,
245 const std::vector<std::string>& inames,
246 const std::vector<std::string>& onames,
247 const Dict& opts)
const override;
254 bool has_reverse(casadi_int nadj)
const override {
return true;}
255 Function get_reverse(casadi_int nadj,
const std::string& name,
256 const std::vector<std::string>& inames,
257 const std::vector<std::string>& onames,
258 const Dict& opts)
const override;
262 int callback(NlpsolMemory* m)
const;
265 Function kkt()
const;
268 static void bound_consistency(casadi_int n,
double* z,
double* lam,
269 const double* lbz,
const double* ubz);
272 typedef Nlpsol* (*Creator)(
const std::string& name,
const Function& oracle);
278 static std::map<std::string, Plugin> solvers_;
281 static const std::string infix_;
284 static std::string shortname() {
return "nlpsol";}
289 std::string class_name()
const override {
return "Nlpsol";}
294 bool is_a(
const std::string& type,
bool recursive)
const override;
297 virtual DM getReducedHessian();
300 virtual void setOptionsFromFile(
const std::string & file);
303 template<
typename Type>
static void append_to_vec(GenericType& t,
Type el) {
304 std::vector<Type> v = t;
310 template<
typename XType>
311 static Function create_oracle(
const std::map<std::string, XType>& d,
318 explicit Nlpsol(DeserializingStream& s);
320 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)