如何为变量添加条件 - GAMS
How to add a condition to a variable - GAMS
在我尝试构建的模型中,我有一个变量定义为:
Variables
x(i,j) number of motors produced in month i to be delivered in month j ;
在该变量中,j 必须始终等于或大于 i 才有意义(您不能在本月生产要在上个月交付的东西)。
但是,我不知道如何正确建模。我已经搜索过,但找不到一个简单的解决方案。
有什么想法吗?
所以,我在声明变量后立即添加:
x.fx(i,j)$(ord(i)>ord(j))=0;
它正在将您不使用的变量的值固定为零。在您的模型中:
结果是:
我认为应该这样做:)
您应该为此使用 "variables with limited domains",查看此处了解更多详情,这是一个相当新的 GAMS 功能:https://www.gams.com/latest/docs/UG_ModelSolve.html#UG_ModelSolve_LimitedDomain
因此,在您的示例中,它看起来像这样:
Set limX(i,j) limiting domain of x;
limX(i,j) = ord(j) >= ord(i);
Model m /all, x(limX)/;
...
编辑:更正了模型语句的语法。
在我尝试构建的模型中,我有一个变量定义为:
Variables
x(i,j) number of motors produced in month i to be delivered in month j ;
在该变量中,j 必须始终等于或大于 i 才有意义(您不能在本月生产要在上个月交付的东西)。 但是,我不知道如何正确建模。我已经搜索过,但找不到一个简单的解决方案。
有什么想法吗?
所以,我在声明变量后立即添加:
x.fx(i,j)$(ord(i)>ord(j))=0;
它正在将您不使用的变量的值固定为零。在您的模型中:
结果是:
我认为应该这样做:)
您应该为此使用 "variables with limited domains",查看此处了解更多详情,这是一个相当新的 GAMS 功能:https://www.gams.com/latest/docs/UG_ModelSolve.html#UG_ModelSolve_LimitedDomain
因此,在您的示例中,它看起来像这样:
Set limX(i,j) limiting domain of x;
limX(i,j) = ord(j) >= ord(i);
Model m /all, x(limX)/;
...
编辑:更正了模型语句的语法。