Bonmin
1.7
|
00001 // Copyright (C) 2006 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Common Public License. 00004 // 00005 // $Id: BonCurvatureEstimator.hpp 1758 2010-12-09 12:23:50Z pbonami $ 00006 // 00007 // Author: Andreas Waechter IBM 2006-10-11 00008 00009 #ifndef __BONCURVATUREESTIMATOR_HPP__ 00010 #define __BONCURVATUREESTIMATOR_HPP__ 00011 #error "Not supported currently" 00012 #include "IpTNLP.hpp" 00013 #include "IpOptionsList.hpp" 00014 #include "IpCompoundSymMatrix.hpp" 00015 #include "IpCompoundVector.hpp" 00016 #include <vector> 00017 00018 namespace Ipopt { 00019 //forward declarations 00020 class TSymLinearSolver; 00021 } 00022 00023 namespace Bonmin 00024 { 00025 using namespace Ipopt; 00026 00029 class CurvatureEstimator: public ReferencedObject 00030 { 00031 public: 00036 CurvatureEstimator( 00037 SmartPtr<Journalist> jnlst, 00038 SmartPtr<OptionsList> options, 00039 SmartPtr<TNLP> tnlp); 00040 00042 virtual ~CurvatureEstimator(); 00044 00056 bool ComputeNullSpaceCurvature( 00057 int n, 00058 const Number* x, 00059 bool new_x, 00060 const Number* x_l, 00061 const Number* x_u, 00062 const Number* g_l, 00063 const Number* g_u, 00064 bool new_bounds, 00065 const Number* z_L, 00066 const Number* z_U, 00067 int m, 00068 const Number* lam, 00069 bool new_mults, 00070 const Number* orig_d, 00071 Number* projected_d, 00072 Number& gradLagTd, 00073 Number& dTHLagd); 00074 00075 private: 00085 CurvatureEstimator(); 00086 00088 CurvatureEstimator(const CurvatureEstimator&); 00089 00091 void operator=(const CurvatureEstimator&); 00093 00096 SmartPtr<Journalist> jnlst_; 00097 SmartPtr<OptionsList> options_; 00100 std::string prefix_; 00103 SmartPtr<TSymLinearSolver> eq_tsymlinearsolver_; 00106 SmartPtr<TSymLinearSolver> all_tsymlinearsolver_; 00108 00111 SmartPtr<TNLP> tnlp_; 00112 Index n_; 00113 Number* grad_f_; 00114 Index m_; 00115 Index nnz_jac_; 00116 Index* irows_jac_; 00117 Index* jcols_jac_; 00118 Number* jac_vals_; 00119 Index nnz_hess_; 00120 Index* irows_hess_; 00121 Index* jcols_hess_; 00122 Number* hess_vals_; 00124 00129 Index eq_nx_free_; 00132 Index* eq_x_free_map_; 00134 Index eq_ng_fixed_; 00137 Index* eq_g_fixed_map_; 00139 00144 Index all_nx_free_; 00147 Index* all_x_free_map_; 00149 Index all_ng_fixed_; 00152 Index* all_g_fixed_map_; 00154 00156 Number* lambda_; 00157 00161 Number* eq_projected_d_; 00162 00168 SmartPtr<CompoundSymMatrixSpace> eq_comp_proj_matrix_space_; 00170 SmartPtr<CompoundSymMatrix> eq_comp_proj_matrix_; 00173 SmartPtr<CompoundVectorSpace> eq_comp_vec_space_; 00175 00181 SmartPtr<CompoundSymMatrixSpace> all_comp_proj_matrix_space_; 00183 SmartPtr<CompoundSymMatrix> all_comp_proj_matrix_; 00186 SmartPtr<CompoundVectorSpace> all_comp_vec_space_; 00188 00191 std::vector<int> active_x_; 00192 std::vector<int> active_g_; 00194 00195 bool initialized_; 00196 00197 bool Initialize(); 00198 00199 bool PrepareNewMatrixStructure( 00200 const Number* x_l, 00201 const Number* x_u, 00202 const Number* g_l, 00203 const Number* g_u, 00204 std::vector<int>& active_x, 00205 std::vector<int>& active_g, 00206 Index& nx_free, 00207 Index* x_free_map, 00208 Index& ng_fixed, 00209 Index* g_fixed_map, 00210 SmartPtr<CompoundSymMatrixSpace>& comp_proj_matrix_space, 00211 SmartPtr<CompoundVectorSpace>& comp_vec_space); 00212 00213 bool PrepareNewMatrixValues( 00214 const Index* x_free_map, 00215 const Index* g_fixed_map, 00216 SmartPtr<CompoundSymMatrixSpace>& comp_proj_matrix_space, 00217 SmartPtr<CompoundSymMatrix>& comp_proj_matrix, 00218 SmartPtr<TSymLinearSolver>& tsymlinearsolver); 00219 00220 bool SolveSystem( 00221 const Number* rhs_x, 00222 const Number* rhs_g, 00223 Number* sol_x, Number* sol_g, 00224 const Index* x_free_map, 00225 const Index* g_fixed_map, 00226 SmartPtr<CompoundVectorSpace>& comp_vec_space, 00227 SmartPtr<CompoundSymMatrix>& comp_proj_matrix, 00228 SmartPtr<TSymLinearSolver>& tsymlinearsolver); 00229 00230 bool Compute_dTHLagd( 00231 const Number* d, const Number* x, bool new_x, const Number* lambda, 00232 bool new_lambda, Number& dTHLagd); 00233 }; 00234 00235 } // namespace Ipopt 00236 #endif