GAMS:我如何制定约束$ x_ {a,i,v + 1,l} - x_ {a,i,v,l} \ leq y_ {a,i,v,l} $?

时间:2017-05-27 00:31:45

标签: constraints conditional gams-math

我遇到了在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.

我曾试图多次制定它,但我想(我知道)我做错了。

我在gams中写道:

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“days”/ l1 * l31 /

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

v“hour”/ v1 * v18 /

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

x和y也是二进制的。

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

我使用ord和$正确吗?

最佳赫斯基

2 个答案:

答案 0 :(得分: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;

我希望这会有所帮助。

萨尔瓦。

答案 1 :(得分:0)

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

结果证明有序集合和添加值不能很好地融合:尝试将问题重新表述为v-1而不是v + 1的等式。有序集从某个起始点开始计数(和计算)并计数(并计算)直到定义的结束点:向尚未计算的点添加+1会导致我的模型出现问题,并且可能对您的模型执行相同操作。祝好运!