有谁能用matlab实现如下问题的最优化求解?希望有详细的代码,参考案例就不用了
以下是初步代码,用x1 -x5替代上图中的变量t1 -t5),关键点在于:
1)如何分别设置x1 ~ x5的边界;
2)如何添加x1 + ~ +x5 =600的限制;
clear all;
close all;
clc;
NP=20; %种群数量
D=5; %变量的维数
G=100; %最大进化代数
F=0.5; %变异算子
CR=0.1; %交叉算子
Xs=500; %上限
Xx=0; %下限
%赋初值
x=zeros(D,NP); %初始种群
v=zeros(D,NP); %变异种群
u=zeros(D,NP); %选择种群
x=randi([Xx,Xs],D,NP); %赋初值
%计算目标函数
for m=1:NP
Ob(m)=func3(x(:,m));
end
trace(1)=max(Ob);
%差分进化循环
for gen=1:G
for m=1:NP
r1=randi([1,NP],1,1);
while (r1==m)
r1=randi([1,NP],1,1);
end
r2=randi([1,NP],1,1);
while (r1==r2)||(r2==m)
r2=randi([1,NP],1,1);
end
r3=randi([1,NP],1,1);
while (r3==m)||(r3==r2)||(r3==r1)
r3=randi([1,NP],1,1);
end
v(:,m)=floor(x(:,r1)+F*(x(:,r2)-x(:,r3))); %floor向下取整
end
%交叉操作
r=randi([1,D],1,1);
for n=1:D
cr=rand(1);
if (cr<=CR)||(n==r)
u(n,:)=v(n,:);
else
u(n,:)=x(n,:);
end
end
%边界吸收
for n=1:D
for m=1:NP
if u(n,m)<Xx
u(n,m)=Xx;
end
if u(n,m)>Xs
u(n,m)=Xs;
end
end
end
%选择操作
for m=1:NP
Ob1(m)=func3(u(:,m));
end
for m=1:NP
if Ob1(m)>Ob(m)
x(:,m)=u(:,m);
end
end
for m=1:NP
Ob(m)=func3(x(:,m));
end
trace(gen+1)=max(Ob);
end
[SortOb,Index]=sort(Ob);
X=x(:,Index);
XBest=x(:,end); %最优变量
Y=max(Ob); %最优
%画图
figure
plot(trace)
xlabel('迭代次数')
ylabel('目标函数值')
title('DE目标函数曲线')
%%适应度函数
function y=func3(x)
t1=@(x1)exp(-((x1-91.25).^2/(220.8152)))
t2=@(x2)exp(-((x2-239.84).^2/(22815.1)))
t3=@(x3)exp(-((x3-43.1481).^2/(2136.7133)))
t4=@(x4)exp(-((x4-298.3535).^2/(22580.3)))
t5=@(x5)exp(-((x5-128.6667).^2/(2*397.11)))
y1=(1/(sqrt(2*pi)*4.5621))integral(t1,0,109)
y2=(1/(sqrt(2pi)*53.0578))integral(t2,0,447)
y3=(1/(sqrt(2pi)*11.6924))integral(t3,0,89)
y4=(1/(sqrt(2pi)*50.797))integral(t4,0,496)
y5=(1/(sqrt(2pi)*19.9276))*integral(t5,0,207)
y=y1y2y3y4y5
end
好家伙,我会,去年工程训练小车遇到过类似的
(1)确定差分进化算法控制参数,确定适应度函数。差分进化算法控制参数包括:种群大小NP、缩放因子F与杂交概率CR。
(2)随机产生初始种群。
(3)对初始种群进行评价,即计算初始种群中每个个体的适应度值。
(4)判断是否达到终止条件或进化代数达到最大。若是,则终止进化,将得到最佳个体作为最优解输出;若否,继续。
(5)进行变异和交叉操作,得到中间种群。
(6)在原种群和中间种群中选择个体,得到新一代种群。
(7)进化代数g=g+1,转步骤(4)