资源描述:
《运筹学上机实践报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.运筹学实验报告姓名:学号:班级:采矿1103教师:优质范文.(一)实验目的(1)学会安装并使用Lingo软件(2)利用Lingo求解一般线性,运输,一般整数和分派问题(二)实验设备(1)计算机(2)Lingo软件(三)实验步骤(1)打开已经安装Lingo软件的计算机,进入Lingo(2)建立数学模型和Lingo语言(3)输入完Lingo语言后运行得出求解结果LINGO是用来求解线性和非线性规化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。当在windows
2、下开始运行LINGO系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGOModel–LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面是以一般线性,运输,一般整数和分派问题为例进行实验的具体操作步骤:A:一般线性规划问题数学模型(课本31页例11)求解线性规划:Minz=-3x1+x2+x3x1-2x2+x3<=11-4x1+x2+2x3>=3-2x1+x3=1x1,x2,x3>=0优质范文.打开lingo输入min
3、=-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某公司有三个生产同类产品的加工厂(产地),生产的产品由四个销售点(销地)出售,各加工厂的生产量,各销售点的销售量(假设单位均为吨)以及各个加
4、工厂到各销售点的单位运价(元/吨)是如下表,问产品如何调运才能使总运费最小?产销B1B2B3B4产量A14124118A2210395A38511611销量776724运用lingo软件,编制程序的程序解决3发点4收点的运输问题:Model:Sets:Xiao/1..4/:s;Chan/1..3/:h;Link(chan,xiao):x,y;EndesetsData:Y=4124112103985116H=8511;S=4767;EnddataMin=@sum(link:x*y);@for(xiao(j):@sum(chan(i):x(i,j
5、))=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
6、.2)用lingo软件解决如下的整数规划问题:Maxz=4x1+3x23x1+4x2<=124x1+2x2<=9X1,x2>=0X1,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软件已经解
7、决了一般整数问题。D:分派问题数学模型(课本114页例6)优质范文.例6有五个工人,要分派他们分别完成5项工作,每人做各项工作所消耗的时间如下表所示,问应分派哪个人去完成哪项工作,可以使总的消耗时间最小?工人工作ABCDE甲56845乙34661丙55798丁67576戊74628打开lingo,输入如下程序:Model:!5个工人,5个工作的分配问题,设甲,乙,丙,丁,戊五个工人分别用1,2,3,4,5表示;Sets:workers/1..5/;Jobs/A..E/;Links(workers,job):cost,volume;Endset
8、s!目标函数;Min=@sum(links:cost*volume);!每个工人只能有一份工作;@for(job(j):volume(i,j))=1;);!每份工作