lingo学习笔记2

坚强是说给别人听的谎言 提交于 2020-02-28 06:57:48

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

如有错误请指出

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!