我遇到了在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和$正确吗?
最佳赫斯基
答案 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会导致我的模型出现问题,并且可能对您的模型执行相同操作。祝好运!