数学建模学习(26):Lingo解决线性,非线性,助力建模国赛!
前言
前面一篇文章,我们学到了基本的lingo使用。下面我将会讲到用集合方式来写lingo.当然,你也可以使用matlab,但是我在此是为了加强lingo的使用,因为我们用lingo做出来的分析数据,写论文报告要多一些,hhhxs.
构建分块讲解
集合完整模板如下:
model:
sets:
endsets
data:
enddata
end
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
集合部分语法
sets:
集合名称1/成员列表1/:属性1_1,属性1_2,...,属性1_n1;
集合名称2/成员列表2/:属性2_1,属性2_2,...,属性2_n2;
派生集合名称(集合名称1,集合名称2):属性3_1,...,属性3_n3;
endsets
- 1
- 2
- 3
- 4
- 5
数据部分的语法为:
data:
属性1 = 数据列表;
属性2 = 数据列表;
enddata
- 1
- 2
- 3
- 4
数据计算段部分不能含有变量,必须是已知数据的计算
calc:
b=0;
a=a+1;
endcalc
- 1
- 2
- 3
- 4
线性规划
这样的案例,其实你并不陌生,按照我上一篇,你可以逐行写出目标函数和约束条件。但是这里我以这样的例子用集合例子来写,从而学会集合如何使用。代码如下:
model:
sets:
variable/1..3/:x,c;!定义决策变量;
contrant/1,2/:b;!定义约束变量;
matrix(contrant, variable): A;!定义系数矩阵为A;
endsets
data:
c=4,1,2;!目标函数系数;
b=4 3;
A=2 1 2
3 3 1;
enddata
min=@sum (variable(j):c(j)*x(j));!目标函数 保证每一个c与每一个x相乘;
@for(contrant(i):@sum(variable(j):A(i,j)*x(j))=b(i));!约束的系数求和等于右边值;
end
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
运行结果:
具体你可以把集合形式分为三大块来写:
第一块,定义变量,就是上面例子中的:sets:…endsets
第二块:变量赋值,就是上面例子中的data:…enddata
第三块:目标函数和约束条件表达式计算
如果要讲解起来,实在费劲,上面我有注释,大家可以参考,这个for循环是有点东西的。可以参考下面我提供的基本语法,从而搭建这样一个线性规划。
总结:集合真的麻烦!!
非线性规划
例子如下
整个过程一定要慢慢领悟怎么写的,耐心点,注意看我注释。
model:
!第一步定义集合;
sets:
bianliang/1,2/:x,c;!目标函数:定义变量x,x的系数c;
yueshu/1/:b; !约束条件:与x相关的的是右边的常数b;
juzhen(bianliang,yueshu):A;!矩阵友目标函数和约束函数组成,取名为A;
endsets
!第二步定义数据直接赋值;
data:
c=1 1;
b=1;
A=1 1;
enddata
!第三步开始写目标函数;
min=@sum(bianliang(j):c(j)*x(j)^2);
!第四步开始写约束条件;
@for(yueshu:@sum(bianliang(j):A(j,1)*x(j))>=b);
@for(bianliang:@bnd(0,x,1));
end
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
从而得到全局最优解:
我们还是这个例子,换个简单的写法
代码为:
model:
sets:
variable/1,2/:x,C,A;
endsets
data:
c=1 1;A=1 1;
enddata
min=@sum (variable:c*x^2);
@sum (variable:A*X)>=1;
@for(variable: @bnd (0,x,1));
end
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
同样返回全局最优解,这样简单很多。
总结
后面还有整数规划,0-1规划跟这里的线性与非线性规划是类似的,前提是你要好好理解这里的集合到底是怎么写的,川川在这里希望你要多花时间琢磨一下,不是看一眼就会的。
结合上一篇lingo入门,基本上你已经学会了lingo的使用了,lingo到此为止。后续我将继续开始介绍算法和模型。祝大家建模比赛顺利。
文章来源: chuanchuan.blog.csdn.net,作者:川川菜鸟,版权归原作者所有,如需转载,请联系作者。
原文链接:chuanchuan.blog.csdn.net/article/details/119793037
- 点赞
- 收藏
- 关注作者
评论(0)