- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

# /home/coin/SVN-release/Ipopt-3.5.1/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