当前位置:   article > 正文

lingo入门-集合和矩阵_lingo矩阵

lingo矩阵

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

例题引入

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

矩阵工厂

测试代码

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

在这里插入图片描述
在这里插入图片描述
① 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

以上程序对应以下知识点:
不是每个矩阵都要赋值,有些矩阵正是我们要求解的变量。
②需要赋值的矩阵必须赋满,不能给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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用矩阵工厂创建后,整个程序用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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

以上程序可以得到以下结论:
① 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));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/55656
推荐阅读
相关标签
  

闽ICP备14008679号