运筹学上机实践报告
- 格式:doc
- 大小:113.50 KB
- 文档页数:5
运筹学
实验报告
姓名:
学号:
班级:采矿1103
教师:
(一)实验目的
(1)学会安装并使用Lingo软件
(2)利用Lingo求解一般线性,运输,一般整数和分派问题
(二)实验设备
(1)计算机
(2)Lingo软件
(三)实验步骤
(1)打开已经安装Lingo软件的计算机,进入Lingo
(2)建立数学模型和Lingo语言
(3)输入完Lingo语言后运行得出求解结果LINGO是用来求解线性和非线性规化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。当在windows 下开始运行LINGO系统时,会得到类似下面的一个窗口:
外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model–LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面是以一般线性,运输,一般整数和分派问题为例进行实验的具体操作步骤:
A:一般线性规划问题
数学模型(课本31页例11)
求解线性规划:
Minz=-3x1+x2+x3
x1 - 2x2 + x3<=11
-4x1 + x2 + 2x3>=3
-2x1 + x3=1
x1,x2,x3>=0
打开lingo
输入min=-3*x1+x2+x3;
x1-2*x2+x3<=11;
-4*x1+x2+2*x3>=3;
-2*x1+x3=1;
End
如图所示:
然后按工具条的按钮运行出现如下的界面,也即是运行的结果和所求的解:
结果分析:由longo运行的结果界面可以得到最优解为xb=(x1,x2,x3)T=(4,1,9)T,最优目标函数z=-2.
到此运用lingo解决了一般线性规划问题
B:运输问题
数学模型(课本80页例1)
例1 某公司有三个生产同类产品的加工厂(产地),生产的产品由四个销售点(销地)出售,各加工厂的生产量,各销售点的销售量(假设单位均为吨)以及各个加工厂到各销售点的单位运价(元/吨)是如下表,问产品如何调运才能使总运费最小?
B1 B2 B3 B4 产量
产
销
A1 4 12 4 11 8
A2 2 10 3 9 5
A3 8 5 11 6 11
销量7 7 6 7 24
运用lingo软件,编制程序的程序解决3发点4收点的运输问题:
Model:
Sets:
Xiao/1..4/:s;
Chan/1..3/:h;
Link(chan,xiao):x,y;
Endesets
Data:
Y=4 12 4 11
2 10
3 9
8 5 11 6
H=8 5 11;
S=4 7 6 7;
Enddata
Min=@sum(link:x*y);
@for(xiao(j):@sum(chan(i):x(i,j))=s(j);
@for(chan(i):@sum(xiao(j):x(i,j))=h(i);
此时lingo的框内如下所示:
然后按工具条的按钮运行出现如下的界面,也即是运行的结果和所求的解:
结果:由longo运行的结果界面可以得到该运输问题的最优运输方案为运6吨至B3;运2吨至B4,由A2运4吨至B1,运1吨至B4,由A3运吨7至B2,运4吨至B4,此时对应的的目标函数值为
Z=6X4+2X11+4X2+1X9+7X5+4X6+122(元)
到此lingo软件已经解决了运输问题。
C:一般整数规划问题
数学模型(课本120页习题4.2)
用lingo软件解决如下的整数规划问题:
Maxz=4x1+3x2
3x1+4x2<=12
4x1+2x2<=9
X1,x2>=0
X1,x2为整数
打开lingo,输入如下程序:
Model:
Max=4*x1+3*x2;
3*x1+4*x2<=12;
4*x1+2*x2<=9;
@gin(x1);
@gin(x2);
End
此时lingo的框内如下所示:
然后按工具条的按钮运行出现如下的界面,也即是运行的结果和所求的解:
结果分析:由longo运行的结果界面可以得到此整数规划的最优解x1=1,x2=2,此时的最优解:
Z=10
到此运用lingo软件已经解决了一般整数问题。
D:分派问题
数学模型(课本114页例6)
例6 有五个工人,要分派他们分别完成5项工作,每人做各项工作所消耗的时间如下表所示,问应分派哪个人去完成哪项工作,可以使总的消耗时间最小?
A B C D E
工人
工作
甲 5 6 8 4 5
乙 3 4 6 6 1
丙 5 5 7 9 8
丁 6 7 5 7 6
戊7 4 6 2 8
打开lingo,输入如下程序:
Model:
!5个工人,5个工作的分配问题,设甲,乙,丙,丁,戊五个工人分别用1,2,3,4,5表示; Sets:workers/1..5/;
Jobs/A..E/;
Links(workers,job):cost,volume;
Endsets
!目标函数;
Min=@sum(links:cost*volume);
!每个工人只能有一份工作;
@for(job(j):volume(i,j))=1;);
!每份工作只能有一个工人;
@for(jobs(j):
@sum(workers(i):volume(i,j));
Data:
Cost=5 6 8 4 5
3 4 6 6 1
5 5 7 9 8
6 7 5 7 6
7 4 6 2 8;
Enddata