[Osi] OsiCpx writeLp not working

Matthew Galati magh at lehigh.edu
Mon Jun 2 13:30:40 EDT 2008


There seems to be a bigger problem at hand here.

I start out with 5 columns in an OsiCpx object.

If I use the base class Osi::getObjValue( ) after adding a column, I get 
the correct number of columns, but junk back from getObjCoefficients( ) 
and getColSolution( )

MVG inside OsiSolverInterface nc = 6
OsiCpxSolverInterface::getObjCoefficients()
OsiCpxSolverInterface::getColSolution()
OsiCpxSolverInterface::getDblParam(4)
objOffset = 0
MVG getObjValue i:0, retVal: -0, objCo: -15 colSol: 0
MVG getObjValue i:1, retVal: -2.44186, objCo: -15 colSol: 0.162791
MVG getObjValue i:2, retVal: -10.1163, objCo: -15 colSol: 0.511628
MVG getObjValue i:3, retVal: -12.5581, objCo: -15 colSol: 0.162791
MVG getObjValue i:4, retVal: -12.5581, objCo: -15 colSol: 0
MVG getObjValue i:5, retVal: -12.5581, objCo: 1.56391e-311 colSol: 
7.20064e-313
OsiCpxSolverInterface::getNumCols()
MVG inside OsiSolverInterface nc = 6


> If I addCols to my OsiCpx object -- it correctly keeps the information 
> in memory, however when I call writeLp it calls the native Osi writer 
> and does not seem to have my new columns - it only has the original 
> problem. I assume this once again has something to do with cached 
> information.
>
> One quick fix suggestion -- use Cpx's native LP writer just like we do 
> for MPS. This is suggested in ticket 61.
>
> void OsiCpxSolverInterface::writeLp(const char *filename,
>                                     const char *extension,
>                                     double epsilon,
>                                     int numberAcross,
>                                     int decimals,
>                                     double objSense,
>                                     bool useRowNames) const
> {
>   debugMessage("OsiCpxSolverInterface::writeLp(%s, %s, %g)\n", filename, 
> extens\
> ion, objSense);
>
>   // *FIXME* : this will not output ctype information to the MPS file
>   char filetype[4] = "LP";
>   std::string f(filename);
>   std::string e(extension);
>   std::string fullname = f + "." + e;
>   int err = CPXwriteprob( env_, getMutableLpPtr(), const_cast<char*>( 
> fullname.\
> c_str() ), filetype );
>   checkCPXerror( err, "CPXwriteprob", "writeLp" );
> }
>
>
> _______________________________________________
> Osi mailing list
> Osi at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/osi
>   





More information about the Osi mailing list