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