Ipopt 3.11.9
Loading...
Searching...
No Matches
AmplTNLP.hpp
Go to the documentation of this file.
1// Copyright (C) 2004, 2009 International Business Machines and others.
2// All Rights Reserved.
3// This code is published under the Eclipse Public License.
4//
5// $Id: AmplTNLP.hpp 2242 2013-04-24 19:26:30Z stefan $
6//
7// Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
8
9#ifndef __IPAMPLTNLP_HPP__
10#define __IPAMPLTNLP_HPP__
11
12#include "IpUtils.hpp"
13#include "IpTNLP.hpp"
14#include "IpJournalist.hpp"
15#include "IpOptionsList.hpp"
16
17#include <map>
18#include <string>
19
20/* non Ipopt forward declaration */
21struct ASL_pfgh;
22struct SufDecl;
23struct SufDesc;
24
25namespace Ipopt
26{
28 {
29 public:
31
33
39
47
48 void AddAvailableSuffix(std::string suffix_string, Suffix_Source source, Suffix_Type type)
49 {
50 suffix_ids_.push_back(suffix_string);
51 suffix_types_.push_back(type);
52 suffix_sources_.push_back(source);
53 // suffix_values_.push_back();
54 }
55
56 const Index* GetIntegerSuffixValues(std::string suffix_string, Suffix_Source source) const;
57
58 const Number* GetNumberSuffixValues(std::string suffix_string, Suffix_Source source) const;
59
60 std::vector<Index> GetIntegerSuffixValues(Index n, std::string suffix_string, Suffix_Source source) const;
61
62 std::vector<Number> GetNumberSuffixValues(Index n, std::string suffix_string, Suffix_Source source) const;
63
64 private:
74 //AmplSuffixHandler();
75
78
82
83 mutable ASL_pfgh* asl_;
84
85 SufDecl* suftab_;
86
87 std::vector<std::string> suffix_ids_;
88 std::vector<Suffix_Type> suffix_types_;
89 std::vector<Suffix_Source> suffix_sources_;
90
92 void PrepareAmplForSuffixes(ASL_pfgh* asl);
93
95 // void RetrieveSuffixesFromAmpl(ASL_pfgh* asl);
96
97 friend class AmplTNLP;
98 };
99
103 {
104 public:
109 WS_Option, /* this is for AMPL's internal wantsol callback */
110 HaltOnError_Option /* this is for our setting of the nerror_ member */
111 };
112
116 {
117 public:
118 AmplOption(const std::string ipopt_option_name,
119 AmplOptionType type,
120 const std::string description);
121
123 {
124 delete [] description_;
125 }
126
127 const std::string& IpoptOptionName() const
128 {
129 return ipopt_option_name_;
130 }
132 {
133 return type_;
134 }
135 char* Description() const
136 {
137 return description_;
138 }
139 private:
150
153
155 void operator=(const AmplOption&);
157
158 const std::string ipopt_option_name_;
161 };
162
164 {
165 public:
166 PrivatInfo(const std::string ipopt_name,
167 SmartPtr<OptionsList> options,
169 void** nerror = NULL)
170 :
171 ipopt_name_(ipopt_name),
172 options_(options),
173 jnlst_(jnlst),
174 nerror_(nerror)
175 {}
176 const std::string& IpoptName() const
177 {
178 return ipopt_name_;
179 }
181 {
182 return options_;
183 }
185 {
186 return jnlst_;
187 }
188 void** NError()
189 {
190 return nerror_;
191 }
192 private:
193 const std::string ipopt_name_;
196 void** nerror_;
197 };
198
199 public:
202 :
203 keywds_(NULL),
204 nkeywds_(0)
205 {}
206
209
211 void AddAmplOption(const std::string ampl_option_name,
212 const std::string ipopt_option_name,
214 const std::string description)
215 {
216 SmartPtr<AmplOption> new_option =
217 new AmplOption(ipopt_option_name, type, description);
218 ampl_options_map_[ampl_option_name] = ConstPtr(new_option);
219 }
220
223 {
224 return (Index)ampl_options_map_.size();
225 }
226
228 void* Keywords(const SmartPtr<OptionsList>& options,
230 void** nerror);
231
232 private:
242 //AmplOptionsList();
243
246
250
251 void MakeValidLatexString(std::string source, std::string& dest) const;
252
254
256 std::map<std::string, SmartPtr<const AmplOption> > ampl_options_map_;
257 // AW: I think it should be with const like in the following line
258 // but with const the AIX compiler fails
259 // std::map<const std::string, SmartPtr<const AmplOption> > ampl_options_map_;
260
262 void* keywds_;
263
266 };
267
271 class AmplTNLP : public TNLP
272 {
273 public:
278 const SmartPtr<OptionsList> options,
279 char**& argv, SmartPtr<AmplSuffixHandler>
280 suffix_handler = NULL, bool allow_discrete = false,
281 SmartPtr<AmplOptionsList> ampl_options_list = NULL,
282 const char* ampl_option_string = NULL,
283 const char* ampl_invokation_string = NULL,
284 const char* ampl_banner_string = NULL,
285 std::string* nl_file_content = NULL);
286
288 virtual ~AmplTNLP();
290
292 DECLARE_STD_EXCEPTION(NONPOSITIVE_SCALING_FACTOR);
293
299 virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g,
300 Index& nnz_h_lag, IndexStyleEnum& index_style);
301
305 StringMetaDataMapType& var_string_md,
306 IntegerMetaDataMapType& var_integer_md,
307 NumericMetaDataMapType& var_numeric_md,
308 Index m,
309 StringMetaDataMapType& con_string_md,
310 IntegerMetaDataMapType& con_integer_md,
311 NumericMetaDataMapType& con_numeric_md);
312
314 virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u,
315 Index m, Number* g_l, Number* g_u);
316
321 LinearityType* const_types);
322
325 virtual bool get_starting_point(Index n, bool init_x, Number* x,
326 bool init_z, Number* z_L, Number* z_U,
327 Index m, bool init_lambda, Number* lambda);
328
330 virtual bool eval_f(Index n, const Number* x, bool new_x,
331 Number& obj_value);
332
335 virtual bool eval_grad_f(Index n, const Number* x, bool new_x,
336 Number* grad_f);
337
339 virtual bool eval_g(Index n, const Number* x, bool new_x,
340 Index m, Number* g);
341
345 virtual bool eval_jac_g(Index n, const Number* x, bool new_x,
346 Index m, Index nele_jac, Index* iRow,
347 Index *jCol, Number* values);
348
352 virtual bool eval_h(Index n, const Number* x, bool new_x,
353 Number obj_factor, Index m, const Number* lambda,
354 bool new_lambda, Index nele_hess, Index* iRow,
355 Index* jCol, Number* values);
356
360 bool& use_x_scaling, Index n,
362 bool& use_g_scaling, Index m,
365
368 virtual void finalize_solution(SolverReturn status,
369 Index n, const Number* x, const Number* z_L, const Number* z_U,
370 Index m, const Number* g, const Number* lambda,
371 Number obj_value,
372 const IpoptData* ip_data,
375
379 virtual bool get_list_of_nonlinear_variables(Index num_nonlin_vars,
380 Index* pos_nonlin_vars);
382
383
388 {
389 return asl_;
390 }
391
395 void write_solution_file(const std::string& message) const;
396
403 Index& nlvbi_,
404 Index& nlvc_,
405 Index& nlvci_,
406 Index& nlvo_,
407 Index& nlvoi_,
408 Index& nbv_,
409 Index& niv_) const;
411
418
424 void set_string_metadata_for_var(std::string tag, std::vector<std::string> meta_data)
425 {
426 var_string_md_[tag] = meta_data;
427 }
428
429 void set_integer_metadata_for_var(std::string tag, std::vector<Index> meta_data)
430 {
431 var_integer_md_[tag] = meta_data;
432 }
433
434 void set_numeric_metadata_for_var(std::string tag, std::vector<Number> meta_data)
435 {
436 var_numeric_md_[tag] = meta_data;
437 }
438
439 void set_string_metadata_for_con(std::string tag, std::vector<std::string> meta_data)
440 {
441 con_string_md_[tag] = meta_data;
442 }
443
444 void set_integer_metadata_for_con(std::string tag, std::vector<Index> meta_data)
445 {
446 con_integer_md_[tag] = meta_data;
447 }
448
449 void set_numeric_metadata_for_con(std::string tag, std::vector<Number> meta_data)
450 {
451 con_numeric_md_[tag] = meta_data;
452 }
454
460
461 private:
472
475
477 void operator=(const AmplTNLP&);
479
482
484 ASL_pfgh* asl_;
485
487 double obj_sign_;
488
491 Index nz_h_full_; // number of nonzeros in the full_x hessian
492 /* the rest of the problem size data is available easily through the ampl variables */
494
505
521
524
526 void* nerror_;
527
530
533
535 bool internal_conval(const Number* x, Index m, Number* g=NULL);
536
539 bool apply_new_x(bool new_x, Index n, const Number* x);
540
544 char* get_options(const SmartPtr<OptionsList>& options,
545 SmartPtr<AmplOptionsList>& ampl_options_list,
546 const char* ampl_option_string,
547 const char* ampl_invokation_string,
548 const char* ampl_banner_string, char**& argv);
549
551 bool nerror_ok(void* nerror);
552
555
563 };
564
565
566
567} // namespace Ipopt
568
569#endif
Number * x
Input: Starting point Output: Optimal solution.
Number Number Index Number Number Index Index nele_hess
Number of non-zero elements in Hessian of Lagrangian.
Number Number * g
Values of constraint at final point (output only - ignored if set to NULL)
Number Number Index Number Number Index nele_jac
Number of non-zero elements in constraint Jacobian.
Number Number * x_scaling
Number obj_scaling
Number Number Number * obj_val
Final value of objective function (output only - ignored if set to NULL)
Number Number Number * g_scaling
Number Number Index m
Number of constraints.
Number Number Index Number Number Index Index Index index_style
indexing style for iRow & jCol, 0 for C style, 1 for Fortran style
Ampl Option class, contains name, type and description for an AMPL option.
Definition AmplTNLP.hpp:116
const std::string & IpoptOptionName() const
Definition AmplTNLP.hpp:127
AmplOptionType Type() const
Definition AmplTNLP.hpp:131
AmplOption()
Default Constructor.
AmplOption(const std::string ipopt_option_name, AmplOptionType type, const std::string description)
const std::string ipopt_option_name_
Definition AmplTNLP.hpp:158
void operator=(const AmplOption &)
Overloaded Equals Operator.
AmplOption(const AmplOption &)
Copy Constructor.
const SmartPtr< OptionsList > & Options() const
Definition AmplTNLP.hpp:180
const SmartPtr< const Journalist > jnlst_
Definition AmplTNLP.hpp:195
const SmartPtr< const Journalist > & Jnlst() const
Definition AmplTNLP.hpp:184
const SmartPtr< OptionsList > options_
Definition AmplTNLP.hpp:194
PrivatInfo(const std::string ipopt_name, SmartPtr< OptionsList > options, SmartPtr< const Journalist > jnlst, void **nerror=NULL)
Definition AmplTNLP.hpp:166
const std::string & IpoptName() const
Definition AmplTNLP.hpp:176
Class for storing a number of AMPL options that should be registered to the AMPL Solver library inter...
Definition AmplTNLP.hpp:103
void PrintLatex(SmartPtr< const Journalist > jnlst)
AmplOptionsList(const AmplOptionsList &)
Default Constructor.
void AddAmplOption(const std::string ampl_option_name, const std::string ipopt_option_name, AmplOptionsList::AmplOptionType type, const std::string description)
Adding a new AMPL Option.
Definition AmplTNLP.hpp:211
void * Keywords(const SmartPtr< OptionsList > &options, SmartPtr< const Journalist > jnlst, void **nerror)
ASL keywords list for the stored options.
Index NumberOfAmplOptions()
Number of AMPL Options.
Definition AmplTNLP.hpp:222
void * keywds_
pointer to the keywords
Definition AmplTNLP.hpp:262
void MakeValidLatexString(std::string source, std::string &dest) const
Index nkeywds_
Number of entries stored in keywds_.
Definition AmplTNLP.hpp:265
~AmplOptionsList()
Destructor.
void operator=(const AmplOptionsList &)
Overloaded Equals Operator.
std::map< std::string, SmartPtr< const AmplOption > > ampl_options_map_
map for storing registered AMPL options
Definition AmplTNLP.hpp:256
AmplOptionsList()
Default Constructor.
Definition AmplTNLP.hpp:201
std::vector< Index > GetIntegerSuffixValues(Index n, std::string suffix_string, Suffix_Source source) const
const Index * GetIntegerSuffixValues(std::string suffix_string, Suffix_Source source) const
std::vector< Suffix_Source > suffix_sources_
Definition AmplTNLP.hpp:89
std::vector< std::string > suffix_ids_
Definition AmplTNLP.hpp:87
void operator=(const AmplSuffixHandler &)
Overloaded Equals Operator.
void PrepareAmplForSuffixes(ASL_pfgh *asl)
Method called by AmplTNLP to prepare the asl for the suffixes.
void AddAvailableSuffix(std::string suffix_string, Suffix_Source source, Suffix_Type type)
Definition AmplTNLP.hpp:48
std::vector< Number > GetNumberSuffixValues(Index n, std::string suffix_string, Suffix_Source source) const
std::vector< Suffix_Type > suffix_types_
Definition AmplTNLP.hpp:88
const Number * GetNumberSuffixValues(std::string suffix_string, Suffix_Source source) const
AmplSuffixHandler(const AmplSuffixHandler &)
Default Constructor.
Ampl Interface.
Definition AmplTNLP.hpp:272
void set_numeric_metadata_for_var(std::string tag, std::vector< Number > meta_data)
Definition AmplTNLP.hpp:434
void * Oinfo_ptr_
Pointer to the Oinfo structure.
Definition AmplTNLP.hpp:523
void set_string_metadata_for_var(std::string tag, std::vector< std::string > meta_data)
Definition AmplTNLP.hpp:424
SmartPtr< AmplSuffixHandler > get_suffix_handler()
Method for returning the suffix handler.
Definition AmplTNLP.hpp:456
virtual bool eval_jac_g(Index n, const Number *x, bool new_x, Index m, Index nele_jac, Index *iRow, Index *jCol, Number *values)
specifies the jacobian structure (if values is NULL) and evaluates the jacobian values (if values is ...
AmplTNLP(const SmartPtr< const Journalist > &jnlst, const SmartPtr< OptionsList > options, char **&argv, SmartPtr< AmplSuffixHandler > suffix_handler=NULL, bool allow_discrete=false, SmartPtr< AmplOptionsList > ampl_options_list=NULL, const char *ampl_option_string=NULL, const char *ampl_invokation_string=NULL, const char *ampl_banner_string=NULL, std::string *nl_file_content=NULL)
Constructor.
SmartPtr< AmplSuffixHandler > suffix_handler_
Suffix Handler.
Definition AmplTNLP.hpp:529
StringMetaDataMapType con_string_md_
Definition AmplTNLP.hpp:560
Number * z_L_sol_
Definition AmplTNLP.hpp:499
virtual Index get_number_of_nonlinear_variables()
void set_numeric_metadata_for_con(std::string tag, std::vector< Number > meta_data)
Definition AmplTNLP.hpp:449
AmplTNLP(const AmplTNLP &)
Copy Constructor.
virtual bool get_nlp_info(Index &n, Index &m, Index &nnz_jac_g, Index &nnz_h_lag, IndexStyleEnum &index_style)
returns dimensions of the nlp.
ASL_pfgh * AmplSolverObject()
Return the ampl solver object (ASL*)
Definition AmplTNLP.hpp:387
IntegerMetaDataMapType var_integer_md_
Definition AmplTNLP.hpp:558
DECLARE_STD_EXCEPTION(NONPOSITIVE_SCALING_FACTOR)
Exceptions.
StringMetaDataMapType var_string_md_
meta data to pass on to TNLP
Definition AmplTNLP.hpp:557
bool hesset_called_
true when we have called hesset
Definition AmplTNLP.hpp:517
bool apply_new_x(bool new_x, Index n, const Number *x)
Internal function to update the internal and ampl state if the x value changes.
AmplTNLP()
Default Constructor.
SmartPtr< const Journalist > jnlst_
Journlist.
Definition AmplTNLP.hpp:481
virtual void finalize_solution(SolverReturn status, Index n, const Number *x, const Number *z_L, const Number *z_U, Index m, const Number *g, const Number *lambda, Number obj_value, const IpoptData *ip_data, IpoptCalculatedQuantities *ip_cq)
This method is called when the algorithm is complete so the TNLP can store/write the solution.
Number * x_sol_
Solution Vectors.
Definition AmplTNLP.hpp:498
virtual bool get_scaling_parameters(Number &obj_scaling, bool &use_x_scaling, Index n, Number *x_scaling, bool &use_g_scaling, Index m, Number *g_scaling)
retrieve the scaling parameters for the variables, objective function, and constraints.
virtual bool eval_g(Index n, const Number *x, bool new_x, Index m, Number *g)
evaluates the constraint residuals for the nlp.
virtual bool eval_grad_f(Index n, const Number *x, bool new_x, Number *grad_f)
evaluates the gradient of the objective for the nlp.
NumericMetaDataMapType var_numeric_md_
Definition AmplTNLP.hpp:559
virtual bool get_list_of_nonlinear_variables(Index num_nonlin_vars, Index *pos_nonlin_vars)
void set_integer_metadata_for_con(std::string tag, std::vector< Index > meta_data)
Definition AmplTNLP.hpp:444
char * get_options(const SmartPtr< OptionsList > &options, SmartPtr< AmplOptionsList > &ampl_options_list, const char *ampl_option_string, const char *ampl_invokation_string, const char *ampl_banner_string, char **&argv)
Method for obtaining the name of the NL file and the options set from AMPL.
virtual bool get_starting_point(Index n, bool init_x, Number *x, bool init_z, Number *z_L, Number *z_U, Index m, bool init_lambda, Number *lambda)
provides a starting point for the nlp variables.
virtual bool get_constraints_linearity(Index m, LinearityType *const_types)
Returns the constraint linearity.
NumericMetaDataMapType con_numeric_md_
Definition AmplTNLP.hpp:562
bool internal_conval(const Number *x, Index m, Number *g=NULL)
Make the constraint call to ampl.
void get_discrete_info(Index &nlvb_, Index &nlvbi_, Index &nlvc_, Index &nlvci_, Index &nlvo_, Index &nlvoi_, Index &nbv_, Index &niv_) const
ampl orders the variables like (continuous, binary, integer).
virtual bool eval_h(Index n, const Number *x, bool new_x, Number obj_factor, Index m, const Number *lambda, bool new_lambda, Index nele_hess, Index *iRow, Index *jCol, Number *values)
specifies the structure of the hessian of the lagrangian (if values is NULL) and evaluates the values...
virtual ~AmplTNLP()
Default destructor.
void write_solution_file(const std::string &message) const
Write the solution file.
virtual bool eval_f(Index n, const Number *x, bool new_x, Number &obj_value)
evaluates the objective value for the nlp.
virtual bool get_bounds_info(Index n, Number *x_l, Number *x_u, Index m, Number *g_l, Number *g_u)
returns bounds of the nlp.
bool conval_called_with_current_x_
true when the constraint values have been calculated with the current x, set to false in apply_new_x,...
Definition AmplTNLP.hpp:515
double obj_sign_
Sign of the objective fn (1 for min, -1 for max)
Definition AmplTNLP.hpp:487
Number * lambda_sol_
Definition AmplTNLP.hpp:502
void call_hesset()
calls hesset ASL function
Number * g_sol_
Definition AmplTNLP.hpp:501
void * nerror_
nerror flag passed to ampl calls - set to NULL to halt on error
Definition AmplTNLP.hpp:526
Number * z_U_sol_
Definition AmplTNLP.hpp:500
bool objval_called_with_current_x_
true when the objective value has been calculated with the current x, set to false in apply_new_x,...
Definition AmplTNLP.hpp:511
virtual bool get_var_con_metadata(Index n, StringMetaDataMapType &var_string_md, IntegerMetaDataMapType &var_integer_md, NumericMetaDataMapType &var_numeric_md, Index m, StringMetaDataMapType &con_string_md, IntegerMetaDataMapType &con_integer_md, NumericMetaDataMapType &con_numeric_md)
returns names and other meta data for the variables and constraints Overloaded from TNLP
bool internal_objval(const Number *x, Number &obj_val)
Make the objective call to ampl.
void set_string_metadata_for_con(std::string tag, std::vector< std::string > meta_data)
Definition AmplTNLP.hpp:439
bool set_active_objective_called_
true when set_active_objective has been called
Definition AmplTNLP.hpp:519
void set_integer_metadata_for_var(std::string tag, std::vector< Index > meta_data)
Definition AmplTNLP.hpp:429
void operator=(const AmplTNLP &)
Overloaded Equals Operator.
IntegerMetaDataMapType con_integer_md_
Definition AmplTNLP.hpp:561
void set_active_objective(Index obj_no)
A method for setting the index of the objective function to be considered.
bool nerror_ok(void *nerror)
returns true if the ampl nerror code is ok
ASL_pfgh * asl_
pointer to the main ASL structure
Definition AmplTNLP.hpp:484
Class for all IPOPT specific calculated quantities.
Class to organize all the data required by the algorithm.
ReferencedObject class.
Template class for Smart Pointers.
Base class for all NLP's that use standard triplet matrix form and dense vectors.
Definition IpTNLP.hpp:51
std::map< std::string, std::vector< Index > > IntegerMetaDataMapType
Definition IpTNLP.hpp:85
std::map< std::string, std::vector< Number > > NumericMetaDataMapType
Definition IpTNLP.hpp:86
LinearityType
Type of the constraints.
Definition IpTNLP.hpp:55
std::map< std::string, std::vector< std::string > > StringMetaDataMapType
Definition IpTNLP.hpp:84
IndexStyleEnum
overload this method to return the number of variables and constraints, and the number of non-zeros i...
Definition IpTNLP.hpp:80
SmartPtr< const U > ConstPtr(const SmartPtr< U > &smart_ptr)
SolverReturn
enum for the return from the optimize algorithm (obviously we need to add more)
int Index
Type of all indices of vectors, matrices etc.
Definition IpTypes.hpp:19
double Number
Type of all numbers.
Definition IpTypes.hpp:17