我正在解决 AMPL 中的一个小问题,我遇到了一个小问题。我有 4 组A、B、C和D 维数 3和 1 个变量x{A,B} binary和y{B,C} binary。
D的子集的元素都来自A。
A 的每个元素都必须从B中分配一个元素。[这部分完成]
B的指定值中的每个元素都必须从C中指定一个元素。【问题来了】
出于这个原因,我必须定义一个新变量map{A},它将元素从A映射到B(这意味着如果 x[a,b] = 1 则 map[a] = b)。
我想写这样的东西:y[ map[a],c]
where {a in A, c in C} 这意味着 A in B的映射 b在A但是 cplex 给了我错误"continuous variable in index expression"
。
反正有这样做吗?提前致谢。感谢您的帮助。
进一步说明:
假设以下代码:
set A;
set B;
set C;
set D dimen 3; #elements are from A
var x{A,B} binary;
var y{B,C} binary;
var map{A};
forall{a in A} sum {b in B} x[a,b] = 1; #every element from A must have a mapping to B
forall{b in B} sum {c in C} y[b,c] <= 1; #for each element from B, there can be max of 1 mapping to C
subject to mapAtoB{a in A, b in B}: x[a,b] = 1 ==> map[a] = b;
subject to constr{ (i,j,k) in D, c in C }: y[ map[i],c ] + y[ map[j],c ] + y[ map[k],c] = 2; #here is the problem .. I want to be able to say map[i] which is supposed to be equal to some element in B which was assigned to A
data;
set A:= 1 2 3 4;
set B:= a b c;
set C:= i ii iii;
set D: 1 2 3:= (1,2,3) (1,2,4);