运筹学实验指导书Word格式.docx
《运筹学实验指导书Word格式.docx》由会员分享,可在线阅读,更多相关《运筹学实验指导书Word格式.docx(43页珍藏版)》请在冰豆网上搜索。
1.学生在实验操作过程中自己独立完成,1人1组;
2.完成实验报告:
分析结果的正确性,写出简短报告说明各软件的优劣。
3.实验学时:
4学时
四、实验仪器、设备
操作系统为Windows2000及以上的电脑,并装有Office,Lingo,Matlab软件,1stopt软件自行下载,无需安装。
五、实验步骤
上机:
建立下列问题的数学规划模型,并尝试用各种软件进行求解。
问题:
某制药厂生产甲、乙两种药品,生产这两种药品要消耗某种维生素。
生产每吨药品所需要的维生素量分别为30Kg,20Kg,所占设备时间分别为5台班,1台班,该厂每周所能得到的维生素量为160kg,每周设备最多能开15个台班。
且根据市场需求,甲种产品每周产量不应超过4t。
已知该厂生产每吨甲、乙两种产品的利润分别为5万元及2万元。
问该厂应如何安排两种产品的产量才能使每周获得的利润最大?
每吨产品的消耗
每周资源总量
甲
乙
维生素/kg
30
20
160
设备/台班
5
1
15
附录1:
Excel规划求解,用于求解线性规划。
见附件
附录2:
1stOPT用于求解线性规划。
附录3:
Matlab用于求解线性规划。
1.模型minz=cX
S.t.AX≤b
命令:
x=linprog(c,A,b)
2.模型minz=cX
AeqX=Beq
x=linprog(c,A,b,Aeq,beq)
注意:
若没有不等式:
AX≤b约束,则令A=[],b=[].
3.模型minz=cX
VLB≤X≤VUB
x=linprog(c,A,b,Aeq,beq,VLB,VUB)
若没有等式:
AeqX=Beq约束,则令A=[],b=[].
4.命令:
[x,fval]=linprog(…)
返回最优解x及x处的目标函数值fval.
附录4:
Lingo用于求解小规模线性规划问题
对于小型线性规划模型的求解,LINGO中可以用一种与线性规划的数学模型及其类似的方式直接输入模型来求解,简单方便。
例1.1求解下面的线性规划
maxz=2x1+3x2
x1+2x2≤8
4x1≤16
4x2≤16
x1,x2≥0
LINGO中的输入的代码如图2所示,这种输入方式的优势在于适合LINDO系统。
图2
注1:
LINGO中输入的代码和线性规划模型的差异如下:
(1)maxz→max,minz→min;
(2)每一行(包括目标函数)用英文的分号结束;
(3)数与变量的乘积用*表示;
(4)不等号≤和≥用<
=和>
=或<
和>
表示;
(5)LINGO系统默认所有的变量非负,因此非负变量的约束可省略,而非正变量和自由变量要用x1<
=0和@free(x2)表示;
(6)LINGO中不能输入下标,x1→x1。
图3
注2:
例1.1的模型求解还可以按图4的方式输入代码求解。
此时LINGO中输入的代码和线性规划模型的除注1的相关差异外,还有如下不同:
(1)数与变量的乘积,乘号用空格表示;
(2)约束条件之前用s.t.或subjectto表示后面是约束;
(3)每行后面不用分号结束;
(4)这种输入法的好处是和LINDO的输入一致,可以直接在LINDO中求解,做灵敏度分析较方便,也能得到最优单纯形表。
图4
点菜单栏的LINGO→Solver,或直接点工具栏上的,可得求解结果即解的状况(SolverStatus)和解报告(SolutionReport):
图5
关于图5的SolverStatus的注释如下:
(1)Model(模型)LP(线性规划Linearprogramming,其它模型还有非线性规划NLP(Nonlinearprogramming),整数线性规划ILP(Integer),整数非线性规划INLP)
(2)State(状态)GlobalOpt(整体最优解Globaloptimalsolution,线性规划的最优解都是整体最优解,非线性规划有局部最优解(LocalOpt)和整体最优解之分,其它状态还有无可行解(Infeasible)图7和无界解(Unbounded)图8)
(3)Objective,目标函数值为14,由于处于最优解状态,所以这里表示最优值为14。
(4)Infeasibility0,不可行性0,表示此时有可行解,否则没有可行解。
(5)Iteration1,表示迭代了1步求得最优解。
(6)ExtendedSolverStatus,表示扩展的解的状况,主要用于整数规划和非线性规划。
(7)Variables,表示变量,Total2,表示总决策变量2个,非线性(Nonlinear)变量和整数(Integer)变量都是0个。
(8)Constraints,表示约束,Total4,表示包括目标函数一共4个约束,非线性(Nonlinear)约束0个。
(9)Nonzeros,表示非零系数,Total6,表示包括目标函数和约束条件中变量的非零系数6个,右端常数项不算。
图6
图7
图8
关于图6的SolutionReport的注释如下:
(1)Globaloptimalsolutionfound.整体最优解被找到。
(2)Objectivevalue:
14.00000.最优值为14。
(3)Totalsolveriterations:
1.求解的总迭代步数为1步。
(4)VariableValueReducedCost
X14.0000000.000000
X12.0000000.000000
最优解的变量X1=4.000000,X2=2.000000。
(5)ReducedCost:
表示减少的成本,即最小化问题的最优目标函数中各变量的检验数,即在其它变量不变时,该变量减少一个单位,目标费用减少的数量如图8。
对于最大化问题,是最优目标函数中各变量的检验数的相反数,表示当该变量增加一个单位时目标函数减少的数量如图9。
这里由于上面X1和X2为取值非零的基变量,所以检验数为零。
ReducedCost为在最优解时,最小化问题中变量的检验数,最大化问题中变量检验数的相反数。
(6)RowSlackorSurplusDualPrice
114.000001.000000
20.0000001.500000
30.0000000.1250000
44.0000000.000000
SlackorSurplus表示松弛或剩余变量,即将最优解带入各个约束条件后,左边比右边小的或大的数量,表示在最优方案中,剩余或超过的资源数量。
注意,这里第一行表示目标函数,其松弛或剩余变量和对偶价格都没有意义。
(7)DualPrice,对偶价格,即最大化问题中对偶变量的最优解的值如图9所示,对于最小化问题,对偶价格为对偶变量的最优解的值的相反数。
图9
图10
例1.2求解下面线性规划的数学模型
minz=-3x1+4x2-2x3+5x4;
4x1-x2+2x3-x4=-2;
x1+x2+3x3-x4≤14;
-2x1+3x2-x3+2x4≥2;
x1,x2,x3≥0,x4无约束;
LINGO中输入如下的代码:
min=-3*x1+4*x2-2*x3+5*x4;
4*x1-x2+2*x3-x4=-2;
x1+x2+3*x3-x4<
=14;
-2*x1+3*x2-x3+2*x4>
=2;
@free(x4);
求解可得解报告:
Globaloptimalsolutionfound.
Objectivevalue:
2.000000
Totalsolveriterations:
0
VariableValueReducedCost
X10.00000015.50000
X28.0000000.000000
X30.0000008.500000
X4-6.0000000.000000
RowSlackorSurplusDualPrice
12.000000-1.000000
20.0000004.500000
30.0000000.5000000
410.000000.000000
实验二Lingo求解较大规模线性规划问题
2.熟悉Lingo求解较大规模线性规划问题.
1.对线性规划问题的习题,列出线性规划模型并求解;
2.用Lingo编写程序,对所建立线性规划模型求解;
分析结果的正确性,说明对于大规模线性规划问题的求解Lingo具有的优势。
操作系统为Windows2000及以上的电脑,并装有Lingo软件。
五、实验内容及步骤
教学过程中所见到的运筹学模型大多是小规模的,但是,在解决生产和经营管理活动中的实际时,建立的通常是含有很多和变量和约束条件的模型,用前面的方法,经常要花费大量的时间来输入代码或模型,下面介绍编程的方法,对于解决大型复杂的模型,效果显著。
例2.1求解下面线性规划的数学模型;
编程如下:
!
定义变量与常量,给出了值的为常量;
sets:
is/1..3/:
b;
js/1..4/:
c,x;
links(is,js):
a;
endsets
目标函数;
min=@sum(js(J):
c(J)*x(J));
约束条件;
@sum(js(J):
a(1,J)*x(J))=b
(1);
a(2,J)*x(J))<
=b
(2);
a(3,J)*x(J))>
=b(3);
自由变量;
@free(x(4));
指定常量的值;
data:
c=-34-25;
b=-2142;
a=4-12-1
113-1
-23-12;
enddata
结束;
end
2
B
(1)-2.0000000.000000
B
(2)14.000000.000000
B(3)2.0000000.000000
C
(1)-3.0000000.000000
C
(2)4.0000000.000000
C(3)-2.0000000.000000
C(4)5.0000000.000000
X
(1)0.00000015.50000
X
(2)8.0000000.000000
X(3)0.0000008.500000
X(4)-6.0000000.000000
A(1,1)4.0000000.000000
A(1,2)-1.0000000.000000
A(1,3)2.0000000.000000
A(1,4)-1.0000000.000000
A(2,1)1.0000000.000000
A(2,2)1.0000000.000000
A(2,3)3.0000000.000000
A(2,4)-1.0000000.000000
A(3,1)-2.0000000.000000
A(3,2)3.0000000.000000
A(3,3)-1.0000000.000000
A(3,4)2.0000000.000000
这里以!
开始和分号结束的语句为注释语句,该程序的求解方法和解报告与小型模型类似,只是编程的解报告会把所有的系数也表述出来而已。
从例2.1可以看出,一个LINGO的程序由四个部分组成。
1.以“sets:
”开始,以“endsets”结束的语句定义模型中出现的变量集。
2.以sets中定义的变量和常量来表达目标函数。
3.以sets中定义的变量和常量来表达全部的约束条件。
4.以“data:
”开始,以“enddata”结束的语句给常量指定数值。
上机内容:
建立下列配料问题的数学模型,并用lingo求解。
配料问题:
某工厂要用三种原材料C、P、H混合调配出三种不同规格的产品A、B、D。
已知产品的规格要求,产品单价,每天能供应的原材料数量及原材料单价,分别见表1和表2。
该厂应如何安排生产,使利润收入为最大?
表1
产品名称
规格要求
单价(元/kg)
A
原材料C不少于50%
原材料P不超过25%
50
B
原材料C不少于25%
原材料P不超过50%
35
D
不限
25
表2
原材料名称
每天最多供应量(kg)
C
100
65
P
H
60
实验三灵敏度分析
1.理解灵敏度分析的概念和意义
2.熟悉excel和Lingo灵敏度分析结果.
1.对线性规划问题的习题,用软件进行计算并导出分析报告;
2.用excel或Lingo求解线性规划,并验证灵敏度分析的结果;
对灵敏度分析的概念和意义的理解;
2学时。
操作系统为Windows2000及以上的电脑,并装有Excel,Lingo软件。
在求解了一个线性规划的模型的时候,如果是编程输入的模型,还可以通过LINGO中的命令显示线性规划的数学模型。
例3.1通过操作,以下程序的数学模型。
求解下面的线性规划
用LINGO编程求解的线性规划模型
js/1..2/:
max=@sum(js(J):
@for(is(I):
@sum(js(J):
a(I,J)*x(J))<
=b(I));
直接输入数据;
c=23;
b=81612;
a=12
40
04;
图11
图12
图13
MODEL:
[_1]MAX=2*X_1+3*X_2;
[_2]X_1+2*X_2<
=8;
[_3]4*X_1<
=16;
[_4]4*X_2<
=12;
END
只是系统默认的非负约束没有显示,下图表明自由变量和非正变量都会显示出来。
图14
下面的图演示了对线性规划的灵敏度分析
首先求解一个线性规划模型,然后选中“prices&
Ranges”
图15
然后在菜单LINGO→Ranges
图16
点击Ranges,得到在最优基或最优解不变时,单个价值系数和右端系数变化范围的灵敏度分析结果。
图17
Rangesinwhichthebasisisunchanged:
ObjectiveCoefficientRanges
CurrentAllowableAllowable
VariableCoefficientIncreaseDecrease
X
(1)2.000000INFINITY0.5000000
X
(2)3.0000001.0000003.000000
RighthandSideRanges
RowCurrentAllowableAllowable
RHSIncreaseDecrease
28.0000002.0000004.000000
316.0000016.000008.000000
412.00000INFINITY4.000000
LINDO中也可以作灵敏度分析,一般在求解了线性规划模型后,自动出现是否进行灵敏度分析的对话框,如图
图18
点击“是”,就可得解和灵敏度分析报告:
LPOPTIMUMFOUNDATSTEP2
OBJECTIVEFUNCTIONVALUE
1)14.00000
VARIABLEVALUEREDUCEDCOST
X22.0000000.000000
ROWSLACKORSURPLUSDUALPRICES
2)0.0000001.500000
3)0.0000000.125000
4)4.0000000.000000
NO.ITERATIONS=2
RANGESINWHICHTHEBASISISUNCHANGED:
OBJCOEFFICIENTRANGES
VARIABLECURRENTALLOWABLEALLOWABLE
COEFINCREASEDECREASE
X12.000000INFINITY0.500000
X23.0000001.0000003.000000
RIGHTHANDSIDERANGES
ROWCURRENTALLOWABLEALLOWABLE
RHSINCREASEDECREASE
316.00000016.0000008.000000
412.000000INFINITY4.000000
美佳公司计划制造I,II两种家电产品.已知各制造一件时分别占用的设备A、B的台时、调试时间、调试工序及每天可用于这两种家电的资源能力、各售出一件时的获利情况如表3.1所示。
问该公司应制造两种家电各多少件,使获取的利润为最大?
表3.1
项目
I
II
每天可用能力
设备A(h)
设备B(h)
调试工序(h)
6
2
24
单位产品利润(元)
设x1和x2分别表示美佳公司制造家电I和II的数量。
则该问题可用线性规划模型表示如下:
MaxZ=2x1+x2
s.t.5x2≤15
6x1+2x2≤24
x1+x2≤5
X1,x2≥0
面对市场变化,灵敏度分析的任务是须解决以下两类问题:
(1)当系数A、b、c中的某个发生变化时,目前的最优基是否仍最优(即目前的最优生产方案是否要变化)?
(2)为保持目前最优基仍是最优基,参数A、b、c允许变化范围是什么?
实验四运输问题的数学模型和求解
掌握运输问题建模和计算机求解方法。
1.对所给运输问题建立数学模型,用软件进行求解;
对结果进行分析。
操作系统为Windows2000及以上的电脑,并装有Excel或Lingo或matlab或1stopt软件。
a)中小型运输问题的求解
中小型运输问题可以和小型线性规划一样,直接输入运输问题的数学模型代码求解。
例4.1求解下面运输问题的