[Bonmin] does cpu time limit change the result?

Pierre Bonami pierre.bonami at gmail.com
Thu Jul 9 06:56:01 EDT 2009


Hi Guiseppe,
Can you try setting
bonmin.number_strong_branch_root 1
bonmin.number_strong_branch 1
bonmin.time_limit 1000
and see if it stops.
Which version are you using now?
On Jul 8, 2009, at 3:25 PM, Giuseppe Aprea wrote:

> I know, it's again me. Please be patient and forgive me.
>
> I am still not able to retrieve the solution from the code. It seems I
> can't stop
> bonmin.
>
> Here is my main:
>
>
>
> BonminSetup bonmin;
> bonmin.initializeOptionsAndJournalist();
> //Register an additional option
> bonmin.roptions()->AddStringOption2("print_solution","Do we print
> the solution or not?",
>                                "yes",
>                                "no", "No, we don't.",
>                                "yes", "Yes, we do.",
>                                "A longer comment can be put here");
>
>
>
> // Here we can change the default value of some Bonmin or Ipopt option
> //bonmin.options()->SetNumericValue("bonmin.time_limit", 5);
> //changes bonmin's time limit
> //bonmin.options()->SetStringValue("mu_oracle","loqo");
>
> //Here we read several option files
> bonmin.readOptionsFile("Mybonmin.opt");
> bonmin.readOptionsFile();// This reads the default file "bonmin.opt"
>
> // Options can also be set by using a string with a format similar
> to the bonmin.opt file
> // bonmin.readOptionsString("bonmin.algorithm B-BB\n");
>
> // Now we can obtain the value of the new option
> int printSolution;
> bonmin.options()->GetEnumValue("print_solution", printSolution,"");
> if(printSolution == 1){
>   tminlp->printSolutionAtEndOfAlgorithm();
> }
>
> //Now initialize from tminlp
> bonmin.initialize(GetRawPtr(tminlp));
>
>
>
> //Set up done, now let's branch and bound
> double time1 = CoinCpuTime();
> double sol[VARSNUM];
>
> try {
>   Bab bb;
>   bb(bonmin);//process parameter file using Ipopt and do branch and
> bound using Cbc
>       if(bb.bestSolution()!=NULL){
>               for(i=0;i<VARSNUM;i++){
>                       sol[i]=*(bb.bestSolution()+i);
>                       printf("\n%f",sol[i]);
>               }
>       }
>       else{
>               printf("\n\n\tNo feasible solution!\n\n");
>       }
>       printf("\n");
>
> }
> catch(TNLPSolver::UnsolvedError *E) {
>   //There has been a failure to solve a problem with Ipopt.
>   std::cerr<<"Ipopt has failed to solve a problem"<<std::endl;
> }
> catch(OsiTMINLPInterface::SimpleError &E) {
>   std::cerr<<E.className()<<"::"<<E.methodName()
>            <<std::endl
>            <<E.message()<<std::endl;
> }
> catch(CoinError &E) {
>   std::cerr<<E.className()<<"::"<<E.methodName()
>            <<std::endl
>            <<E.message()<<std::endl;
> }
>
>
> return 0;
>
>
>
>
> here is the option file:
>
>
>
> print_solution yes
> #derivative_test second-order
> bonmin.bb_log_level 5
> bonmin.algorithm B-BB
> #print_level 6
> max_cpu_time 7200
> #bound_relax_factor 1e-6
> #bonmin.iteration_limit 4
> bonmin.time_limit 60
>
>
>
> and this is the output (the process is running since 11 hours despite
> bonmin.time_limit set to 60!!!!):
>
> CppExample$ make clean ; make ;time ./CppExample
> rm -rf CppExample MyBonmin.o MyTMINLP.o
> g++ -g -O0 -fomit-frame-pointer -pipe -DNDEBUG -pedantic-errors
> -Wimplicit -Wparentheses -Wreturn-type -Wcast-qual -Wall
> -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas
> -I`echo /home/gaprea/usr/local/include/coin` -I`echo
> /home/gaprea/usr/local/include/coin/ipopt`  -c -o MyBonmin.o `test -f
> 'MyBonmin.cpp' || echo '/'`MyBonmin.cpp
> MyBonmin.cpp: In function ‘int main(int, char**)’:
> MyBonmin.cpp:239: warning: unused variable ‘time1’
> g++ -g -O0 -fomit-frame-pointer -pipe -DNDEBUG -pedantic-errors
> -Wimplicit -Wparentheses -Wreturn-type -Wcast-qual -Wall
> -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas
> -I`echo /home/gaprea/usr/local/include/coin` -I`echo
> /home/gaprea/usr/local/include/coin/ipopt`  -c -o MyTMINLP.o `test -f
> 'MyTMINLP.cpp' || echo '/'`MyTMINLP.cpp
> bla=;\
>       for file in MyBonmin.o MyTMINLP.o; do bla="$bla `echo $file`";  
> done; \
>       g++ -Wl,--rpath -Wl,/home/gaprea/usr/local/lib -g -O0
> -fomit-frame-pointer -pipe -DNDEBUG -pedantic-errors -Wimplicit
> -Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith
> -Wwrite-strings -Wconversion -Wno-unknown-pragmas   -o CppExample $bla
> -L/home/gaprea/usr/local/lib -lbonmin -lipopt -lCbc -lCgl -lOsiClp
> -lOsi -lClp -lCoinUtils
> /home/gaprea/000_System_Biology/SOFTWARE/MINLP/Bonmin-1.0/build/ 
> ThirdParty/ASL/amplsolver.a
> -ldl -lm `cat /home/gaprea/usr/local/lib/../share/doc/coin/Ipopt/ 
> ipopt_addlibs_cpp.txt`
> `cat /home/gaprea/usr/local/lib/../share/doc/coin/Cgl/cgl_addlibs.txt`
> `cat /home/gaprea/usr/local/lib/../share/doc/coin/Osi/osi_addlibs.txt`
> `cat /home/gaprea/usr/local/lib/../share/doc/coin/Clp/clp_addlibs.txt`
> `cat /home/gaprea/usr/local/lib/../share/doc/coin/CoinUtils/ 
> coinutils_addlibs.txt`
>
> ******************************************************************************
> This program contains Ipopt, a library for large-scale nonlinear  
> optimization.
> Ipopt is released as open source code under the Common Public  
> License (CPL).
>        For more information visit http://projects.coin-or.org/Ipopt
> ******************************************************************************
>
> NOTE: You are using Ipopt by default with the MUMPS linear solver.
>     Other linear solvers might be more efficient (see Ipopt  
> documentation).
>
>
> NLP0012I
>             Num      Status      Obj             It       time
> NLP0013I     1        OPT         -75.00000003473977      492       
> 890.812
> BON0001I 105 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I 104 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I 103 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I 102 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I 101 up   0   0.00000000e+00  down   0   0.00000000e+00
>
> ....................................
>
> BON0001I  13 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I  12 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I  11 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I  10 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I   9 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I   8 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I   7 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I   6 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I   5 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I   4 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I   3 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I   2 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I   1 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0001I   0 up   0   0.00000000e+00  down   0   0.00000000e+00
> BON0002I upMultiplier = 1.000000e+00 downMultiplier = 1.000000e+00
> BON0003I   0 value = 3.214075e-01 upEstimate = 5.351865e-02
> downEstimate = 9.464813e-01 infeas = 5.351865e-02 value2 =
> 5.351865e-02
> BON0003I   1 value = 3.218285e-01 upEstimate = 5.457120e-02
> downEstimate = 9.454288e-01 infeas = 5.457120e-02 value2 =
> 5.457120e-02
> BON0003I   2 value = 3.218306e-01 upEstimate = 5.457658e-02
> downEstimate = 9.454234e-01 infeas = 5.457658e-02 value2 =
> 5.457658e-02
> BON0003I   3 value = 3.215331e-01 upEstimate = 5.383283e-02
> downEstimate = 9.461672e-01 infeas = 5.383283e-02 value2 =
> 5.383283e-02
>
> ......................................................
>
> BON0003I 104 value = 3.229850e-01 upEstimate = 5.746239e-02
> downEstimate = 9.425376e-01 infeas = 5.746239e-02 value2 =
> 5.746239e-02
> BON0003I 105 value = 3.229850e-01 upEstimate = 5.746239e-02
> downEstimate = 9.425376e-01 infeas = 5.746239e-02 value2 =
> 5.746239e-02
> BON0005I list_[  0] =   0 useful_[  0] = -3.214075e-01
> BON0005I list_[  1] =   1 useful_[  1] = -3.218285e-01
> BON0005I list_[  2] =   2 useful_[  2] = -3.218306e-01
>
> .........................................
>
> BON0006I list2[ 50] =  50 useful2[ 50] = 5.756897e-02
> BON0006I list2[ 51] =  68 useful2[ 51] = 5.706160e-02
> BON0006I list2[ 52] =  52 useful2[ 52] = 5.756941e-02
> BON0004I list_[    0] =    21, usefull_[    0] =
> -1.0620419692890424e+150  6.2041969289042376e-02
> BON0004I list_[    1] =    65, usefull_[    1] =
> -1.0603499841862923e+150  6.0349984186292338e-02
> BON0004I list_[    2] =    45, usefull_[    2] =
> -1.0580582195624974e+150  5.8058219562497460e-02
> BON0004I list_[    3] =    62, usefull_[    3] =
> -1.0579476520448998e+150  5.7947652044899711e-02
>
> ........................................................
>
> BON0004I list_[  103] =    86, usefull_[  103] =
> -3.2140746297613371e-01  5.3518657440334128e-02
> BON0004I list_[  104] =     0, usefull_[  104] =
> -3.2140746165193834e-01  5.3518654129845800e-02
> BON0004I list_[  105] =    23, usefull_[  105] =
> -3.1875385045788662e-01  4.6884626144716446e-02
> NLP0013I     2        OPT         -75.00000003322431      574       
> 505.896
> NLP0013I     3        OPT         -74.9999999873914       252       
> 241.371
> NLP0013I     4        OPT         -74.99999998750623      523       
> 529.597
> NLP0013I     5        OPT         -75.00000003116291      437       
> 382.544
> NLP0013I     6        OPT         -74.99999998735127      378       
> 265.133
> NLP0013I     7        OPT         -74.99999998749557      519       
> 439.447
> NLP0013I     8        OPT         -74.9999999875126       445       
> 315.852
> NLP0013I     9        OPT         -74.9999999874956       439       
> 493.555
> NLP0013I     10       OPT         -75.00000003005148      569       
> 670.742
> NLP0013I     11       OPT         -75.00000003466486      296       
> 317.04
> NLP0013I     12       OPT         -75.00000003310092      435       
> 460.289
> NLP0013I     13       OPT         -74.99999998737427      253       
> 198.54
> NLP0013I     14       OPT         -74.99999998728373      547       
> 337.825
> NLP0013I     15       OPT         -75.00000003314065      436       
> 421.158
> NLP0013I     16       OPT         -74.99999998751224      668       
> 767.376
> NLP0013I     17       OPT         -75.00000003492561      475       
> 744.463
> NLP0013I     18       OPT         -74.99999998738807      569       
> 510.66
> NLP0013I     19       OPT         -74.99999998751285      757       
> 643.148
> NLP0013I     20       OPT         -74.9999999874247       549       
> 551.082
> NLP0012I
>             Num      Status      Obj             It       time
> NLP0013I     21       OPT         -75.00000003496038      450       
> 454.336
> NLP0013I     22       OPT         -74.99999998752237      585       
> 1072.19
> NLP0013I     23       OPT         -74.9999999874547       401       
> 1041.68
> NLP0013I     24       OPT         -75.00000003262794      545       
> 486.982
>
> ...............................................
>
> NLP0013I     86       OPT         -75.00000003314067      303       
> 381.704
> NLP0013I     87       OPT         -74.99999998749439      165       
> 281.238
> NLP0013I     88       OPT         -75.00000003234817      583       
> 755.575
> NLP0013I     89       OPT         -74.99999998737553      325       
> 291.038
> NLP0013I     90       OPT         -74.99999998737404      109       
> 122.04
>
>
> according to me there is no reason why it should be still running. I
> really think that
> Bonmin should have worked 60 secs in 11 hours. At least I have no
> reason to think
> different. I believe I have followed properly all instructions.
> max_cpu_time is set to
> 2 hours to give time ipopt to solve the nlp problem, and I also tried
> to push bb_log_level
> to its maximum in order to peek in the solution but this is still
> unreachable for me.
> I have also tried to use the option iteration_limit (by the way, this
> number has nothing
> to do with the numbers in the second column of the output, does it?)
> but it seem that
> the right option to stop Bonmin should be bonmin.time_limit. Is 60  
> sec too much?
>
> cheers,
>
> Giuseppe




More information about the Bonmin mailing list