使用 Cplex 时如何将两个数组中的每个对应元素相乘
How to multiply each corresponding elements in two arrays when using Cplex
有两个数组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
:)..
对于所有(cRange中的c)
sum(a 在 aRange 中,b 在 bRange 中) x[a][b] *A1[a][c]*A2[b][c]
但是右手边不见了。您要形式化约束或 objective 函数吗?您熟悉通用数学模型符号吗?
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]]
有两个数组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
:)..
对于所有(cRange中的c) sum(a 在 aRange 中,b 在 bRange 中) x[a][b] *A1[a][c]*A2[b][c]
但是右手边不见了。您要形式化约束或 objective 函数吗?您熟悉通用数学模型符号吗?
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]]