
Switching from Another Solver to Gurobi Speaker Introduction • Dr. Sonja Mars • Technical Account Manager at Gurobi Optimization • Ph.D. in Mathematics, FAU Erlangen-Nuremberg • Helping people around the world with Gurobi 2 Copyright 2017, Gurobi Optimization, Inc. Overview • Decision Criteria • Common Scenarios • Switching Examples 3 Copyright 2017, Gurobi Optimization, Inc. Optimization Projects – Decision for a Solver 4 Copyright 2017, Gurobi Optimization, Inc. Solver Overview • Commercial solvers • For example, Gurobi or CPLEX • Open source solvers • For example, lp_solve and GLPK • Modeling languages and frameworks • Commercial • For example, AMPL, GAMS • Open Source • For example, Pyomo, PuLP, JuMP 5 Copyright 2017, Gurobi Optimization, Inc. Decision Criteria Criterion Advantage Budget and licensing Free tools Performance and scalability Commercial tools Professional support Commercial tools Active development Commercial tools & some free tools Deployment Commercial tools Ease of use Commercial solvers & modeling frameworks Complexity of switching later Modeling frameworks 6 Copyright 2017, Gurobi Optimization, Inc. Budget and Licensing • Free tools: • No license fees • No licensing • Possibility to look at the code and change it • Commercial tools: • Budget • Include licensing mechanism • Black box solver • Get started with Gurobi for free: • Free academic licenses • Take Gurobi with you • Evaluation licenses 7 Copyright 2017, Gurobi Optimization, Inc. Performance • Free tools: • Fast for easy problems • Many issues with real-world problems • Sometimes huge setup times for models with large data • Commercial tools: • Optimized for real-world problems • Tuned and parallel algorithms • Light-weight APIs with fast data-handling 8 Copyright 2017, Gurobi Optimization, Inc. Performance – Comparing Solvers • Just a few numbers for runs on 1 thread from MIPLIB 2010 benchmark set (time limit 2 hours): Solver # of Benchmark Problems Solved Relative MIP Performance (out of the 87) GLPK 0 (no models solved) n/a lp_solve 5 too few solved to compare CBC 53 32 SCIP + SoPlex 71 9.32 XPRESS 86 1.51 CPLEX 87 1.42 Gurobi 87 1.0 (fastest) • More numbers can be found here: http://plato.asu.edu/ftp/milpc.html 9 Copyright 2017, Gurobi Optimization, Inc. Performance – Comparing API and Modeling Tools • Build and solve the same model (2500000 variables, 5000 constraints and 500848 nonzeros) API Runtime in seconds Gurobi’s Python API 22 JuMP 40 Pyomo 146 PuLP 203 • Gurobi solve run just takes 3 seconds 10 Copyright 2017, Gurobi Optimization, Inc. Professional Support • Free tools: • Motivated developers but limited support • Commercial tools: • Dedicated team of experts • At Gurobi: • PhD level support • Fast response times guaranteed • Offers 2 hours free consulting • Parameter tuning 11 Copyright 2017, Gurobi Optimization, Inc. Active Development • Commercial tools: • Continual performance improvements • Dedicated team of experts Gurobi Development over time – number of unsolved models 600 538 500 456 400 371 335 286 300 200 200 92 100 46 0 v1.1 v2.0 v3.0 v4.0 v5.0 v6.0 v7.0 v7.5 Time limit: 10000 sec. MIP test set has 3420 models: Intel Xeon CPU E3-1240 v3 @ 3.40GHz - 217 discarded due to inconsistent answers 4 cores, 8 hyper-threads - 788 discarded that none of the versions can solve 32 GB RAM 12 Copyright 2017, Gurobi Optimization, Inc. Deployment • Free solvers: • Support of different operating systems very limited • As source code is available • Can be compiled for a lot of systems • No additional support if issues occur • Modeling frameworks: • Another software that needs to be deployed • Sometimes complicated because file based • Commercial solvers: • Available for a lot of operating systems • Flexible reaction on new situations 13 Copyright 2017, Gurobi Optimization, Inc. Ease of Use • Free solvers: • Sometimes only C or C++ APIs • Complicated usage • Modeling frameworks: • Nice syntax • Easy to learn • Commercial solvers: • APIs in all popular programming languages • At Gurobi: • Additional nice extensions for Python 14 Copyright 2017, Gurobi Optimization, Inc. Complexity of Switching • Free and commercial solvers: • Use their own APIs • Not designed to make switching easy • Modeling frameworks: • Very easy to change solvers 15 Copyright 2017, Gurobi Optimization, Inc. Time to Switch? 16 Copyright 2017, Gurobi Optimization, Inc. Common Scenarios … … we’ve seen from our customers • “Our model is getting larger and takes too long to solve with a free solver.” • “Our model is getting more complex and a competing commercial solver is running into performance issues.” • “The results we are getting are not robust and reliable.” • “We need help on parameter tuning.” 17 Copyright 2017, Gurobi Optimization, Inc. First Test • Export MPS files to check performance • How to export MPS files: http://www.gurobi.com/resources/switching-to-gurobi/exporting-mps-files- from-competing-solvers • Ask for a Gurobi evaluation license • Run MPS File in Gurobi: gurobi_cl TimeLimit=3600 MIPGap=0.01 myModel.mps • Or send the files to [email protected] 18 Copyright 2017, Gurobi Optimization, Inc. Common Scenarios … … when switching to Gurobi is a good idea • Robustness • Scalability • Gurobi Compute Server • Solving speed • Maintenance and support 19 Copyright 2017, Gurobi Optimization, Inc. Switching Examples 20 Copyright 2017, Gurobi Optimization, Inc. The Gurobi Python API – a short Overview m = Model("mip") x = m.addVar(vtype=GRB.BINARY, name="x") y = m.addVar(vtype=GRB.CONTINUOUS, name="y") z = m.addVar(vtype=GRB.INTEGER, name="z") m.setObjective(x + y + 2 * z, GRB.MAXIMIZE) m.addConstr(x + 2 * y + 3 * z <= 4, "c0") m.addConstr(x + y >= 1, "c1") m.optimize() 21 Copyright 2017, Gurobi Optimization, Inc. The Gurobi Python API – a few nice Features • Old: x= {} for i in I: for j in J: x[i,j] = model.addVar(obj=costs[i,j]) for i in I: model.addConstr(sum(x[i,j] for j in J) == d[i]) • New: x = model.addVars(I, J, obj=costs) model.addConstrs(x.sum(i, '*’) == d[i] for i in I) 22 Copyright 2017, Gurobi Optimization, Inc. The Gurobi Python API – a few nice Features • A network flow problem: • Lists commodities, nodes, tuplelist arcs and dictionaries inflow, cost, capacity • Add variables: flow = m.addVars( commodities, arcs, obj=cost, name="flow" ) • Add capacity constraints: m.addConstrs( (flow.sum('*',i,j) <= capacity[i,j] for i,j in arcs), "cap" ) • Add flow conservation constraints: m.addConstrs( (flow.sum(h,'*',j) + inflow[h,j] == flow.sum(h,j,'*') for h in commodities for j in nodes), "node" ) 23 Copyright 2017, Gurobi Optimization, Inc. Switching Solvers inside Modeling Frameworks • Only need to change this line: • PuLP prob.solve( GUROBI_CMD() ) • Pyomo opt = SolverFactory('gurobi') • JuMP m = Model( solver=GurobiSolver() ) • AMPL option solver gurobi_ampl; • GAMS Option MIP = Gurobi; • Adjustment needed for solver parameters 24 Copyright 2017, Gurobi Optimization, Inc. Switching from PuLP • PuLP • Gurobi’s Python API prob = LpProblem( "assignment", LpMinimize ) m = Model( "assignment" ) x = LpVariable.dicts( ”x", (workers, shifts), x = m.addVars( avail, ub=1, name="x" ) 0, 1, LpContinuous ) prob += lpSum( [pay[w] * x[w][s] m.setObjective( quicksum(pay[w]*x[w,s] for w in workers for w,s in avail ), for s in shifts] ), "" GRB.MINIMIZE ) for s in shifts: reqCts = m.addConstrs( prob += lpSum( [avail[w, s] * x[w][s] ( x.sum('*', s) == shiftReq[s] for w in workers for s in shifts ), "_" ) if avail[w, s] != 0] ) == shiftReq[s], "" prob.solve( GUROBI_CMD() ) m.optimize() 25 Copyright 2017, Gurobi Optimization, Inc. More Help • Gurobi website • Documentation • Examples 26 Copyright 2017, Gurobi Optimization, Inc. Getting Started • Get started with Gurobi for free: • Free Academic (site) licenses • Take Gurobi With You (TGWY) Program for your transition into industry • Working with Gurobi consulting partners • Obtain free evaluation licenses • PhD level support • Offers 2 hours free consulting • Parameter tuning • Ask [email protected] for a free Gurobi evaluation license • Run MPS file in Gurobi: gurobi_cl TimeLimit=3600 MIPGap=0.01 myModel.mps or • Send the files to [email protected] 27 Copyright 2017, Gurobi Optimization, Inc..
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages27 Page
-
File Size-