.. _program_listing_file_include_parpeoptimization_localOptimizationIpoptTNLP.h: Program Listing for File localOptimizationIpoptTNLP.h ===================================================== |exhale_lsh| :ref:`Return to documentation for file ` (``include/parpeoptimization/localOptimizationIpoptTNLP.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef LOCALOPTIMIZATIONIPOPTTNLP_H #define LOCALOPTIMIZATIONIPOPTTNLP_H // This should fix `error "don't have header file for stddef"' with some IpOpt // versions #ifndef HAVE_CSTDDEF #define HAVE_CSTDDEF #include #undef HAVE_CSTDDEF #else #include #endif #include #include namespace parpe { using mutexIpOptType = std::recursive_mutex; static mutexIpOptType mutexIpOpt {}; InverseUniqueLock ipOptReleaseLock(); std::unique_lock ipOptGetLock(); class OptimizationProblem; class OptimizationReporter; class LocalOptimizationIpoptTNLP : public Ipopt::TNLP { public: LocalOptimizationIpoptTNLP(OptimizationProblem &problem, OptimizationReporter &reporter); ~LocalOptimizationIpoptTNLP() override = default; bool get_nlp_info(Ipopt::Index &n, Ipopt::Index &m, Ipopt::Index &nnz_jac_g, Ipopt::Index &nnz_h_lag, IndexStyleEnum &index_style) override; bool get_bounds_info(Ipopt::Index n, Ipopt::Number *x_l, Ipopt::Number *x_u, Ipopt::Index m, Ipopt::Number *g_l, Ipopt::Number *g_u) override; bool get_starting_point(Ipopt::Index n, bool init_x, Ipopt::Number *x, bool init_z, Ipopt::Number *z_L, Ipopt::Number *z_U, Ipopt::Index m, bool init_lambda, Ipopt::Number *lambda) override; bool eval_f(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Number &obj_value) override; bool eval_grad_f(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Number *grad_f) override; bool eval_g(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Index m, Ipopt::Number *g) override; bool eval_jac_g(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Index m, Ipopt::Index nele_jac, Ipopt::Index *iRow, Ipopt::Index *jCol, Ipopt::Number *values) override; bool intermediate_callback( Ipopt::AlgorithmMode mode, Ipopt::Index iter, Ipopt::Number obj_value, Ipopt::Number inf_pr, Ipopt::Number inf_du, Ipopt::Number mu, Ipopt::Number d_norm, Ipopt::Number regularization_size, Ipopt::Number alpha_du, Ipopt::Number alpha_pr, Ipopt::Index ls_trials, const Ipopt::IpoptData *ip_data, Ipopt::IpoptCalculatedQuantities *ip_cq) override; void finalize_solution(Ipopt::SolverReturn status, Ipopt::Index n, const Ipopt::Number *x, const Ipopt::Number *z_L, const Ipopt::Number *z_U, Ipopt::Index m, const Ipopt::Number *g, const Ipopt::Number *lambda, Ipopt::Number obj_value, const Ipopt::IpoptData *ip_data, Ipopt::IpoptCalculatedQuantities *ip_cq) override; private: OptimizationProblem &problem; OptimizationReporter &reporter; // need to store initial parameters, because IpOpt asks twice std::vector initialParameters; }; void setIpOptOption(const std::pair &pair, Ipopt::SmartPtr* o); } // namespace parpe #endif // LOCALOPTIMIZATIONIPOPTTNLP_H