任冠峰 郑碧珍 何敏洪
1. 韶关学院2002级数学系数学与应用数学班,广东韶关512005
2. 韶关学院2001级数学系数学与应用数学(1)班,广东韶关512005
[摘要]:文章针对未来半年原料油市场价格变化的情况下,通过分析原油价格对公司利润的影响,并在满足生产、存储、硬度约束的条件下,公司将如何采购和加工原料油,才能获得最大利润。据此,我们建立了线性规划模型,并对目标函数和约束条件作了优化,将优化后的模型用MATLAB编程搜索求解,将求得的数据进行了处理,得到公司获得的最大利润为。
关键词:优化模型;线性混合;最大利润
1 问题的提出
食品作为现代社会的一种能源,其生产、加工、分配与市场经济和人民生活有着密切的联系。食品油是人们生活的必需品,其销售应满足市场需求,但其不能大量生产、加工和硬度的特点,决定了公司应如何采购和加工粗油才能获最大利润,这就是精练加工几种粗油的问题,而在约束条件的下,提出了食品的优化加工问题。
2 问题的分析
本问题是一个在约束条件下的最优化问题.它要求我们制定一种采购和加工方案,使公司获得的利润最大.由于未来半年中原料油的市场价格是变化的,成品油的售价固定不变为元/吨,所以我们在每个月购买各种油的数量也不同.购买的太多,就会造成储存费用的增加,且有生产力的,每个月最多可炼植物油吨,非植物油吨,故总利润不会达到最大;若购买的太少,会不满足市场需求,同样会造成经济损失,所以问题就转化为我们在各个月买或不买.若买,买那几种(5种中),买多少,每月又精炼多少,才能使公司半年内获得利润最大.
3 模型假设
1 假设每个月初一次性购买原料油.
2 假设每月精炼的原料油的数量不计入存储数量.
3假设每个月先买原料油,再根据需求精炼成品油.
4 符号约定
: 表示第种原料油第月的购买吨数.
: 表示第种原料油第月的精炼吨数.
:表示未来半年中第种原料油第月的市场价.
: 表示第种油的硬度..
: 表示成品油售价.
: 表示每吨油每月的存储费.
: 表示现存有每种原料油的吨数.
: 表示未来半年获得的利润.
: 表示未来半年的总销售额.
: 表示原料油的成本.
: 表示原料油的存储费.
5 模型的建立
公司获得的利润由总销售额、成本、存储费三部分构成.
即:
=
=
=
综上所述,得到食品加工的优化模型:
约束条件的说明:
表示精炼油量的约束:每月最多可炼植物油吨,非植物油吨.
表示存储量的约束:每种原料油最多可存储吨.
表示硬度的约束:成品油的硬度应在至单位之间.
表示存货量的约束:6个月后每种原料油必须要存储吨.
6 模型的求解
运用求解模型
由于该食品加工模型为一个线性规划模型,所以本模型运用中求解线性规划的命令求解.但是目标函数和约束条件并不是标准形式,我们要通过变形和化简,把此线性规划问题化为标准形式.
目标函数的化简:
其标准形式为:
但是由于中求解线性规划的命令不允许目标函数有常数项,而上式中是常数项,所以可以把原规划的目标函数改为:
若求出上式的目标函数的值后再减去常数项就得到了原目标函数的值.
约束条件的变形:
由于约束条件在求解线性规划的函数中很难实现,所以约束条件要做适当的变形.根据题目可知道每个月精练原料油的总数最多是吨,那么的上界就为.我们再假设的下界为,因此约束条件可变形为:
运用解得的最优解和最优值列表为:(源程序见附录)
未来半年内购买的原料油的数量 :
| 第一月 | 第二月 | 第三月 | 第四月 | 第五月 | 第六月 | |
| V1 | 99.19 | 100.32 | 98.47 | 99.57 | 102.44 | 159.26 |
| V2 | 100.81 | 99.68 | 101.53 | 100.43 | 97.56 | 40.74 |
| O1 | 0 | 0 | 0 | 0 | 0 | 0 |
| O2 | 174.04 | 179.01 | 169.83 | 175.32 | 1.92 | 250 |
| O3 | 75.96 | 70.99 | 80.17 | 74.68 | 60.08 | 0 |
| 第一月 | 第二月 | 第三月 | 第四月 | 第五月 | 第六月 | |
| V1 | 0 | 0 | 0 | 0 | 0 | 659.26 |
| V2 | 0 | 0 | 0 | 0 | 0 | 540.74 |
| O1 | 0 | 0 | 0 | 0 | 0 | 0 |
| O2 | 0 | 388.11 | 0 | 0 | 0 | 750 |
| O3 | 0 | 0 | 204.23 | 0 | 157.66 | 0 |
因此原线性规划的最优值为:
于是未来半年的最大利润:元.
7 模型的评价
食品加工优化模型是一个线性规划问题,文章对目标函数的建立及优化,约束条件的生产作了详细的分析,这对解题作了充分的准备。用MATLAB编程时,先去掉了目标函数的常数项,这大大加快了程序的运行速度,并求得了最大利润。遗憾的是没有将最优解进行分析和将此模型推广应用。
参考文献:
[1].王沫然编著.MATLAB6.0与科学计算.北京.电子工业出版社.2001年9月
[2].萧树铁等. 数学实验. 北京.高等教育出版社.1999年7月
[3].《MATLAB6.5 辅助优化计算与设计》.北京.电子工业出版社.2003年1月
附录
A=[1100 1200 1300 1100 1150
1300 1300 1100 900 1150
1100 1400 1300 1000 950
1200 1100 1200 1200 1250
1000 1200 1500 1100 1050
900 1000 1400 800 1350];
f=zeros(1,60);
p=[];
for h=1:450
for i=1:5
for j=1:6
f(1,(i-1)*6+j)=-1500-50*(7-j);
f(1,30+(i-1)*6+j)=50*(7-j)+A(j,i);
end
end
a=zeros(90,60);
b=zeros(90,1);
c=[8.8 6.1 2.0 4.2 5.0];
for i=1:6
a(i,i)=1;
a(i,i+6)=1;
b(i,1)=200;
end
for j=7:12
a(j,6+j)=1;
a(j,12+j)=1;
a(j,18+j)=1;
b(j,1)=250;
end
for k=1:30
a(k+12:42,k)=-1;
a(k+12:42,k+30)=1;
b(k+12,1)=500;
a(k+60:90,k)=1;
a(k+60:90,k+30)=-1;
b(k+60,1)=500;
end
for t=1:6
for s=1:5
a(t+42,(s-1)*6+t)=c(1,s)/h;
b(t+42,1)=6;
a(54+t,(s-1)*6+t)=-1;
b(54+t,1)=-h;
a(t+48,(s-1)*6+t)=-c(1,s)/450;
b(t+48,1)=-3;
end
end
aeq=zeros(5,60);
beq=zeros(5,1);
for i=1:5
for j=1:6
aeq(i,(i-1)*6+j)=-1;
aeq(i,30+(i-1)*6+j)=1;
end
end
s=0;
m=0;
ub=[];
lb=zeros(60,1);
[x]=linprog(f,a,b,aeq,beq,lb,ub)
y=f*x;
p=[p,y];
end
p %当d取不同值时,y的值也会不同,所以所有y的值付给一个数组
min(p) %求出所有y的最大值,这个最小值就是我们所要求的最优值
for i=1:450
if p(i)==min(p)
pp=i;
end
end
pp %表示当y取到最小值时,d的值下载本文