目录
例题
某公司考虑生产两种光电太阳能电池:产品甲和产品乙。这种生产会引起空气放射性污染。因此,公司经理有两个目标:极大化利润与极小化总的放射性污染。已知在一个生产周期内,每单位产品的收益、放射性污染排放量、机器能力(小时)、装配能力(人时)和可用的原材料(单位)的限制如表16.1所示。假设市场需求无限制,两种产品的产量和至少为10,则公司该如何安排一个生产周期内的生产。
设分别表示甲乙两种产品在一个生产周期内的产量分别为和,则该问题的目标函数为利润极大化:max f1=2+3 污染极小化:min f2= +2 得:
方法一:线性加权法
该方法应用的关键是要确定每个目标的权重,它反映不同目标在决策者心中的重要程度,重要程度高的权重就大,重要程度低的权重就小。权重的确定一般由决策者给出,因而具有较大的主观性,不同的决策者给的权重可能不同,从而会使计算的结果不同。
1.两个目标函数的权重都取为0.5,把上述多目标规划问题归结为如下的线性规划问题
2.多目标规划问题中,绝对最优解是不常见的,因此只提满意解或者有效解
clc,clear
prob=optimproblem;%默认目标函数最小化
x=optimvar('x',2,1,'LowerBound',0);%决策变量2*1
prob.Objective = -0.5*x(1)-0.5*x(2);%目标函数
%约束条件
prob.Constraints.cons1 = 0.5*x(1)+0.25*x(2)<=8;
prob.Constraints.cons2 = 0.2*x(1)+0.2*x(2)<=4;
prob.Constraints.cons3 = x(1)+5*x(2)<=72;
prob.Constraints.cons4 = x(1)+x(2)>=10;
[sol,fval,flag,out]=solve(prob)
sol.x
结果:和分别等于7和13, max f1=2+3 =53, min f2= +2 =33
方法二:理想点法
以每个单目标最优值为该目标的理想值,使每个目标函数值与理想值的差的加权平方和最小。
clc,clear
prob=optimproblem;%默认目标函数最小化
x=optimvar('x',2,1,'LowerBound',0);%决策变量2*1
prob.Objective = -2*x(1)-3*x(2);%目标函数
%约束条件
prob.Constraints.cons1 = 0.5*x(1)+0.25*x(2)<=8;
prob.Constraints.cons2 = 0.2*x(1)+0.2*x(2)<=4;
prob.Constraints.cons3 = x(1)+5*x(2)<=72;
prob.Constraints.cons4 = x(1)+x(2)>=10;
[sol,fval,flag,out]=solve(prob)
sol.x
结果:和分别等于7和13, 最优解f1=-2-3 =-53
clc,clear
prob=optimproblem;%默认目标函数最小化
x=optimvar('x',2,1,'LowerBound',0);%决策变量2*1
prob.Objective = x(1)+2*x(2);%目标函数
%约束条件
prob.Constraints.cons1 = 0.5*x(1)+0.25*x(2)<=8;
prob.Constraints.cons2 = 0.2*x(1)+0.2*x(2)<=4;
prob.Constraints.cons3 = x(1)+5*x(2)<=72;
prob.Constraints.cons4 = x(1)+x(2)>=10;
[sol,fval,flag,out]=solve(prob)
sol.x
结果:和分别等于10和0, 最优解 f2= +2 =10
构造每个目标与最优值的差的平方和,作为新的目标函数,求解二次规划问题
clc,clear
prob=optimproblem;%默认目标函数最小化
x=optimvar('x',2,1,'LowerBound',0);%决策变量2*1
prob.Objective = (-2*x(1)-3*x(2)+53)^2+(x(1)+2*x(2)-10)^2;%目标函数
%约束条件
prob.Constraints.cons1 = 0.5*x(1)+0.25*x(2)<=8;
prob.Constraints.cons2 = 0.2*x(1)+0.2*x(2)<=4;
prob.Constraints.cons3 = x(1)+5*x(2)<=72;
prob.Constraints.cons4 = x(1)+x(2)>=10;
[sol,fval,flag,out]=solve(prob)
sol.x
结果:和分别等于13.36和5.28, max f1=2+3 =42.56, min f2= +2 =23.92
方法三:优先级法
根据目标重要性分成不同优先级,先求优先级高的目标函数的最优值,在确保优先级高的目标获得不低于最优值的条件下,再求优先级低的目标函数。该方法适用于目标有明显轻重之分的问题,也就是说,各目标的重要性差距比较大,首先确保最重要的目标,然后再考虑其他目标。在同一等级的目标可能会有多个,这些目标的重要性没有明显差的距,可以用加权方法求解。
由理想点解知,第一个目标函数的最优值为-53。以第二个目标函数作为目标函数,问题的原始约束条件再加第一个目标函数等于其最优值的约束条件,构造如下的线性规划模型
clc,clear
prob=optimproblem;%默认目标函数最小化
x=optimvar('x',2,1,'LowerBound',0);%决策变量2*1
prob.Objective = x(1)+2*x(2);%目标函数
%约束条件
prob.Constraints.cons1 = 0.5*x(1)+0.25*x(2)<=8;
prob.Constraints.cons2 = 0.2*x(1)+0.2*x(2)<=4;
prob.Constraints.cons3 = x(1)+5*x(2)<=72;
prob.Constraints.cons4 = x(1)+x(2)>=10;
prob.Constraints.cons5 = -2*x(1)-3*x(2)==-53;
[sol,fval,flag,out]=solve(prob)
sol.x
结果:和分别等于7和13, max f1=2+3 =53, min f2= +2 =33