summaryrefslogtreecommitdiff
path: root/build/Bonmin/include/coin/BonTMINLP.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'build/Bonmin/include/coin/BonTMINLP.hpp')
-rw-r--r--build/Bonmin/include/coin/BonTMINLP.hpp420
1 files changed, 0 insertions, 420 deletions
diff --git a/build/Bonmin/include/coin/BonTMINLP.hpp b/build/Bonmin/include/coin/BonTMINLP.hpp
deleted file mode 100644
index b6d21e1..0000000
--- a/build/Bonmin/include/coin/BonTMINLP.hpp
+++ /dev/null
@@ -1,420 +0,0 @@
-// (C) Copyright International Business Machines Corporation and
-// Carnegie Mellon University 2004, 2007
-//
-// All Rights Reserved.
-// This code is published under the Eclipse Public License.
-//
-// Authors :
-// Pierre Bonami, Carnegie Mellon University,
-// Carl D. Laird, Carnegie Mellon University,
-// Andreas Waechter, International Business Machines Corporation
-//
-// Date : 12/01/2004
-
-#ifndef __TMINLP_HPP__
-#define __TMINLP_HPP__
-
-#include "IpUtils.hpp"
-#include "IpReferenced.hpp"
-#include "IpException.hpp"
-#include "IpAlgTypes.hpp"
-#include "CoinPackedMatrix.hpp"
-#include "OsiCuts.hpp"
-#include "IpTNLP.hpp"
-#include "CoinError.hpp"
-#include "CoinHelperFunctions.hpp"
-
-namespace Bonmin
-{
- DECLARE_STD_EXCEPTION(TMINLP_INVALID);
- DECLARE_STD_EXCEPTION(TMINLP_INVALID_VARIABLE_BOUNDS);
-
- /** Base class for all MINLPs that use a standard triplet matrix form
- * and dense vectors.
- * The class TMINLP2TNLP allows the caller to produce a viable TNLP
- * from the MINLP (by relaxing binary and/or integers, or by
- * fixing them), which can then be solved by Ipopt.
- *
- * This interface presents the problem form:
- * \f[
- * \begin{array}{rl}
- * &min f(x)\\
- *
- * \mbox{s.t.}&\\
- * & g^L <= g(x) <= g^U\\
- *
- * & x^L <= x <= x^U\\
- * \end{array}
- * \f]
- * Where each x_i is either a continuous, binary, or integer variable.
- * If x_i is binary, the bounds [xL,xU] are assumed to be [0,1].
- * In order to specify an equality constraint, set gL_i = gU_i =
- * rhs. The value that indicates "infinity" for the bounds
- * (i.e. the variable or constraint has no lower bound (-infinity)
- * or upper bound (+infinity)) is set through the option
- * nlp_lower_bound_inf and nlp_upper_bound_inf. To indicate that a
- * variable has no upper or lower bound, set the bound to
- * -ipopt_inf or +ipopt_inf respectively
- */
- class TMINLP : public Ipopt::ReferencedObject
- {
- public:
- friend class TMINLP2TNLP;
- /** Return statuses of algorithm.*/
- enum SolverReturn{
- SUCCESS,
- INFEASIBLE,
- CONTINUOUS_UNBOUNDED,
- LIMIT_EXCEEDED,
- USER_INTERRUPT,
- MINLP_ERROR};
- /** Class to store sos constraints for model */
- struct SosInfo
- {
- /** Number of SOS constraints.*/
- int num;
- /** Type of sos. At present Only type '1' SOS are supported by Cbc*/
- char * types;
- /** priorities of sos constraints.*/
- int * priorities;
-
- /** \name Sparse storage of the elements of the SOS constraints.*/
- /** @{ */
- /** Total number of non zeroes in SOS constraints.*/
- int numNz;
- /** For 0 <= i < nums, start[i] gives the indice of indices and weights arrays at which the description of constraints i begins..*/
- int * starts;
- /** indices of elements belonging to the SOS.*/
- int * indices;
- /** weights of the elements of the SOS.*/
- double * weights;
- /** @} */
- /** default constructor. */
- SosInfo();
- /** Copy constructor.*/
- SosInfo(const SosInfo & source);
-
-
- /** destructor*/
- ~SosInfo()
- {
- gutsOfDestructor();
- }
-
-
- /** Reset information */
- void gutsOfDestructor();
-
- };
-
- /** Stores branching priorities information. */
- struct BranchingInfo
- {
- /**number of variables*/
- int size;
- /** User set priorities on variables. */
- int * priorities;
- /** User set preferered branching direction. */
- int * branchingDirections;
- /** User set up pseudo costs.*/
- double * upPsCosts;
- /** User set down pseudo costs.*/
- double * downPsCosts;
- BranchingInfo():
- size(0),
- priorities(NULL),
- branchingDirections(NULL),
- upPsCosts(NULL),
- downPsCosts(NULL)
- {}
- BranchingInfo(const BranchingInfo &other)
- {
- gutsOfDestructor();
- size = other.size;
- priorities = CoinCopyOfArray(other.priorities, size);
- branchingDirections = CoinCopyOfArray(other.branchingDirections, size);
- upPsCosts = CoinCopyOfArray(other.upPsCosts, size);
- downPsCosts = CoinCopyOfArray(other.downPsCosts, size);
- }
- void gutsOfDestructor()
- {
- if (priorities != NULL) delete [] priorities;
- priorities = NULL;
- if (branchingDirections != NULL) delete [] branchingDirections;
- branchingDirections = NULL;
- if (upPsCosts != NULL) delete [] upPsCosts;
- upPsCosts = NULL;
- if (downPsCosts != NULL) delete [] downPsCosts;
- downPsCosts = NULL;
- }
- ~BranchingInfo()
- {
- gutsOfDestructor();
- }
- };
-
- /** Class to store perturbation radii for variables in the model */
- class PerturbInfo
- {
- public:
- /** default constructor. */
- PerturbInfo() :
- perturb_radius_(NULL)
- {}
-
- /** destructor*/
- ~PerturbInfo()
- {
- delete [] perturb_radius_;
- }
-
- /** Method for setting the perturbation radii. */
- void SetPerturbationArray(Ipopt::Index numvars, const double* perturb_radius);
-
- /** Method for getting the array for the perturbation radii in
- * order to use the values. */
- const double* GetPerturbationArray() const {
- return perturb_radius_;
- }
-
- private:
- /** Copy constructor.*/
- PerturbInfo(const PerturbInfo & source);
-
- /** Perturbation radii for all variables. A negative value
- * means that the radius has not been given. If the pointer is
- * NULL, then no variables have been assigned a perturbation
- * radius. */
- double* perturb_radius_;
- };
-
- /** Type of the variables.*/
- enum VariableType
- {
- CONTINUOUS,
- BINARY,
- INTEGER
- };
-
- /**@name Constructors/Destructors */
- //@{
- TMINLP();
-
- /** Default destructor */
- virtual ~TMINLP();
- //@}
-
- /**@name methods to gather information about the MINLP */
- //@{
- /** overload this method to return the number of variables
- * and constraints, and the number of non-zeros in the jacobian and
- * the hessian. */
- 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 scaling parameters. This is
- * only called if the options are set to retrieve user scaling.
- * There, use_x_scaling (or use_g_scaling) should get set to true
- * only if the variables (or constraints) are to be scaled. This
- * method should return true only if the scaling parameters could
- * be provided.
- */
- 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)
- {
- return false;
- }
-
-
- /** overload this method to provide the variables types. The var_types
- * array will be allocated with length n. */
- virtual bool get_variables_types(Ipopt::Index n, VariableType* var_types)=0;
-
- /** overload this method to provide the variables linearity.
- * array should be allocated with length at least n.*/
- virtual bool get_variables_linearity(Ipopt::Index n,
- Ipopt::TNLP::LinearityType* var_types) = 0;
-
- /** overload this method to provide the constraint linearity.
- * array should be allocated with length at least m.*/
- virtual bool get_constraints_linearity(Ipopt::Index m,
- Ipopt::TNLP::LinearityType* const_types) = 0;
-
- /** overload this method to return the information about the bound
- * on the variables and constraints. The value that indicates
- * that a bound does not exist is specified in the parameters
- * nlp_lower_bound_inf and nlp_upper_bound_inf. By default,
- * nlp_lower_bound_inf is -1e19 and nlp_upper_bound_inf is
- * 1e19.
- * An exception will be thrown if x_l and x_u are not 0,1 for binary variables
- */
- 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 starting point. The bools
- * init_x and init_lambda are both inputs and outputs. As inputs,
- * they indicate whether or not the algorithm wants you to
- * initialize x and lambda respectively. If, for some reason, the
- * algorithm wants you to initialize these and you cannot, set
- * the respective bool to false.
- */
- 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 value of the objective function */
- 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 vector of the gradient of
- * the objective w.r.t. x */
- 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 constraint values */
- 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 jacobian of the
- * constraints. The vectors iRow and jCol only need to be set
- * once. The first call is used to set the structure only (iRow
- * and jCol will be non-NULL, and values will be NULL) For
- * subsequent calls, iRow and jCol will be NULL. */
- 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 hessian of the
- * lagrangian. The vectors iRow and jCol only need to be set once
- * (during the first call). The first call is used to set the
- * structure only (iRow and jCol will be non-NULL, and values
- * will be NULL) For subsequent calls, iRow and jCol will be
- * NULL. This matrix is symmetric - specify the lower diagonal
- * only */
- 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;
- /** Compute the value of a single constraint. The constraint
- * number is i (starting counting from 0. */
- virtual bool eval_gi(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
- Ipopt::Index i, Ipopt::Number& gi)
- {
- std::cerr << "Method eval_gi not overloaded from TMINLP\n";
- throw -1;
- }
- /** Compute the structure or values of the gradient for one
- * constraint. The constraint * number is i (starting counting
- * from 0. Other things are like with eval_jac_g. */
- 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)
- {
- std::cerr << "Method eval_grad_gi not overloaded from TMINLP\n";
- throw -1;
- }
- //@}
-
- /** @name Solution Methods */
- //@{
- /** This method is called when the algorithm is complete so the TNLP can store/write the solution */
- virtual void finalize_solution(TMINLP::SolverReturn status,
- Ipopt::Index n, const Ipopt::Number* x, Ipopt::Number obj_value) =0;
- //@}
-
- virtual const BranchingInfo * branchingInfo() const = 0;
-
- virtual const SosInfo * sosConstraints() const = 0;
-
- virtual const PerturbInfo* perturbInfo() const
- {
- return NULL;
- }
-
- /** Say if has a specific function to compute upper bounds*/
- virtual bool hasUpperBoundingObjective(){
- return false;}
-
- /** overload this method to return the value of an alternative objective function for
- upper bounding (to use it hasUpperBoundingObjective should return true).*/
- virtual bool eval_upper_bound_f(Ipopt::Index n, const Ipopt::Number* x,
- Ipopt::Number& obj_value){ return false; }
-
- /** Used to mark constraints of the problem.*/
- enum Convexity {
- Convex/** Constraint is convex.*/,
- NonConvex/** Constraint is non-convex.*/,
- SimpleConcave/** Constraint is concave of the simple form y >= F(x).*/};
-
- /** Structure for marked non-convex constraints. With possibility of
- storing index of a constraint relaxing the non-convex constraint*/
- struct MarkedNonConvex {
- /** Default constructor gives "safe" values.*/
- MarkedNonConvex():
- cIdx(-1), cRelaxIdx(-1){}
- /** Index of the nonconvex constraint.*/
- int cIdx;
- /** Index of constraint relaxing the nonconvex constraint.*/
- int cRelaxIdx;};
- /** Structure which describes a constraints of the form
- $f[ y \gt F(x) \f]
- with \f$ F(x) \f$ a concave function.*/
- struct SimpleConcaveConstraint{
- /** Default constructor gives "safe" values.*/
- SimpleConcaveConstraint():
- xIdx(-1), yIdx(-1), cIdx(-1){}
- /** Index of the variable x.*/
- int xIdx;
- /** Index of the variable y.*/
- int yIdx;
- /** Index of the constraint.*/
- int cIdx;};
- /** Get accest to constraint convexities.*/
- virtual bool get_constraint_convexities(int m, TMINLP::Convexity * constraints_convexities)const {
- CoinFillN(constraints_convexities, m, TMINLP::Convex);
- return true;}
- /** Get dimension information on nonconvex constraints.*/
- virtual bool get_number_nonconvex(int & number_non_conv, int & number_concave) const{
- number_non_conv = 0;
- number_concave = 0;
- return true;}
- /** Get array describing the constraints marked nonconvex in the model.*/
- virtual bool get_constraint_convexities(int number_non_conv, MarkedNonConvex * non_convs) const{
- assert(number_non_conv == 0);
- return true;}
- /** Fill array containing indices of simple concave constraints.*/
- virtual bool get_simple_concave_constraints(int number_concave, SimpleConcaveConstraint * simple_concave) const{
- assert(number_concave == 0);
- return true;}
-
- /** Say if problem has a linear objective (for OA) */
- virtual bool hasLinearObjective(){return false;}
-
- /** Say if problem has general integer variables.*/
- bool hasGeneralInteger();
-
- /** Access array describing constraint to which perspectives should be applied.*/
- virtual const int * get_const_xtra_id() const{
- return NULL;
- }
- protected:
- /** Copy constructor */
- //@{
- /** Copy Constructor */
- TMINLP(const TMINLP&);
-
- /** Overloaded Equals Operator */
- void operator=(const TMINLP&);
- //@}
-
- private:
- };
-
-} // namespace Ipopt
-
-#endif
-