gams:should_i_use_bounds_or_singleton_equations

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

Both sides previous revision Previous revision | |||

gams:should_i_use_bounds_or_singleton_equations [2020/05/28 15:16] Michael Bussieck |
gams:should_i_use_bounds_or_singleton_equations [2020/05/28 15:29] (current) Michael Bussieck |
||
---|---|---|---|

Line 25: | Line 25: | ||

Nonlinear solvers usually do not violate bounds, because bounds describe the region where function and derivative calculations are possible, e.g. ''log(x)'' with ''x.lo=1e-6;''. A constraint ''xlo.. x =g= 1e-6;'' can in principle be violated by the solvers feasibility tolerance. If this tolerance is larger than 1e-6 then the 0 (and negative numbers) becomes part of the region where the solver can evaluate points and hence might triggers evaluation errors. | Nonlinear solvers usually do not violate bounds, because bounds describe the region where function and derivative calculations are possible, e.g. ''log(x)'' with ''x.lo=1e-6;''. A constraint ''xlo.. x =g= 1e-6;'' can in principle be violated by the solvers feasibility tolerance. If this tolerance is larger than 1e-6 then the 0 (and negative numbers) becomes part of the region where the solver can evaluate points and hence might triggers evaluation errors. | ||

+ | |||

+ | In general, so bounds are prefered over single equations. The following example illustrates different ways of fixing variables: | ||

+ | |||

+ | <code> | ||

+ | Set j / 1*10 /; | ||

+ | Parameter a(j); | ||

+ | a(j) = uniform(1,10); | ||

+ | Variables x(j), z; | ||

+ | Equations f(j), obj; | ||

+ | obj.. z =e= sum{j, power(x(j)-4,2)}; | ||

+ | f(j).. x(j) =e= a(j); | ||

+ | model foo / obj / | ||

+ | bar / obj, f /; | ||

+ | | ||

+ | * This model has many constraints, many free variables | ||

+ | * The solver has freedom in presolving/removing them (if it can) or not | ||

+ | * In the listing, the nonzero marginals are on the equation f(j) | ||

+ | solve bar using nlp minimizing z; | ||

+ | |||

+ | * This model has one constraint, many variables | ||

+ | * The solver has freedom in presolving/removing them (if it can) or not | ||

+ | * In the listing, the nonzero marginals are on the variables x(j) | ||

+ | x.fx(j) = a(j); | ||

+ | solve foo using nlp minimizing z; | ||

+ | |||

+ | * With holdfixed on, the solver sees only one constraint, one variable | ||

+ | * It doesn’t even know the variable x exists | ||

+ | * In the listing, you won’t see any marginals for x, since the solver never saw x | ||

+ | x.m(j) = 0; | ||

+ | foo.holdfixed = 1; | ||

+ | solve foo using nlp minimizing z; | ||

+ | </code> | ||

IMPRESSUM / LEGAL NOTICE
PRIVACY POLICY
gams/should_i_use_bounds_or_singleton_equations.txt · Last modified: 2020/05/28 15:29 by Michael Bussieck