一、矩阵的产生

首先引入例题

这个题显然是线性规划的问题,有初始变量和约束条件,求S的最优化。

 

编程方式一:

暴力枚举

如图:

得到结果:

结果如何看呢?

重要的部分只有这么几点:

1、运行时间

2、Objective value:

编程方式二:

定义集合段

带括号表示是矩阵,可以看到我们在set段定义了一些矩阵a,b,x,y;factory代表1到6的称呼。

以上两句话是一个意思,没有必要写那么麻烦,按照解的内容写即可。

 

二、矩阵的赋值

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

data:
a = 1,2,3,4,5,6;
b = 6 5 4 5 3 1;
x =  10 20 30;
enddata

注意一下语法,不要多赋值和少赋值!

sets:

endsets

data

enddata

注意

1、有的矩阵是被求的矩阵,不需要赋值;

2、赋值不能赋值分数;

可以多试会不会报错,要享受报错的过程,这样以后就会怎么不会报错了~~~

三、循环与求和

这一节比较重要

题目中的可以用for循环写出来

@for( gc(i):a(i)*x(i) = s );

max = s;!目标函数;
@for( gc(i):a(i)*x(i) = s );
!for循环要括起整行的语句,比如s不能在外面,这是因为
这句话本质上是循环了刚才暴力写的S=a1*x1直到S=a5*x5;
!for循环的内部呢,一定要先写gc(集合定义的名称)因为gc是定义为
1行5列的矩阵,我们要告诉后面的i是循环了5次(i接在矩阵后面)。
!此处的i可有也可没有,也可以换成j,k,m;
!二维矩阵工厂出现后同时出现i,j就必须带i,j了
以上不太懂没有关系照着先写就行,这只是语法的问题。;

@sum(gc(i):x(i))=5000;

!注意这个5000在外面,因为sum只是x(1)+x(2)+..=5000

 

四、二维矩阵

cooper(gc,plant) : e,f;为5*8的二维矩阵;

例题:

title:example;


sets:
factory /1..6/:a;
plant /1..8/:d;
cooper(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(cooper(i,j):c(i,j)*x(i,j));
@for(factory(i):@sum(plant(j):x(i,j))<=a(i));
!注意sum求和只是x(i,j)这个,不要把a(i,j)也套进去。
sum求和的起止位置很重要。;
@for(plant(i):@sum(factory(j):x(j,i)) = d(i));

鸣谢;

https://www.bilibili.com/video/BV1Ui4y1G7rV?from=search&seid=7530803033979932620


版权声明:本文为qq_30860901原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_30860901/article/details/115840041