1、矩阵相乘
求矩阵c,以及c中的最大值和最小值
a = 1 2 3 4 5
5 4 3 2 1
2 3 4 5 6
3 4 5 6 7;
b = 1 2 3
2 3 4
3 4 5
4 5 6
7 8 9;
c = a·b
model:
sets:
var1/1..5/:;
var2/1..4/:;
var3/1..3/:;
link1(var2,var1):a;
link2(var1,var3):b;
link3(var2,var3):c;
endsets
data:
a = 1 2 3 4 5
5 4 3 2 1
2 3 4 5 6
3 4 5 6 7;
b = 1 2 3
2 3 4
3 4 5
4 5 6
7 8 9;
enddata
@for(link3(i,j):c(i,j)=@sum(var1(k):a(i,k)*b(k,j))); !求矩阵c;
M = @max(link3(i,j):@sum(var1(k):a(i,k)*b(k,j)));
N = @min(link3(i,j):@sum(var1(k):a(i,k)*b(k,j)));
end
运行结果:
2、0-1规划
要在A、B、C三个区建立部门,有7个位置Di(i=1,2,3....7)可供选择
在A区,有D1、D2、D3,且3点最多选2个
在B区,有D4、D5,且两点至少选1个
在C区,有D6、D7,且两点至少选1个
并要求投资金额不超过600万元,问如何选择才能使利润最大。
7个点的投资金额与利润
投资金额(万元) | 利润(万元) |
---|---|
100 | 120 |
98 | 108 |
130 | 150 |
160 | 190 |
130 | 160 |
170 | 200 |
88 | 98 |
根据题目我们可以写出方程
max z = 120*x1 + 108*x2 + 150*x3 + 190*x4 + 160*x5 + 200*x6 + 98*x7
100*x1 + 98*x2 + 130*x3 + 160*x4 + 130*x5 + 170*x6 + 88*x7 <= 600
x1 + x2 + x3 <= 2
x4 + x5 >= 1
x6 + x7 >= 1
xi = 0 或 1 (如果在该位置设立,就看成1,否则看成0)
3、指派问题
指派5个人去完成5件事,每个人只做1件事,每件事只能1个人做,
分配第i人去做第j件事所花时间为Cij
问如何分配才能使总花费时间最小?
Cij = 3 8 2 10 3
8 7 2 9 7
6 4 2 7 5
8 4 2 3 5
9 10 6 9 10
创建一个二维变量x,取值为0或1,当i方向所有x的和为1时,就表示一人只做一件事,当j方向所有x的和为1时,就表示一件事只有一个人做。
model:
sets:
var/1..5/:;
link(var,var):x,c;
endsets
data:
c = 3 8 2 10 3
8 7 2 9 7
6 4 2 7 5
8 4 2 3 5
9 10 6 9 10;
enddata
min = @sum(link:c*x);
@for(var(i):@sum(var(j):x(i,j)) = 1);
@for(var(j):@sum(var(i):x(i,j)) = 1);
@for(link:@bin(x));
end
如有错误请指出
来源:CSDN
作者:二刀学霸丶
链接:https://blog.csdn.net/qq_43424214/article/details/104525405