Lingo学习心得&2014年研究生数模竞赛E题
来源:互联网 发布:单片机push 编辑:程序博客网 时间:2024/05/01 12:33
第四次数模培训,题目:2014年研究生数学建模竞赛E题。
乘用车物流运输计划问题
前三问:
1. 物流公司要运输Ⅰ车型的乘用车100辆及Ⅱ车型的乘用车68辆。
2. 物流公司要运输Ⅱ车型的乘用车72辆及Ⅲ车型的乘用车52辆。
3. 物流公司要运输Ⅰ车型的乘用车156辆、Ⅱ车型的乘用车102辆及Ⅲ车型的乘用车39辆。
要求制定详细计划,含所需要各种类型轿运车的数量、每辆轿运车的乘用车装载方案、行车路线。(前三问目的地只有一个,可提供一个通用程序)
解决方案:
一、使用matlab将每种轿用车的满载方案求出来
I-I型轿用车
clear all;clc;m = 1;for a = 0:4 %1型车 for b = 0:5 %2型车 if (19- (a*4.71+b*3.715) ) <= 3.715&&(a*4.71+b*3.715)<=19 Up(m,1) = a; Up(m,2) = b; Up(m,3) = 0; m = m + 1; end endendn = 1;for a= 0:4 for b = 0:5 for c = 0:4 if (a*4.71+b*3.715+c*4.73)<=19&&(19-(a*4.71+b*3.715+c*4.73))<=3.715 Down(n,1) = a; Down(n,2) = b; Down(n,3) = c; n = n +1; end end endendk = 1;for i = 1:5 for j = 1:15 Total(k,1) = Up(i,1); Total(k,2) = Down(j,1); Total(k,3) = Up(i,1)+Down(j,1); Total(k,4) = Up(i,2); Total(k,5) = Down(j,2); Total(k,6) = Up(i,2)+Down(j,2); Total(k,7) = Up(i,3); Total(k,8) = Down(j,3); Total(k,9) = Up(i,3)+Down(j,3); k = k + 1; endend
I-II型轿用车
clear all;clc;m = 1;for a=0:5 for b=0:6 for c=0:5 if (a*4.71+b*3.715+c*4.73)<=24.3&&(24.3-(a*4.71+b*3.715+c*4.73))<=3.715 Down(m,1)=a; Down(m,2)=b; Down(m,3)=c; m = m + 1; end end endendn =1;for a=0:5 for b=0:6 if (a*4.71+b*3.715)<=24.3&&(24.3-(a*4.71+b*3.715))<=3.715 Up(n,1)=2*a; Up(n,2)=2*b; Up(n,3) = 0; n = n + 1; end endendk = 1;for i = 1:6 for j = 1:22 Total(k,1) = Up(i,1); Total(k,2) = Down(j,1); Total(k,3) = Up(i,1)+Down(j,1); Total(k,4) = Up(i,2); Total(k,5) = Down(j,2); Total(k,6) = Up(i,2)+Down(j,2); Total(k,7) = Up(i,3); Total(k,8) = Down(j,3); Total(k,9) = Up(i,3)+Down(j,3); k = k + 1; endend
将每种方案中的三种车的数量算出来,并存储到一个txt文件中。
接下来就是用Lingo进行线性规划
代码如下
model: sets: YI/1..75/:x1,y1,z1,m; ER/1..132/:x2,y2,z2,n; endsets data: x1 = @file('C:\Users\Desktop\1.txt'); y1 = @file('C:\Users\Desktop\1.txt'); z1 = @file('C:\Users\Desktop\1.txt'); x2 = @file('C:\Users\Desktop\1.txt'); y2 = @file('C:\Users\Desktop\1.txt'); z2 = @file('C:\Users\Desktop\1.txt'); enddata @sum(YI(I):x1(I)*m(I))+@sum(ER(J):x2(J)*n(J)) = 39; @sum(YI(I):y1(I)*m(I))+@sum(ER(J):y2(J)*n(J)) = 0; !第一问; !@sum(YI(I):x1(I)*m(I))+@sum(ER(J):x2(J)*n(J)) >= 100; !@sum(YI(I):y1(I)*m(I))+@sum(ER(J):y2(J)*n(J)) >= 68; !第二问; !@sum(YI(I):y1(I)*m(I))+@sum(ER(J):y2(J)*n(J)) >= 72; !@sum(YI(I):z1(I)*m(I))+@sum(ER(J):z2(J)*n(J)) >= 52; !第三问; !@sum(YI(I):x1(I)*m(I))+@sum(ER(J):x2(J)*n(J)) >= 156; !@sum(YI(I):y1(I)*m(I))+@sum(ER(J):y2(J)*n(J)) >= 102; !@sum(YI(I):z1(I)*m(I))+@sum(ER(J):z2(J)*n(J)) >= 39; !@sum(ER(I):n(I)) <= 0.2*@sum(YI(J):m(J)); min = @sum(ER(I):n(I)) + @sum(YI(J):m(J)); @for(YI:@gin(m)); @for(ER:@gin(n));end
Lingo学习的总结:
1、集的理解
sets: YI/1..75/:x1,y1,z1,m; ER/1..132/:x2,y2,z2,n; endsets
在sets 和 endsets命令中设置集,集给人的体验就是首先有一个集的名称,紧接着在集名称后面接上/ /,双斜杠中的内容称之为集的成员,接上:后就是集的属性,这样一个集就生成了。
其感觉就像是集的属性相当于几个数组,而数组的大小就是集成员的大小,而且这个数组的地址不是数字,就是集的成员,比如集的成员为/mon..sun/,那么这个集的属性A就是A[mon]~A[sun]。
2、Lingo中数据的定义
data: x1 = @file('C:\Users\njut\Desktop\1.txt'); y1 = @file('C:\Users\njut\Desktop\1.txt'); z1 = @file('C:\Users\njut\Desktop\1.txt'); x2 = @file('C:\Users\njut\Desktop\1.txt'); y2 = @file('C:\Users\njut\Desktop\1.txt'); z2 = @file('C:\Users\njut\Desktop\1.txt');enddata
在lingo中数据的定义是在data: 和 enddata中完成的,数据的内容基本上是集的属性,在上述例子中我用到了一个@file函数,这个函数就是lingo中的读取文本文件的函数,其用法就是@file(‘文件地址\文件名.txt’),在txt中的数据要用~分开。其意思就是说我每读取一次文件,读取到~位置就停止,当下一次读取这个文件的时候,从上次的~读取到下次的~之间的数据。
3、@sum的使用
@sum函数一般使用在求和上,其用法就是@sum(集名:要求和的函数)。
其中,如果是对这个集中某个属性的部分数据进行求和,那么可以在集名后加上或符号再跟上你要约束的条件,即:集名|约束条件
4、@for的使用
@for函数一般用于约束条件的定义,如果约束条件过多,且具有一定的相似性,那么就可以中@for函数来声明。使用案例:
@for(YI:@gin(m));
比如上述的代码中,YI代表你要循环声明的集,或者是范围,跟上:,后面接上你要循环的内容,在上述的代码中我的意思就是声明YI这个集的属性m全为整数。
- Lingo学习心得&2014年研究生数模竞赛E题
- 数模+lingo
- 背景建模和前景提取 (2017研究生数模竞赛D题)
- 2009年研究生数模竞赛中一道题是跟弹道学有关的, 我这里就搜罗了一些弹道学方面的历史材料
- 05年数模B题DVD在线租赁的LINGO程序
- 2015年研究生数模[D]的后记
- 全国数模竞赛
- 2016数模竞赛论文
- 全国研究生数模比赛结束有感
- 个人总结·2015年研究生数学建模竞赛D题
- 写写做数模竞赛的经验
- 2009年广东省大学生程序设计竞赛 E
- 【题目】2016年全国研究生数学建模竞赛B题 具有遗传性疾病和性状的遗传位点分析
- 研究生互联网竞赛信息渠道
- Lingo
- 数模
- 数模
- E-learning的学习心得
- API
- 配置虚拟域名
- 6174问题求解
- 给你一次机会面试架构师 你会问什么问题?
- static 与 extern
- Lingo学习心得&2014年研究生数模竞赛E题
- 关闭中断
- 数论题集
- 全局异常处理
- 编程之类 数字号码《-》单词之间的转换
- os.Open()和os.OpenFile()
- 自定义一个UIButton
- 切片A = 切片B
- The Log:每个程序员都应该知道有关实时数据的统一抽象(1)概念