Bonmin 1.8.9
Loading...
Searching...
No Matches
BonTMINLP.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// Pierre Bonami, Carnegie Mellon University,
9// Carl D. Laird, Carnegie Mellon University,
10// Andreas Waechter, International Business Machines Corporation
11//
12// Date : 12/01/2004
13
14#ifndef __TMINLP_HPP__
15#define __TMINLP_HPP__
16
17#include "IpUtils.hpp"
18#include "IpReferenced.hpp"
19#include "IpException.hpp"
20#include "IpAlgTypes.hpp"
21#include "CoinPackedMatrix.hpp"
22#include "OsiCuts.hpp"
23#include "IpTNLP.hpp"
24#include "CoinError.hpp"
26
27namespace Bonmin
28{
29 DECLARE_STD_EXCEPTION(TMINLP_INVALID);
30 DECLARE_STD_EXCEPTION(TMINLP_INVALID_VARIABLE_BOUNDS);
31
60 {
61 public:
62 friend class TMINLP2TNLP;
72 struct SosInfo
73 {
75 int num;
77 char * types;
80
84 int numNz;
86 int * starts;
88 int * indices;
90 double * weights;
95 SosInfo(const SosInfo & source);
96
97
100 {
102 }
103
104
107
108 };
109
112 {
114 int size;
120 double * upPsCosts;
122 double * downPsCosts;
124 size(0),
125 priorities(NULL),
127 upPsCosts(NULL),
128 downPsCosts(NULL)
129 {}
140 {
141 if (priorities != NULL) delete [] priorities;
142 priorities = NULL;
143 if (branchingDirections != NULL) delete [] branchingDirections;
144 branchingDirections = NULL;
145 if (upPsCosts != NULL) delete [] upPsCosts;
146 upPsCosts = NULL;
147 if (downPsCosts != NULL) delete [] downPsCosts;
148 downPsCosts = NULL;
149 }
151 {
153 }
154 };
155
158 {
159 public:
162 perturb_radius_(NULL)
163 {}
164
167 {
168 delete [] perturb_radius_;
169 }
170
172 void SetPerturbationArray(Ipopt::Index numvars, const double* perturb_radius);
173
176 const double* GetPerturbationArray() const {
177 return perturb_radius_;
178 }
179
180 private:
182 PerturbInfo(const PerturbInfo & source);
183
188 double* perturb_radius_;
189 };
190
198
202
204 virtual ~TMINLP();
206
212 virtual bool get_nlp_info(Ipopt::Index& n, Ipopt::Index& m, Ipopt::Index& nnz_jac_g,
213 Ipopt::Index& nnz_h_lag, Ipopt::TNLP::IndexStyleEnum& index_style)=0;
214
222 virtual bool get_scaling_parameters(Ipopt::Number& obj_scaling,
223 bool& use_x_scaling, Ipopt::Index n,
224 Ipopt::Number* x_scaling,
225 bool& use_g_scaling, Ipopt::Index m,
226 Ipopt::Number* g_scaling)
227 {
228 return false;
229 }
230
231
234 virtual bool get_variables_types(Ipopt::Index n, VariableType* var_types)=0;
235
239 Ipopt::TNLP::LinearityType* var_types) = 0;
240
244 Ipopt::TNLP::LinearityType* const_types) = 0;
245
256
264 virtual bool get_starting_point(Ipopt::Index n, bool init_x, Ipopt::Number* x,
265 bool init_z, Ipopt::Number* z_L, Ipopt::Number* z_U,
266 Ipopt::Index m, bool init_lambda,
267 Ipopt::Number* lambda)=0;
268
270 virtual bool eval_f(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
271 Ipopt::Number& obj_value)=0;
272
275 virtual bool eval_grad_f(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
276 Ipopt::Number* grad_f)=0;
277
279 virtual bool eval_g(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
281
287 virtual bool eval_jac_g(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
288 Ipopt::Index m, Ipopt::Index nele_jac, Ipopt::Index* iRow,
289 Ipopt::Index *jCol, Ipopt::Number* values)=0;
290
298 virtual bool eval_h(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
299 Ipopt::Number obj_factor, Ipopt::Index m, const Ipopt::Number* lambda,
300 bool new_lambda, Ipopt::Index nele_hess,
301 Ipopt::Index* iRow, Ipopt::Index* jCol, Ipopt::Number* values)=0;
304 virtual bool eval_gi(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
306 {
307 std::cerr << "Method eval_gi not overloaded from TMINLP\n";
308 throw -1;
309 }
313 virtual bool eval_grad_gi(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
314 Ipopt::Index i, Ipopt::Index& nele_grad_gi, Ipopt::Index* jCol,
315 Ipopt::Number* values)
316 {
317 std::cerr << "Method eval_grad_gi not overloaded from TMINLP\n";
318 throw -1;
319 }
321
326 Ipopt::Index n, const Ipopt::Number* x, Ipopt::Number obj_value) =0;
328
329 virtual const BranchingInfo * branchingInfo() const = 0;
330
331 virtual const SosInfo * sosConstraints() const = 0;
332
333 virtual const PerturbInfo* perturbInfo() const
334 {
335 return NULL;
336 }
337
340 return false;}
341
345 Ipopt::Number& obj_value){ return false; }
346
352
377 virtual bool get_constraint_convexities(int m, TMINLP::Convexity * constraints_convexities)const {
378 CoinFillN(constraints_convexities, m, TMINLP::Convex);
379 return true;}
381 virtual bool get_number_nonconvex(int & number_non_conv, int & number_concave) const{
382 number_non_conv = 0;
383 number_concave = 0;
384 return true;}
386 virtual bool get_constraint_convexities(int number_non_conv, MarkedNonConvex * non_convs) const{
387 assert(number_non_conv == 0);
388 return true;}
390 virtual bool get_simple_concave_constraints(int number_concave, SimpleConcaveConstraint * simple_concave) const{
391 assert(number_concave == 0);
392 return true;}
393
395 virtual bool hasLinearObjective(){return false;}
396
399
401 virtual const int * get_const_xtra_id() const{
402 return NULL;
403 }
404 protected:
408 TMINLP(const TMINLP&);
409
411 void operator=(const TMINLP&);
413
414 private:
415 };
416
417} // namespace Ipopt
418
419#endif
420
T * CoinCopyOfArray(const T *array, const CoinBigIndex size)
void CoinFillN(T *to, const CoinBigIndex size, const T value)
This is an adapter class that converts a TMINLP to a TNLP to be solved by Ipopt.
Class to store perturbation radii for variables in the model.
const double * GetPerturbationArray() const
Method for getting the array for the perturbation radii in order to use the values.
void SetPerturbationArray(Ipopt::Index numvars, const double *perturb_radius)
Method for setting the perturbation radii.
PerturbInfo()
default constructor.
Base class for all MINLPs that use a standard triplet matrix form and dense vectors.
Definition BonTMINLP.hpp:60
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 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 operator=(const TMINLP &)
Overloaded Equals Operator.
virtual bool get_constraint_convexities(int number_non_conv, MarkedNonConvex *non_convs) const
Get array describing the constraints marked nonconvex in the model.
Convexity
Used to mark constraints of the problem.
@ NonConvex
Constraint is non-convex.
@ SimpleConcave
Constraint is concave of the simple form y >= F(x).
@ Convex
Constraint is convex.
virtual const SosInfo * sosConstraints() const =0
VariableType
Type of the variables.
virtual bool get_constraint_convexities(int m, TMINLP::Convexity *constraints_convexities) const
Get accest to constraint convexities.
virtual bool hasLinearObjective()
Say if problem has a linear objective (for OA)
virtual bool hasUpperBoundingObjective()
Say if has a specific function to compute upper bounds.
virtual void finalize_solution(TMINLP::SolverReturn status, Ipopt::Index n, const Ipopt::Number *x, Ipopt::Number obj_value)=0
This method is called when the algorithm is complete so the TNLP can store/write the solution.
virtual bool get_variables_linearity(Ipopt::Index n, Ipopt::TNLP::LinearityType *var_types)=0
overload this method to provide the variables linearity.
virtual bool get_constraints_linearity(Ipopt::Index m, Ipopt::TNLP::LinearityType *const_types)=0
overload this method to provide the constraint linearity.
virtual bool eval_g(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Index m, Ipopt::Number *g)=0
overload this method to return the vector of constraint values
virtual bool eval_upper_bound_f(Ipopt::Index n, const Ipopt::Number *x, Ipopt::Number &obj_value)
overload this method to return the value of an alternative objective function for upper bounding (to ...
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)=0
overload this method to return the information about the bound on the variables and constraints.
virtual bool get_scaling_parameters(Ipopt::Number &obj_scaling, bool &use_x_scaling, Ipopt::Index n, Ipopt::Number *x_scaling, bool &use_g_scaling, Ipopt::Index m, Ipopt::Number *g_scaling)
overload this method to return scaling parameters.
virtual ~TMINLP()
Default destructor.
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)=0
overload this method to return the jacobian of the constraints.
virtual const BranchingInfo * branchingInfo() const =0
virtual bool get_number_nonconvex(int &number_non_conv, int &number_concave) const
Get dimension information on nonconvex constraints.
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)=0
overload this method to return the hessian of the lagrangian.
virtual bool get_variables_types(Ipopt::Index n, VariableType *var_types)=0
overload this method to provide the variables types.
bool hasGeneralInteger()
Say if problem has general integer variables.
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)=0
overload this method to return the starting point.
virtual const int * get_const_xtra_id() const
Access array describing constraint to which perspectives should be applied.
virtual bool get_simple_concave_constraints(int number_concave, SimpleConcaveConstraint *simple_concave) const
Fill array containing indices of simple concave constraints.
virtual bool eval_grad_f(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Number *grad_f)=0
overload this method to return the vector of the gradient of the objective w.r.t.
TMINLP(const TMINLP &)
Copy constructor.
virtual bool eval_f(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Number &obj_value)=0
overload this method to return the value of the objective function
SolverReturn
Return statuses of algorithm.
Definition BonTMINLP.hpp:64
virtual const PerturbInfo * perturbInfo() const
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)=0
overload this method to return the number of variables and constraints, and the number of non-zeros i...
(C) Copyright International Business Machines Corporation 2007
DECLARE_STD_EXCEPTION(RESTORATION_CONVERGED_TO_FEASIBLE_POINT)
ipindex Index
ipnumber Number
Stores branching priorities information.
int size
number of variables
int * branchingDirections
User set preferered branching direction.
double * downPsCosts
User set down pseudo costs.
int * priorities
User set priorities on variables.
BranchingInfo(const BranchingInfo &other)
double * upPsCosts
User set up pseudo costs.
Structure for marked non-convex constraints.
MarkedNonConvex()
Default constructor gives "safe" values.
int cIdx
Index of the nonconvex constraint.
int cRelaxIdx
Index of constraint relaxing the nonconvex constraint.
Structure which describes a constraints of the form $f[ y \gt F(x) \f] with a concave function.
int yIdx
Index of the variable y.
int cIdx
Index of the constraint.
SimpleConcaveConstraint()
Default constructor gives "safe" values.
int xIdx
Index of the variable x.
Class to store sos constraints for model.
Definition BonTMINLP.hpp:73
int numNz
Total number of non zeroes in SOS constraints.
Definition BonTMINLP.hpp:84
int num
Number of SOS constraints.
Definition BonTMINLP.hpp:75
char * types
Type of sos.
Definition BonTMINLP.hpp:77
int * priorities
priorities of sos constraints.
Definition BonTMINLP.hpp:79
SosInfo(const SosInfo &source)
Copy constructor.
int * indices
indices of elements belonging to the SOS.
Definition BonTMINLP.hpp:88
double * weights
weights of the elements of the SOS.
Definition BonTMINLP.hpp:90
SosInfo()
default constructor.
int * starts
For 0 <= i < nums, start[i] gives the indice of indices and weights arrays at which the description o...
Definition BonTMINLP.hpp:86
void gutsOfDestructor()
Reset information.