/home/coin/SVN-release/CoinAll-1.1.0/Ipopt/src/contrib/CGPenalty/IpCGPerturbationHandler.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2005, 2007 International Business Machines and others.
00002 // All Rights Reserved.
00003 // This code is published under the Common Public License.
00004 //
00005 // $Id: IpPDPerturbationHandler.hpp 778 2006-08-16 18:11:13Z andreasw $
00006 //
00007 // Authors:  Carl Laird, Andreas Waechter              IBM    2005-08-04
00008 
00009 #ifndef __IPCGPERTURBATIONHANDLER_HPP__
00010 #define __IPCGPERTURBATIONHANDLER_HPP__
00011 
00012 #include "IpPDPerturbationHandler.hpp"
00013 
00014 namespace Ipopt
00015 {
00016 
00024   class CGPerturbationHandler: public PDPerturbationHandler
00025   {
00026   public:
00030     CGPerturbationHandler();
00032     virtual ~CGPerturbationHandler()
00033     {}
00035 
00036     /* overloaded from AlgorithmStrategyObject */
00037     virtual bool InitializeImpl(const OptionsList& options,
00038                                 const std::string& prefix);
00039 
00046     bool ConsiderNewSystem(Number& delta_x, Number& delta_s,
00047                            Number& delta_c, Number& delta_d);
00048 
00053     bool PerturbForSingularity(Number& delta_x, Number& delta_s,
00054                                Number& delta_c, Number& delta_d);
00055 
00060     bool PerturbForWrongInertia(Number& delta_x, Number& delta_s,
00061                                 Number& delta_c, Number& delta_d);
00062 
00065     void CurrentPerturbation(Number& delta_x, Number& delta_s,
00066                              Number& delta_c, Number& delta_d);
00067 
00070     static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
00072 
00073   private:
00083     CGPerturbationHandler(const CGPerturbationHandler&);
00084 
00086     void operator=(const CGPerturbationHandler&);
00088 
00092     Number delta_x_last_;
00094     Number delta_s_last_;
00096     Number delta_c_last_;
00098     Number delta_d_last_;
00100 
00105     Number delta_x_curr_;
00107     Number delta_s_curr_;
00109     Number delta_c_curr_;
00111     Number delta_d_curr_;
00113 
00116     bool get_deltas_for_wrong_inertia_called_;
00117 
00121     enum DegenType
00122     {
00123       NOT_YET_DETERMINED,
00124       NOT_DEGENERATE,
00125       DEGENERATE
00126     };
00127 
00130     DegenType hess_degenerate_;
00131 
00134     DegenType jac_degenerate_;
00135 
00139     Index degen_iters_;
00140 
00142     enum TrialStatus
00143     {
00144       NO_TEST,
00145       TEST_DELTA_C_EQ_0_DELTA_X_EQ_0,
00146       TEST_DELTA_C_GT_0_DELTA_X_EQ_0,
00147       TEST_DELTA_C_EQ_0_DELTA_X_GT_0,
00148       TEST_DELTA_C_GT_0_DELTA_X_GT_0
00149     };
00150 
00152     TrialStatus test_status_;
00154 
00158     Number delta_xs_max_;
00160     Number delta_xs_min_;
00162     Number delta_xs_first_inc_fact_;
00164     Number delta_xs_inc_fact_;
00166     Number delta_xs_dec_fact_;
00168     Number delta_xs_init_;
00170     Number delta_cd_val_;
00172     Number delta_cd_exp_;
00176     bool reset_last_;
00178     Index degen_iters_max_;
00181     bool perturb_always_cd_;
00183 
00185     Number penalty_max_;
00187     Number mult_diverg_feasibility_tol_;
00188 
00194     bool get_deltas_for_wrong_inertia(Number& delta_x, Number& delta_s,
00195                                       Number& delta_c, Number& delta_d);
00196 
00200     void finalize_test();
00202     Number delta_cd();
00204 
00205   };
00206 
00207 } // namespace Ipopt
00208 
00209 #endif

Generated on Sun Nov 14 14:06:36 2010 for Coin-All by  doxygen 1.4.7