0

我在 GAMS 中制定约束时遇到问题。

我的约束如下:

x_{a,i,v+1,l} - x_{a,i,v,l} \leq y_{a,i,v,l}

和 sum(v,y_{a,i,v,l}) \leq 1。

我曾多次尝试制定它,但我认为(我知道)我做错了。

我在游戏中将其写为:

con15(a,i,v,l)$(ord(v) lt 17).. x(a,i,v,l)$(ord(v) eq ord(v)+1) - x(a, i,v,l) =l= u(a,i,v,l);

con16(a,i,l).. sum(v, u(a,i,v,l)) =l= 1;

一些额外的信息:

我“员工”/i1*i11/

l “天” /l1*l31/

一个“依赖于飞行计划的项目”/a1/

v “小时” /v1*v18/

在约束 con15 中,我说它只适用于小于或等于 17 的 ord(v),这是因为我们有 v1 到 v18。

x 和 y 也是二进制的。

当我运行 GAMS 时,我得到了正常的编译和解决方案。问题是该解决方案违反了我的约束 con16 和 con15。

我使用 ord 和 $ 正确吗?

最好的哈士奇

4

2 回答 2

0

首先,我认为您可以使用 card() 使您的方程式 con15 更通用。这告诉您集合中的元素数量。

此外,“lt”表示严格低于。如果你想包括相等,你必须写“le”。

我会试试这个:

con15(a,i,v,l)$(ord(v) lt card(v)).. x(a,i,v+1,l) - x(a,i,v,l) =l= u(a,i,v,l);

con16(a,i,l).. sum(v, u(a,i,v,l)) =l= 1;

我希望这有帮助。

萨尔瓦。

于 2017-05-29T07:02:42.720 回答
0

最近我在自己的一个项目中遇到了类似的问题,我是 GAMS 新手,但希望这可能会有所帮助:

事实证明,有序集合和添加值并不协调:尝试将您的问题重新表述为使用 v-1 而不是 v+1 的方程。有序集从某个起点开始计数(并计算)并计数(并计算)直到定义的终点:将 +1 添加到尚未计算的点会导致我的模型出现问题,并且可能会为您的模型做同样的事情。祝你好运!

于 2017-05-30T14:31:46.347 回答