食油生产问题.docx
《食油生产问题.docx》由会员分享,可在线阅读,更多相关《食油生产问题.docx(16页珍藏版)》请在冰点文库上搜索。
食油生产问题
食油生产问题
————————————————————————————————作者:
————————————————————————————————日期:
食油生产问题
1问题重述
2问题分析
3基本假设与符号说明
4建模思想与过程
5算法设计与计算结果
参考文献
附录
问题重述
食油厂通过精炼两种硬质原料油和软质原料油,得到一种食油,以下简称产品油。
硬质原料油来自两个产地:
产地1和产地2,而软质原料油来自另外三个产地:
产地3,产地4和产地5。
据预测,这5种原料油的价格从一至六月分别为表1所示,产品油售价200元/吨。
硬质油和软质油需要由不同生产线来精炼。
硬质油生产线最大处理能力为200吨/月,软质油生产线最大处理能力为250吨/月。
五种原料油都备有贮罐,每个贮罐容量均为1000吨,每吨原料每月存贮费用为5元。
而各种精制油以及产品无油罐可存贮。
精炼的加工费用可略去不计,产品销售没有任何问题。
产品油的硬度有一定的技术要求,它取决于各种原料油的硬度以及混合比例。
产品油的硬度与各种成分的硬度以及所占比例成线性关系。
根据技术要求,产品油的硬度必须不小于3.0而不大于6.0。
硬质1、硬质2、软质3、软质4、软质5等各种原料油的硬度为8.8,6.1,2.0,4.2,5.0,其中硬度单位是无量纲的,并且这里假定精制过程不会影响硬度。
假设在一月初,每种原料油有500吨存贮而要求在六月底仍保持同样贮备。
(1)根据表1预测的原料油价格,编制逐月各种原料油采购量、耗用量及库存量计划,使半年【注】内的利润最大。
(2)考虑原料油价格上涨对利润的影响。
据市场预测分析,若二月份硬质原料油价格比表1中的数字上涨δ%,则软质油在二月份的价格将比表1中的数字上涨2δ%。
相应地,三月份,硬质原料油将上涨2δ%,软质原料油将上涨4δ%,依此类推至六月份。
试分析δ从1到20的各情况下,利润将如何变化?
(3)附加以下3个条件后,再求解上面的问题:
1 每一个月所用的原料油不多于三种;
2 若在某一个月用一种原料油,那么这种油不能少于20吨;
3 若在一个月中用硬质油1或硬质油2,则这个月就必须用软质油5。
注:
书中所述为“本年”,由题意可知,应为“半年”。
表1原料油的价格(元/吨)
硬质1
硬质2
软质3
软质4
软质5
一月
110
120
130
110
115
二月
130
130
110
90
115
三月
110
140
130
100
95
四月
120
110
120
120
125
五月
100
120
150
110
105
六月
90
110
140
80
135
问题分析
问题一
这是一个线性规划问题,要求根据表1预测的原料油价格,编制逐月各种原料油采购量、耗用量及库存量计划,使本年内的利润最大;
可将利润作为目标函数,各种要求作为约束条件。
由题意,利润=销售额-原料费-存贮费。
约束条件有以下几类:
(1)一月初和六月底的各种原料油存贮量相等。
(2)每月硬、软两类原料油不能超过生产线最大处理能力。
(3)各个月产品油的硬度不小于3.0且不大于6.0。
(4)六个月内任何时刻任何一种油的量不能超过1000吨。
问题二
在问题一的基础上,分析利润对原料油价格增量的灵敏度。
问题三
在问题一的基础上,增加以下约束条件即可
(5)每月所用的原料油不多于三种。
(6)若在某个月用一种原料油,则这种油不能少于20吨。
(7)若在一个月中用硬质油1或硬质油2,则这个月就必须用软质油5。
基本假设与符号说明
基本假设
1.在每个月的月初购买各种原料油。
2.精炼过程中没有原油的损失,即精炼前后油的质量守恒。
3.产品油是五种原油的混合。
4.精炼的加工费用略去不计。
5.产品销售没有任何问题,即生产出来后可立即销售出去(这样,产品油就不会有存贮,符合题干中“各种精制油以及产品无油罐可存贮”)。
6.在每个月内(不考虑月初、月末这两个时间点),原料油的库存量随时间流逝均匀减少,即精炼所得的产品油的量随时间流逝均匀增加(均为一次函数)。
7.产品油的硬度与各种成分的硬度以及所占比例成线性关系。
8.精制过程不会影响硬度。
9.六月底每种原料油的存贮等于一月初的。
符号说明
表2
符号
说明
M
半年内的总利润
P
产品油的售价(200元/吨)
H
硬质油生产线最大处理能力(200吨/月)
S
软质油生产线最大处理能力(250吨/月)
C
原料油贮罐容量(1000吨)
p
每吨原料油每月贮存费用(5元/月)
hj
第j种原料油的硬度(8.8,6.1,2.0,4.2,5.0)
xij
第i个月月初第j种原料油的采购量
yij
第i个月第j种原料油的耗用量
zij
第i个月月末第j种原料油的库存量
(zij=zi-1,j+xij-yij)
A
价格矩阵(6×5,数据见由表1,见注)
B
价格增量矩阵(6×5,数据由问题二得出,见注)
zoij
耗用量的0-1变量
注:
A=110,120,130,110,115,
130,130,110,90,115,
110,140,130,100,95,
120,110,120,120,125,
100,120,150,110,105,
90,100,140,80,135;
B=0.00,0.00,0.00,0.00,0.00,
0.01,0.01,0.02,0.02,0.02,
0.02,0.02,0.04,0.04,0.04,
0.04,0.04,0.08,0.08,0.08,
0.16,0.16,0.32,0.32,0.32,
0.32,0.32,0.64,0.64,0.64;
建模思想与过程
问题一
显然,本问题为最优化模型,易知,本题的目标函数为利润的函数,建立合理的假设后,利润与三部分有关,即销售额,原料费和存贮费,且,利润=销售额-原料费-存贮费,即:
(1)
题目中要求比较多,约束条件也就比较多,有,
(1)六月底每种原料油的存贮等于一月初的。
(2)
(2)每个月硬质油的耗用量小于等于其每月生产线最大处理能力(200吨),每个月软质油的耗用量小于等于其每月生产线最大处理能力(250吨)。
(3)
(4)
(3)各个月产品油的硬度不小于3.0且不大于6.0。
(5)
(4)六个月内,任何一种油的量不曾超过1000吨。
(6)
(7)
问题二
在问题一的基础上,分析利润对原料油价格增量的灵敏度。
构建一个价格增量矩阵B,则Aij+(Aij×Bij×δ)即为第j种原料油在第i个月的价格。
至此,可将问题一与问题二的模型合二为一,目标函数为:
(8)
约束条件同问题一中约束条件。
对于问题一,只需将(8)式中的δ取为0即可。
问题三
首先定义耗用量的0-1变量:
1(yij>0)
zoij=
0(yij=0)(9)
在问题一的基础上,增加以下约束条件即可
(5)每月所用的原料油不多于三种。
(10)
(6)若在某个月用一种原料油,则这种油不能少于20吨。
(11)
(7)若在一个月中用硬质油1或硬质油2,则这个月就必须用软质油5。
(12)
(13)
算法设计与计算结果
计算结果
问题一
表3采购量
硬质1
硬质2
软质3
软质4
软质5
一月
0
0
0
0
0
二月
0
0
0
750
0
三月
0
0
0
0
250
四月
0
90.74074
0
0
0
五月
409.2593
0
0
0
0
六月
409.2593
290.7407
0
500
0
表4耗用量
硬质1
硬质2
软质3
软质4
软质5
一月
159.2593
40.74074
0
250
0
二月
85.18519
114.8148
0
0
250
三月
159.2593
40.74074
0
250
0
四月
96.29630
103.7037
0
250
0
五月
159.2593
40.74074
0
250
0
六月
159.2593
40.74074
0
250
0
表5库存量
硬质1
硬质2
软质3
软质4
软质5
一月
340.7407
459.25926
500
250
0
二月
255.55551
344.44446
500
1000
250
三月
96.29621
303.70372
500
750
500
四月
-0.00009
290.74076
500
500
500
五月
249.99991
250.00002
500
250
500
六月
499.99991
499.99998
500
500
500
解得半年内的总利润为M=222231.5。
问题二
δ
M
1
176913.7
2
163920.0
3
155733.3
4
147866.7
5
140500.0
6
134386.7
7
129673.3
8
125160.0
9
122346.7
10
119600.0
11
116860.0
12
114270.0
13
112480.0
14
110790.0
15
109900.0
16
109010.0
17
108120.0
18
107230.0
19
106340.0
20
105450.0
问题三
所编程序调试未成功。
(详情见附录)
参考文献
[1]徐玖平,胡知能,王緌.运筹学[M].北京:
科学出版社,2004.
[2]肖华勇.实用数学建模与软件应用[M].西安:
西北工业大学,2008.
附录
问题一代码:
model:
sets:
R/1..6/;
C/1..5/;
JZ(R,C):
A,x,y;
endsets
data:
A=110,120,130,110,115,
130,130,110,90,115,
110,140,130,100,95,
120,110,120,120,125,
100,120,150,110,105,
90,100,140,80,135;
enddata
max=200*(@sum(R(i):
@sum(C(j):
x(i,j))))-@sum(JZ:
A*x)-75000
-5*(@sum(C(j):
12*x(1,j)-11*y(1,j)+10*x(2,j)-9*y(2,j)+8*x(3,j)-7*y(3,j)+6*x(4,j)-5*y(4,j)+4*x(5,j)-3*y(5,j)+2*x(6,j)-y(6,j)))/2;
@for(C(j):
@sum(R(i):
x(i,j)-y(i,j))=0);
@for(R(i):
y(i,1)+y(i,2)<=200);
@for(R(i):
y(i,3)+y(i,4)+y(i,5)<=250);
@for(R(i):
(8.8*y(i,1)+6.1*y(i,2)+2.0*y(i,3)+4.2*y(i,4)+5.0*y(i,5))-3*(y(i,1)+y(i,2)+y(i,3)+y(i,4)+y(i,5))>=0);
@for(R(i):
(8.8*y(i,1)+6.1*y(i,2)+2.0*y(i,3)+4.2*y(i,4)+5.0*y(i,5))-6*(y(i,1)+y(i,2)+y(i,3)+y(i,4)+y(i,5))<=0);
@for(C(j):
x(1,j)<=500);
@for(C(j):
x(1,j)-y(1,j)+x(2,j)<=500);
@for(C(j):
x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)<=500);
@for(C(j):
x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)<=500);
@for(C(j):
x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)-y(4,j)+x(5,j)<=500);
@for(C(j):
x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)-y(4,j)+x(5,j)-y(5,j)+x(6,j)<=500);
@for(C(j):
500+x(1,j)-y(1,j)>=0);
@for(C(j):
500+x(1,j)-y(1,j)+x(2,j)-y(2,j)>=0);
@for(C(j):
500+x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)>=0);
@for(C(j):
500+x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)-y(4,j)>=0);
@for(C(j):
500+x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)-y(4,j)+x(5,j)-y(5,j)>=0);
@for(C(j):
500+x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)-y(4,j)+x(5,j)-y(5,j)>=0+x(6,j)-y(5,j));
end
问题二代码:
model:
sets:
R/1..6/;
C/1..5/;
JZ(R,C):
A,x,y,B;
endsets
data:
A=110,120,130,110,115,
130,130,110,90,115,
110,140,130,100,95,
120,110,120,120,125,
100,120,150,110,105,
90,100,140,80,135;
B=0.00,0.00,0.00,0.00,0.00,
0.01,0.01,0.02,0.02,0.02,
0.02,0.02,0.04,0.04,0.04,
0.04,0.04,0.08,0.08,0.08,
0.16,0.16,0.32,0.32,0.32,
0.32,0.32,0.64,0.64,0.64;
enddata
max=200*(@sum(R(i):
@sum(C(j):
x(i,j))))-@sum(JZ:
(A+A*B*1)*x)-75000
-5*(@sum(C(j):
12*x(1,j)-11*y(1,j)+10*x(2,j)-9*y(2,j)+8*x(3,j)-7*y(3,j)+6*x(4,j)-5*y(4,j)+4*x(5,j)-3*y(5,j)+2*x(6,j)-y(6,j)))/2;
@for(C(j):
@sum(R(i):
x(i,j)-y(i,j))=0);
@for(R(i):
y(i,1)+y(i,2)<=200);
@for(R(i):
y(i,3)+y(i,4)+y(i,5)<=250);
@for(R(i):
(8.8*y(i,1)+6.1*y(i,2)+2.0*y(i,3)+4.2*y(i,4)+5.0*y(i,5))-3*(y(i,1)+y(i,2)+y(i,3)+y(i,4)+y(i,5))>=0);
@for(R(i):
(8.8*y(i,1)+6.1*y(i,2)+2.0*y(i,3)+4.2*y(i,4)+5.0*y(i,5))-6*(y(i,1)+y(i,2)+y(i,3)+y(i,4)+y(i,5))<=0);
@for(C(j):
x(1,j)<=500);
@for(C(j):
x(1,j)-y(1,j)+x(2,j)<=500);
@for(C(j):
x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)<=500);
@for(C(j):
x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)<=500);
@for(C(j):
x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)-y(4,j)+x(5,j)<=500);
@for(C(j):
x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)-y(4,j)+x(5,j)-y(5,j)+x(6,j)<=500);
@for(C(j):
500+x(1,j)-y(1,j)>=0);
@for(C(j):
500+x(1,j)-y(1,j)+x(2,j)-y(2,j)>=0);
@for(C(j):
500+x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)>=0);
@for(C(j):
500+x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)-y(4,j)>=0);
@for(C(j):
500+x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)-y(4,j)+x(5,j)-y(5,j)>=0);
@for(C(j):
500+x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)-y(4,j)+x(5,j)-y(5,j)>=0+x(6,j)-y(5,j));
end
问题三代码(调试失败):
model:
sets:
R/1..6/;
C/1..5/;
JZ(R,C):
A,x,y,B;
endsets
data:
A=110,120,130,110,115,
130,130,110,90,115,
110,140,130,100,95,
120,110,120,120,125,
100,120,150,110,105,
90,100,140,80,135;
B=0.00,0.00,0.00,0.00,0.00,
0.01,0.01,0.02,0.02,0.02,
0.02,0.02,0.04,0.04,0.04,
0.04,0.04,0.08,0.08,0.08,
0.16,0.16,0.32,0.32,0.32,
0.32,0.32,0.64,0.64,0.64;
enddata
max=200*(@sum(R(i):
@sum(C(j):
x(i,j))))-@sum(JZ:
(A+A*B*0)*x)-75000
-5*(@sum(C(j):
12*x(1,j)-11*y(1,j)+10*x(2,j)-9*y(2,j)+8*x(3,j)-7*y(3,j)+6*x(4,j)-5*y(4,j)+4*x(5,j)-3*y(5,j)+2*x(6,j)-y(6,j)))/2;
@for(C(j):
@sum(R(i):
x(i,j)-y(i,j))=0);
@for(R(i):
y(i,1)+y(i,2)<=200;);
@for(R(i):
y(i,3)+y(i,4)+y(i,5)<=250);
@for(R(i):
(8.8*y(i,1)+6.1*y(i,2)+2.0*y(i,3)+4.2*y(i,4)+5.0*y(i,5))-3*(y(i,1)+y(i,2)+y(i,3)+y(i,4)+y(i,5))>=0);
@for(R(i):
(8.8*y(i,1)+6.1*y(i,2)+2.0*y(i,3)+4.2*y(i,4)+5.0*y(i,5))-6*(y(i,1)+y(i,2)+y(i,3)+y(i,4)+y(i,5))<=0);
@for(C(j):
x(1,j)<=500);
@for(C(j):
x(1,j)-y(1,j)+x(2,j)<=500);
@for(C(j):
x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)<=500);
@for(C(j):
x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)<=500);
@for(C(j):
x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)-y(4,j)+x(5,j)<=500);
@for(C(j):
x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)-y(4,j)+x(5,j)-y(5,j)+x(6,j)<=500);
@for(C(j):
500+x(1,j)-y(1,j)>=0);
@for(C(j):
500+x(1,j)-y(1,j)+x(2,j)-y(2,j)>=0);
@for(C(j):
500+x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)>=0);
@for(C(j):
500+x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)-y(4,j)>=0);
@for(C(j):
500+x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)-y(4,j)+x(5,j)-y(5,j)>=0);
@for(C(j):
500+x(1,j)-y(1,j)+x(2,j)-y(2,j)+x(3,j)-y(3,j)+x(4,j)-y(4,j)+x(5,j)-y(5,j)>=0+x(6,j)-y(5,j));
@for(R(i):
@sum(C(j):
(1+@sign(y(i,j)-0.000001))/2)<=3);
@for(R(i):
(1+@sign(y(i,5)-0.000001))/2-(1+@sign(y(i,1)-0.000001))/2>=0);
@for(R(i):
(1+@sign(y(i,5)-0.000001))/2-(1+@sign(y(i,2)-0.000001))/2>=0);
end