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

Go to the documentation of this file.
00001 /* $Id: CouenneOSInterface.cpp 490 2011-01-14 16:07:12Z 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 Eclipse Public License (EPL)
00010  */
00011 
00012 #include "CouenneOSInterface.hpp"
00013 
00014 #include "CouenneProblem.hpp"
00015 
00016 #include "CouenneTypes.hpp"
00017 
00018 #include "CouenneExprSum.hpp"
00019 #include "CouenneExprMul.hpp"
00020 #include "CouenneExprClone.hpp"
00021 #include "CouenneExprGroup.hpp"
00022 
00023 #include "BonTMINLP.hpp"
00024 
00025 //#include "OSInstance.hpp"
00026 //class OSInstance;
00027 
00028 namespace Bonmin {
00029 
00030   class RegisteredOptions;
00031   class Bab;
00032   class TMINLP;
00033 }
00034 
00035 using Ipopt::SmartPtr;
00036 
00037 using namespace Couenne;
00038 
00039 void CouenneOSInterface::registerOptions(Ipopt::SmartPtr<Bonmin::RegisteredOptions> roptions) {
00040         roptions->AddStringOption1("osilfile", "name of an osil file to read the problem instance from", "", "*", "name of osil file");
00041 }
00042 
00043 CouenneOSInterface::~CouenneOSInterface() {
00044         //delete osinstance;
00045         delete problem;
00046 }
00047 
00048 CouenneProblem* CouenneOSInterface::getCouenneProblem() {
00049         if (!osinstance) {
00050                 // create osinstance from osilfile
00051         }
00052 
00053   problem = new CouenneProblem;
00054 
00055   //p -> setProblemName (filename); // sets filename member, for later stats -- TODO
00056 
00057   // number of defined variables (aka common expressions)
00058   //ndefined_ = 0; // Don't know if OS has them: in AMPL they are
00059                  // defined by "var y := f(x)", with f(x) some
00060                  // expression
00061 
00062   int n_var = 0; // to be set to no. of variables
00063 
00064   // nonlinear in both objectives and constraints
00065   for (int i = 0; i < n_var; i++) 
00066     problem -> addVariable (false, problem -> domain ()); // true if integer
00067 
00068   // add objective function(s) 
00069   expression *expr = NULL; 
00070   // fill in the objective
00071   problem -> addObjective (expr, "min");  // "max" for maximization
00072 
00073   // add constraints:
00074 
00075   /*
00076     addEQConstraint  (expr, new exprConst (ub));  // for equality
00077     addLEConstraint  (expr, new exprConst (ub));  // for <=
00078     addGEConstraint  (expr, new exprConst (lb));  // for >=
00079     addRNGConstraint (expr, new exprConst (lb), new exprConst (ub));  // for range
00080   */
00081 
00082   // create room for problem's variables and bounds
00083   CouNumber 
00084     *x  = (CouNumber *) malloc (n_var * sizeof (CouNumber)),
00085     *lb = (CouNumber *) malloc (n_var * sizeof (CouNumber)),
00086     *ub = (CouNumber *) malloc (n_var * sizeof (CouNumber));
00087 
00088   for (int i = n_var; i--;) {
00089     x  [i] =  0.;
00090     lb [i] = -COUENNE_INFINITY;
00091     ub [i] =  COUENNE_INFINITY;
00092   }
00093 
00094   // create domain point for Couenne
00095   problem -> domain () -> push (n_var, x, lb, ub);
00096   free (x); free (lb); free (ub);
00097 
00098   // suggested:
00099   // problem -> domain () -> push (n_var + problem -> nDefVars(), x, lb, ub, false);
00100   // //free (x); free (lb); free (ub);
00101   // saves three allocations (default last parameter is true, which copies x,l,b)
00102 
00103   // fill in lower and upper bounds ///////////////////////////////////////////////////////////////
00104 
00105   for (register int i=n_var; i--;) {
00106     problem -> Lb (i) = - COUENNE_INFINITY;
00107     problem -> Ub (i) =   COUENNE_INFINITY;
00108     problem -> X  (i) = 0;
00109   }
00110 
00111   // initial x ////////////////////////////////////////////////////////////////////
00112 
00113   return problem;
00114 }
00115 
00116 Ipopt::SmartPtr<Bonmin::TMINLP> CouenneOSInterface::getTMINLP() {
00117         return tminlp;
00118 }
00119 
00120 bool CouenneOSInterface::writeSolution(Bonmin::Bab& bab) {
00121 
00122         return false;
00123 }

Generated on Thu Sep 22 03:05:59 2011 by  doxygen 1.4.7