100% found this document useful (2 votes)
340 views26 pages

Gurobi Optimization

Best Practices

Uploaded by

Aakriti Agarwal
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (2 votes)
340 views26 pages

Gurobi Optimization

Best Practices

Uploaded by

Aakriti Agarwal
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 26

Modeling:

Best Practices & Techniques


Sonja Mars
Outline
} What makes a model difficult
} Numerical issues in models
} Model debugging

© 2016 Gurobi Optimization


WHAT MAKES A MODEL DIFFICULT

© 2016 Gurobi Optimization


What  makes  a  model  difficult
} Size
} Frequency – a series of related models
} Integer variables
} Quadratic expressions
} Numerical scaling

© 2016 Gurobi Optimization


Model  size
} Models typically become large via copies: regions, products, time, …

} Gurobi is parallel by default


} Parallel MIP consumes memory

} Reducing model size is an art


◦ What should be modeled
◦ What should be approximated

} Solver considerations
◦ Have enough physical memory (RAM) to load & solve model in memory
◦ Use 64-bits
◦ Try compute server or cloud

© 2016 Gurobi Optimization


Frequency:  a  series  of  related  models
} Model may not be so easy when there are many to solve

} Improve solve times via warm starts


◦ Automatic: modify a model in memory rather than create a new model
◦ Manual
– LP: basis and primal/dual starts
– MIP: start vectors

} Sometimes warm starts hurt more than they help


} Try solving from scratch via concurrent

© 2016 Gurobi Optimization


Modifying  a  model
} Change coefficients
◦ Objective
◦ RHS
◦ Matrix
◦ Bounds
} Change variable types: continuous, integer, etc.
} Add variables or constraints
} Delete variables or constraints

} For small changes, modifying a model is more efficient than creating


a new model
◦ Reuse existing model data
◦ Automatically use prior solution as warm-start for new model

© 2016 Gurobi Optimization


Python  example:  modifying  a  model
model = read("usa13509.mps")
model.optimize()

Solved in 7940 iterations and 0.15 seconds


Optimal objective 1.959148400e+07

x105 = model.getVarByName("x105")
x105.LB = 0.6
model.optimize()

Solved in 3 iterations and 0.01 seconds


Optimal objective 1.959149680e+07

model.reset()
model.optimize()

Solved in 7931 iterations and 0.14 seconds


Optimal objective 1.959149680e+07

© 2016 Gurobi Optimization


Integer  variables
} In most cases, integer variables make a model more difficult

} General integer variables tend to be more difficult than binary (0-1)

} Things to consider
◦ Which general integers are necessary
◦ Can some variables be approximated

© 2016 Gurobi Optimization


Quadratic  expressions
} Quadratic expressions are much more complex than linear
◦ Especially for constraints: quadratic constraints require the barrier method

} Quadratic is essential for some applications


◦ Financial risk
◦ Engineering

} Quadratic constraints should never be used for logical expressions


◦ Ex: x = 0 or y =0 should not be modeled by x y = 0
◦ More about logical expressions later

© 2016 Gurobi Optimization


NUMERICAL ISSUES IN MODELS

© 2016 Gurobi Optimization


Numerical  issues
} Models are solved via a series of continuous (LP/QP) relaxations

} Computer is limited by numerical precision, typically doubles


◦ In solving an LP or MIP, billions of numerical calculations can lead to an
accumulation of numerical errors

} Typical causes of numerical errors


◦ Scale: too large of a range of numerical coefficients
◦ Rounding of numerical coefficients
– Ex: Don’t write 1/3 as 0.333, if possible multiply constraint with 3

© 2016 Gurobi Optimization


Consequence  of  numerical  issues  – 1  
Set parameter Presolve to value 2

Gurobi Optimizer version 6.5.0 build v6.5.0rc1 (linux64)


Copyright (c) 2015, Gurobi Optimization, Inc.

Read MPS format model from file model.mps.bz2


Reading time = 0.02 seconds
model: 1218 rows, 1560 columns, 4997 nonzeros
Optimize a model with 1218 rows, 1560 columns and 4997 nonzeros
Coefficient statistics:
Matrix range [9e-06, 6e+01]
Objective range [1e+00, 1e+00]
Bounds range [1e-06, 1e+03]
RHS range [0e+00, 0e+00]
Presolve removed 993 rows and 1109 columns
Presolve time: 0.00s
Presolved: 225 rows, 451 columns, 1842 nonzeros

Iteration Objective Primal Inf. Dual Inf. Time


0 -3.3756129e+02 1.151348e+05 0.000000e+00 0s

Solved in 635 iterations and 0.04 seconds


Infeasible model

© 2016 Gurobi Optimization


Consequence  of  numerical  issues  – 2
Set parameter Presolve to value 2
Set parameter OptimalityTol to value 1e-4
Set parameter FeasibilityTol to value 1e-4

...
Presolve removed 993 rows and 1109 columns
Presolve time: 0.00s
Presolved: 225 rows, 451 columns, 1842 nonzeros

Iteration Objective Primal Inf. Dual Inf. Time


0 -3.3756129e+02 1.151348e+05 0.000000e+00 0s
313 -7.9573909e+01 0.000000e+00 0.000000e+00 0s

Solved in 313 iterations and 0.01 seconds


Optimal objective -7.957390880e+01

© 2016 Gurobi Optimization


What  happened?
} Coefficients are numerically difficult
Coefficient statistics:
Matrix range [9e-06, 6e+01]
Objective range [1e+00, 1e+00]
Bounds range [1e-06, 1e+03]
RHS range [0e+00, 0e+00]

} Ideally, this model should be reformulated


} Setting NumericFocus can help

} Setting numerical tolerances is not the way to fix this model


◦ (Not the same as termination criteria)

© 2016 Gurobi Optimization


Consequence  of  numerical  issues  – 3
Set parameter Presolve to value 2
Set parameter NumericFocus to value 2

...
Presolve removed 993 rows and 1109 columns
Presolve time: 0.00s
Presolved: 225 rows, 451 columns, 1842 nonzeros

Iteration Objective Primal Inf. Dual Inf. Time


0 -3.3756129e+02 1.151348e+05 0.000000e+00 0s
391 -2.0000000e+01 0.000000e+00 0.000000e+00 0s

Solved in 391 iterations and 0.01 seconds


Optimal objective -1.999999999e+01

© 2016 Gurobi Optimization


Understanding  Big-­M  coefficients
} “Big-M” coefficients represent penalty values or logic

} Overly large big-M values can give slow performance or wrong


answers
◦ Optimal objective from Gurobi Optimizer: -1.47e+08
◦ Optimal objective from other solver: -2.72e+07

© 2016 Gurobi Optimization


Example:  Wrong  answer  with  Big-­M

} y ≤ 1000000 x
x binary
y ≥ 0

} With default value of IntFeasTol (1e-5):


◦ x = 0.0000099999, y = 9.9999 is integer feasible!
◦ y can be positive without forcing x to 1

© 2016 Gurobi Optimization


Check  log  file  for  warnings
} Gurobi will tell you, if it encountered numerical issues

} Warning during optimization:


Warning: 1 variable dropped from basis
Warning: switch to quad precision
Warning: Markowitz tolerance tightened to 0.0625

} Warnings after optimization is finished:


Warning: max integrality violation (5.0000e-05) exceeds
tolerance
Warning: max SOS violation (9.9353e-05) exceeds tolerance
Warning: max constraint violation (2.5435e-05) exceeds
tolerance
Warning: max bound violation (2.5435e-05) exceeds tolerance
(possibly due to large matrix coefficient range)
Numerical trouble encountered

© 2016 Gurobi Optimization


Looking  at  the  presolved model
} Model.printStats() function in Python API gives a model overview,
can also be used on the presolved model

} Python Interactive Shell:


model=read("misc07.mps")
presolved=model.presolve()
presolved.printStats()

Statistics for model MISC07_pre :


Linear constraint matrix : 211 Constrs, 232 Vars, 8260 NZs
Variable types : 0 Continuous, 232 Integer (232
Binary)
Matrix coefficient range : [ 1, 7 ]
Objective coefficient range : [ 75, 570 ]
Variable bound range : [ 1, 1 ]
RHS coefficient range : [ 1, 3 ]

© 2016 Gurobi Optimization


MODEL DEBUGGING

© 2016 Gurobi Optimization


Model  debugging
} Basic concepts
◦ Naming variables and constraints
◦ Model files

} Advanced debugging
◦ Covered during troubleshooting session

© 2016 Gurobi Optimization


Naming  variables  and  constraints
} Set the VarName and ConstrName attributes to meaningful values
◦ flow_Atlanta_Dallas is more useful than x3615

} Don’t reuse names for multiple constraints or variables


◦ API doesn’t care about the VarName or ConstrName attributes
◦ Create unique, descriptive names to help with debugging

© 2016 Gurobi Optimization


Model  files

MPS format LP format

} Machine-readable } Easy to read and understand


} Full precision } May truncate some digits
} Order is preserved } Order is not preserved

} Best for testing } Best for debugging

REW format RLP format


} Variable and constraint names } Variable and constraint names
anonymized anonymized

© 2016 Gurobi Optimization


Write  model  in  different  formats
} Python:
◦ model.update()

◦ model.write("mymodel.mps")
◦ model.write("mymodel.rew")

◦ model.write("mymodel.lp")
◦ model.write("mymodel.rlp")

© 2016 Gurobi Optimization


LP  format  example

Maximize
x + y + 2 z
Subject To
c0: x + 2 y + 3 z <= 4
c1: x + y >= 1
Bounds
Binaries
x y z
End

© 2016 Gurobi Optimization

You might also like