在GAMS中,变量和参数有什么区别?
在哪种情况下,其中一种比另一种更好?
答案 0 :(得分:2)
参数用于将数据引入模型。 该数据可用于方程式,并且不受优化影响。数学上,您可能会想到一个常数。 (决定)变量在优化过程中是“变量”。优化结束后,报告最佳状态中变量的值。
模型是否应该确定数据值(例如产量,分配等):
是->变量
否->参数
从GAMS网站上获取Tansport Problem Example,目的是最大程度地减少将货物从2家工厂运送到3个市场的成本。
由于知道了两个工厂之间的距离(我们无法更改或要决定什么,所以),此数据作为参数(在本例中为表格)输入到模型中
Table d(i,j) distance in thousands of miles
New-York Chicago Topeka
Seattle 2.5 1.7 1.8
San-Diego 2.5 1.8 1.4 ;
此外,在这种类型的模型中,运费是已知的。由于此数据(每千里每装运箱的美元价值)是一维的,因此可以将其作为标量(也是参数)输入
Scalar f freight in dollars per case per thousand miles /90/ ;
有了这些信息,您可以通过将运费乘以不同工厂之间的距离来计算运费。
Parameter
c(i,j) transport cost in thousands of dollars per case ;
c(i,j) = f * d(i,j) / 1000 ;
如您所见,我们通过指定货运成本和罐头厂之间的距离的函数,为参数c(i,j)分配了一个值。 与模型类型(LP,MIP,NLP等)无关,只要不涉及决策变量,我们就可以在计算参数值时使用非线性函数。
现在模型可以决定的唯一事情是不同工厂(i)和市场(j)之间的运输量,在我们的模型中标记为x(i,j)
cost .. z =e= sum((i,j), c(i,j)*x(i,j)) ;
我希望这个小例子能指出参数和决策变量(至少在GAMS中是什么)。
知道参数值是在编译时计算的,而变量是在求解(或执行时间)期间计算的,这也可能很有趣。