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
21CouenneProblem *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 *)