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

Next revision
Previous revision
gams:should_i_use_bounds_or_singleton_equations [2007/09/28 13:30]
127.0.0.1 external edit
gams:should_i_use_bounds_or_singleton_equations [2020/05/28 15:29] (current)
Michael Bussieck
Line 7: Line 7:
 and and
 <​code>​ <​code>​
-equation ​xmin(i);+Equation ​xmin(i);
 xmin(i) .. x(i) =g= 1000; xmin(i) .. x(i) =g= 1000;
 </​code>​ </​code>​
Line 16: Line 16:
 and and
 <​code>​ <​code>​
-equation ​xinit;+Equation ​xinit;
 xinit .. x('​i0'​) =e= 777; xinit .. x('​i0'​) =e= 777;
 </​code>​ </​code>​
Line 22: Line 22:
 In general bounds (i.e. ''​x.lo'',​ and ''​x.up''​) are more efficient than equations: a bound does not make the model bigger while an equation does. For solvers with good presolvers this advantage is less pronounced, as the presolver will convert "​singleton equations"​ like x(i) =g= 1000; into bounds automatically. In general bounds (i.e. ''​x.lo'',​ and ''​x.up''​) are more efficient than equations: a bound does not make the model bigger while an equation does. For solvers with good presolvers this advantage is less pronounced, as the presolver will convert "​singleton equations"​ like x(i) =g= 1000; into bounds 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 ''​.holdfixed'' ​model suffix; this will cause GAMS to consider fixed variables as constants. Again, for a solver with a good presolver many fixed +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 issuethey will be removed from the model automatically. 
-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.1190979019.txt.gz · Last modified: 2007/10/20 07:44 (external edit)