Ipopt
trunk
|
00001 // Copyright (C) 2008 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Eclipse Public License. 00004 // 00005 // $Id$ 00006 // 00007 // Authors: Andreas Waechter IBM 2008-08-10 00008 00009 #ifndef __IPTNLPREDUCER_HPP__ 00010 #define __IPTNLPREDUCER_HPP__ 00011 00012 #include "IpTNLP.hpp" 00013 00014 namespace Ipopt 00015 { 00023 class TNLPReducer : public TNLP 00024 { 00025 public: 00031 TNLPReducer(TNLP& tnlp, Index n_g_skip, const Index* index_g_skip, 00032 Index n_xL_skip, const Index* index_xL_skip, 00033 Index n_xU_skip, const Index* index_xU_skip, 00034 Index n_x_fix, const Index* index_f_fix); 00035 00037 virtual ~TNLPReducer(); 00039 00041 virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, 00042 Index& nnz_h_lag, IndexStyleEnum& index_style); 00043 00044 virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u, 00045 Index m, Number* g_l, Number* g_u); 00046 00047 virtual bool get_scaling_parameters(Number& obj_scaling, 00048 bool& use_x_scaling, Index n, 00049 Number* x_scaling, 00050 bool& use_g_scaling, Index m, 00051 Number* g_scaling); 00052 00053 virtual bool get_variables_linearity(Index n, LinearityType* var_types); 00054 00055 virtual bool get_constraints_linearity(Index m, LinearityType* const_types); 00056 00057 virtual bool get_starting_point(Index n, bool init_x, Number* x, 00058 bool init_z, Number* z_L, Number* z_U, 00059 Index m, bool init_lambda, 00060 Number* lambda); 00061 00062 virtual bool get_warm_start_iterate(IteratesVector& warm_start_iterate); 00063 00064 virtual bool eval_f(Index n, const Number* x, bool new_x, 00065 Number& obj_value); 00066 00067 virtual bool eval_grad_f(Index n, const Number* x, bool new_x, 00068 Number* grad_f); 00069 00070 virtual bool eval_g(Index n, const Number* x, bool new_x, 00071 Index m, Number* g); 00072 00073 virtual bool eval_jac_g(Index n, const Number* x, bool new_x, 00074 Index m, Index nele_jac, Index* iRow, 00075 Index *jCol, Number* values); 00076 00077 virtual bool eval_h(Index n, const Number* x, bool new_x, 00078 Number obj_factor, Index m, const Number* lambda, 00079 bool new_lambda, Index nele_hess, 00080 Index* iRow, Index* jCol, Number* values); 00081 00082 virtual void finalize_solution(SolverReturn status, 00083 Index n, const Number* x, const Number* z_L, const Number* z_U, 00084 Index m, const Number* g, const Number* lambda, 00085 Number obj_value, 00086 const IpoptData* ip_data, 00087 IpoptCalculatedQuantities* ip_cq); 00088 00089 virtual bool intermediate_callback(AlgorithmMode mode, 00090 Index iter, Number obj_value, 00091 Number inf_pr, Number inf_du, 00092 Number mu, Number d_norm, 00093 Number regularization_size, 00094 Number alpha_du, Number alpha_pr, 00095 Index ls_trials, 00096 const IpoptData* ip_data, 00097 IpoptCalculatedQuantities* ip_cq); 00098 00099 virtual Index get_number_of_nonlinear_variables(); 00100 00101 virtual bool get_list_of_nonlinear_variables(Index num_nonlin_vars, 00102 Index* pos_nonlin_vars); 00104 00105 private: 00115 TNLPReducer(); 00116 00118 TNLPReducer(const TNLPReducer&); 00119 00121 void operator=(const TNLPReducer&); 00123 00126 SmartPtr<TNLP> tnlp_; 00127 Index m_orig_; 00128 Index nnz_jac_g_orig_; 00130 00132 Index n_g_skip_; 00133 00136 Index* index_g_skip_; 00137 00140 IndexStyleEnum index_style_orig_; 00141 00144 Index* g_keep_map_; 00145 00147 Index m_reduced_; 00148 00150 Index nnz_jac_g_reduced_; 00151 00153 Index nnz_jac_g_skipped_; 00154 00157 Index* jac_g_skipped_; 00158 00160 Index n_xL_skip_; 00161 00163 Index* index_xL_skip_; 00164 00166 Index n_xU_skip_; 00167 00169 Index* index_xU_skip_; 00170 00172 Index n_x_fix_; 00173 00175 Index* index_x_fix_; 00176 }; 00177 00178 } // namespace Ipopt 00179 00180 #endif