在GAMS中,变量和参数有什么区别?

时间:2018-10-14 11:24:06

标签: gams-math

在GAMS中,变量和参数有什么区别?

在哪种情况下,其中一种比另一种更好?

1 个答案:

答案 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中是什么)。

知道参数值是在编译时计算的,而变量是在求解(或执行时间)期间计算的,这也可能很有趣。