1 // @HEADER 2 // ************************************************************************ 3 // 4 // Rapid Optimization Library (ROL) Package 5 // Copyright (2014) Sandia Corporation 6 // 7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 8 // license for use of this work by or on behalf of the U.S. Government. 9 // 10 // Redistribution and use in source and binary forms, with or without 11 // modification, are permitted provided that the following conditions are 12 // met: 13 // 14 // 1. Redistributions of source code must retain the above copyright 15 // notice, this list of conditions and the following disclaimer. 16 // 17 // 2. Redistributions in binary form must reproduce the above copyright 18 // notice, this list of conditions and the following disclaimer in the 19 // documentation and/or other materials provided with the distribution. 20 // 21 // 3. Neither the name of the Corporation nor the names of the 22 // contributors may be used to endorse or promote products derived from 23 // this software without specific prior written permission. 24 // 25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY 26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE 29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 // 37 // Questions? Contact lead developers: 38 // Drew Kouri (dpkouri@sandia.gov) and 39 // Denis Ridzal (dridzal@sandia.gov) 40 // 41 // ************************************************************************ 42 // @HEADER 43 44 #ifndef HS_PROBLEM_012_HPP 45 #define HS_PROBLEM_012_HPP 46 47 #include "ROL_NonlinearProgram.hpp" 48 49 namespace HS { 50 51 namespace HS_012 { 52 template<class Real> 53 class Obj { 54 public: 55 template<class ScalarT> value(const std::vector<ScalarT> & x,Real & tol)56 ScalarT value( const std::vector<ScalarT> &x, Real &tol ) { 57 return 0.5*x[0]*x[0] + x[1]*x[1] - x[0]*x[1] - 7*x[0] - 7*x[1]; 58 } 59 }; 60 61 template<class Real> 62 class InCon { 63 public: 64 template<class ScalarT> value(std::vector<ScalarT> & c,const std::vector<ScalarT> & x,Real & tol)65 void value( std::vector<ScalarT> &c, const std::vector<ScalarT> &x, Real &tol ) { 66 c[0] = 25 - 4*x[0]*x[0] - x[1]*x[1]; 67 } 68 }; 69 } 70 71 72 template<class Real> 73 class Problem_012 : public ROL::NonlinearProgram<Real> { 74 75 76 77 typedef ROL::Vector<Real> V; 78 typedef ROL::PartitionedVector<Real> PV; 79 typedef ROL::Objective<Real> OBJ; 80 typedef ROL::Constraint<Real> CON; 81 typedef ROL::NonlinearProgram<Real> NP; 82 83 84 public: 85 Problem_012()86 Problem_012() : NP( dimension_x() ) { 87 NP::noBound(); 88 } 89 dimension_x()90 int dimension_x() { return 2; } dimension_ci()91 int dimension_ci() { return 1; } 92 getObjective()93 const ROL::Ptr<OBJ> getObjective() { 94 return ROL::makePtr<ROL::Sacado_StdObjective<Real,HS_012::Obj>>(); 95 } 96 getInequalityConstraint()97 const ROL::Ptr<CON> getInequalityConstraint() { 98 return ROL::makePtr<ROL::Sacado_StdConstraint<Real,HS_012::InCon>>(); 99 } 100 getInitialGuess()101 const ROL::Ptr<const V> getInitialGuess() { 102 Real x[] = {0,0}; 103 return NP::createOptVector(x); 104 }; 105 initialGuessIsFeasible()106 bool initialGuessIsFeasible() { return true; } 107 getInitialObjectiveValue()108 Real getInitialObjectiveValue() { 109 return Real(0); 110 } 111 getSolutionObjectiveValue()112 Real getSolutionObjectiveValue() { 113 return Real(-30); 114 } 115 getSolutionSet()116 ROL::Ptr<const V> getSolutionSet() { 117 Real x[] = {2,3}; 118 return ROL::CreatePartitionedVector(NP::createOptVector(x)); 119 } 120 121 }; 122 123 } // namespace HS 124 125 #endif // HS_PROBLEM_012_HPP 126