/home/coin/SVN-release/OS-2.4.2/OS/src/OSSolverInterfaces/CouenneOSInterface.cpp

Go to the documentation of this file.
00001 /*
00002  * Name:    CouenneOS.cpp
00003  * Authors:
00004  *
00005  * Purpose: Creates a CouenneProblem object from an OSil instance
00006  *
00007  * (C) Carnegie-Mellon University, 2009.
00008  * This file is licensed under the Common Public License (CPL)
00009  */
00010 
00011 #include "CouenneProblem.hpp"
00012 
00013 #include "CouenneTypes.hpp"
00014 
00015 #include "exprSum.hpp"
00016 #include "exprMul.hpp"
00017 #include "exprClone.hpp"
00018 #include "exprGroup.hpp"
00019 
00020 
00021 CouenneProblem *readProblem (Bonmin::BabSetupBase *base = NULL,
00022                              JnlstPtr jnlst = NULL
00023                                      /* OSil pointer? */)
00024 {
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     {
00063         x  [i] =  0.;
00064         lb [i] = -COUENNE_INFINITY;
00065         ub [i] =  COUENNE_INFINITY;
00066     }
00067 
00068     // create domain point for Couenne
00069     p -> domain () -> push (n_var, x, lb, ub);
00070 
00071     free (x);
00072     free (lb);
00073     free (ub);
00074 
00075     // fill in lower and upper bounds ///////////////////////////////////////////////////////////////
00076 
00077     for (register int i=n_var; i--;)
00078     {
00079         p -> Lb (i) = - COUENNE_INFINITY;
00080         p -> Ub (i) =   COUENNE_INFINITY;
00081         p -> X  (i) = 0;
00082     }
00083 
00084     // initial x ////////////////////////////////////////////////////////////////////
00085 
00086     return p;
00087 }

Generated on Wed Nov 30 03:04:06 2011 by  doxygen 1.4.7