Bonmin 1.8.9
Loading...
Searching...
No Matches
BonAmplTMINLP.hpp
Go to the documentation of this file.
1// (C) Copyright International Business Machines Corporation and
2// Carnegie Mellon University 2004, 2007
3//
4// All Rights Reserved.
5// This code is published under the Eclipse Public License.
6//
7// Authors :
8// Carl D. Laird, Carnegie Mellon University,
9// Andreas Waechter, International Business Machines Corporation
10// Pierre Bonami, Carnegie Mellon University,
11//
12// Date : 12/01/2004
13
14#ifndef __IPAMPLTMINLP_HPP__
15#define __IPAMPLTMINLP_HPP__
16
17#include "BonTMINLP.hpp"
18#include "IpSmartPtr.hpp"
19#include "CoinPackedMatrix.hpp"
20#include "OsiCuts.hpp"
22#include "BonTypes.hpp"
23
24/* non Ipopt forward declaration */
25struct ASL_pfgh;
26struct SufDecl;
27struct SufDesc;
28
29
30// Declarations, so that we don't have to include the Ipopt AMPL headers
31namespace Ipopt
32{
33 class AmplSuffixHandler;
34 class AmplOptionsList;
35 class AmplTNLP;
36}
37
38namespace Bonmin
39{
40
46 class AmplTMINLP : public TMINLP
47 {
48 public:
55 char**& argv,
56 Ipopt::AmplSuffixHandler* suffix_handler = NULL,
57 const std::string& appName = "bonmin",
58 std::string* nl_file_content = NULL);
59
63 char**& argv,
64 Ipopt::AmplSuffixHandler* suffix_handler =NULL,
65 const std::string& appName = "bonmin",
66 std::string* nl_file_content = NULL);
67
70
72 void read_sos();
73
76
78 void read_onoff();
79
82
85
87 {
88 AmplTMINLP * tminlp = new AmplTMINLP;
89 return tminlp;
90 }
91
93 virtual ~AmplTMINLP();
95
97 const ASL_pfgh* AmplSolverObject() const;
98
99
105 virtual bool get_nlp_info(Ipopt::Index& n, Ipopt::Index& m, Ipopt::Index& nnz_jac_g,
106 Ipopt::Index& nnz_h_lag,
107 Ipopt::TNLP::IndexStyleEnum& index_style);
108
110 virtual bool get_variables_types(Ipopt::Index n, VariableType* var_types);
111
114
118 Ipopt::TNLP::LinearityType* const_types);
119
123
126 virtual bool get_starting_point(Ipopt::Index n, bool init_x, Ipopt::Number* x,
127 bool init_z, Ipopt::Number* z_L, Ipopt::Number* z_U,
128 Ipopt::Index m, bool init_lambda, Ipopt::Number* lambda);
129
131 virtual bool eval_f(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
132 Ipopt::Number& obj_value);
133
136 virtual bool eval_grad_f(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
137 Ipopt::Number* grad_f);
138
140 virtual bool eval_g(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
142
146 virtual bool eval_jac_g(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
147 Ipopt::Index m, Ipopt::Index nele_jac, Ipopt::Index* iRow,
148 Ipopt::Index *jCol, Ipopt::Number* values);
149
153 virtual bool eval_h(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
154 Ipopt::Number obj_factor, Ipopt::Index m, const Ipopt::Number* lambda,
155 bool new_lambda, Ipopt::Index nele_hess, Ipopt::Index* iRow,
156 Ipopt::Index* jCol, Ipopt::Number* values);
157
159 virtual bool eval_gi(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
163 virtual bool eval_grad_gi(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
164 Ipopt::Index i, Ipopt::Index& nele_grad_gi, Ipopt::Index* jCol,
165 Ipopt::Number* values);
167
183 Ipopt::Index n, const Ipopt::Number* x, Ipopt::Number obj_value);
184
186 void write_solution(const std::string & message, const Ipopt::Number *x_sol);
188
190
191
192 virtual const BranchingInfo * branchingInfo() const
193 {
194 return &branch_;
195 }
196
197 virtual const SosInfo * sosConstraints() const
198 {
199 return &sos_;
200 }
201
202 virtual const PerturbInfo* perturbInfo() const
203 {
204 return &perturb_info_;
205 }
206
211 {}
213
214
216 virtual void getLinearPartOfObjective(double * obj);
217
218
221 {
222 return upperBoundingObj_ != -1;
223 }
224
228 Ipopt::Number& obj_value);
229
231 virtual bool get_constraint_convexities(int m, TMINLP::Convexity * constraints_convexities)const
232 {
233 if (constraintsConvexities_ != NULL) {
234 CoinCopyN(constraintsConvexities_, m, constraints_convexities);
235 }
236 else {
237 CoinFillN(constraints_convexities, m, TMINLP::Convex);
238 }
239 return true;
240 }
242 virtual bool get_number_nonconvex(int & number_non_conv, int & number_concave) const
243 {
244 number_non_conv = numberNonConvex_;
245 number_concave = numberSimpleConcave_;
246 return true;
247 }
249 virtual bool get_constraint_convexities(int number_non_conv, MarkedNonConvex * non_convexes) const
250 {
251 assert(number_non_conv == numberNonConvex_);
252 CoinCopyN( nonConvexConstraintsAndRelaxations_, number_non_conv, non_convexes);
253 return true;
254 }
256 virtual bool get_simple_concave_constraints(int number_concave, SimpleConcaveConstraint * simple_concave) const
257 {
258 assert(number_concave == numberSimpleConcave_);
259 CoinCopyN(simpleConcaves_, numberSimpleConcave_, simple_concave);
260 return true;
261 }
262
264 virtual bool hasLinearObjective()
265 {
266 return hasLinearObjective_;
267 }
268
270 virtual const int * get_const_xtra_id() const{
271 return c_extra_id_();
272 }
273 private:
282
284 AmplTMINLP(const AmplTMINLP&);
285
287 void operator=(const AmplTMINLP&);
289
290 std::string appName_;
291
293 int upperBoundingObj_;
295 Ipopt::AmplTNLP* ampl_tnlp_;
298
300 BranchingInfo branch_;
302 SosInfo sos_;
304 PerturbInfo perturb_info_;
307
309 TMINLP::Convexity * constraintsConvexities_;
310
312 vector<int> c_extra_id_;
313
315 int numberNonConvex_;
317 MarkedNonConvex * nonConvexConstraintsAndRelaxations_;
319 int numberSimpleConcave_;
321 SimpleConcaveConstraint * simpleConcaves_;
322
324 bool hasLinearObjective_;
325
327 int writeAmplSolFile_;
328 };
329} // namespace Ipopt
330
331#endif
332
void CoinFillN(T *to, const CoinBigIndex size, const T value)
void CoinCopyN(const T *from, const CoinBigIndex size, T *to)
Ampl MINLP Interface.
virtual void Initialize(const Ipopt::SmartPtr< const Ipopt::Journalist > &jnlst, const Ipopt::SmartPtr< Bonmin::RegisteredOptions > roptions, const Ipopt::SmartPtr< Ipopt::OptionsList > options, char **&argv, Ipopt::AmplSuffixHandler *suffix_handler=NULL, const std::string &appName="bonmin", std::string *nl_file_content=NULL)
virtual bool get_constraints_linearity(Ipopt::Index m, Ipopt::TNLP::LinearityType *const_types)
Returns the constraint linearity.
virtual const BranchingInfo * branchingInfo() const
virtual bool get_number_nonconvex(int &number_non_conv, int &number_concave) const
Get dimension information on nonconvex constraints.
void read_obj_suffixes()
Read suffixes on objective functions for upper bounding.
virtual void fillApplicationOptions(Ipopt::AmplOptionsList *amplOptList)
Additional application specific options.
virtual bool get_constraint_convexities(int m, TMINLP::Convexity *constraints_convexities) const
Get accest to constraint convexities.
virtual bool get_bounds_info(Ipopt::Index n, Ipopt::Number *x_l, Ipopt::Number *x_u, Ipopt::Index m, Ipopt::Number *g_l, Ipopt::Number *g_u)
returns bounds of the nlp.
virtual const int * get_const_xtra_id() const
Access array describing onoff constraint.
virtual ~AmplTMINLP()
destructor
virtual bool get_nlp_info(Ipopt::Index &n, Ipopt::Index &m, Ipopt::Index &nnz_jac_g, Ipopt::Index &nnz_h_lag, Ipopt::TNLP::IndexStyleEnum &index_style)
returns dimensions of the nlp.
virtual bool eval_h(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Number obj_factor, Ipopt::Index m, const Ipopt::Number *lambda, bool new_lambda, Ipopt::Index nele_hess, Ipopt::Index *iRow, Ipopt::Index *jCol, Ipopt::Number *values)
specifies the structure of the hessian of the lagrangian (if values is NULL) and evaluates the values...
virtual bool get_simple_concave_constraints(int number_concave, SimpleConcaveConstraint *simple_concave) const
Fill array containing indices of simple concave constraints.
virtual bool get_starting_point(Ipopt::Index n, bool init_x, Ipopt::Number *x, bool init_z, Ipopt::Number *z_L, Ipopt::Number *z_U, Ipopt::Index m, bool init_lambda, Ipopt::Number *lambda)
provides a starting point for the nlp variables.
virtual bool get_variables_linearity(Ipopt::Index n, Ipopt::TNLP::LinearityType *var_types)
return the variables linearity (linear or not)
void read_sos()
read the sos constraints from ampl suffixes
virtual const PerturbInfo * perturbInfo() const
virtual bool eval_gi(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Index i, Ipopt::Number &gi)
compute the value of a single constraint
void read_priorities()
read the branching priorities from ampl suffixes.
virtual void getLinearPartOfObjective(double *obj)
This methods gives the linear part of the objective function.
virtual void finalize_solution(TMINLP::SolverReturn status, Ipopt::Index n, const Ipopt::Number *x, Ipopt::Number obj_value)
Called after optimizing to return results to ampl.
const ASL_pfgh * AmplSolverObject() const
Return the ampl solver object (ASL*)
void read_onoff()
Read suffixes used to apply perspective in OA to some of the constraints.
virtual bool eval_grad_gi(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Index i, Ipopt::Index &nele_grad_gi, Ipopt::Index *jCol, Ipopt::Number *values)
compute the structure or values of the gradient for one constraint
virtual bool hasLinearObjective()
Say if problem has a linear objective (for OA)
virtual bool eval_grad_f(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Number *grad_f)
evaluates the gradient of the objective for the nlp.
AmplTMINLP(const Ipopt::SmartPtr< const Ipopt::Journalist > &jnlst, const Ipopt::SmartPtr< Bonmin::RegisteredOptions > roptions, const Ipopt::SmartPtr< Ipopt::OptionsList > options, char **&argv, Ipopt::AmplSuffixHandler *suffix_handler=NULL, const std::string &appName="bonmin", std::string *nl_file_content=NULL)
Constructor.
virtual bool eval_upper_bound_f(Ipopt::Index n, const Ipopt::Number *x, Ipopt::Number &obj_value)
This method to returns the value of an alternative objective function for upper bounding (if one has ...
virtual const SosInfo * sosConstraints() const
virtual bool eval_g(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Index m, Ipopt::Number *g)
evaluates the constraint residuals for the nlp.
void read_convexities()
Read suffixes which indicate which constraints are convex.
AmplTMINLP()
Default constructor.
virtual bool get_constraint_convexities(int number_non_conv, MarkedNonConvex *non_convexes) const
Get array describing the constraints marked nonconvex in the model.
virtual bool eval_jac_g(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Index m, Ipopt::Index nele_jac, Ipopt::Index *iRow, Ipopt::Index *jCol, Ipopt::Number *values)
specifies the jacobian structure (if values is NULL) and evaluates the jacobian values (if values is ...
virtual bool eval_f(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Number &obj_value)
evaluates the objective value for the nlp.
virtual bool hasUpperBoundingObjective()
Do we have an alternate objective for upper bounding?
virtual bool get_variables_types(Ipopt::Index n, VariableType *var_types)
returns the vector of variable types
void write_solution(const std::string &message, const Ipopt::Number *x_sol)
Write the solution using ampl's write_sol (called by finalize_solution).
virtual AmplTMINLP * createEmpty()
Class to store perturbation radii for variables in the model.
Base class for all MINLPs that use a standard triplet matrix form and dense vectors.
Definition BonTMINLP.hpp:60
Convexity
Used to mark constraints of the problem.
@ Convex
Constraint is convex.
VariableType
Type of the variables.
SolverReturn
Return statuses of algorithm.
Definition BonTMINLP.hpp:64
A small wrap around std::vector to give easy access to array for interfacing with fortran code.
Definition BonTypes.hpp:9
(C) Copyright International Business Machines Corporation 2007
ipindex Index
ipnumber Number
Stores branching priorities information.
Structure for marked non-convex constraints.
Structure which describes a constraints of the form $f[ y \gt F(x) \f] with a concave function.
Class to store sos constraints for model.
Definition BonTMINLP.hpp:73