AMPL,从两组中选择数据

时间:2014-10-31 15:45:18

标签: ampl

我有两套:

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];

但我写的代码有语法错误。 你能帮我吗

由于

1 个答案:

答案 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;