User Tools

Site Tools


solver:terminate_the_optimization_after_gams_cplex_reaches_a_certain_value_of_the_objective

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
solver:terminate_the_optimization_after_gams_cplex_reaches_a_certain_value_of_the_objective [2016/02/25 17:05]
admin
— (current)
Line 1: Line 1:
-====== Terminate the optimization after GAMS/CPLEX reaches a certain value of the objective ====== 
-The example model below shows how to interact with CPLEX  that it stops pretty much after CPLEX found the solution value 21 (or larger). This is done in using the same mechanism as described in "​[[http://​www.gams.com/​docs/​bch.htm|The GAMS Branch-and-Cut-and-Heuristic Facility]]"​. 
- 
-First we have userincbicall which is called every time we find a new incumbent. We are also in ”interactive” mode, meaning that we accept new options on the fly. The trigger for reading in new options is a trigger file called readop2. This is created by the incumbent checking routine only if we reached 21 or higher. The Cplex option sets a very large optca (Cplex name for it is epagap), so we should terminate immediately. The iatriggertime is set to 1 meaning that Cplex checks every second if there is a triggerfile. This should be set to larger values (60 seconds or so) for real models. This can be used effieciently,​ for example, in the case when a model is decomposed into sub-models. When a sub-model is solved then the solution can be used in the other sub-models to create a integer cut, hence the solution speed is improved. 
- 
-Note: This approach requires distribution 22.6 ++. 
- 
-Option description:​ 
- 
-**iatriggertime (double)** 
-The time interval in seconds when the solver checks for existence of the trigger file. This is comparable to the situation that  ctrl+c is pressed if the trigger file exist. The options iatriggertime,​ iatriggerfile and iafile enables an automated way to handle the interactive communication with the solver.  ​ 
- 
-**iatriggerfile (string)** 
-The name of the trigger file. When the solver checks and finds the trigger file a secondary option file (iafile) is processed and the trigger file is removed. Note that the trigger file works as an indicator and only the existence of the file is checked. 
- 
-**iafile (string)** 
-The secondary option file consists of CPLEX options to be used during the remaining part of the solution procedure. Hence, the secondary option file, iafile, is dedicated to be used during the interactive communication with the solver. Processing of the iafile is triggered by existence of the iatriggerfile. ​ 
- 
-===== Example Model ===== 
-<​code>​ 
-$title Non-transitive Dice Design (DICE,​SEQ=176) 
-$Ontext 
- ​Probabilistic dice - an example of a non-transitive relation. 
- We want to design a set of dice with an integer number on each face 
- such that on average dice1 beats dice2, and dice2 on average beats 
- dice3 etc, but diceN has to beat dice1. 
- 
- MIP codes behave very erratic on such a problem and slight 
- ​reformulations can result in dramatic changes in performance. Also 
- note the face value will be integers automatically. 
- 
- 
- ​Gardner,​ M, Scientific American. 
- 
- ​Robert A Bosh, Mindsharpener,​ Optima, MP Society Newsletter, Vol 70, 
- June 2003, page 8-9 
- 
- ​Robert A Bosh, Monochromatic Squares, Optima, MP Society Newsletter, ​ 
- Vol 71, March 2004, page 6-7 
- 
-$Offtext 
- 
-sets    f    faces on a dice  / face1*face6 / 
-        dice number of dice   / dice1*dice3 / ; 
- 
-scalars flo  lowest face value  / 1 / 
-        fup  highest face value 
-        wn   wins needed - possible bound ; 
- 
-fup = card(dice) * card(f); 
- 
-wn = floor(0.5 * sqr(card(f))) + 1; 
- 
-alias(f,​fp);​ 
-alias(dice,​dicep);​ 
- 
-variables ​ wnx               ​number of wins 
-           ​fval(dice,​f) ​     value of dice - will be integer 
-           ​comp(dice,​f,​fp) ​  one if f beats fp ; 
-binary variable comp; 
- 
-fval.lo(dice,​f) = flo; 
-fval.up(dice,​f) = fup; 
- 
-fval.fx("​dice1","​face1"​) = flo; 
- 
-equation eq1(dice) ​      count the wins 
-         ​eq3(dice,​f,​fp) ​ definition of non-transitive relation 
-         ​eq4(dice,​f) ​    ​different face values for a single dice; 
- 
-eq1(dice).. sum((f,fp), comp(dice,​f,​fp)) =e= wnx; 
- 
-eq3(dice,​f,​fp) .. fval(dice,​f) + (fup-flo)*(1-comp(dice,​f,​fp)) =g= fval(dice++1,​fp) + 1; 
- 
-eq4(dice,​f-1) .. fval(dice,​f-1) + 1 =l= fval(dice,​f);​ 
- 
-model xdice /all /; 
- 
-$if set nosolve $exit 
- 
-xdice.optfile=1;​ option mip=cplex; option optcr=0; 
- 
-* Delete trigger file which might be around from a previous run 
-$call rm -rf readop2 
- 
-* Set dummy upper bound 
-* Note: This is actually not necessary, it is just done because of a bug in older versions 
-wnx.up=1000;​ 
- 
-solve xdice using mip max wnx; 
- 
-$onecho > cplex.opt 
-userincbicall checkincb.gms 
-interactive yes 
-iafile cplex.op2 
-iatriggerfile readop2 
-iatriggertime 1 
-$offecho ​ 
- 
-$echo epagap 1e20 > cplex.op2 
- 
-$onecho > checkincb.gms 
-variable wnx; 
-$gdxin bchout_i.gdx 
-$load wnx 
-file fx /readop2/; 
-if (round(wnx.l) >= 21, put fx 'read cplex.op2'​);​ 
-$offecho 
-</​code>​ 
-===== Log File ===== 
-<​code>​ 
---- Job dice Start 02/01/08 12:56:42 
-GAMS Rev 149  Copyright (C) 1987-2007 GAMS Development. All rights reserved 
-... 
---- Starting compilation 
---- dice.gms(82) 3 Mb 
---- Starting execution: elapsed 0:00:00.037 
---- dice.gms(62) 4 Mb 
---- Generating MIP model xdice 
---- dice.gms(64) 4 Mb 
----   126 rows  127 columns ​ 465 non-zeroes 
----   108 discrete-columns 
---- dice.gms(64) 4 Mb 
---- Executing CPLEX: elapsed 0:00:00.071 
- 
-ILOG CPLEX    Dec 24, 2007 WEX.CP.CP 22.6 035.037.041.wei For Cplex 11.0 
-Cplex 11.0.0, GAMS Link 34  
-Cplex licensed for 1 use of lp, qp, mip and barrier, with 2 parallel threads. 
- 
-Reading parameter(s) from "​C:​\temp\cplex.opt"​ 
->> ​ userincbicall checkincb.gms 
->> ​ interactive yes 
->> ​ iafile cplex.op2 
->> ​ iatriggerfile readop2 
->> ​ iatriggertime 1 
-Finished reading from "​C:​\temp\cplex.opt"​ 
-Reading data... 
-Starting Cplex... 
-Tried aggregator 1 time. 
-MIP Presolve eliminated 12 rows and 11 columns. 
-MIP Presolve modified 460 coefficients. 
-Reduced MIP has 114 rows, 116 columns, and 419 nonzeros. 
-Presolve time =    0.00 sec. 
-MIP emphasis: balance optimality and feasibility. 
-MIP search method: dynamic search. 
-Parallel mode: none, using 1 thread. 
-Tried aggregator 1 time. 
-No LP presolve or aggregator reductions. 
-Presolve time =    0.00 sec. 
-Initializing dual steep norms . . . 
- 
-Iteration log . . . 
-Iteration: ​    ​1 ​  Dual objective ​    ​= ​           30.000000 
-Perturbation started. 
-Iteration: ​   52   Dual objective ​    ​= ​           30.000000 
-Iteration: ​  ​114 ​  Dual objective ​    ​= ​           29.999967 
-Removing perturbation. 
-Root relaxation solution time =    0.00 sec. 
- 
-        Nodes                                         Cuts/ 
-   ​Node ​ Left     ​Objective ​ IInf  Best Integer ​    Best Node    ItCnt     Gap 
- 
-*     ​0+ ​   0                            0.0000 ​      ​29.6862 ​     139     ​--- ​ 
-*** Reporting incumbent with objective 0. 
-      0     ​0 ​      ​29.0000 ​   59        0.0000 ​     Cuts: 63      177     ​--- ​ 
-      0     ​0 ​      ​28.4000 ​   69        0.0000 ​     Cuts: 36      216     ​--- ​ 
-      0     ​0 ​      ​27.7572 ​   64        0.0000 ​     Cuts: 23      256     ​--- ​ 
-      0     ​0 ​      ​26.7039 ​   71        0.0000 ​ Flowcuts: 17      317     ​--- ​ 
-*     ​0+ ​   0                           ​12.0000 ​      ​26.7039 ​     317  122.53% 
-*** Reporting incumbent with objective 12. 
-      0     ​0 ​      ​26.6207 ​   72       ​12.0000 ​     Cuts: 81      341  121.84% 
-      0     ​0 ​      ​26.4449 ​   74       ​12.0000 ​ Flowcuts: 11      368  120.37% 
-      0     ​0 ​      ​26.1618 ​   76       ​12.0000 ​     Cuts: 13      390  118.02% 
-      0     ​0 ​      ​26.0578 ​   73       ​12.0000 ​     Cuts: 59      406  117.15% 
-      0     ​0 ​      ​25.7993 ​   74       ​12.0000 ​  ​Flowcuts:​ 4      417  114.99% 
-      0     ​0 ​      ​25.7065 ​   73       ​12.0000 ​      Cuts: 9      431  114.22% 
-      0     ​0 ​      ​25.6514 ​   73       ​12.0000 ​  Impl Bds: 5      437  113.76% 
-      0     ​0 ​      ​25.6510 ​   73       ​12.0000 ​  ​Flowcuts:​ 1      438  113.76% 
-*     ​0+ ​   0                           ​16.0000 ​      ​25.6510 ​     438   ​60.32% 
-*** Reporting incumbent with objective 16. 
-      0     ​2 ​      ​25.0000 ​   70       ​16.0000 ​      ​25.6510 ​     438   ​60.32% 
-*    10+    7                           ​18.0000 ​      ​25.0000 ​     686   ​38.89% 
-*** Reporting incumbent with objective 18. 
-    100    59       ​24.0000 ​   73       ​18.0000 ​      ​24.3467 ​    ​3322 ​  ​35.26% 
-                                                     Cuts: 50                  ​ 
-*   ​110+ ​  ​59 ​                          ​19.0000 ​      ​24.3467 ​    ​3674 ​  ​28.14% 
-*** Reporting incumbent with objective 19. 
-    200   ​123 ​      ​20.0000 ​   14       ​19.0000 ​      ​24.0000 ​    ​7359 ​  ​26.32% 
-                                                      Cuts: 8                  ​ 
-*   ​240+ ​ 123                           ​20.0000 ​      ​24.0000 ​    ​8515 ​  ​20.00% 
-                                                     Cuts: 13                  ​ 
-*** Reporting incumbent with objective 20. 
-*   ​290+ ​ 108                           ​21.0000 ​      ​24.0000 ​   10576   ​14.29% 
-                                                      Cuts: 6                  ​ 
-*** Reporting incumbent with objective 21. 
-    300   ​117 ​   infeasible ​            ​21.0000 ​      ​24.0000 ​   11000   ​14.29% 
-    400   ​171 ​      ​23.0000 ​   41       ​21.0000 ​      ​24.0000 ​   15702   ​14.29% 
-                                                     Cuts: 26                  ​ 
- 
-Implied bound cuts applied: ​ 1 
-Flow cuts applied: ​ 67 
-Mixed integer rounding cuts applied: ​ 6 
-Zero-half cuts applied: ​ 1 
-Gomory fractional cuts applied: ​ 2 
->> ​ epagap 1e20 
- 
-Implied bound cuts applied: ​ 1 
-Flow cuts applied: ​ 67 
-Mixed integer rounding cuts applied: ​ 6 
-Zero-half cuts applied: ​ 1 
-Gomory fractional cuts applied: ​ 2 
-Fixing integer variables, and solving final LP... 
-Tried aggregator 1 time. 
-LP Presolve eliminated 124 rows and 125 columns. 
-Aggregator did 2 substitutions. 
-All rows and columns eliminated. 
-Presolve time =    0.00 sec. 
- 
-Solution satisfies tolerances. 
- 
-MIP Solution: ​          ​21.000000 ​   (20900 iterations, 482 nodes) 
-Final Solve: ​           21.000000 ​   (0 iterations) 
- 
-Best possible: ​         23.000000 
-Absolute gap:            2.000000 
-Relative gap:            0.095238 
- 
---- Restarting execution 
---- dice.gms(64) 2 Mb 
---- Reading solution for model xdice 
---- dice.gms(64) 2 Mb 
-*** Status: Normal completion 
---- Job dice.gms Stop 02/01/08 12:56:44 elapsed 0:00:02.187 
-</​code>​ 
- 
- 
  
IMPRESSUM / LEGAL NOTICEPRIVACY POLICY solver/terminate_the_optimization_after_gams_cplex_reaches_a_certain_value_of_the_objective.1456416320.txt.gz · Last modified: 2016/02/25 17:05 by admin