使用Cplex时如何将两个数组中的每个对应元素相乘

时间:2019-09-19 06:20:31

标签: cplex mixed-integer-programming

有两个数组A1[a][c], A2[b][c]

现在我正在尝试将这两个数组的每个对应元素相乘。

int a = 3;
int b = 4;
int c = 5;

range aRange = 1..a;
range bRange = 1..b;
range cRange = 1..c;

int A1[aRange][cRange] = [[1,2,2,1,3]
                          [1,1,1,1,1]
                          [1,1,1,1,1]];

int A2[bRange][cRange] = [[2,2,2,2,2]
                          [2,3,1,3,2]];


dvar boolean x[a][b];

如果决策变量选择x[1][2],那么我想得到一个将每个对应元素[1*2,2*3,2*1,1*3,3*2]乘以这样的数组的结果。

另外,要获取1*2+2*3+2*1+1*3+3*2=19的值:)。

2 个答案:

答案 0 :(得分:0)

全部(cRange中的c)         sum(a在aRange中,b在bRange中)x [a] [b] * A1 [a] [c] * A2 [b] [c]

但是右侧不见了。您是否要形式化约束或目标函数?您是否熟悉通用数学模型符号?

答案 1 :(得分:0)

int a = 3;
int b = 4;
int c = 5;

range aRange = 1..a;
range bRange = 1..b;
range cRange = 1..c;

int A1[aRange][cRange] = [[1,2,2,1,3],
                          [1,1,1,1,1],
                          [1,1,1,1,1]];

int A2[bRange][cRange] = [[2,2,2,2,2],
                          [2,3,1,3,2]];

int R[i in aRange][j in bRange]=sum(k in cRange) A1[i][k]*A2[j][k];

execute
{
writeln(R);
}   

给予

[[18 19 0 0]
         [10 11 0 0]
         [10 11 0 0]]