[Coin-lpsolver] ClpSolve problem

François Galea francois.galea at prism.uvsq.fr
Tue Jul 5 13:01:21 EDT 2005


John,

After heavy testings, I can say that everything now seems to be working 
perfectly !

Thank you for your precious help !


François.


John J Forrest a écrit :
> 
> Totally my stupidity - is it better now.  
> 
> I have added your patches (they broke CBC but I fixed that)
> 
> John
> 
> 
> *François Galea <francois.galea at prism.uvsq.fr>*
> Sent by: coin-lpsolver-bounces at list.coin-or.org
> 
> 06/30/2005 07:01 AM
> 
> 	
> To
> 	coin-lpsolver at list.coin-or.org
> cc
> 	
> Subject
> 	[Coin-lpsolver] ClpSolve problem
> 
> 
> 	
> 
> 
> 
> 
> 
> Hello,
> 
> I have met several segmentation fault errors, when I use the
> ClpSimplex::initialSolve( ClpSolve & ) method for starting a new solve.
> 
> The example attached program doesn't work, if I choose to switch
> presolve off. If I switch it on, everything works (provided the Clp
> sources have been patched with the patch I sent before, otherwise the
> names changes won't work). Some other pieces of code I've got crash even
> if I set presolve on.
> 
> I haven't understood enough the internals of ClpSimplex and ClpModel to
> be sure about what is wrong.
> 
> Could somebody tell me what's wrong ?
> 
> Thanks,
> 
> François
> 
> 
> -- 
> François Galea
> Equipe OPALE - Laboratoire PRiSM
> Université de Versailles-Saint Quentin en Yvelines
> 45 av Etats-Unis F-78035 Versailles CEDEX
> Tél. : +33 1 39 25 40 50
> 
> #include <cstdio>
> 
> #include "ClpSimplex.hpp"
> #include "CoinBuild.hpp"
> 
> int main( int argc, char * argv[] )
> {
>  const static struct { double a, b, c, d; } p [] =
>  {
>    { 5.0, 0.0, 7.0, 3.0 },
>    { 8.0, 0.0, 7.0, 6.0 },
>    { 0.0, 10.0, 3.0, 9.0 },
>    { 1.0, 8.0, 5.0, 9.0 },
>    { 2.0, 0.0, 0.0, 7.0 },
>    { 0.0, 4.0, 5.0, 0.0 },
>    { 0.0, 1.0, 6.0, 2.0 },
>    { 2.0, 0.0, 8.0, 3.0 }
>  };
>  const static char * columnNames [2] = { "x", "y" };
>  double k, obj;
>  char buf[ 10 ];
>  char * rowname = buf;
>  double val[ 2 ];
>  int ind[ 2 ];
>  unsigned int i;
>  const double * sol;
>  ClpSimplex lp;
>  CoinBuild * buildObject;
>  ClpSolve * solveOptions;
> 
>  lp.setStrParam( ClpProbName, "foo" );
> 
>  buildObject = new CoinBuild( 1 );
>  buildObject->addCol( 0, NULL, NULL, 0.0, +COIN_DBL_MAX, 4 );
>  buildObject->addCol( 0, NULL, NULL, 0.0, +COIN_DBL_MAX, 3 );
>  lp.addColumns( *buildObject );
>  delete buildObject;
>  lp.copyColumnNames( columnNames, 0, 2 );
> 
>  buildObject = new CoinBuild( 0 );
>  ind[ 0 ] = 0;
>  ind[ 1 ] = 1;
>  for( i = 0; i < (sizeof( p ) / sizeof( p[0] )); i++ )
>  {
>    k = p[i].a * p[i].d - p[i].c * p[i].b;
>    val[0] = (p[i].d-p[i].b)/k;
>    val[1] = (p[i].a-p[i].c)/k;
>    
>    if( ((1.0-val[0]*4.0)/val[1]) > 5.0 )
>      buildObject->addRow( 2, ind, val, 0.0, 1.0 );
>    else
>      buildObject->addRow( 2, ind, val, 1.0, +COIN_DBL_MAX );
>  }
>  lp.setOptimizationDirection( -1.0 );
>  lp.addRows( *buildObject );
>  for( i = 0; i < (sizeof( p ) / sizeof( p[0] )); i++ )
>  {
>    sprintf( buf, "c%d", i );
>    lp.copyRowNames( &rowname, i, i+1 );
>  }
>  delete buildObject;
> 
>  solveOptions = new ClpSolve();
>  solveOptions->setSolveType( ClpSolve::useDual );
>  solveOptions->setPresolveType( ClpSolve::presolveOff, 0 );
>  // solveOptions->setPresolveType( ClpSolve::presolveOn, 5 );
>  lp.setLogLevel( 1 );
>  lp.initialSolve( *solveOptions );
>  delete solveOptions;
> 
>  lp.writeMps( "foo.mps" );
> 
>  obj = -lp.rawObjectiveValue();
>  sol = lp.getColSolution();
> 
>  printf( "obj = %f\nx = %f\ny = %f\n", obj, sol[ 0 ], sol[ 1 ] );
> 
>  return 0;
> }
> _______________________________________________
> Coin-lpsolver mailing list
> Coin-lpsolver at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/coin-lpsolver
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Coin-lpsolver mailing list
> Coin-lpsolver at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/coin-lpsolver


-- 
François Galea
Equipe OPALE - Laboratoire PRiSM
Université de Versailles-Saint Quentin en Yvelines
45 av Etats-Unis F-78035 Versailles CEDEX
Tél. : +33 1 39 25 40 50




More information about the Clp mailing list