例:求下列函数最大值
Matlab 程序:
- 若分开求解,即分别求出第一个函数和第二个函数的最大值,我们试一下。
第一个函数最大值(我们先求最小值)
c=[3 -2];
A=[2,3;2,1];b=[18;10];
Aeq=[];beq=[];
vlb=[0;0];vub=[];
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
回车得:
x =
0.0000
6.0000
fval =
-12.0000
从而最大值为12
第二个函数最大值(我们先求最小值)
c=[-4 -3];
A=[2,3;2,1];b=[18;10];
Aeq=[];beq=[];
vlb=[0;0];vub=[];
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
回车得:
x =
3.0000
4.0000
fval =
-24.0000
从而最大值为24
合在一起求两个函数的最大值。
先建立fun.m函数
function f=fun(x);
f(1)=3*x(1)-2*x(2);
f(2)=-4*x(1)-3*x(2);
然后建立主程序:
x0=[1 ,1];%或用rand(2,1)
c1=[3,-2];
c2=[-4,-3];
A=[2,3;2,1];b=[18;10];
Aeq=[];beq=[];
vlb=[0;0];vub=[];
[x1,g1]=linprog(c1,A,b,Aeq,beq,vlb,vub);%求第一个目标函数的目标值
[x2,g2]=linprog(c2,A,b,Aeq,beq,vlb,vub);%求第二个目标函数的目标值
g3=[g1;g2];%目标goal的值
weight=abs(g3);% 这里的权重其实是goal中值的绝对值
[x,fval]=fgoalattain('fun',x0,g3,weight,A,b,Aeq,beq,vlb,vub)
回车得:
x =
0.5625 5.6250
fval =
-9.5625 -19.1250
当想x(1)=0.5625,x(2)=5.625时,两目标函数最大值分别为f(1)=9.5625, f(2)=19.125