Matlab优化问题07—fgoalattain

来源:互联网 发布:mac下载的搜狗输入法 编辑:程序博客网 时间:2024/06/06 01:23

说明:fgoalattian是用来求解多目标规划,包括线性规划和非线性规划,因此是一个非常有力的工具,需要注意的是求解之前要建立三个向量,即goal—目标判断向量,weight—权重向量,x0—初始解。其中goal一般为已知,weight一般按照目标比例确定,初始值的选取可以根据条件目测一个,如果看不出来可以随机生成一个(一般不会影响结果)。

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

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


MATLABfgoalattain函数进行求解。

fun009.m

function f=fun009(x)

f(1)=2*x(1)+5*x(2);

f(2)=4*x(1)+x(2);

主程序:

clear

clc

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.0833

fval =

   26.2500   15.7500

ddyz =

    0.3125

exitflag =

     4

所以生产A2.9167吨,B4.0833,设备投资费26.25万元,公害损失费15.75万元。达到因子为0.3125,求解过程正常收敛。


2某工厂生产两种产品甲和乙,已知生产甲产品100公斤需6个工时,生产乙产品100公斤需8个工时。假定每日可用的工时数为48工时。这两种产品每100公斤均可获利100元。乙产品较受欢迎,且若有个老顾客要求每日供应他乙种产品500公斤,问应如何安排生产计划?

解:设生产甲产品x1百公斤,乙产品x2百公斤,产品加工耗费工时f1(x),获利f2(x),满足老客户需求量f3(x),则问题的数学模型为多目标规划:


MATLABfgoalattain函数进行求解。

fun010.m

function f=fun010(x)

f(1)=6*x(1)+8*x(2);

f(2)=-100*x(1)-100*x(2);

f(3)=-x(2);

主程序:

goal=[48 -800 -5];

weight=[48 -800 -5];

x0=[3;3];

A=[6 8;0 -1];

b=[48;-5];

lb=zeros(2,1);

[x,fval,attainfactor,exitflag]=fgoalattain(@fun010,x0,goal,weight,A,b,[],[],lb,[])

解得:

x =

    1.3333

    5.0000

fval =

   48.0000  -633.3333   -5.0000

attainfactor =

   9.9341e-10

exitflag =

     4

时间已过 0.047322 秒。

即生产甲133.33公斤,乙500公斤,工时刚好为48,可获利633.3333元,刚好满足老客户的需求(这其实是损失了当天800-633.3333=  166.6667元的损失)。



0 0
原创粉丝点击