资源描述
理工大学暑期数学建模强化训练专题三
工厂生产计划模型
学员: 曹 阳
许佳利
倪迪杭
学院: 通信工程学院
时间:2010.08.18
工厂生产计划模型
摘 要
本文根据问题的条件和要求,综合考虑工厂获得最大收益所需的各种条件,建立了单目标线性规划模型,并通过LINGO软件的求解,给工厂生产提供了可行有效的生产计划。
对于问题一,针对每月都有不同的机床需要停工维修,且不同的产品所需的机床工作时间、市场的容量以及市场价格都有所不同的条件,采用线性规划结合矩阵的方法,对工厂生产进行了模拟,并得到了获得最大收益时的可行方案。
对于问题二,将市场价格的某种变化和引入新机床分开考虑。研究市场价格的变化时,将新的产品收益矩阵替代产品的原始收益矩阵即可得到获得最大收益的可行方案;研究引入新机床时,本文采用逆向思维分析确定引入何种新机床使得收益最大,并给出了收益最大时的生产方案。
对于问题三,建立了一个维修矩阵,表示各月所要维修的机床及数量,通过综合考虑各月获得最大收益的条件,运用线性规划的思想在问题一的模型的基础上求出了最佳维修方案,进而确定了最佳生产计划,使得总收益最大。
关键词: 单目标线性规划,矩阵,生产计划,额外奖励,影响力
一、问题的提出
某厂拥有4台磨床、2台立式钻床、3台卧式钻床、1台镗床和1台刨床,用以生产7种产品,记作至。工厂收益规定为产品售价减去原材料费用之剩余。每种产品单件的收益及所需各机床的加工工时(以小时计)列于下表:
产品
收益
10
6
8
4
11
9
3
磨床
0.5
0.7
0
0
0.3
0.2
0.5
立式钻床
0.1
0.2
0
0.3
0
0.6
0
卧式钻床
0.2
0
0.8
0
0
0
0.6
镗床
0.05
0.03
0
0.07
0.1
0
0.08
刨床
0
0
0.1
0
0.05
0
0.05
本月(一月)和随后的5个月中,下列机床停工维修:
一月
二月
三月
四月
五月
六月
磨床1台
卧式钻床2台
镗床1台
立式钻床1台
磨床1台
立式钻床1台
卧式钻床1台
刨床1台
各种产品各月份的市场容量如下表:
产品
一月
500
1000
300
300
800
200
100
二月
600
500
200
0
400
300
150
三月
300
600
0
0
500
400
100
四月
200
300
400
500
200
0
100
五月
0
100
500
100
1000
300
0
六月
500
500
100
300
1100
500
60
每种产品存货最多可到100件,存费为每件每月0.5元。现无存货,要求到6月底每种产品有存货50件。工厂每周工作6天,每天2班,每班8小时。不需要考虑排队等待加工的问题。
1、为使收益最大,工厂应如何安排各月份各种产品的生产?
2、研究市场价格的某种变化及引入新机床对计划和收益的影响。
3、若各机床的停工维修时间不作预先规定,而是选择最合适的月份维修。除磨床外,每台机床在这6个月中的一个月必须停工维修;6个月中4台磨床有2台需要维修。扩展工厂计划模型,使得可以对灵活安排机床维修时间作出决策。停工时间的这种灵活性价值如何?
二、问题的分析
对于问题一,根据题目要求,通过对各月每样产品的生产量进行合理的安排,使得销售总收益能够达到最大。而收益受到机床的数目、工作时间以及产品的市场容量和存货量等因素限制,我们可以运用线性规划的方法建立单目标线性规划模型,结合LINGO软件求出最优生产计划,从而得到最大收益。
对于问题二,题目要求模拟出市场价格变化下或者增加新机床时,应如何调整生产计划以获得最大收益。我们可以对问题一所得的数据进行分析,分别研究市场价格变化和机床数量变化对收益的影响。
市场价格的变动,实际是改变了单件产品的收益,产品的价格在一个月内的波动一般不大,假设每个月单件产品收益固定,那么就可以建立一个新的时间——产品收益矩阵,将这个矩阵替换问题一的收益矩阵,即可运用问题一的方法算出最优的生产方案。
增加新机床,一方面会使得工厂产品的生产量增加,但另一方面又使得工厂的生产成本(新机床的成本)增加,从而影响收益。我们可以逆向思维,在问题一的模型的基础上,逐一增加各种机床,从而可以得到逐一增加各种机床的最大收益,通过判断增加的收益与机床成本的关系来确定增加何种机床使得工厂的总收益最大。
对于问题三,问题三较问题一来说机床停工维修时间的自由度变大了,这使得工厂能够更好的根据市场需求来协调各产品每月的生产及存储计划,以达到最大收益。建立一个的维修矩阵,代表各月需要维修的各种机床的数量,然后建立一个的表示机床数量的矩阵,在解出最优维修矩阵后将后者减去前者便可以得到各个月参加生产的机床的数量,进而运用问题一的方法即可求出此时的最优生产方案。
三、问题的假设
1、假设每月只有四周,即每月都只有二十四个工作日;
2、不停工维修的机床在工作时间内可以同时工作,即不需要考虑排队等待加工;
3、产品的市场容量不受产品价格和机床数量等因素变化影响;
4、市场价格的改变不影响产品的成本,即产品成本是固定不变的;
5、认为新增加的机床的性能较好,在这6个月内不需要维修。
四、模型的建立及求解
1、符号说明
第个月生产产品的件数
第个月正常使用第种机床的台数
(分别表示磨床、立式钻床、卧式钻床、镗床和刨床)
单件产品需由第种机床加工的时间
工厂每个月的工作时间
单件产品的收益(profit)
第个月产品的市场容量(capacity)
第个月产品的存货量(stock)
第个月产品的销售量
6个月产品的总存费
6个月产品的总毛收益
6个月产品的总纯收益
第次增加第种机床得到的额外奖励
第次增加第种机床增加的成本
第次增加第种机床的影响力
第个月维修第种机床的台数
第个月该工厂拥有第种机床的台数
2、模型建立
2.1工厂合理安排各月份各种产品的生产使收益最大的模型
2.1.1模型的分析
为了使收益最大,工厂在总的工作时间内一要尽可能多的生产产品,而且应该尽可能的生产效益高的产品,但是产品的生产数量还需考虑产品的市场容量;二要尽可能少的存放货物,来减少存费,但是又必须要有一定量的货存量来满足题意要求。我们可以用单位时间内生产的各种产品所获得的收益的多少来衡量其效益的高低。通过计算,得到7种产品的效益如表一所示:
表一·各种产品的效益表
产品
效益
(元/小时)
11.76
6.45
8.89
10.81
24.44
11.25
2.44
按照常理,我们预测按工厂获得最大收益的计划生产产品,效益较高的产品的收益应该也是较大的。
2.1.2模型的建立与求解
根据题目的已知条件,我们可以得到第个月正常使用第种机床的台数的矩阵为:
。
单件产品需由第种机床加工的时间的矩阵为:
。
单件产品的收益的矩阵为:
。
第个月产品的市场容量的矩阵为:
。
第个月产品的存货量满足以下关系式:(即每月每种产品存货最多可到100件),且(即到6月底每种产品都有存货50件)。
从而我们可以推出,第个月产品的销售量为,且需满足第个月产品的销售量不能超过第个月产品的市场容量,即。
设工厂每个月的工作时间为,则单种机床在第个月的工作时间需满足关系式,即每个月各种机床生产每一种产品的所花的时间不应超过该月该机床的总工作时间。
6个月产品的总存费为:
。
6个月产品的总毛收益为:
。
6个月产品的总纯收益为:
。
综上所述,得到问题一的单目标线性规划模型:
使用LINGO软件编程(程序见附件1)对该单目标线性规划模型进行求解,我们用EXCEL软件将得到的结果(各月份的产量、存货量和销售量)整理如下列表格所示:
表二·各种产品各月份的产量表
产
品
产
量
月 份
一月
500
888
383
300
800
200
0
二月
700
600
117
0
500
300
250
三月
0
0
0
0
0
400
0
四月
200
400
400
600
300
0
200
五月
0
0
600
0
0
300
0
六月
550
550
0
350
0
550
0
总量
1950
2438
1500
1250
1600
1750
450
表三·各种产品的各月份销售量表产
品
售
量
月 份
销
一月
500
888
300
300
800
200
0
二月
600
500
200
0
400
300
150
三月
100
100
0
0
100
400
100
四月
200
300
400
500
200
0
100
五月
0
100
500
100
50
300
0
六月
500
500
50
300
0
500
50
总量
1900
2388
1450
1200
1550
1700
400
表四·各种产品的各月份存货量表产
品
货
量
月 份
存
一月
0
0
83
0
0
0
0
二月
100
100
0
0
100
0
100
三月
0
0
0
0
0
0
0
四月
0
100
0
100
100
0
100
五月
0
0
100
0
50
0
100
六月
50
50
50
50
50
50
50
总量
150
250
233
150
300
50
350
存费(元)
75
125
116.5
75
150
25
175
上述三个表格中的数据,即为收益最大情况下,工厂安排各种机床生产各种产品的计划。工厂按此计划生产六个月,获得的总毛收益元,总存费为元,总收益元。这就是用我们建立的单目标线性规划模型计算的最大收益。
2.1.3模型的结果分析
(1)由表三可以看出,六月份各种产品的存货量都是50,正符合题中的要求。
(2)对比这三个表格,可以看出各种产品各月份的销售量正是该产品该月份的产量与该产品上个月份的存货量之和减去该产品该月份的存货量。
(3)表二中多个产品的产量为0,正是由各个月份中的机床停工维修造成的,但是产量为0的时候,产品的销售量并不一定为0,这是由于该产品在上一个月份中有存货。表三中多个产品的销售量为0,则是由该产品在该月份的市场容量为0造成的。
(4)对比分析各产品的收益与该产品的效益,两者基本上或是在趋势上是一致的,即效益高的产品收益一般也是比较大的。这说明模型建立之前我们的预测是合理的。两者的对比图如图一所示。由于产品的收益数值较大,该图中收益的曲线是在收益值缩小1000倍的时候作出的,这并不影响两者趋势的分析。
图一·效益与收益对比曲线
2.2市场价格的某种变化及引入新机床对计划和收益的影响
2.2.1市场价格的变化对计划和收益的影响
市场价格的变动,实际是改变了单件产品的收益。根据最大收益的计算公式:
,
市场价格的变化不会导致产品销售量和存货量的改变,若所有产品的市场价格都增加,或者部分产品的市场价格增加,其他产品的市场价格不变,必然会使得工厂的最大收益增加;而若所有产品的市场价格都降低,或者部分产品的市场价格降低,其他产品的市场价格不变,必然导致工厂的最大收益降低。当部分产品的市场价格增加,其他产品的市场价格降低的时候,工厂的最大收益有可能增加,也有可能降低。这个时候,我们可以利用问题一的模型,用单件产品的收益矩阵替代问题一的模型中的收益矩阵,计算出产品市场价格改变后工厂的最大收益,从而来研究市场价格的变化对计划和收益的影响。
2.2.2引入新机床对计划和收益的影响
分析问题一的数据我们可以得到,有些产品的销售量并没有达到市场容量,也就是说,如果增加新机床来增强生产能力是可以增加收益的。但究竟应该引入何种机床,应该引入多少数量的机床,才能使得收益最大呢?下面我们来分析研究。
引入新机床,必然带来生产成本的增加(这里增加的成本指的是购买机床的成本,产品的成本是不变的)。由于购买机床的成本未知,这使得工厂的最大利益不易求得。因此,我们用逆向思维分析的方法来考虑引入新机床对计划和收益的影响。
在问题一的模型的基础上,增加一台某种机床,然后用LINGO软件计算出其最大收益,更换机床种类便可得到一组最大收益数据。增加一台某种机床后得到最大收益与问题一的模型计算出的最大收益相减得到的最大利益之差,我们称之为额外奖励。我们在增加机床数目的时候,每次都是增加一台。设第次增加第种机床得到的额外奖励为。即表示不增加机床的额外奖励,显然。设第次增加第种机床增加的成本为。
定义额外奖励与第种机床成本的比值为影响力,记为,则
。
分析得到,影响力具有下面两个性质:
(1)当时表示购买该机床获得的额外奖励大于成本,能使最大收益增加;当时表示购买该机床获得的额外奖励小于或等于成本,不值得购买。
(2)越大,影响力越大,越值得购买。
根据这两条性质,分析第次增加机床的种类。显然,应该增加使得影响力取得最大值的机床。
假设各种机床的成本都相同,且较小。利用问题一的模型计算出第次增加机床的方案如表五所示。
表五·第次增加机床的方案
类别
磨床
立式钻床
卧式钻床
镗床
刨床
结论
最大收益
83508.5
82536.5
82578
103353
95791.5
购买镗床
额外奖励
972
0
41.5
20816.5
13255
最大收益
104325
103353
103353
103353
115483
购买刨床
额外奖励
972
0
0
0
12130
最大收益
116455
115483
115483
115483
115483
购买磨床
额外奖励
972
0
0
0
0
最大收益
116455
116455
116455
116455
116455
无需购买
额外奖励
0
0
0
0
0
这表明,在假设的基础上,第一次增加某种机床,镗床的额外奖励大于其它机床,说明镗床的影响力最大,所以第一次应该购买镗床。第二次增加某种机床,刨床的额外奖励最大,所以第二次购买刨床。第三次增加某种机床,磨床的额外奖励最大,所以第三次购买磨床。第四次增加某种机床,各种机床的额外奖励都为0,说明第三次购买机床后该工厂已经已经具有生产满足市场需求的产品的能力,不需要再增加新机床。即工厂在原有机床的基础上,只需增加一台镗床、一台刨床和一台磨床就能获得最大利益。增加一台镗床、一台刨床和一台磨床后工厂收益最大的生产计划见附录2。
而在实际情况中,机床的成本一般不会很小,而在第三次增加某种机床的时候,额外奖励已较小(972),若机床的成本大于972,则其影响力,就不需要购买机床。
2.3工厂计划的扩展模型
2.3.1模型的建立和求解
若各机床的停工维修时间不作预先规定,而是选择最合适的月份维修。在问题一的模型的基础上,我们引入两个新的矩阵B和Y。
设第个月该工厂拥有第种机床的台数为,其矩阵为:
。
设第个月维修第种机床的台数为,其矩阵为:
。
则第个月正常使用第种机床的台数。
根据问题三的要求,除磨床外,每台机床在这6个月中的一个月必须停工维修(这里假设只维修一次),所以有:
,
6个月中4台磨床有2台需要维修,有:
。
其他约束条件与问题一的模型相同,因此可以得到问题三的单目标线性规划模型:
同样使用LINGO软件编程(具体程序见附录3)对该单目标线性规划模型进行求解,我们将计算得到的结果(各月份的产量、存货量、销售量和维修方案)整理如下列表格所示:
表六·各种产品各月份的产量表
产
品
产
量
月 份
一月
500
1000
300
300
800
200
100
二月
600
500
200
0
400
300
150
三月
400
700
100
100
600
400
200
四月
0
0
0
0
0
0
0
五月
0
100
500
100
1000
300
0
六月
550
550
150
350
1150
550
110
总量
2050
2850
1250
850
3950
1750
560
表七·各种产品的各月份销售量表
产
品
售
量
月 份
销
一月
500
1000
300
300
800
200
100
二月
600
500
200
0
400
300
150
三月
300
600
0
0
500
400
100
四月
100
100
100
100
100
0
100
五月
0
100
500
100
1000
300
0
六月
500
500
100
300
1100
500
60
总量
2000
2800
1200
800
3900
1700
510
表八·各种产品的各月份存货量表产
品
货
量
月 份
存
一月
0
0
0
0
0
0
0
二月
0
0
0
0
0
0
0
三月
100
100
100
100
100
0
100
四月
0
0
0
0
0
0
0
五月
0
0
0
0
0
0
0
六月
50
50
50
50
50
50
50
总量
150
150
150
150
150
50
150
存费(元)
75
75
75
75
75
25
75
表九·各种机床各月份的维修方案
机
床
产
量
月 份
1
2
3
4
5
一月
0
0
1
0
0
二月
0
1
0
0
0
三月
0
0
0
0
0
四月
0
0
0
1
1
五月
2
1
1
0
0
六月
0
0
1
0
0
上述四个表格中的数据,即为收益最大情况下,工厂安排各种机床生产各种产品和安排机床进行维修的计划。工厂按此计划生产六个月,获得的总毛收益元,总存费为元,总收益元。这就是用我们建立的扩展模型计算的最大收益。停工时间的灵活性价值我们用扩展模型计算的最大收益与问题一的模型计算的最大收益之差来体现,其值为25305元。
2.3.2模型的结果分析
(1)比较扩展模型和问题一的模型的结果,我们可以得到扩展模型的各种产品的销售量都比问题一的模型的销售量大,而扩展模型的各种产品的存货量都小于等于问题一的模型的存货量,这说明在灵活调节各机床的维修时间之后,工厂的收益大大增加了,这正是停工时间的灵活性价值所在。
(2)模型扩展后,产品的产量和销售量大大增加(均增加了2350台),其他产品的产量和销售量变化不大,这说明调节各机床的维修时间来增加效益高的产品(的效益为24.44元/小时)的产量能使得收益最大化,这也是符合常理的。
五、模型的评价
模型的优点:
1、本文主要利用矩阵和动态规划的相关知识建立单目标线性规划模型求解,最终为满足工厂的不同要求给出了最佳生产方案,具有很好的现实指导意义;
2、本模型使用矩阵来定义各种影响因素,不仅避免了大量方程的赘写,而且增加了模型的灵活性,便于对各个参数进行拓展研究,问题二中对市场价格的研究和问题三的解决就是很好的例子;
模型的缺点:
本文在解决问题的时候,模型较为单一,并且没有用很好的检验方法来检验最大收益值。
六、模型的进一步探讨
在问题二的求解中,在研究引入新机床对计划和收益的影响的时候,我们假设各种机床的成本相同,从而将影响力直接体现在额外奖励上。而在实际情况下,各种机床的成本是不相同的。因此,在模型的改进中,可以经过市场调查的方式,得到各种机床的成本,从而精确的计算出其影响力。这样就能更加准确地制定机床购买方案,更具实际指导意义。
参考文献
[1].袁新生 邵大宏等 《LINGO和excel在数学建模中的应用》科学出版社 2007年1月出版
附录1
MODEL:
sets:
pii/1..7/:p;
month/1..7/:m;
chuan/1..5/:c;
time(chuan,pii):t;
monc(month,chuan):mc;
rong(month,pii):r,s,n,x;
endsets
data:
p=10 6 8 4 11 9 3 ;
t=
0.5
0.7
0
0
0.3
0.2
0.5
0.1
0.2
0
0.3
0
0.6
0
0.2
0
0.8
0
0
0
0.6
0.05
0.03
0
0.07
0.1
0
0.08
0
0
0.1
0
0.05
0
0.05
;
mc=
0
0
0
0
0
3
2
3
1
1
4
2
1
1
1
4
2
3
0
1
4
1
3
1
1
4
1
3
0
1
4
2
2
1
0
;
r=
0
0
0
0
0
0
0
500
1000
300
300
800
200
100
600
500
200
0
400
300
150
300
600
0
0
500
400
100
200
300
400
500
200
0
100
0
100
500
100
1000
300
0
500
500
100
300
1100
500
60
;
enddata
tz=24*16;
@for(rong(i,j)|i#gt#1:n(i,j)<=r(i,j));!销售量小于等于市场容量;
@for(pii(j):s(1,j)=0);
@for(rong(i,j):@gin(x(i,j));@gin(s(i,j)));
@for(rong(i,j)|i#gt#1:n(i,j)=s(i-1,j)+x(i,j)-s(i,j));!销售量=上月存储量+本月生产量-本月存量;
@for(rong(i,j):s(i,j)<=100);!存量小于等于100件;
@for(rong(i,j)|i#gt#1:s(7,j)=50);
zs=0.5*@sum(rong(i,j)|i#gt#1:s(i,j));!计算存储费用;
zp=@sum(rong(i,j)|i#gt#1:n(i,j)*p(j));
max=zp-zs;!净利润;
@for(month(i)|i#gt#1:@for(chuan(k):@sum(pii(j):t(k,j)*x(i,j))-mc(i,k)*tz<=0));!对每月机床数量的约束;
end
附录2
表十·各种产品各月份的产量表
产
品
产
量
月 份
一月
500
1000
300
300
800
200
100
二月
600
500
200
0
400
300
150
三月
300
600
0
0
500
400
100
四月
200
300
400
500
200
0
100
五月
0
100
500
100
1000
300
0
六月
550
550
150
350
1150
550
110
总量
2150
3050
1550
1250
4050
1750
560
表十一·各种产品的各月份销售量表产
品
售
量
月 份
销
一月
500
1000
300
300
800
200
100
二月
600
500
200
0
400
300
150
三月
300
600
0
0
500
400
100
四月
200
300
400
500
200
0
100
五月
0
100
500
100
1000
300
0
六月
500
500
100
300
1100
500
60
总量
2100
3000
1500
1200
4000
1700
510
表十二·各种产品的各月份存货量表产
品
货
量
月 份
存
一月
0
0
0
0
0
0
0
二月
0
0
0
0
0
0
0
三月
0
0
0
0
0
0
0
四月
0
0
0
0
0
0
0
五月
0
0
0
0
0
0
0
六月
50
50
50
50
50
50
50
总量
50
50
50
50
50
50
50
存费(元)
25
25
25
25
25
25
25
附录3
MODEL:
sets:
pii/1..7/:p;
month/1..7/:m;
chuan/1..5/:c;
time(chuan,pii):t;
monc(month,chuan):mc,b,y;
rong(month,pii):r,s,n,x;
endsets
data:
p=10 6 8 4 11 9 3;
t=
0.5
0.7
0
0
0.3
0.2
0.5
0.1
0.2
0
0.3
0
0.6
0
0.2
0
0.8
0
0
0
0.6
0.05
0.03
0
0.07
0.1
0
0.08
0
0
0.1
0
0.05
0
0.05
;
r=
0
0
0
0
0
0
0
500
1000
300
300
800
200
100
600
500
200
0
400
300
150
300
600
0
0
500
400
100
200
300
400
500
200
0
100
0
100
500
100
1000
300
0
500
500
100
300
1100
500
60
;
b=
0
0
0
0
0
4
2
3
1
1
4
2
3
1
1
4
2
3
1
1
4
2
3
1
1
4
2
3
1
1
4
2
3
1
1
;
enddata
tz=24*16;
@for(monc(k,i):@gin(y(k,i)));
@for(pii(j):s(1,j)=0);
@for(chuan(k)|k#gt#2:@sum(month(i):y(i,k))-b(2,k)=0);!计算维修矩阵;
@for(chuan(k)|k#eq#1:@sum(month(i):y(i,k))-2=0);
@for(monc(k,i):mc(k,i)=b(k,i)-y(k,i));
@for(rong(i,j)|i#gt#1:n(i,j)<=r(i,j));
@for(rong(i,j)|i#gt#1:n(i,j)=s(i-1,j)+x(i,j)-s(i,j));!销售量=上月存储量+本月生产量-本月存储量;
@for(rong(i,j):s(i,j)<=100);
@for(rong(i,j)|i#gt#1:s(7,j)=50);
@for(rong(i,j):@gin(x(i,j));@gin(s(i,j)));
zs=0.5*@sum(rong(i,j)|i#gt#1:s(i,j));!计算存储费用;
zp=@sum(rong(i,j)|i#gt#1:n(i,j)*p(j));
max=zp-zs;
@for(month(i)|i#gt#1:@for(chuan(k):@sum(pii(j):t(k,j)*x(i,j))-mc(i,k)*tz<=0));!对每月机床数量的约束;
end
展开阅读全文