gams:formulate_logical_expressions_in_equations

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

Both sides previous revision Previous revision Next revision | Previous revision | ||

gams:formulate_logical_expressions_in_equations [2008/09/23 12:18] support |
gams:formulate_logical_expressions_in_equations [2013/08/05 10:00] support |
||
---|---|---|---|

Line 1: | Line 1: | ||

====== How do I formulate logical expressions in equations? ====== | ====== How do I formulate logical expressions in equations? ====== | ||

- | GAMS does not reformulate logical expressions. You need to do this by hand. If you need help coming up with the right model you should try to read HP Willams Book on Modeling (http://www.amazon.com/Model-Building-Mathematical-Programming-4th/dp/0471997889). It explains how to use the ''bigM'' method to linearize logical constraints. | + | GAMS does not reformulate logical expressions. You need to do this by hand. If you need help coming up with the right model you should try to read HP Williams Book on Modeling (http://www.amazon.com/Model-Building-Mathematical-Programming-4th/dp/0471997889). It explains how to use the ''bigM'' method to linearize logical constraints. |

For example, if you have a logical expression ''i=1 <=> a > b'' then you can reformulate this as | For example, if you have a logical expression ''i=1 <=> a > b'' then you can reformulate this as | ||

- | ''a %%<=%% b + bigM*i'' | + | ''a %%<=%% b + bigM * i'' |

- | ''a > b - bigM*(1-i)'' | + | ''a > b - bigM * (1-i)'' |

- | Try to evaluate: If ''i=1'' then the first constraint will not be effective if ''bigM'' is big enough while the second equation will read ''a>b''. If ''i=0'', the first constraint ensures ''a<=b'' while the second will | + | Try to evaluate: If ''i=1'' then the first constraint will not be effective if ''bigM'' is big enough while the second equation will read ''a>b''. If ''i=0'', the first constraint ensures ''a%%<=%%b'' while the second will |

never be active if ''bigM'' is big enough. The second constraint has some issues since we can't have strict "greater than" constraints in a mathematical programs. So you either don't care what happens to i at | never be active if ''bigM'' is big enough. The second constraint has some issues since we can't have strict "greater than" constraints in a mathematical programs. So you either don't care what happens to i at | ||

the point ''a=b'' or you rewrite the constraint as ''a > b + 1e-6 - bigM*(1-i)'' or some other small number. ''bigM'' can be usually calculated from the data of the problem, don't make it just "big", since the solvers won't | the point ''a=b'' or you rewrite the constraint as ''a > b + 1e-6 - bigM*(1-i)'' or some other small number. ''bigM'' can be usually calculated from the data of the problem, don't make it just "big", since the solvers won't |

IMPRESSUM / LEGAL NOTICE
PRIVACY POLICY
gams/formulate_logical_expressions_in_equations.txt ยท Last modified: 2013/08/05 10:00 by support