My Project
CouenneOSInterface.cpp
Go to the documentation of this file.
1 /*
2  * Name: CouenneOS.cpp
3  * Authors:
4  *
5  * Purpose: Creates a CouenneProblem object from an OSil instance
6  *
7  * (C) Carnegie-Mellon University, 2009.
8  * This file is licensed under the Common Public License (CPL)
9  */
10 
11 #include "CouenneProblem.hpp"
12 
13 #include "CouenneTypes.hpp"
14 
15 #include "exprSum.hpp"
16 #include "exprMul.hpp"
17 #include "exprClone.hpp"
18 #include "exprGroup.hpp"
19 
20 
21 CouenneProblem *readProblem (Bonmin::BabSetupBase *base = NULL,
22  JnlstPtr jnlst = NULL
23  /* OSil pointer? */)
24 {
25 
26  CouenneProblem *p = new CouenneProblem (NULL, base, jnlst);
27 
28  //p -> setProblemName (filename); // sets filename member, for later stats -- TODO
29 
30  // number of defined variables (aka common expressions)
31  //ndefined_ = 0; // Don't know if OS has them: in AMPL they are
32  // defined by "var y := f(x)", with f(x) some
33  // expression
34 
35  int n_var = 0; // to be set to no. of variables
36 
37  // nonlinear in both objectives and constraints
38  for (int i = 0; i < n_var; i++)
39  p -> addVariable (false, p -> domain ()); // true if integer
40 
41  // add objective function(s)
42  expression *expr = NULL;
43  // fill in the objective
44  p -> addObjective (expr, "min"); // "max" for maximization
45 
46  // add constraints:
47 
48  /*
49  addEQConstraint (expr, new exprConst (ub)); // for equality
50  addLEConstraint (expr, new exprConst (ub)); // for <=
51  addGEConstraint (expr, new exprConst (lb)); // for >=
52  addRNGConstraint (expr, new exprConst (lb), new exprConst (ub)); // for range
53  */
54 
55  // create room for problem's variables and bounds
56  CouNumber
57  *x = (CouNumber *) malloc (n_var * sizeof (CouNumber)),
58  *lb = (CouNumber *) malloc (n_var * sizeof (CouNumber)),
59  *ub = (CouNumber *) malloc (n_var * sizeof (CouNumber));
60 
61  for (int i = n_var; i--;)
62  {
63  x [i] = 0.;
64  lb [i] = -COUENNE_INFINITY;
65  ub [i] = COUENNE_INFINITY;
66  }
67 
68  // create domain point for Couenne
69  p -> domain () -> push (n_var, x, lb, ub);
70 
71  free (x);
72  free (lb);
73  free (ub);
74 
75  // fill in lower and upper bounds ///////////////////////////////////////////////////////////////
76 
77  for (register int i=n_var; i--;)
78  {
79  p -> Lb (i) = - COUENNE_INFINITY;
80  p -> Ub (i) = COUENNE_INFINITY;
81  p -> X (i) = 0;
82  }
83 
84  // initial x ////////////////////////////////////////////////////////////////////
85 
86  return p;
87 }
CouenneProblem * readProblem(Bonmin::BabSetupBase *base=NULL, JnlstPtr jnlst=NULL)
void * malloc(YYSIZE_T)
void free(void *)