第十章 非线性规划
§10—1 问题提出----公交公司的营运策略一个大型的公交公司:
(1)年预算2亿元;
(2)营业额与全部营运车辆的总里程M成正比,总里程M与车辆数B、员工总人数W、燃油总量F的关系(统计分析而得的经验公式)是
,
(其中,M单位千公里;F单位立方米);
(3)初始:B=700,W=2200 ;
(4)各项费用:购新车21万元每辆,卖车得7.5万元每辆,维护费0.8万元每辆,雇佣新员工0.8万元每个,解雇旧员工0.6万元每个,年薪3万元每个员工,油价0.3万元每立方米;
(5)每辆车:至少配备3个员工,至多燃50立方米油。
请提供营运策略,使营业额最大。
§10—2 问题分析与模型建立
这是优化问题,优化问题的三个要素是决策变量、约束条件和目标函数。
决策变量:购买车数;出售车数;新雇员工数;解雇员工数;每车年燃油量 。
约束条件:年预算约束;车数与员工数;每车的最大燃油量;非负性。
目标函数:总里程M的最大化。
根据题给数据,建立如下优化模型:
(注意到,在目标函数、约束条件的表达式中,决策变量不是以线性形式出现的)
§10—3 数学知识:非线性规划
1.无约束优化问题
,其中向量的n个分量都是决策变量,称目标函数。
用Matlab求解:先建立函数文件mbhs.m,内容是的表达式;再回到Matlab命令区,输入决策变量初值数据x0,执行命令
[x,fmin]=fminunc(@mbhs,x0)
如:的最优解是
用Matlab计算,函数文件为
function f=mbhs(x)
f=2*x(1)^2+3*x(2)^2;
再输入初值 x0=[1;1]; 并执行上述命令,结果输出为
x =
1.0e-008 *
0.1253
0.3817
fmin =
4.6849e-017
2.约束优化问题
其中:向量的n个分量都是决策变量,称目标函数、等式约束函数、不等式约束函数、L下界、U上界。
用Matlab求解:先把模型写成适用于Matlab的标准形式
约束条件中:把线性的式子提炼出来得前两个式子;后三个式子都是列向量。
(如: )
再建立两个函数文件:目标函数mbhs.m;约束函数yshs.m
再回到Matlab命令区,输入各项数据及决策变量初值数据x0,执行命令
[x,fmin]=fmincon(@mbhs,x0,A,b,Aeq,beq,L,U,@yshs)
例:单位球内,
曲面的上方,
平面之中(不是上面),
满足上述三个条件的区域记为D,求函数
在D上的最大值、最大值点。
解:
(1)目标函数mbhs.m
function f=mbhs(x)
f=-exp(x(1)*x(2)*x(3))*sin(x(1)+x(2)-x(3))-exp(-x(1)*x(2))*cos(x(3)^2-1);
(2)约束函数yshs.m
function [g,h]=yshs(x)
g=[x(1)^2+x(2)^2+x(3)^2-1;x(1)^2+x(2)^2-0.5-0.1*x(1)*x(2)-x(3)];
h=[];
(3)数据准备
x0=[0.0;0.02;0.02];A=[];b=[];Aeq=[1,1,1];beq=0.08;
L=[-1;-1;-1];U=[1;1;1];
(4)执行命令
[x,fmin]=fmincon(@mbhs,x0,A,b,Aeq,beq,L,U,@yshs)
(5)结果
x = 0.2367
0.2368
-0.3935
fmin = -1.3732
答:最大值点(0.2367,0.2368,-0.3935),最大值1.3732
§10—4 模型求解
(1)目标函数mbhs.m
function f=mbhs(x)
f=-15.7*(700+x(1)-x(2))^0.06*(2200+ x(3)-x(4))^0.32*((700+x(1)-x(2))*x(5))^0.56;
(2)约束函数yshs.m
function [g,h]=yshs(x)
g=21.8*x(1)-8.3*x(2)+3.8*x(3)-2.4*x(4)+210*x(5)+0.3*(x(1)-x(2))*x(5)-12840;
h=[];
(3)数据准备
x0=[0;0;0;0;25];A=[3,-3,-1,1,0];b=100;Aeq=[];beq=[];
L=[0;0;0;0;0];U=[Inf; Inf; Inf; Inf;50];
(4)执行命令
[x,fmin]=fmincon(@mbhs,x0,A,b,Aeq,beq,L,U,@yshs)
(5)结果
x =
0
-0.0000
615.7895
0
50.0000
fmin =
-1.0355e+005
生产与销售计划问题某公司用两种原油(A和B)混合加工成两种汽油(甲和乙)。甲、乙两种汽油含原油A的最低比例分别为50%和60%,每吨售价分别为4800元和5600元。该公司现有原油A和B的库存量分别为500吨和1000吨,还可以从市场上买到不超过1500吨的原油A,原油A的市场价为:购买量不超过500吨时的单价为10000元/吨;购买量超过500吨但不超过1000吨时,超过500吨的部分单价为8000元/吨;购买量超过1000吨时,超过1000吨的部分单价为6000元/吨。该公司应怎样安排原油的采购和加工?
问题分析安排原油采购、加工的目的是:利润最大题中给出的是:甲乙两种汽油的售价,原油A的进价.
利润==“销售汽油的收入”—“购进原油A的支出”
难点:原油A的采购价与购买量的关系复杂,是分段函数关系。能否用、如何用线性规划、整数规划模型加以处理?
模型建立以下约定:货币单位是“千元”;价格单位是“千元/吨”。
设原油A的购买量为,采购支出记为,则有如下的分段线性函数:
设 原油A用于生产甲、乙两种汽油的数量分别为,
原油B用于生产甲、乙两种汽油的数量分别为,
则 总的销售收入为 ,
优化目标函数(利润)为
.
约束条件:
原油A的数量 ;
原油B的数量 ;
原油A的采购量 ;
原油A在汽油甲中的比例 ;
原油A在汽油乙中的比例 ;
非负性 .
模型求解
1.目标函数中,分段函数必须处理掉:记
,
其中分别是以价格10、8、6购进的原油A的量,则模型中的目标函数变成线性函数
.
2.那么,应该满足什么样的约束条件呢?
显然有 ;
只有以价格10购买了500吨之后,才有资格以价格8购买,即只有当 时才有,该约束条件可用如下式子代表
;
同理,只有以价格8购买了500吨之后,才有资格以价格6购买,得
.
3.得到如下“非线性规划”模型
用LINGO软件编程计算,得最优解
答:采购1000吨原油A,不生产汽油甲,用全部的1500吨原油A、1000吨原油B投入生产汽油乙;此时,利润达到最大值5000千元.
§10—1 问题提出----公交公司的营运策略一个大型的公交公司:
(1)年预算2亿元;
(2)营业额与全部营运车辆的总里程M成正比,总里程M与车辆数B、员工总人数W、燃油总量F的关系(统计分析而得的经验公式)是
,
(其中,M单位千公里;F单位立方米);
(3)初始:B=700,W=2200 ;
(4)各项费用:购新车21万元每辆,卖车得7.5万元每辆,维护费0.8万元每辆,雇佣新员工0.8万元每个,解雇旧员工0.6万元每个,年薪3万元每个员工,油价0.3万元每立方米;
(5)每辆车:至少配备3个员工,至多燃50立方米油。
请提供营运策略,使营业额最大。
§10—2 问题分析与模型建立
这是优化问题,优化问题的三个要素是决策变量、约束条件和目标函数。
决策变量:购买车数;出售车数;新雇员工数;解雇员工数;每车年燃油量 。
约束条件:年预算约束;车数与员工数;每车的最大燃油量;非负性。
目标函数:总里程M的最大化。
根据题给数据,建立如下优化模型:
(注意到,在目标函数、约束条件的表达式中,决策变量不是以线性形式出现的)
§10—3 数学知识:非线性规划
1.无约束优化问题
,其中向量的n个分量都是决策变量,称目标函数。
用Matlab求解:先建立函数文件mbhs.m,内容是的表达式;再回到Matlab命令区,输入决策变量初值数据x0,执行命令
[x,fmin]=fminunc(@mbhs,x0)
如:的最优解是
用Matlab计算,函数文件为
function f=mbhs(x)
f=2*x(1)^2+3*x(2)^2;
再输入初值 x0=[1;1]; 并执行上述命令,结果输出为
x =
1.0e-008 *
0.1253
0.3817
fmin =
4.6849e-017
2.约束优化问题
其中:向量的n个分量都是决策变量,称目标函数、等式约束函数、不等式约束函数、L下界、U上界。
用Matlab求解:先把模型写成适用于Matlab的标准形式
约束条件中:把线性的式子提炼出来得前两个式子;后三个式子都是列向量。
(如: )
再建立两个函数文件:目标函数mbhs.m;约束函数yshs.m
再回到Matlab命令区,输入各项数据及决策变量初值数据x0,执行命令
[x,fmin]=fmincon(@mbhs,x0,A,b,Aeq,beq,L,U,@yshs)
例:单位球内,
曲面的上方,
平面之中(不是上面),
满足上述三个条件的区域记为D,求函数
在D上的最大值、最大值点。
解:
(1)目标函数mbhs.m
function f=mbhs(x)
f=-exp(x(1)*x(2)*x(3))*sin(x(1)+x(2)-x(3))-exp(-x(1)*x(2))*cos(x(3)^2-1);
(2)约束函数yshs.m
function [g,h]=yshs(x)
g=[x(1)^2+x(2)^2+x(3)^2-1;x(1)^2+x(2)^2-0.5-0.1*x(1)*x(2)-x(3)];
h=[];
(3)数据准备
x0=[0.0;0.02;0.02];A=[];b=[];Aeq=[1,1,1];beq=0.08;
L=[-1;-1;-1];U=[1;1;1];
(4)执行命令
[x,fmin]=fmincon(@mbhs,x0,A,b,Aeq,beq,L,U,@yshs)
(5)结果
x = 0.2367
0.2368
-0.3935
fmin = -1.3732
答:最大值点(0.2367,0.2368,-0.3935),最大值1.3732
§10—4 模型求解
(1)目标函数mbhs.m
function f=mbhs(x)
f=-15.7*(700+x(1)-x(2))^0.06*(2200+ x(3)-x(4))^0.32*((700+x(1)-x(2))*x(5))^0.56;
(2)约束函数yshs.m
function [g,h]=yshs(x)
g=21.8*x(1)-8.3*x(2)+3.8*x(3)-2.4*x(4)+210*x(5)+0.3*(x(1)-x(2))*x(5)-12840;
h=[];
(3)数据准备
x0=[0;0;0;0;25];A=[3,-3,-1,1,0];b=100;Aeq=[];beq=[];
L=[0;0;0;0;0];U=[Inf; Inf; Inf; Inf;50];
(4)执行命令
[x,fmin]=fmincon(@mbhs,x0,A,b,Aeq,beq,L,U,@yshs)
(5)结果
x =
0
-0.0000
615.7895
0
50.0000
fmin =
-1.0355e+005
生产与销售计划问题某公司用两种原油(A和B)混合加工成两种汽油(甲和乙)。甲、乙两种汽油含原油A的最低比例分别为50%和60%,每吨售价分别为4800元和5600元。该公司现有原油A和B的库存量分别为500吨和1000吨,还可以从市场上买到不超过1500吨的原油A,原油A的市场价为:购买量不超过500吨时的单价为10000元/吨;购买量超过500吨但不超过1000吨时,超过500吨的部分单价为8000元/吨;购买量超过1000吨时,超过1000吨的部分单价为6000元/吨。该公司应怎样安排原油的采购和加工?
问题分析安排原油采购、加工的目的是:利润最大题中给出的是:甲乙两种汽油的售价,原油A的进价.
利润==“销售汽油的收入”—“购进原油A的支出”
难点:原油A的采购价与购买量的关系复杂,是分段函数关系。能否用、如何用线性规划、整数规划模型加以处理?
模型建立以下约定:货币单位是“千元”;价格单位是“千元/吨”。
设原油A的购买量为,采购支出记为,则有如下的分段线性函数:
设 原油A用于生产甲、乙两种汽油的数量分别为,
原油B用于生产甲、乙两种汽油的数量分别为,
则 总的销售收入为 ,
优化目标函数(利润)为
.
约束条件:
原油A的数量 ;
原油B的数量 ;
原油A的采购量 ;
原油A在汽油甲中的比例 ;
原油A在汽油乙中的比例 ;
非负性 .
模型求解
1.目标函数中,分段函数必须处理掉:记
,
其中分别是以价格10、8、6购进的原油A的量,则模型中的目标函数变成线性函数
.
2.那么,应该满足什么样的约束条件呢?
显然有 ;
只有以价格10购买了500吨之后,才有资格以价格8购买,即只有当 时才有,该约束条件可用如下式子代表
;
同理,只有以价格8购买了500吨之后,才有资格以价格6购买,得
.
3.得到如下“非线性规划”模型
用LINGO软件编程计算,得最优解
答:采购1000吨原油A,不生产汽油甲,用全部的1500吨原油A、1000吨原油B投入生产汽油乙;此时,利润达到最大值5000千元.