/home/coin/SVN-release/CoinAll-1.1.0/Ipopt/src/Algorithm/IpLowRankAugSystemSolver.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2005, 2006 International Business Machines and others.
00002 // All Rights Reserved.
00003 // This code is published under the Common Public License.
00004 //
00005 // $Id: IpLowRankAugSystemSolver.hpp 735 2006-06-04 06:10:05Z andreasw $
00006 //
00007 // Authors:  Andreas Waechter                IBM    2005-12-27
00008 
00009 #ifndef __IP_LOWRANKAUGSYSTEMSOLVER_HPP__
00010 #define __IP_LOWRANKAUGSYSTEMSOLVER_HPP__
00011 
00012 #include "IpAugSystemSolver.hpp"
00013 #include "IpDenseGenMatrix.hpp"
00014 #include "IpMultiVectorMatrix.hpp"
00015 #include "IpDiagMatrix.hpp"
00016 
00017 namespace Ipopt
00018 {
00019 
00023   class LowRankAugSystemSolver : public AugSystemSolver
00024   {
00025   public:
00029     LowRankAugSystemSolver(AugSystemSolver& aug_system_solver);
00030 
00032     virtual ~LowRankAugSystemSolver();
00034 
00036     bool InitializeImpl(const OptionsList& options,
00037                         const std::string& prefix);
00038 
00042     virtual ESymSolverStatus Solve(
00043       const SymMatrix* W,
00044       double W_factor,
00045       const Vector* D_x,
00046       double delta_x,
00047       const Vector* D_s,
00048       double delta_s,
00049       const Matrix* J_c,
00050       const Vector* D_c,
00051       double delta_c,
00052       const Matrix* J_d,
00053       const Vector* D_d,
00054       double delta_d,
00055       const Vector& rhs_x,
00056       const Vector& rhs_s,
00057       const Vector& rhs_c,
00058       const Vector& rhs_d,
00059       Vector& sol_x,
00060       Vector& sol_s,
00061       Vector& sol_c,
00062       Vector& sol_d,
00063       bool check_NegEVals,
00064       Index numberOfNegEVals);
00065 
00072     virtual Index NumberOfNegEVals() const;
00073 
00077     virtual bool ProvidesInertia() const;
00078 
00085     virtual bool IncreaseQuality();
00086 
00087   private:
00097     LowRankAugSystemSolver();
00099     LowRankAugSystemSolver(const LowRankAugSystemSolver&);
00100 
00102     void operator=(const LowRankAugSystemSolver&);
00104 
00109     SmartPtr<AugSystemSolver> aug_system_solver_;
00110 
00119     TaggedObject::Tag w_tag_;
00121     double w_factor_;
00125     TaggedObject::Tag d_x_tag_;
00127     double delta_x_;
00131     TaggedObject::Tag d_s_tag_;
00133     double delta_s_;
00137     TaggedObject::Tag j_c_tag_;
00141     TaggedObject::Tag d_c_tag_;
00143     double delta_c_;
00147     TaggedObject::Tag j_d_tag_;
00151     TaggedObject::Tag d_d_tag_;
00153     double delta_d_;
00155 
00159     bool first_call_;
00160     SmartPtr<DenseGenMatrix> J1_;
00161     SmartPtr<DenseGenMatrix> J2_;
00162     SmartPtr<MultiVectorMatrix> Vtilde1_;
00163     SmartPtr<MultiVectorMatrix> Utilde2_;
00166     SmartPtr<DiagMatrix> Wdiag_;
00169     SmartPtr<const CompoundVectorSpace> compound_sol_vecspace_;
00171 
00179     Index num_neg_evals_;
00180 
00185     ESymSolverStatus UpdateFactorization(
00186       const SymMatrix* W,
00187       double W_factor,
00188       const Vector* D_x,
00189       double delta_x,
00190       const Vector* D_s,
00191       double delta_s,
00192       const Matrix& J_c,
00193       const Vector* D_c,
00194       double delta_c,
00195       const Matrix& J_d,
00196       const Vector* D_d,
00197       double delta_d,
00198       const Vector& proto_rhs_x,
00199       const Vector& proto_rhs_s,
00200       const Vector& proto_rhs_c,
00201       const Vector& proto_rhs_d,
00202       bool check_NegEVals,
00203       Index numberOfNegEVals);
00204 
00210     ESymSolverStatus SolveMultiVector(
00211       const Vector* D_x,
00212       double delta_x,
00213       const Vector* D_s,
00214       double delta_s,
00215       const Matrix& J_c,
00216       const Vector* D_c,
00217       double delta_c,
00218       const Matrix& J_d,
00219       const Vector* D_d,
00220       double delta_d,
00221       const Vector& proto_rhs_x,
00222       const Vector& proto_rhs_s,
00223       const Vector& proto_rhs_c,
00224       const Vector& proto_rhs_d,
00225       const MultiVectorMatrix& V,
00226       const SmartPtr<const Matrix>& P_LM,
00227       SmartPtr<MultiVectorMatrix>& V_x,
00228       SmartPtr<MultiVectorMatrix>& Vtilde1,
00229       SmartPtr<MultiVectorMatrix>& Vtilde1_x,
00230       bool check_NegEVals,
00231       Index numberOfNegEVals);
00232 
00236     bool AugmentedSystemRequiresChange(
00237       const SymMatrix* W,
00238       double W_factor,
00239       const Vector* D_x,
00240       double delta_x,
00241       const Vector* D_s,
00242       double delta_s,
00243       const Matrix& J_c,
00244       const Vector* D_c,
00245       double delta_c,
00246       const Matrix& J_d,
00247       const Vector* D_d,
00248       double delta_d);
00250 
00251   };
00252 
00253 } // namespace Ipopt
00254 
00255 #endif

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