00001 // Copyright (C) 2004, 2006 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Common Public License. 00004 // 00005 // $Id: IpProbingMuOracle.hpp 759 2006-07-07 03:07:08Z andreasw $ 00006 // 00007 // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13 00008 00009 #ifndef __IPPROBINGMUORACLE_HPP__ 00010 #define __IPPROBINGMUORACLE_HPP__ 00011 00012 #include "IpMuOracle.hpp" 00013 #include "IpPDSystemSolver.hpp" 00014 00015 namespace Ipopt 00016 { 00017 00021 class ProbingMuOracle : public MuOracle 00022 { 00023 public: 00027 ProbingMuOracle(const SmartPtr<PDSystemSolver>& pd_solver); 00029 virtual ~ProbingMuOracle(); 00031 00033 virtual bool InitializeImpl(const OptionsList& options, 00034 const std::string& prefix); 00035 00040 virtual bool CalculateMu(Number mu_min, Number mu_max, Number& new_mu); 00041 00044 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions); 00046 00047 private: 00056 00058 ProbingMuOracle(); 00060 ProbingMuOracle(const ProbingMuOracle&); 00061 00063 void operator=(const ProbingMuOracle&); 00065 00069 SmartPtr<PDSystemSolver> pd_solver_; 00070 00074 Number CalculateAffineMu(Number alpha_primal, 00075 Number alpha_dual, 00076 const IteratesVector& step); 00077 00081 Number sigma_max_; 00083 }; 00084 00085 } // namespace Ipopt 00086 00087 #endif