lingo入门-集合和矩阵

跟着B站的学习记录:传输门

例题引入

在这里插入图片描述
解法【暴力枚举法】
在这里插入图片描述
在这里插入图片描述

矩阵工厂

测试代码

sets:
factory /1..6/ : a,b;
plant /1..3/ : x,y;
endsets

在这里插入图片描述
在这里插入图片描述
① factory 和 plant 都是制造矩阵的工厂,但它们是两家不同的工厂
② factory 工厂后面的 /1…6/ 说明它专门生产 1 × 6 1\times6 1×6 的矩阵。factory 工厂最后面出现的 a 和 b,都是 1 × 6 1\times6 1×6 的矩阵。
③ plant 工厂后面的 /1…3/ 说明它专门生产 1 × 3 1\times3 1×3 的矩阵。plant 工厂最后面出现的 x 和 y,都是 1 × 3 1\times3 1×3 的矩阵。
矩阵工厂的名字 factory 是随便起的,工厂所生产行矩阵的名字 a 和 b 也是随便起的。
⑤ 以上这四句话,本质是定义了四个行矩阵的大小,矩阵工厂只是中介。
生产完矩阵后,工厂和矩阵之间将脱开联系。
⑦ Lingo 不是一行一行读代码的,所以用 sets:和 endsets 表示矩阵工厂生产流程的起止。

矩阵的赋值

sets:
factory /1..6/ : a,b;
plant /1..3/ : c,x;
endsetsdata:
a = 1, 2, 3, 4, 5, 6;
b = 6.0, 5.0, 4.0, 3.0, 2.0, 1.0;
c = 10, 20, 30;
enddata

以上程序对应以下知识点:
不是每个矩阵都要赋值,有些矩阵正是我们要求解的变量。
②需要赋值的矩阵必须赋满,不能给6个元素的矩阵只赋3个数值。
③Lingo中可以给矩阵赋整数,也可以赋小数,但是不能赋值分数
④Lingo不是一行一行读代码的,所以用data:和enddata表示矩阵赋值的起止。

函数循环与求和

在这里插入图片描述

model:
sets:
gc /1..5/:a,x;
endsets

data:
a = 1, 2, 3, 4, 5;
enddata

max=s;
@for( gc(i):s=a(i)*x(i) );
@sum(gc(i):x(i))=5000;
end

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用矩阵工厂创建后,整个程序用modelend包起来

二维矩阵

sets:
factory /1..6/ : a;
plant /1..8/ : d;
Cooperation(factory,plant) : c, x;
endsets

data:
c=6,2,6,7,4,2,5,8
 4,9,5,3,8,5,8,2
 5,2,1,9,7,4,3,3
 7,6,7,3,9,2,7,1
 2,3,9,5,7,2,6,5
 5,5,2,2,8,1,4,3;
enddata

以上程序可以得到以下结论:
① Cooperation 大工厂是由 factory 和 plant 两家小工厂合并而办,可生产 6 × 8 6\times8 6×8 的矩阵。 ② a 是 1 × 6 1\times6 1×6 的矩阵,d 是 1 × 8 1\times8 1×8 的矩阵,c 和 x 都是 6 × 8 6\times8 6×8 的矩阵。
③ 如果将 Cooperation(factory,plant)中的 factory 与 plant 调换位置,则生产 8 × 6 8\times6 8×6 的矩阵。
④ 工厂合并的名字 Cooperation 是随便起的,矩阵的名字 c 和 x 也是随便起的。

练习

在这里插入图片描述

model:

sets:
factory /1..6/ : a;
plant /1..8/ : d;
coo(factory,plant) : c, x;
endsets

data:
a=60,55,51,43,41,52;
d=35,37,22,32,41,32,43,38;
c=6,2,6,7,4,2,5,8
 4,9,5,3,8,5,8,2
 5,2,1,9,7,4,3,3
 7,6,7,3,9,2,7,1
 2,3,9,5,7,2,6,5
 5,5,2,2,8,1,4,3;
enddata

min=@sum(coo(i,j):c(i,j)*x(i,j));
!min=@sum(factory(i):@sum(plant(j):c(i,j)*x(i,j)));
@for(factory(i):@sum(plant(j):x(i,j))<a(i));
@for(plant(j):@sum(factory(i):x(i,j))=d(j));

输出结果
在这里插入图片描述

  • 33
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hyacinth&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值