00001 // Copyright (C) 2005, 2008 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Eclipse Public License. 00004 // 00005 // $Id: IpCGSearchDirCalc.hpp 1861 2010-12-21 21:34:47Z andreasw $ 00006 // 00007 // Authors: Andreas Waechter IBM 2005-10-13 00008 // 00009 // Lifeng Chen/Zaiwen Wen Columbia Univ 00010 00011 #ifndef __IPCGSEARCHDIRCALC_HPP__ 00012 #define __IPCGSEARCHDIRCALC_HPP__ 00013 00014 #include "IpSearchDirCalculator.hpp" 00015 #include "IpPDSystemSolver.hpp" 00016 #include "IpCGPenaltyCq.hpp" 00017 00018 namespace Ipopt 00019 { 00020 00025 class CGSearchDirCalculator : public SearchDirectionCalculator 00026 { 00027 public: 00031 CGSearchDirCalculator(const SmartPtr<PDSystemSolver>& pd_solver); 00032 00034 virtual ~CGSearchDirCalculator(); 00036 00038 virtual bool InitializeImpl(const OptionsList& options, 00039 const std::string& prefix); 00040 00044 virtual bool ComputeSearchDirection(); 00045 00048 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions); 00050 00051 private: 00061 CGSearchDirCalculator(); 00062 00064 CGSearchDirCalculator(const CGSearchDirCalculator&); 00065 00067 void operator=(const CGSearchDirCalculator&); 00069 00071 CGPenaltyData& CGPenData() 00072 { 00073 CGPenaltyData& cg_pen_data = 00074 static_cast<CGPenaltyData&>(IpData().AdditionalData()); 00075 DBG_ASSERT(dynamic_cast<CGPenaltyData*>(&IpData().AdditionalData())); 00076 return cg_pen_data; 00077 } 00078 00080 CGPenaltyCq& CGPenCq() 00081 { 00082 CGPenaltyCq& cg_pen_cq = 00083 static_cast<CGPenaltyCq&>(IpCq().AdditionalCq()); 00084 DBG_ASSERT(dynamic_cast<CGPenaltyCq*>(&IpCq().AdditionalCq())); 00085 return cg_pen_cq; 00086 } 00087 00094 Number penalty_init_min_; 00096 Number penalty_init_max_; 00098 Number penalty_max_; 00099 00100 00101 00104 Number pen_des_fact_; 00105 00107 bool penalty_backward_; 00108 00111 Number kappa_x_dis_; 00112 Number kappa_y_dis_; 00113 Number vartheta_; 00114 Number delta_y_max_; 00115 Number fast_des_fact_; 00116 Number pen_init_fac_; 00117 00120 bool never_use_fact_cgpen_direction_; 00121 00123 Index nonmonotone_pen_update_counter_; 00125 00128 SmartPtr<PDSystemSolver> pd_solver_; 00130 }; 00131 00132 } // namespace Ipopt 00133 00134 #endif