§4 多目标规划模型
多目标规划定义为在一组约束下,多个不同的目标函数进行优化设计。
数学模型:
s.t gj (x) ≤0 j=1, 2, … ,k
其中x=(x1 ,x2 , … ,xn)为一个n维向量;fi(x)为目标函数,i=1, 2, … ,m; gj (x)为系统约束, j=1, 2, … ,k。
当目标函数处于冲突状态时,不存在最优解使所有目标函数同时达到最优。于是我们寻求有效解(又称非劣解或非支配解或帕累托解)
定义:若 ( ∈Ω)的邻域内不存在Δx,使得( +Δx∈Ω),且
则称 为有效解。
多目标规划问题的几种常用解法:
(1) 主要目标法
其基本思想是:在多目标问题中,根据问题的实际情况,确定一个目标为主要目标,而把其余目标作为次要目标,并且根据经验,选取一定的界限值。这样就可以把次要目标作为约束来处理,于是就将原来的多目标问题转化为一个在新的约束下的单目标最优化问题。
(2) 线性加权和法
其基本思想是:按照多目标fi(x) (i=1, 2, … ,m)的重要程度,分别乘以一组权系数λj(j=1, 2, … ,m)然后相加作为目标函数而构成单目标规划问题。即 ,其中
例1:某钢铁厂准备用5000万用于A、B两个项目的技术改造投资。设x1、x2分别表示分配给项目A、B的投资。据专家预估计,投资项目A、B的年收益分别为70%和66%。同时,投资后总的风险损失将随着总投资和单项投资的增加而增加,已知总的风险损失为0.02x12+0.01x22+0.04(x1+x2)2,问应如何分配资金才能使期望的收益最大,同时使风险损失为最小。
建立数学模型
max f1(x)=70x1+66x2
min f2(x)= 0.02x12+0.01x22+0.04(x1+x2)2
s.t x1+x2≤5000
0≤x1, 0≤x2
线性加权构造目标函数: max f=0.5f1(x) –0.5f2(x)
化最小值问题: min (-f)=- 0.5f1(x) +0.5f2(x)
首先编辑目标函数M文件ff11.m
- function f=ff11(x)
- f=-0.5*(70*x(1)+66*x(2))+0.5*(0.02*x(1)^2+0.01*x(2)^2+0.04*(x(1)+x(2))^2);
复制代码
调用单目标规划求最小值问题的函数
- x0=[1000,1000]
- A=[1 1];
- b=5000;
- lb=zeros(2,1);
- [x,fval, exitflag]=fmincon(@ff11,x0, A,b,[],[],lb,[])
- f1=70*x(1)+66*x(2)
- f2=0.02*x(1)^2+0.01*x(2)^2+0.04*(x(1)+x(2))^2
复制代码
结果:
x =307.1428 414.2857
fval =-1.2211e+004
exitflag =1
f1 = 4.8843e+004
f2 = 2.4421e+004
(3) 极大极小法
其基本思想是:对于极小化的多目标规划,让其中最大的目标函数值尽可能地小为此,对每个 x∈R,我们先求诸目标函数值fi(x)的最大值,然后再求这些最大值中的最小值。即构造单目标规划:
(4) 目标达到法
对于多目标规划:
s.t gj (x) ≤0 j=1, 2, … ,n
先设计与目标函数相应的一组目标值理想化向量 ,
再设γ为一松弛因子标量。设 为权值系数向量。
于是多目标规划问题化为:
在Matlab的优化工具箱中,fgoalattain函数用于解决此类问题。
其数学模型形式为:
- min γ
- F(x)-weight ·γ≤goal
- c(x) ≤0
- ceq(x)=0
- A x≤b
- Aeq x=beq
- lb≤x≤ub
- 其中,x,weight,goal,b,beq,lb和ub为向量,A和Aeq为矩阵,c(x),ceq(x)和F(x)为函数,
复制代码
调用格式:
- x=fgoalattain(F,x0,goal,weight)
- x=fgoalattain(F,x0,goal,weight,A,b)
- x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq)
- x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq,lb,ub)
- x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
- x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)
- x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2)
- [x,fval]=fgoalattain(…)
- [x,fval,attainfactor]=fgoalattain(…)
- [x,fval,attainfactor,exitflag,output]=fgoalattain(…)
- [x,fval,attainfactor,exitflag,output,lambda]=fgoalattain(…)
复制代码
说明:F为目标函数;x0为初值;goal为F达到的指定目标;weight为参数指定权重;A、b为线性不等式约束的矩阵与向量;Aeq、beq为等式约束的矩阵与向量;lb、ub为变量x的上、下界向量;nonlcon为定义非线性不等式约束函数c(x)和等式约束函数ceq(x);options中设置优化参数。
x返回最优解;fval返回解x处的目标函数值;attainfactor返回解x处的目标达到因子;exitflag描述计算的退出条件;output返回包含优化信息的输出参数;lambda返回包含拉格朗日乘子的参数。
例2:某化工厂拟生产两种新产品A和B,其生产设备费用分别为2万元/吨和5万元/吨。这两种产品均将造成环境污染,设由公害所造成的损失可折算为A为4万元/吨,B为1万元/吨。由于条件限制,工厂生产产品A和B的最大生产能力各为每月5吨和6吨,而市场需要这两种产品的总量每月不少于7吨。试问工厂如何安排生产计划,在满足市场需要的前提下,使设备投资和公害损失均达最小。该工厂决策认为,这两个目标中环境污染应优先考虑,设备投资的目标值为20万元,公害损失的目标为12万元。
建立数学模型:
设工厂每月生产产品A为x1吨,B为x2吨,设备投资费为f(x1),公害损失费为f(x2),则问题表达为多目标优化问题:
min f1(x)=2x1+5x2
min f2(x)=4x1+x2
s.t x1≤5
x2≤6
x1+x2≥7
x1 ,x2≥0
程序:首先编辑目标函数M文件ff12.m
- function f=ff12(x)
- f(1)=2*x(1)+5*x(2);
- f(2)= 4*x(1) +x(2);
复制代码
按给定目标取:
- goal=[20,12];
- weight=[20,12];
- x0=[2,2]
- A=[1 0; 0 1;-1 -1];
- b=[5 6 -7];
- lb=zeros(2,1);
- [x,fval,attainfactor,exitflag]=fgoalattain(@ff12,x0,goal,weight,A,b,[],[],lb,[])
复制代码
结果:
x =2.9167 4.0833
fval =26.2500 15.7500
attainfactor =0.3125
exitflag =1
例3:某工厂生产两种产品甲和乙,已知生产甲产品100公斤需6个工时,生产乙产品100公斤需8个工时。假定每日可用的工时数为48工时。这两种产品每100公斤均可获利500元。乙产品较受欢迎,且若有个老顾客要求每日供应他乙种产品500公斤,问应如何安排生产计划?
建立数学模型:
设生产甲、乙两种产品的数量分别为x和x(以公斤计),要使生产计划比较合理,应考虑用工时尽量少,获利尽量大,
其用多目标规划描述这:
min f1=6x1+8x2
max f2=100(x1+x2)
max f3=x2
s.t 6x1+8x2≤48
x2≥5
x1 ,x2≥0
将其标准化为:
min f1=6x1+8x2
min - f2=-100(x1+x2)
min - f3=-x2
s.t 6x1+8x2≤48
-x2≤-5
x1 ,x2≥0
程序:首先编辑目标函数M文件ff13.m
- function f=ff13(x)
- f(1)=6*x(1)+8*x(2);
- f(2)= -100*(x(1) +x(2));
- f(3)=-x(2);
复制代码
按给定目标取:
- goal=[48 -1000 -5];
- weight=[48 -1000 -5];
- x0=[2 2];
- A=[6 8; 0 -1];
- b=[48 -5];
- lb=zeros(2,1);
- [x,fval,attainfactor,exitflag]=fgoalattain(@ff13,x0,goal,weight,A,b,[],[],lb,[])
复制代码
结果:
x =1.3333 5.0000
fval =48.0000 -633.3333 -5.0000
attainfactor =1.6338e-008
exitflag =1
即生产计划为每日生产甲产品133.33公斤,生产乙产品500公斤 |