MOOCHO (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
NLPInterfacePack_NLPWBCounterExample.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
5 // Copyright (2003) 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 Roscoe A. Bartlett (rabartl@sandia.gov)
38 //
39 // ***********************************************************************
40 // @HEADER
41 
42 #ifndef NLP_WB_COUNTER_EXAMPLE_H
43 #define NLP_WB_COUNTER_EXAMPLE_H
44 
46 
47 namespace NLPInterfacePack {
48 
82 public:
83 
86 
102  value_type xinit[3]
103  ,value_type a = 0.0
104  ,value_type b = 1.0
105  ,bool nlp_selects_basis = true
106  ,bool linear_obj = true
107  );
108 
110 
113 
115  void initialize(bool test_setup);
117  bool is_initialized() const;
120 
122 
125 
127  bool nlp_selects_basis() const;
128 
130 
131 protected:
132 
135 
137  bool imp_nlp_has_changed() const;
139  size_type imp_n_orig() const;
141  size_type imp_m_orig() const;
143  size_type imp_mI_orig() const;
145  const DVectorSlice imp_xinit_orig() const;
147  bool imp_has_var_bounds() const;
149  const DVectorSlice imp_xl_orig() const;
151  const DVectorSlice imp_xu_orig() const;
153  const DVectorSlice imp_hl_orig() const;
155  const DVectorSlice imp_hu_orig() const;
157  void imp_calc_f_orig(
158  const DVectorSlice &x_full, bool newx, const ZeroOrderInfoSerial &zero_order_info ) const;
160  void imp_calc_c_orig(
161  const DVectorSlice &x_full, bool newx, const ZeroOrderInfoSerial &zero_order_info ) const;
163  void imp_calc_h_orig(
164  const DVectorSlice &x_full, bool newx, const ZeroOrderInfoSerial &zero_order_info ) const;
166  void imp_calc_Gf_orig(
167  const DVectorSlice &x_full, bool newx, const ObjGradInfoSerial &obj_grad_info ) const;
169  bool imp_get_next_basis(
170  IVector *var_perm_full, IVector *equ_perm_full, size_type *rank_full, size_type *rank );
173  const DVectorSlice &x_orig, const DVectorSlice *lambda_orig
174  ,const DVectorSlice *lambdaI_orig, const DVectorSlice *nu_orig, bool is_optimal );
175 
177 
180 
182  size_type imp_Gc_nz_orig() const;
184  size_type imp_Gh_nz_orig() const;
186  void imp_calc_Gc_orig(
187  const DVectorSlice& x_full, bool newx, const FirstOrderExplInfo& first_order_expl_info ) const;
189  void imp_calc_Gh_orig(
190  const DVectorSlice& x_full, bool newx, const FirstOrderExplInfo& first_order_expl_info ) const;
191 
193 
194 private:
195 
196  // /////////////////////////////////////////
197  // Private data members
198 
199  bool is_initialized_; // Flag for if this is initialized
200  bool nlp_selects_basis_; // Flag for if this selects first basis
201  bool basis_selection_was_given_; // Flag for if this already selected a basis
202  bool linear_obj_; // Flag for if objective is linear or quadratic
203  size_type n_orig_, m_orig_, Gc_orig_nz_; // NLP sizes and number nonzeros in Jacobian
204  value_type a_, b_; // Constants for constraints
205  DVector xinit_orig_, xl_orig_, xu_orig_; // Guess, and bounds on x_orig
206 
207  // /////////////////////////////////////////
208  // Private member functions
209 
210  // Not defined and not to be called
214 
215 }; // end class NLPWBCounterExample
216 
217 } // end namespace NLPInterfacePack
218 
219 #endif // NLP_WB_COUNTER_EXAMPLE_H
AbstractLinAlgPack::size_type size_type
NLP node subclass complementing NLPSerialPreprocess for explicit Jacobians.
bool imp_get_next_basis(IVector *var_perm_full, IVector *equ_perm_full, size_type *rank_full, size_type *rank)
const ZeroOrderInfo zero_order_info() const
Return pointer to set quantities.
void imp_calc_c_orig(const DVectorSlice &x_full, bool newx, const ZeroOrderInfoSerial &zero_order_info) const
const ObjGradInfo obj_grad_info() const
Return objective gradient and zero order information.
DVectorSlice x_full() const
Give reference to current x_full.
void imp_calc_Gf_orig(const DVectorSlice &x_full, bool newx, const ObjGradInfoSerial &obj_grad_info) const
void imp_calc_Gh_orig(const DVectorSlice &x_full, bool newx, const FirstOrderExplInfo &first_order_expl_info) const
NLPWBCounterExample & operator=(const NLPWBCounterExample &)
Struct for objective and constriants (pointer) as serial vectors.
Struct for zero and explicit first order quantities that subclass must fill in.
DenseLinAlgPack::VectorSliceTmpl< value_type > DVectorSlice
void imp_calc_f_orig(const DVectorSlice &x_full, bool newx, const ZeroOrderInfoSerial &zero_order_info) const
void imp_calc_Gc_orig(const DVectorSlice &x_full, bool newx, const FirstOrderExplInfo &first_order_expl_info) const
AbstractLinAlgPack::value_type value_type
Struct for serial gradient (objective), objective and constriants (pointers)
void imp_report_orig_final_solution(const DVectorSlice &x_orig, const DVectorSlice *lambda_orig, const DVectorSlice *lambdaI_orig, const DVectorSlice *nu_orig, bool is_optimal)
void imp_calc_h_orig(const DVectorSlice &x_full, bool newx, const ZeroOrderInfoSerial &zero_order_info) const
NLP subclass for the Waechter and Biegler Counter Example.