MATLAB 函数解优化问题 下载本文

在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 =