我有两套:
set s1 := 0 1 5 6 ;
set s2 := 3 4 8 9 ;
我需要一个约束来从这些集合中选择数据,如下所示:
subject to sym1{i in 0..3 , j in 0..3 : i=j } : x[0,s1[i],0] = x[1,s1[j],0];
这意味着从s1和s2中选择数据应该是这样的:
x[0,0,0] = x[1,3,0];
x[0,1,0] = x[1,4,0];
x[0,5,0] = x[1,8,0];
x[0,6,0] = x[1,9,0];
但我写的代码有语法错误。 你能帮我吗
由于
答案 0 :(得分:0)
执行此操作的一种方法是将集合声明为ordered
并将member
函数用于其索引的集合元素:
set s1 ordered := {0, 1, 5, 6};
set s2 ordered := {3, 4, 8, 9};
subject to sym1{i in 1..4}: x[0, member(i, s1), 0] = x[1, member(i, s2), 0];
或者,您可以使用参数替换集:
param s1{1..4};
param s2{1..4};
subject to sym1{i in 1..4}: x[0, s1[i], 0] = x[1, s2[i], 0];
data;
param s1 :=
1 0
2 1
3 5
4 6;
param s2 :=
1 3
2 4
3 8
4 9;