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

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

Generated on Tue Mar 30 03:04:38 2010 by  doxygen 1.4.7