# CPLEX: Strange behaviour with big M constraints

 1 Ehsan is correct that large values of M are a known source of numerical instability. Also, you may need to worry about more than just the integrality tolerance; the constraint tolerance will determine whether a value of $$a$$ slightly less than $$b$$ is accepted as feasible. If you cannot find a reasonably small value of M that is valid, you might want to do a search for "combinatorial Benders cuts" -- Benders decomposition to eliminate the need for big M versions of logical implication constraints. answered 07 Nov '15, 17:31 Paul Rubin ♦♦ 14.6k●4●12 accept rate: 19% For example, I have a conditional constraint: if c = 1 --> a >= b Using big M-constraint the constraint will be modelled as: a - b + (1-c)*M >=0. Can you please give me an example about using combinatorial benders cuts to model the problem (in interactive optimizer)? Thank you so much. (09 Nov '15, 07:48) Nero The interactive optimizer is unsuitable for any sort of decomposition method, including Benders. You would have to use one of the programming APIs (or possibly OPL models and a script to let them interact). CPLEX ships with source code for a number of examples, and I believe there is at least one Benders example among them. A reference for combinatorial Benders cuts is "Combinatorial Benders' Cuts for Mixed-Integer Linear Programming" by Gianni Codato and Matteo Fischetti (Operations Research vol. 54, no. 4, 2006). (09 Nov '15, 09:59) Paul Rubin ♦♦
 1 Choosing very large big-M values could cause numerical instability. You should try finding the smallest value for each big-M constraint that would ensure accepting all the feasible solutions and rejecting the infeasible ones. This could be done either based on a structural property of the problem data or trial and error. answered 02 Nov '15, 11:54 Ehsan ♦ 4.8k●3●11●22 accept rate: 16%
 toggle preview community wiki

By Email:

Markdown Basics

• *italic* or _italic_
• **bold** or __bold__
• image?![alt text](/path/img.jpg "Title")
• numbered list: 1. Foo 2. Bar
• to add a line break simply add two spaces to where you would like the new line to be.
• basic HTML tags are also supported

Tags:

×190
×71
×1