Welcome to the Webinar What s New in Gurobi 7.5
Speaker Introduction Dr. Tobias Achterberg Director of R&D at Gurobi Optimization Formerly a developer at ILOG, where he worked on CPLEX 11.0 to 12.6 Obtained his degree in mathematics and computer science from the Technical University of Berlin and the Zuse Institute Berlin, then finished doctorate in mathematics with Prof. Martin Grötschel in 2007 Dr. Achterberg is the author of SCIP which is regarded as the best academic MIP solver 2
What's New? New features in Gurobi 7.5 Improved Python interface Multi-objective improvements JavaDoc documentation Support new versions of Python, R, Visual Studio Compute Server communication statistics New parameters Additional minor enhancements Performance improvements 3
Python Modeling Enhancements 4
Python Modeling Enhancements Significant simplification of our Python API Simpler implementation of mathematical models Model.addConstr: handles general constraints, range constraints and indicator constraints Model.addConstrs: allows you to use Python generator expressions over all constraint types GCHelper: helper functions for handling general constraints Python models become more concise and easier to read 5
Python Modeling Enhancements addconstr() Integrated algebraic interface for adding constraints Old: model.addqconstr( x*x + y*y <= 2.0, c1 ) model.addrange( x+y, 1.0, 2.0, c2 ) model.addgenconstrindicator( x, True, y+z == 1.0, c3 ) model.addgenconstrmax( x, [y,z], 2.0, c4 ) New: model.addconstr( x*y + y*y <= 2.0, c1 ) model.addconstr( x+y == [1.0,2.0], c2 ) model.addconstr((x == 1) >> (y+z == 1.0), c3 ) model.addconstr( x == max_(y,z,2.0), c4 ) 6
Python Modeling Enhancements Helper Functions General constraint helper functions: We introduced functions max_(), min_(), abs_(), and_(), or_() to simplify construction of general constraints model.addconstr(x == abs_(y)) model.addconstr(x == or_(y,z,w)) Note: any_() can be used as a synonym for or_() Integrate general constraints with addconstrs() The new syntax allows you to add sets of general constraints in batches Old: X, Y, Gcons = model.addvars(10), model.addvars(10), {} for i in X: Gcons[i] = model.addgenconstrmin(x[i], [Y[i], 10], name= Gc ) New: X, Y = model.addvars(10), model.addvars(10) Gcons = model.addconstrs((x[i] == min_(y[i],10) for i in X), name= Gc ) 7
Python Modeling Enhancements remove() We extended model.remove() to handle lists, tuples and dictionaries of objects Old: for i in model.getconstrs(): model.remove(i) New: model.remove(model.getconstrs()) 8
Enhanced Multi-Objective API 9
Enhanced Multi-Objective API Easier definition of multiple objectives We introduced model.setobjectiven(linexpr, index,...) Old (Gurobi 7.0): coef1 = [0, 1, 2, 3, 4] coef2 = [4, 3, 2, 1, 0] x = model.addvars(5) model.numobj = 2 model.params.objnumber = 0 model.objnpriority = 2 model.objnweight = 1 model.setattr(grb.attr.objn, x, coef1) model.params.objnumber = 1 model.objnpriority = 1 model.objnweight = 1 model.setattr(grb.attr.objn, x, coef2) New (Gurobi 7.5): coef1 = [0, 1, 2, 3, 4] coef2 = [4, 3, 2, 1, 0] x = model.addvars(5) model.setobjectiven(x.prod(coef1), 0, priority=2, weight=1) model.setobjectiven(x.prod(coef2), 1, priority=1, weight=1) Or equivalently: x = model.addvars(5) model.setobjectiven(x[1]+2*x[2]+3*x[3]+4*x[4], 0, priority=2, weight=1) model.setobjectiven(4*x[0]+3*x[1]+2*x[2]+x[3], 1, priority=1, weight=1) 10
Enhanced Multi-Objective API Enhanced termination control for multi-objective optimization We introduced model.getmultiobjenv(): env0 = model.getmultiobjenv(0) env1 = model.getmultiobjenv(1) env0.setparam( TimeLimit,100) env1.setparam( TimeLimit,10) model.optimize() model.discardmultiobjenvs() Allows for fine-grained control of each multi-objective optimization pass Algorithmic choices Termination criteria One optimization pass per objective priority level Settings for additional objectives of same priority level are ignored Use MIP starts for first priority level objective solve 11
Other Enhancements 12
JavaDoc Documentation Contains our full documentation Can be used in any IDE that supports JavaDoc, e.g. Eclipse Provided as gurobi-javadoc.jar 13
Platforms Added support for Python 3.6 Plus a Mac Anaconda 3.6 package Added support for Visual Studio 2017 on Windows Added support for R 3.4 14
Compute Server Statistics When remote environment is freed, we print communication statistics to the log: Compute Server communication statistics: Sent: 8.3 MBytes in 244 msgs and 0.76s (10.92 MB/s) Received: 7.2 MBytes in 304603 msgs and 1.53s (4.71 MB/s) Useful to assess overhead of Compute Server or cloud communication 15
New Parameters We added two additional parameters: IgnoreNames: Discard all user-provided names: constraint, variable and problem names User request to satisfy security concern when application is deployed in the cloud or using Compute Server Also useful to generate recording file to send to Gurobi support if sending names is a security concern StartNodeLimit: Provides additional control over how much work is performed to complete a partial MIP start 16
Additional Enhancements Improved performance of.net expression building No longer use "using" keyword in C++ header files Python: Raise AttributeError instead of GurobiError if attributes are used incorrectly printquality() also shows which variable/constraint is the maximally violated one Added Callback.useSolution() add solution immediately, and check if it is feasible Automatically flush pending changes when GRBpresolvemodel() is called Well-defined meaning of setting NodeLimit to 0 Support file compression for recording files Improved numerics in piece-wise linear simplex presolve aggregator presolve fixing of variables with almost identical bounds min/max calculation of constraint activities in presolve Gomory cuts reduced number of cases where solution exhibits small constraint violations Setting user cutoff equal to optimal value will always lead to finding such solution instead of a cutoff status 17
Performance Improvements 18
Two Kinds of Benchmarks Internal benchmarks Most important: compare Gurobi version-over-version Based on internal library of 4538 models External, competitive benchmarks Conducted by Hans Mittelmann, Arizona State University http://plato.asu.edu/bench.html For MIP largely based upon MIPLIB 2010 19
Internal Benchmarks 20
Gurobi MIP Library (4538 models) 1E+09 100000000 10000000 1000000 1,000,000 Columns 100000 10000 100,000 1000 100 10 1 1 10 100 1000 10000 100000 1000000 10000000 100000000 Rows 21
Performance Improvements in Gurobi 7.5 Problem Class >1s >100s # Wins Losses Speedup # Wins Losses Speedup LP: concur. 449 120 122 1.15x 149 62 42 1.47x primal 450 109 132 1.15x 201 63 55 1.28x dual 440 134 115 1.19x 168 71 49 1.42x barrier 458 113 141 1.09x 155 67 48 1.34x QCP/SOCP 93 18 9 1.17x 9 3 0 3.03x MIP 2103 1027 636 1.33x 901 526 259 1.70x MIQP 120 71 25 3.22x 65 44 12 7.66x MIQCP 244 70 111 0.91x 62 28 24 0.97x Gurobi 7.0 vs. 7.5: > 1.00x means that Gurobi 7.5 is faster than Gurobi 7.0 22
Continual Performance Improvements 600 538 Number of unsolved models 500 456 400 371 335 300 286 200 200 100 92 46 0 v1.1 v2.0 v3.0 v4.0 v5.0 v6.0 v7.0 v7.5 Time limit: 10000 sec. Intel Xeon CPU E3-1240 v3 @ 3.40GHz 4 cores, 8 hyper-threads 32 GB RAM MIP test set has 3420 models: - 217 discarded due to inconsistent answers - 788 discarded that none of the versions can solve 23
Where do the MIP improvements come from? 24
MIP Improvements in Gurobi 7.5 Presolve 7.8% Improved multi-row reductions 2.0% More efficient GUB usage and improved lifting 0.7% Improved domain propagation 0.4% Improved cancelation and fill handling 1.5% More lifting of knapsack constraints 0.5% Improved work limits 1.1% Extract common sub-expressions 0.4% Euclidian reductions in bound strengthening 1.0% Node presolve 4.2% Improved work limits in probing 0.3% Dual propagation for probing 0.8% Propagate dual bound 1.0% Improved conflict analysis 1.3% Exploit cliques for reduced cost strengthening 0.7% 25
MIP Improvements in Gurobi 7.5 Symmetry 7.0% Improved symmetry detection performance 4.1% Apply orbital probing to non-binary variables 0.7% Flip and split variables to induce symmetry 2.1% LP 17.5% Use concurrent simplex for root solve 2.6% Automatically select simplex and pricing strategy 2.5% General LP solving improvements 11.7% Cuts 14.3% Better root node control 6.3% Improved sub-mip cut separation 1.0% Improved MIR and flow cover cuts 1.9% Special odd-cycle cuts 1.3% Improved aggregation 2.8% Better clique cut separation 0.3% 26
MIP Improvements in Gurobi 7.5 Branching 2.8% Improved default branching strategy 2.8% Heuristics 4.6% Improved heuristics working on original model 0.9% Improved heuristics run in parallel to root cut loop 1.1% Improved work load balancing 1.4% Improved automatic adjustment of RINS fixing rate 0.5% More aggressive fix-and-dive heuristics 0.6% SOS constraints Improved SOS presolve 2.4% Node probing on SOS constraints 7.3% Improved SOS branching rules 1.4% 11.4% on SOS models 27
External Benchmarks Hans Mittelmann: http://plato.asu.edu/bench.html 28
MIP Solve Times Gurobi 7.5 vs. Competition: Solve times > 1.0 means Gurobi faster Benchmark # CPLEX 12.7.1 XPRESS 8.2.1 P=1 P=4 P=12 P=48 P=1 P=4 P=12 P=48 Optimality 87 1.31x 1.37x 1.17x - 1.91x 1.60x 1.46x - Feasibility 35-1.20x - - - 2.93x - - Infeasibility 19-1.15x - - - 1.71x - - "Solvable" Optim. 218 - - 1.10x 1.05x - - 1.95x 1.78x Number of solved models in solvable set P=12: Gurobi 210, Cplex 207, Xpress 197 P=48: Gurobi 211, Cplex 214, Xpress 200 Complete test data available here (data from July 20, 2017): http://plato.asu.edu/ftp/milpc.html: "Optimality", time limit 7200 sec. http://plato.asu.edu/ftp/feas_bench.html: "Feasibility", time limit 3600 sec., time to first solution http://plato.asu.edu/ftp/infeas.html: "Infeasibility", time limit 3600 sec. http://plato.asu.edu/ftp/solvable.html: "Solvable", time limit 7200 sec. 29
LP Solve Times Gurobi 7.5 vs. Competition: Solve times > 1.0 means Gurobi faster Benchmark # CPLEX 12.7.1 XPRESS 8.2.1 Mosek 8.0 Simplex 40 1.91x 1.22x 3.65x Barrier 45 1.84x 1.03x 2.33x Concurrent 45 2.39x 1.15x - Complete test data available here (data from July 20, 2017): http://plato.asu.edu/ftp/lpsimp.html: Simplex, time limit 25000 sec., 8 threads http://plato.asu.edu/ftp/lpcom.html: Barrier and concurrent, time limit 25000 sec., 8 threads 30
Quadratic Model Solve Times Gurobi 7.5 vs. Competition: Solve times > 1.0 means Gurobi faster Benchmark # CPLEX 12.7.1 XPRESS 8.2.1 Mosek 8.0 SOCP 18 3.99x 1.26x 1.02x MISOCP 47 3.19x 1.12x 8.98x Binary QP 57 1.37x 2.13x - Convex discrete 19 1.15x 2.84x 4.94x Complete test data available here (data from July 20, 2017): http://plato.asu.edu/ftp/socp.html: SOCP, time limit 3600 sec., 8 threads http://plato.asu.edu/ftp/misocp.html: MISOCP, time limit 7200 sec., 8 threads http://plato.asu.edu/ftp/qplib.html: binary QP, time limit 3600 sec., 8 threads http://plato.asu.edu/ftp/convex.html: convex discrete, time limit 7200 sec., 8 threads 31
Next Steps 7.5 upgrades for existing Gurobi users Visit the What's New in Gurobi page and follow instructions in the bottom: http://www.gurobi.com/products/whats-new/whats-new-in-the-latest-version For additional questions, or to request a free trial, contact us at info@gurobi.com 32