湖南工学院暑期数学建模竞赛.docx
《湖南工学院暑期数学建模竞赛.docx》由会员分享,可在线阅读,更多相关《湖南工学院暑期数学建模竞赛.docx(21页珍藏版)》请在冰豆网上搜索。
湖南工学院暑期数学建模竞赛
2011年湖南工学院暑期数学建模竞赛
承诺书
我们仔细阅读了湖南工学院数学建模竞赛的竞赛规则。
我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与本队以外的任何人(包括指导教师)研究、讨论与赛题有关的问题。
我们知道,抄袭别人的成果是违反竞赛规则的,如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。
我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。
如有违反竞赛规则的行为,我们愿意承担由此引起的一切后果。
我们的参赛报名号为:
17号
参赛组别(本科或专科):
本科
参赛队员(签名):
队员1:
何清班级:
机械工程系金材0903班
队员2:
盛羿班级:
机械工程系金材0903班
队员3:
陈静班级:
机械工程系机本1006班
盈利最大化产品生产、库存及设备维修方案
摘要
本文讨论的是最优化问题,在考虑该工厂产品生产,设备维修及各产品利润和最大需求量的情况下,达到盈利最大化,以及更改维修方案后,确定出一个最优的设备维修计划。
针对问题
(1),以总利润作为目标函数,通过合理分析,该公式为:
总利润=各产品的销售数量×各产品的单件利润—库存费用,由于设备工作时间,每月库存量和最大需求量均受限,根据这些限制条件建立模型的约束条件,形成线性规划模型,通过lingo11.0求出已知维修计划最大利润为937115.0元。
针对问题
(2),文章给出两种方法,根据题中规定对设备维修台数的要求,方法一直接从维修矩阵观察出发,建立未维修矩阵与维修矩阵每一列之间的联系,在此基础上确立最优设备维修方案;方法二引入0-1变量,对维修设备的控制,同样建立优化模型,通过lingo11.0求解得出的最大利润是1088550.0元。
最后根据两种方法的运行结果的相同点和不同点分析和讨论。
得出最有维修矩阵不唯一,也就是维修方案不唯一,同时观察最优维修矩阵,在原有模型上提出模型扩展问题:
如果需要满足每个月都必须有设备维修,该怎么安排设备维修?
最后对扩展问题求解。
关键词:
最优化问题线性规划模型未维修矩阵维修矩阵lingo11.0软件
目录
第一部分:
问题重述与分析----------------------------------3
1.1.问题重述-----------------------------------------3
1.2.问题分析-----------------------------------------3
第二部分:
模型的假设及符号说明----------------------------4
2.1.模型的假设---------------------------------------4
2.2.符号说明-----------------------------------------4
第三部分:
模型的建立与求解--------------------------------5
3.1针对问题
(1)------------------------------------5
3.1.1模型的建立----------------------------------5
1)目标函数---------------------------------5
2)约束条件---------------------------------5
3.1.2模型的求解----------------------------------6
3.2针对问题
(2)------------------------------------9
3.2.1维修方案的求解-------------------------------9
1)方法一------------------------------------9
2)方法二-----------------------------------11
3)模型扩展----------------------------------13
第四部分:
模型的误差分析-----------------------------------14
第五部分:
模型的评价及改进方向-----------------------------14
5.1模型的优点---------------------------------------14
5.2模型的缺点及改进方向-----------------------------14
第六部分:
附录---------------------------------------------15
附表一----------------------------------------------------15
附表二----------------------------------------------------16
附表三----------------------------------------------------17
第一部分问题重述与分析
1.1问题重述
已知某工厂要生产7种产品,以I,II,III,IV,V,VI,VII来表示,但每种产品的单件利润随市场信息有明显波动,现只能给出大约利润,依次为:
100,60,80,40,110,90,30,同时该厂有4台磨床、2台立钻、3台水平钻、1台镗床和1台刨床可以用来生产上述产品。
已知生产单位各种产品所需的有关设备台时如表1。
单位所需
台时
设备
I
II
III
IV
V
VI
VII
磨床
0.5
0.7
—
—
0.3
0.2
0.5
立钻
0.1
0.2
—
0.3
—
0.6
—
水平钻
0.2
—
0.8
—
—
—
0.6
镗床
0.05
0.03
—
0.07
0.1
—
0.08
刨床
—
—
0.01
—
0.05
—
0.05
从1月到6月,维修计划如下:
1月—1台磨床,2月—2台水平钻,3月—1台镗床,4月—1台立钻,5月—1台磨床和1台立钻,6月—1台刨床和1台水平钻,被维修的设备当月不能安排生产。
又知从1—6月市场对上述7中产品最大需求量如表2所示。
I
II
III
IV
V
VI
VII
1月
500
1000
300
300
800
200
100
2月
600
500
200
0
400
300
150
3月
300
600
0
0
500
400
100
4月
200
300
400
500
200
0
100
5月
0
100
500
100
1000
300
0
6月
500
500
100
300
1100
500
60
每种产品当月销售不了的每件每月存储费为5元,但规定任何时候每种产品的存储量均不能超过100件。
1月初无库存,要求6月末各种产品各储存50件。
若该工厂每月工作24天,每天两班,每班8小时,要求
(1)该厂如何安排生产,使总利润最大;
(2)若对设备维修只规定每台设备在1—6月份内均需安排1个月用于维修(其中4台磨床只需安排2台在上半年维修),时间可灵活安排。
重新为该厂确定一个最优的设备维修计划。
1.2问题分析
A.对于问题
(1),我们所要解决的是在生产设备有限并得知产品最大需求量的情况下,牟求最大的利润。
通过分析问题
(1),我们从以下两条思路着手,即每件产品需多少台不同设备台时,然后建立线性规划模型,其目标函数是根据总利润=各产品的销售数量×各产品的单件利润—库存费用,最后,通过仔细分析题中所含条件,再一一列举出约束条件,据此我们制定出了最优生产方案。
此问题得到解决的关键如下:
1.目标函数的确立:
由总利润=各产品的销售数量×各产品的单件利润—库存费用,得到目标函数;
2.找出约束条件:
此线性规划模型,是在考虑到每种产品都需要多种设备加工的基础上,另外由于生产设备有限,所以各生产产品的生产量受设备的可用台时的限制,同时还已知了各产品的最大需求量,据此可得出台时约束方程与需求约束方程;另外,题中还规定了任何时候每种产品的存储量不超过100件,一月初无库存,6月末各产品各存储50件,由此可得出3个约束方程;最后,根据各月各产品生产数量—各月各产品库存量=各月各产品最大需求量,可得另一约束方程;在模型
(2)中,是在考虑每种产品都需要各种设备加工的基础上建立起来的,约束条件为库存量的限制,生产量、销售量及库存量之间的关系,工作时间的限制,同样也是线性规划模型。
3.模型求解:
编写程序,尽量简洁有效,用Lingo软件进行求解;
4.结果分析:
讨论分析模型的优缺点,找出模型可改进的方向。
B.对于问题
(2),要求重新为该厂确定一个最优的设备维修计划,规定每台设备在1—6月份内均需安排1个月用于维修(其中4台磨床只需安排2台在上半年维修),这是一个最优排序问题,现在我们考虑的问题化为如何维修9台设备,确定出最优维修次序,使得在六个月里得到的总利润最大,这一问题的解决只需在问题
(1)的解决方案上稍加分析,创新,便可得到。
第二部分模型假设及符号说明
2.1模型假设
1.假设题目所给的数据真实可靠;
2.为了研究方便,忽略设备维修成本所造成的损失;
3.假设当月运行的设备不发生故障,不存在人为破坏因素使之不能正常运行;
4.假设每台设备维修的时间不超过一个月,一个月之后,立即投入生产运行;
2.2定义与符号说明
题中给出的五种设备,分别为磨床、立钻、水平钻、镗床和刨床,对应符号为i,根据排列顺序,分别取i=1,2,3,4,5;月份对应符号为t,分别取t=1,2,3,4,5,6;同时,该工厂生产的产品种类符号为j,依次取j=1,2,3,4,5,6,7。
具体符号定义如下:
:
总利润
:
第t个月对第j种产品的最大需求量;
:
第j种产品的单件利润;
:
第i种设备生产单件第j种产品消耗的时间;
:
第t月份第i种工作设备台数(下文中称为工作矩阵);
:
第t个月生产第j种产品的数量;
:
第t个月第j种产品的库存量;
:
第t个月售出第j种产品的数量;
:
第j种产品的单件库存费用;
:
第t个月机器的维修;
第三部分模型的建立与求解
3.1针对问题
(1):
3.1.1模型的建立
1)目标函数
此目标函数的确立采用了先确定影响变量,再确定影响变量和总利润之间的关系的思路,让问题的模型具有条理性和简洁性。
根据总利润=生产各产品的数量×各产品的单件利润—库存费用就可写出该函数方程。
2)约束条件
i.由于该工厂每月只工作24天,每天两班,每班8小时,同时,每月工作设备工作的台时不同,则该工厂第t个月第i种设备生产各产品所需时间等于
小时,约束条件如下:
………………
(1)
ii.由于已知该工厂生产的各种产品的最大需求量,因此,各产品的销售量需不超过各产品的最大需求量:
……………………
(2)
iii.由于题中规定,任何时候每种产品的存储量均不能超过100件,1月无库存,6月末各种产品各存储50件,所得公式如下:
(j=1,2,3,4,5)………………………(3)
………………………(4)
iv.另外,根据生产量,销售量及货存量之间的关系,可得数学表达式如下:
当t=1时
(j=1,2,3,…,7)………………………(5)
当
时
…………………………(6)
3.1.2模型的求解
由题中从1月到6月的维修计划可知工作矩阵:
,
由表一数据可知第i种设备生产单件第j种产品消耗的台时矩阵:
,
由表二可知,第t个月对第j种产品的最大需求量矩阵
由七种产品的单件利润可得到:
,
根据已得出的目标函数,以及各约束条件,用lingo软件求解该线性规划模型,具体公式如下:
用lingo软件编程,程序见附表一,求得最大利润为937115元,其各产品的生产计划表,库存量表,销售量表如下:
表3:
六个月的各产品生产计划
Ⅰ
Ⅱ
Ⅲ
Ⅳ
Ⅴ
Ⅵ
Ⅶ
1
500
888
383
300
800
200
0
2
700
600
117
0
500
300
250
3
0
0
0
0
0
400
0
4
200
300
400
500
200
0
100
5
0
100
600
100
1100
300
100
6
550
550
0
350
0
550
0
(例如表中第一个数500表示:
安排第一个月生产第一种产品500件)
表4:
六个月的各产品库存量
Ⅰ
Ⅱ
Ⅲ
Ⅳ
Ⅴ
Ⅵ
Ⅶ
1
0
0
83
0
0
0
0
2
100
100
0
0
100
0
100
3
0
0
0
0
0
0
0
4
0
0
0
0
0
0
0
5
0
0
100
0
100
0
100
6
50
50
50
50
50
50
50
表5:
六个月的各产品销售量
Ⅰ
Ⅱ
Ⅲ
Ⅳ
Ⅴ
Ⅵ
Ⅶ
1
500
1000
300
300
800
200
100
2
600
500
200
0
400
300
150
3
100
100
0
0
100
400
100
4
200
300
400
500
200
0
100
5
0
100
500
100
1000
300
0
6
500
500
50
300
50
500
50
3.2针对问题
(2):
1)方法一:
由分析可知,问题
(2)只是将问题
(1)中的维修矩阵由已知变成未知,不过有一点没变的是维修台数不变,要求我们安排最优的维修计划,这里我们先不考虑维修,将设备看成都能在每个月进行生产,得到未维修矩阵记作
,则
=
,
由于维修各种设备的台数不变,我们不妨将问题
(1)中的维修矩阵拿下来进行比较观察,
,
我们不难发现维修矩阵的每一列之和等于未维修矩阵每一列之和减去此列所代表的设备需要维修的设备台数。
下面根据这个条件对在问题
(1)中建立的模型进行适当的改进即可得到最优维修矩阵。
目标函数不变:
;
利用lingo编程,程序在附表二,由运行结果可得到最大利润为1088550元,得到的最优维修矩阵
每个月每种产品在最优维修矩阵下的生产量
1月
2月
3月
4月
5月
6月
Ⅰ
500
600
400
0
0
550
Ⅱ
1000
500
700
0
100
550
Ⅲ
300
200
100
0
500
150
Ⅳ
300
0
100
0
100
350
Ⅴ
800
400
600
0
1000
1150
Ⅵ
200
300
400
0
300
550
Ⅶ
100
150
200
0
0
110
这种解法虽然没有确定要维修两台的设备两次维修的是不是同一台,但是我们可以从最优维修矩阵中得出要维修的设备在哪个月维修,在实际中注意便可避免维修同一台,所以这种解法可行。
2)方法二:
题目分析
f(i)表示不同机器,y(tm)表示表示在t月份要修理的机器n
i=(1,2,3,4,5)t=(1,2,3,4,5,6)n=(1,2,3,4,5,6,7,8,9)其中y机器来自f,其中f1有(y1、y2);f2有(y3、y4);f3有(y5、y6、y7);f4有y8;f5有y9;见下表
磨床
立钻
水平钻
镗床
刨床
ft1
ft2
ft3
ft4
ft5
M
1
2
3
4
5
6
7
8
9
一月
y11
y12
y13
y14
y15
y16
y17
y18
y19
二月
y21
y22
y23
y24
y25
y26
y27
y28
y29
三月
y31
y32
y33
y34
y35
y36
y37
y38
y39
四月
y41
y42
y43
y44
y45
y46
y47
y48
y49
五月
y51
y52
y53
y54
y55
y56
y57
y58
y59
六月
y61
y62
y63
y64
y65
y66
y67
y68
y69
设y(tm)是0、1变量0表示不要修理,1表示需要修理.
因为每台设配在1——6月份均需安排一个月维修所以;
y(tn)
f(t1)=y(t1)+y(t2);
f(t2)=y(t3)+y(t4);
f(t3)=y(t5)+y(t6)+y(t7);
f(t4)=y(t8);
f(t5)=y(t9);
设一个矩阵;
=
,
所以d(ti)=d全-f(ti)
目标函数不变:
由lingo编程,得出最大利润仍为1088550元,得出每月安排生产各种产品的数量如下表:
1月
2月
3月
4月
5月
6月
Ⅰ
500
600
400
0
0
550
Ⅱ
1000
500
700
0
100
550
Ⅲ
300
200
100
0
500
150
Ⅳ
300
0
100
0
100
350
Ⅴ
800
400
600
0
1000
1150
Ⅵ
200
300
400
0
300
550
Ⅶ
100
150
200
0
0
110
得出最优维修矩阵为:
比较方法一和方法二,由两种方法的求得的每月生产某种产品的数量并没有变,不过最优维修矩阵改变了,而且总利润不变,说明最优维修矩阵不唯一,观察到上述两种维修安排,在某些月份并没有设备维修,若是要求使每月都有设备维修,进行模型扩展。
3)模型扩展
1,只需对方法二加一个约束
令
表示能够保证每个月都至少有一台需修理
在附表三编程基础上增加语句如下:
@for(month(t):
@sum(xiuji(n):
y(n,t))>=1);
由lingo编程,得出最大利润仍为1088550元,,每月安排生产某种产品的数量不变,得到最优维修矩阵:
第四部分模型的误差分析
文中基本假设合理,所建模型数学推导严谨,理论可靠,逻辑严密,而且易于理解,但由于市场的不稳定性,产品的利润及需求量存在着不确定性,故可能产生一些误差,误差大小与市场经济的稳定性有关,另外,软件和计算机的精度也会导致产生误差。
第五部分模型的评价及改进方向
5.1模型的优点
我们的模型有以下优点:
1.易于推广。
当今社会的各个领域,都存在着不同类型的优化问题,而在企业生产中,在一定条件下,最大利润生产方案和最优设备维修方案显得尤为重要,根据现实条件调整该模型对企业生产、设备维修将有很大的帮助;
2.基本模型对问题的描述精确,合理,推导严谨,理论性强;
3.通过合理的数据处理,将题中表格的数据及所需数据转换为矩阵形式,便于理解、分析和求解。
4.解决问题
(2)的方法一简洁,通过认真观察未维修矩阵与维修矩阵之间的联系,颇具匠心,方法二从常规出发引入0-1变量。
5.适当在原有模型基础进行扩展,使工厂安排更加合理。
5.2模型的缺点及改进方向
当然,模型也存在着一些缺点:
主要是没有很好地联系经济来讨论,模型中涉及的单件产品利润只是个大概,存在着一定的误差,另外,本题没有考虑维修各台设备的成本,及设备是否在规定的时间里能完全修好等等。
要建立较好的能适应于社会生产和设备维修的模型,应考虑诸多因素,以及一些其它的细节,能做到这些,所建立的模型将更适应现实社会。
第六部分附录
◆附表一:
model:
sets:
product/1..7/:
b,m;month/1..6/;machine/1..5/;link1(product,month):
a,h,x,s;link2(machine,month):
d;link3(product,machine):
c;endsetsdata:
b=1006080401109030;m=5;a=50060030020005001000500600300100500300200040050010030000500100300800400500200100011002003004000300500100150100100060;d=115215361536153611521536768768768384384768115238411521152115276838438403843843843843843843843840;c=0.50.10.20.0500.70.200.030000.800.0100.300.0700.3000.10.050.20.60000.500.60.080.05;enddatamax=@sum(product(j):
b(j)*@sum(month(t):
s(j,t)))-@sum(link1(j,t):
h(j,t)*m(j));@for(product(j):
h(j,1)=x(j,1)-s(j,1));@for(link1(j,t)|t#gt#1:
h(j,t)=h(j,t-1)+x(j,t)-s(j,t));@for(link1(j,t):
h(j,t)<=100);@for(link1(j,t)|t#eq#6:
h(j,t)=50);@for(link2(i,t):
@sum(product(j):
x(j,t)*c(j,i))<=d);@for(link1(j,t):
s(j,t)<=a(j,t));@for(link1:
@gin(x));end
◆附表二:
model:
sets:
product/1..7/:
b,m;month/1..6/;machine/1..5/;link1(product,month):
a,h,x,s;link2(machine,month):
d;link3(product,machine):
c;endsetsdata:
b=1006080401109030;m=5;a=50060030020005001000500600300