龙空技术网

MATLAB的fgoalattain()函数求解多目标规划

云龙派 2295

前言:

现在咱们对“多目标规划目标函数”大概比较关切,小伙伴们都想要分析一些“多目标规划目标函数”的相关知识。那么小编也在网摘上搜集了一些有关“多目标规划目标函数””的相关资讯,希望各位老铁们能喜欢,看官们快快来学习一下吧!

多目标规划的一种求解方法是加权系数法,即为每一个目标赋值一个权系数,把多目标模型转化为一个单目标模型。MATLAB的fgoalattain()函数可以用于求解多目标规划。

1.基本语法

fgoalattain()函数的用法:x = fgoalattain(fun,x0,goal,weight)x = fgoalattain(fun,x0,goal,weight,A,b)x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)x = fgoalattain(problem)[x,fval] = fgoalattain(......)[x,fval,attainfactor,exitflag,output] = fgoalattain(......)[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(......)其中fun 是用 M 文件定义的目标向量函数,x0 是初值,weight   是权重。 A,b 定义不等式约束A*x ≤ b ,Aeq,beq定义等式约束 Aeq*x=Beq ,nonlcon是用 M 文件定义的非线性约束c(x) ≤0,ceq(x)=0 。返回值 fval是目标向量函数的值。 要完整掌握其用法,请用 help   fgoalattain 或 type   fgoalattain 查询相关的帮助。 

2.实例1

例:求解多目标线性规划问题

(1)定义目标函数:

function F=Fun16_5(x)F=[-100*x(1)-90*x(2)-80*x(3)-70*x(4);   3*x(2)+2*x(4)];end

(2)goal由两个目标函数分别求出目标值合并而成;weight由abs(goal)取定

clc;clear all;close all;a=[-1 -1 0 0;0 0 -1 -1;3 0 2 0;0 3 0 2];b=[-30,-30,120,48]';c1=-[100,90,80,70];c2=[0,3,0,2];[x1,goal1]=linprog(c1,a,b,[],[],zeros(4,1))[x2,goal2]=linprog(c2,a,b,[],[],zeros(4,1))goal=[goal1;goal2][x,fval]=fgoalattain('Fun16_5',rand(4,1),goal,abs(goal),a,b,[],[],zeros(4,1))

运行结果

Optimal solution found.x1 =   14.0000   16.0000   39.0000         0goal1 =  -5.9600e+03Optimal solution found.x2 =   20.0000   10.0000   30.0000         0goal2 =   30.0000goal =   1.0e+03 *   -5.9600    0.0300Local minimum possible. Constraints satisfied.fgoalattain stopped because the size of the current search direction is less thantwice the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.<stopping criteria details>x =   19.0652   10.9348   31.4023         0fval =   1.0e+03 *   -5.4028    0.0328>> 

3.实例2

求侧某化工厂拟生产两种新产品A和B,其生产设备费用分别为2万元/吨和5万元/吨。这两种产品均将造成环境污染,设由公害所造成的损失可折算为A为4万元/吨,B为1万元/吨。由于条件限制,工厂生产产品A和B的最大生产能力各为每月5吨和6吨,而市场需要这两种产品的总量每月不少于7吨。试问工厂如何安排生产计划,在满足市场需要的前提下,使设备投资和公害损失均达最小。该工厂决策认为,这两个目标中环境污染应优先考虑,设备投资的目标值为20万元,公害损失的目标为12万元。

解:设工厂每月生产产品A为x1吨,B为x2吨,设备投资费为f(x1),公害损失费为f(x2),则问题的数学模型表达为多目标优化问题:

用MATLAB的fgoalattain函数进行求解。

(1)目标函数fun009.m

function f=fun009(x)f(1)=2*x(1)+5*x(2);f(2)=4*x(1)+x(2);end

(2)主程序

clc;clear all;close all;goal=[20 12];weight=[20 12];x0=[5 5];A=[1 0;0 1;-1 -1];b=[5;6;-7];lb=zeros(2,1);ub=[];[x,fval,ddyz,exitflag]=fgoalattain(@fun009,x0,goal,weight,A,b,[],[],lb,ub)

结果

x =    2.9167    4.0833fval =   26.2500   15.7500ddyz =    0.3125exitflag =     4所以生产A2.9167吨,B4.0833,设备投资费26.25万元,公害损失费15.75万元。达到因子为0.3125,求解过程正常收敛。

本文部分内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。

标签: #多目标规划目标函数 #多目标规划目标函数的构造方法