MOOCHO (Single Doxygen Collection) Version of the Day
ConstrainedOptPack_QPSolverStats.hpp
Go to the documentation of this file.
00001 // @HEADER
00002 // ***********************************************************************
00003 // 
00004 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
00005 //                  Copyright (2003) Sandia Corporation
00006 // 
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 // 
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov) 
00038 // 
00039 // ***********************************************************************
00040 // @HEADER
00041 
00042 #ifndef COP_QP_SOLVER_STATS_H
00043 #define COP_QP_SOLVER_STATS_H
00044 
00045 #include "ConstrainedOptPack_Types.hpp"
00046 
00047 namespace ConstrainedOptPack {
00048 
00051 class QPSolverStats {
00052 public:
00053 
00054   // Public types
00055 
00057   enum { NOT_KNOWN = -1 };
00058 
00060   enum ESolutionType {
00061     SOLUTION_TYPE_NOT_KNOWN = static_cast<int>(NOT_KNOWN),
00062     OPTIMAL_SOLUTION    = 0,
00063     PRIMAL_FEASIBLE_POINT = 1,
00064     DUAL_FEASIBLE_POINT   = 2,
00065     SUBOPTIMAL_POINT    = 3
00066     };
00068   enum EConvexity {
00069     CONVEXITY_NOT_KNOWN = static_cast<int>(NOT_KNOWN),
00070     CONVEX              = 0,
00071     NONCONVEX           = 1
00072   };
00073 
00074   // Public interface
00075 
00077   QPSolverStats()
00078     : solution_type_(SOLUTION_TYPE_NOT_KNOWN)
00079     , convexity_(CONVEXITY_NOT_KNOWN)
00080     , num_qp_iter_(NOT_KNOWN)
00081     , num_adds_(NOT_KNOWN), num_drops_(NOT_KNOWN)
00082     , warm_start_(false), infeasible_qp_(false)
00083   {}
00085   void set_stats(
00086     ESolutionType solution_type, EConvexity convexity
00087     ,int num_qp_iter, int num_adds, int num_drops
00088     , bool warm_start, bool infeasible_qp )
00089   {
00090     solution_type_  = solution_type;
00091     convexity_      = convexity;
00092     num_qp_iter_  = num_qp_iter; 
00093     num_adds_   = num_adds;
00094     num_drops_    = num_drops;
00095     warm_start_   = warm_start;
00096     infeasible_qp_  = infeasible_qp;
00097   }
00099   ESolutionType solution_type() const
00100   {
00101     return solution_type_;
00102   }
00104   EConvexity convexity() const
00105   {
00106     return convexity_;
00107   }
00109   int num_qp_iter() const
00110   {
00111     return num_qp_iter_;
00112   }
00114   int num_adds() const
00115   {
00116     return num_adds_;
00117   }
00119   int num_drop() const
00120   {
00121     return num_drops_;
00122   }
00124   int warm_start() const
00125   {
00126     return warm_start_;
00127   }
00129   int infeasible_qp() const
00130   {
00131     return infeasible_qp_;
00132   }
00133 
00134 private:
00135   ESolutionType solution_type_;
00136   EConvexity      convexity_;
00137   int       num_qp_iter_;
00138   int       num_adds_;
00139   int       num_drops_;
00140   bool      warm_start_;
00141   bool      infeasible_qp_;
00142 
00143 };  // end class QPSolverStats
00144 
00145 inline
00146 std::string toString( const QPSolverStats::ESolutionType &solution_type )
00147 {
00148   switch(solution_type) {
00149     case QPSolverStats::SOLUTION_TYPE_NOT_KNOWN:
00150       return "SOLUTION_TYPE_NOT_KNOWN";
00151       break;
00152     case QPSolverStats::OPTIMAL_SOLUTION:
00153       return "OPTIMAL_SOLUTION";
00154       break;
00155     case QPSolverStats::PRIMAL_FEASIBLE_POINT:
00156       return "PRIMAL_FEASIBLE_POINT";
00157       break;
00158     case QPSolverStats::DUAL_FEASIBLE_POINT:
00159       return "DUAL_FEASIBLE_POINT";
00160       break;
00161     case QPSolverStats::SUBOPTIMAL_POINT:
00162       return "SUBOPTIMAL_POINT";
00163       break;
00164     default:
00165       TEUCHOS_TEST_FOR_EXCEPT(true);
00166   }
00167 }
00168 
00169 } // end namespace ConstrainedOptPack
00170 
00171 #endif  // COP_QP_SOLVER_STATS_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines