User Tools

Site Tools


gams:should_i_use_bounds_or_singleton_equations

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
gams:should_i_use_bounds_or_singleton_equations [2020/05/27 16:17]
Lutz Westermann format and link to documentation
gams:should_i_use_bounds_or_singleton_equations [2020/05/28 15:29] (current)
Michael Bussieck
Line 23: Line 23:
  
 Similarly preferably you should not generate many ''​.fx''​ fixed variables. In many cases you can use dollar conditions in the model so that GAMS will not generate them. You can also use the [[https://​www.gams.com/​latest/​docs/​UG_GamsCall.html#​GAMSAOholdfixed|.holdfixed]] model suffix; this will cause GAMS to consider fixed variables as constants. Again, for a solver with a good presolver many fixed variables are not an issue; they will be removed from the model automatically. Similarly preferably you should not generate many ''​.fx''​ fixed variables. In many cases you can use dollar conditions in the model so that GAMS will not generate them. You can also use the [[https://​www.gams.com/​latest/​docs/​UG_GamsCall.html#​GAMSAOholdfixed|.holdfixed]] model suffix; this will cause GAMS to consider fixed variables as constants. Again, for a solver with a good presolver many fixed variables are not an issue; they will be removed from the model automatically.
 +
 +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 NOTICEPRIVACY POLICY gams/should_i_use_bounds_or_singleton_equations.1590589070.txt.gz · Last modified: 2020/05/27 16:17 by Lutz Westermann