matlab 多目标优化的实际例子

2024-12-13 21:16:10
推荐回答(3个)
回答1:

遗传算法GA求解无约束最优化问题,采用遗传算法求函数的最小值:
f(x,y)=x^4-16x^2-5xy+y^4-16y^2-5y

函数如下:
f=inline('x(1)^4-16*x(1)^2-5*x(1)*x(2)+x(2)^4-16*x(2)^2-5*x(2)','x');
l=[-5 -5];
u=[5 5];
x0=[0 0];
Np=30;
Nb=[12 12];
Pc=0.5;
Pm=0.01;
eta=0.8;
kmax=200;
[xos,fos]=fminsearch(f,x0)
[xo_gen,fo_gen]=genetic(f,x0,l,u,Np,Nb,Pc,Pm,eta,kmax)

其中调用的遗传算法函数为如下几个

genetic函数

function [xo,fo]=genetic(f,x0,l,u,Np,Nb,Pc,Pm,eta,kmax)

N=length(x0);

if nargin<10,kmax=100;end
if nargin<9|eta>1|eta<=0,eta=1;end
if nargin<8,Pm=0.01;end
if nargin<7,Pc=0.5;end
if nargin<6,Nb=8*ones(1,N);end
if nargin<5,Np=10;end

NNb=sum(Nb);
xo=x0(:)';l=l(:)';u=u(:)';
fo=feval(f,xo);
X(1,:)=xo;

for n=2:Np,X(n,:)=1+rand(size(x0)).*(u-1);
P=gen_encode(X,Nb,l,u);
for k=1:kmax
X=gen_decode(P,Nb,l,u);
for n=1:Np,fX(n)=feval(f,X(n,:));end
[fxb,nb]=min(fX);
if fxb fX1=max(fxb)-fX;
fXm=fX1(nb);
if fXm for n=1:Np
X(n,:)=X(n,:)+eta*(fXm-fX1(n))/fXm*(X(nb,:)-X(n,:));
end
P=gen_encode(X,Nb,l,u);

is=shuffle([1:Np]);
for n=1:2:Np-1
if rand P(is(n:n+1),:)=crossover(P(is(n:n+1),:),Nb);
end
end

P=mutation(P,Nb,Pm);
end

gen_encode函数

function P=gen_encode(X,Nb,l,u)
Np=size(X,l);
N=length(Nb);
for n=1:Np
b2=0;
for m=1:N
b1=b2+1;
b2=b2+Nb(m);
Xnm=(2^Nb(m)-1)*(X(n,m)-l(m))/(u(m)-l(m));
P(n,b1:b2)=dec2bin(Xnm,Nb(m));

end
end

gen_decode函数

function X=gen_decode(P,Nb,l,u)

Np=size(P,l);
N=length(Nb);

for n=1:Np
b2=0;
for m=1:N
b1=b2+1;
b2=b1+Nb(m)-1;
X(n,m)=bin2dec(P(n,b1:b2))*(u(m)-l(m))/(2^Nb(m)-1)+l(m);
end
end

crossover函数

function chrms2=crossover(chrms2,Nb)

Nbb=length(Nb);
b2=0;

for m=1:Nbb
b1=b2+1;
bi=b1+mod(floor(rand*Nb(m)),Nb(m));
b2=b2+Nb(m);
tmp=chrms2(1,bi:b2);
chrms2(1,bi:b2)=chrms2(2,bi:b2);
chrms2(2,bi:b2)=tmp;
end

mutation函数

function P=mutation(P,Nb,Pm)

Nbb=length(Nb);

for n=1:size(P,1)
b2=0;
for m=1:Nbb
if rand b1=b2+1;
bi=b1+mod(floor(rand*Nb(m)),Nb(m));
b2=b2+Nb(m);
P(n,bi)=~P(n,bi);
end
end
end

shuffle函数

function is=shuffle(is)

N=length(is);
for n=N:-1:2
in=ceil(rand*(n-1));
tmp=is(in);is(in)=is(n);is(n)=tmp;
end

运行结果为

xos =

3.0453 3.1031

fos =

-186.4878

xo_gen=
2.9805 3.3150

fo_gen=
-184.2604

回答2:

此例子,自己修改一下就可以!

4.1理想点法
在(3)中,先求解 个单目标问题: ,设其最优值为 ,称 为值域中的一个理想点,因为一般很难达到。于是,在期望的某种度量之下,寻求距离 最近的 作为近似值。一种最直接的方法是最短距离理想点法,构造评价函数

然后极小化 ,即求解

并将它的最优解 作为(3)在这种意义下的“最优解”。

例1:利用理想点法求解

解:先分别对单目标求解:
①求解 最优解的MATLAB程序为
>> f=[3;-2]; A=[2,3;2,1]; b=[18;10]; lb=[0;0];
>> [x,fval]=linprog(f,A,b,[],[],lb)
结果输出为:x = 0.0000 6.0000
fval = -12.0000
即最优解为12.
②求解 最优解的MATLAB程序为
>> f=[-4;-3]; A=[2,3;2,1]; b=[18;10]; lb=[0;0];
>> [x,fval]=linprog(f,A,b,[],[],lb)
结果输出为:x =3.0000 4.0000
fval =-24.0000
即最优解为24.
于是得到理想点:(12,24).
然后求如下模型的最优解

MATLAB程序如下:
>> A=[2,3;2,1]; b=[18;10]; x0=[1;1]; lb=[0;0];
>> x=fmincon('((-3*x(1)+2*x(2)-12)^2+(4*x(1)+3*x(2)-24)^2)^(1/2)',x0,A,b,[],[],lb,[])
结果输出为:x = 0.5268 5.6488
则对应的目标值分别为 , .

回答3:

优化什么的 联系我 有偿代做