/home/coin/SVN-release/OS-2.0.1/Couenne/src/main/CouenneOSInterface.cpp

Go to the documentation of this file.
00001 /* $Id: CouenneOSInterface.cpp 159 2009-06-24 14:54:00Z pbelotti $ */
00002 /*
00003  * Name:    CouenneOS.cpp
00004  * Authors: 
00005  *          
00006  * Purpose: Creates a CouenneProblem object from an OSil instance
00007  *
00008  * (C) Carnegie-Mellon University, 2009. 
00009  * This file is licensed under the Common Public License (CPL)
00010  */
00011 
00012 #include "CouenneProblem.hpp"
00013 
00014 #include "CouenneTypes.hpp"
00015 
00016 #include "exprSum.hpp"
00017 #include "exprMul.hpp"
00018 #include "exprClone.hpp"
00019 #include "exprGroup.hpp"
00020 
00021 
00022 CouenneProblem *readProblem (Bonmin::BabSetupBase *base = NULL,
00023                              JnlstPtr jnlst = NULL
00024                              /* OSil pointer? */) {
00025 
00026   CouenneProblem *p = new CouenneProblem (NULL, base, jnlst);
00027 
00028   //p -> setProblemName (filename); // sets filename member, for later stats -- TODO
00029 
00030   // number of defined variables (aka common expressions)
00031   //ndefined_ = 0; // Don't know if OS has them: in AMPL they are
00032                  // defined by "var y := f(x)", with f(x) some
00033                  // expression
00034 
00035   int n_var = 0; // to be set to no. of variables
00036 
00037   // nonlinear in both objectives and constraints
00038   for (int i = 0; i < n_var; i++) 
00039     p -> addVariable (false, p -> domain ()); // true if integer
00040 
00041   // add objective function(s) 
00042   expression *expr = NULL; 
00043   // fill in the objective
00044   p -> addObjective (expr, "min");  // "max" for maximization
00045 
00046   // add constraints:
00047 
00048   /*
00049     addEQConstraint  (expr, new exprConst (ub));  // for equality
00050     addLEConstraint  (expr, new exprConst (ub));  // for <=
00051     addGEConstraint  (expr, new exprConst (lb));  // for >=
00052     addRNGConstraint (expr, new exprConst (lb), new exprConst (ub));  // for range
00053   */
00054 
00055   // create room for problem's variables and bounds
00056   CouNumber 
00057     *x  = (CouNumber *) malloc (n_var * sizeof (CouNumber)),
00058     *lb = (CouNumber *) malloc (n_var * sizeof (CouNumber)),
00059     *ub = (CouNumber *) malloc (n_var * sizeof (CouNumber));
00060 
00061   for (int i = n_var; i--;) {
00062     x  [i] =  0.;
00063     lb [i] = -COUENNE_INFINITY;
00064     ub [i] =  COUENNE_INFINITY;
00065   }
00066 
00067   // create domain point for Couenne
00068   p -> domain () -> push (n_var, x, lb, ub);
00069 
00070   free (x); free (lb); free (ub);
00071 
00072   // fill in lower and upper bounds ///////////////////////////////////////////////////////////////
00073 
00074   for (register int i=n_var; i--;) {
00075     p -> Lb (i) = - COUENNE_INFINITY;
00076     p -> Ub (i) =   COUENNE_INFINITY;
00077     p -> X  (i) = 0;
00078   }
00079 
00080   // initial x ////////////////////////////////////////////////////////////////////
00081 
00082   return p;
00083 }

Generated on Thu Oct 8 03:02:57 2009 by  doxygen 1.4.7