?? guotao.m
字號:
%郭濤算法_多父體雜交算法和郭濤算法_精英多父體雜交算法分別20次數值實驗,并給出平均時間
function GuoTao()
clear all;
N=50;%初始個體個數
M=8;
n=1;%論域維數,可修改,用循環做
eps=1e-6;%精度
upper=10;lower=-10;%論域范圍
drop=upper-lower;
%郭濤算法_多父體雜交算法
minP0=zeros(20,n);minQ0=zeros(20,1);
minFrequency0=zeros(20,1);minTimes0=zeros(20,1);
for i=1:20
[minP0(i,:),minQ0(i),minFrequency0(i),minTimes0(i)]=GT(N,M,n,upper,lower,eps);
end
%對minP、minQ、minFrequency按minQ從小到打排序
tempP=zeros(20,n);tempFrequency=zeros(20,1);
[X,I]=sort(minQ0);
for r=1:20
tempP(r,:)=minP0(I(r),:);
tempFrequency(r)=minFrequency0(I(r));
end
minP0=tempP;minQ0=X;minFrequency0=tempFrequency;
averageTime0=sum(minTimes0)/20;
averageFrequency0=sum(minFrequency0)/20;
%郭濤算法_精英多父體雜交算法
minP1=zeros(20,n);minQ1=zeros(20,1);
minFrequency1=zeros(20,1);minTimes1=zeros(20,1);
for i=1:20
[minP1(i,:),minQ1(i),minFrequency1(i),minTimes1(i)]=GT_GYZJ(N,M,n,upper,lower,eps);
end
%對minP、minQ、minFrequency按minQ從小到打排序
tempP=zeros(20,n);tempFrequency=zeros(20,1);
[X,I]=sort(minQ1);
for r=1:20
tempP(r,:)=minP1(I(r),:);
tempFrequency(r)=minFrequency1(I(r));
end
minP1=tempP;minQ1=X;minFrequency1=tempFrequency;
averageTime1=sum(minTimes1)/20;
averageFrequency1=sum(minFrequency1)/20;
%郭濤算法_多父體雜交算法
function [P_Best,Best,Frequency,Time]=GT(N,M,n,upper,lower,eps)
if nargin<6
disp('輸入參數錯誤');
return;
elseif nargout<4
disp('輸出參數錯誤');
return;
end
drop=upper-lower;%若各個分量上下界不同,可以用數組來代替
P=zeros(N,n);%存放初始N個個體,每個個體有n個基因位
Q=zeros(N,1);%存放P中個體對應函數值
Frequency =0;%當前比較次數
tic
%生成初始群體P
for s=1:n
P(:,s)=drop*rand(N,1)+lower;
end
%生成初始群體P對應的函數值
for r=1:N
Q(r)=f(P(r,:));
end
[Best,BestIndex]=min(Q);[Worst,WorstIndex]=max(Q);
%以下為郭濤算法主體循環部分
A=zeros(1,M);B=zeros(1,M);
while Worst-Best>eps
Frequency=Frequency +1;
%從P中選M個個體生成空間V,其下標存放于A中
A=floor(rand(1,M)*(N-1))+1;
%生成Xson的各個組合系數(待檢測)
sum=0;minbound=-0.5;maxbound=1.5;
for r=1:M-1
B(r)=(maxbound-minbound)*rand(1)+minbound;
sum=sum+B(r);
maxbound=min(1.5,1.5-sum);
minbound=max(-0.5,-0.5-sum);
end
B(M)=1-sum;
%生成Xson
Xson=zeros(1,n);
for r=1:M
Xson=Xson+B(r)*P(A(r),:);
end
%越界處理
for s=1:n
if Xson(s)<lower
Xson(s)=lower;
elseif Xson(s)>upper
Xson(s)=upper;
end
end
y=f(Xson);
if y<Worst
P(WorstIndex,:)=Xson;Q(WorstIndex)=y;
[Best,BestIndex]=min(Q);
[Worst,WorstIndex]=max(Q);
end
end
P_Best=P(BestIndex,:);Time=toc;
%郭濤算法_精英多父體雜交算法
function [P_Best,Best,Frequency,Time]=GT_GYZJ(N,M,n,upper,lower,eps)
if nargin<6
disp('輸入參數錯誤');
return;
elseif nargout<4
disp('輸出參數錯誤');
return;
end
drop=upper-lower;%若各個分量上下界不同,可以用數組來代替
P=zeros(N,n);%存放初始N個個體,每個個體有n個基因位
Q=zeros(N,1);%存放P中個體對應函數值
Frequency =0;%當前比較次數
tic
%生成初始群體P
for s=1:n
P(:,s)=drop*rand(N,1)+lower;
end
%生成初始群體P對應的函數值
for r=1:N
Q(r)=f(P(r,:));
end
[Best,BestIndex]=min(Q);[Worst,WorstIndex]=max(Q);
%以下為郭濤算法主體循環部分
A=zeros(1,M);B=zeros(1,M);
while Worst-Best>eps
Frequency=Frequency +1;
[m,A(1)]=min(Q);
%從P中選M-1個個體生成空間V,其下標存放于A中
A(2:end)=floor(rand(1,M-1)*(N-1))+1;
%生成Xson的各個組合系數(待檢測)
sum=0;minbound=-0.5;maxbound=1.5;
for r=1:M-1
B(r)=(maxbound-minbound)*rand(1)+minbound;
sum=sum+B(r);
maxbound=min(1.5,1.5-sum);
minbound=max(-0.5,-0.5-sum);
end
B(M)=1-sum;
%生成Xson
Xson=zeros(1,n);
for r=1:M
Xson=Xson+B(r)*P(A(r),:);
end
%越界處理
for s=1:n
if Xson(s)<lower
Xson(s)=lower;
elseif Xson(s)>upper
Xson(s)=upper;
end
end
y=f(Xson);
if y<Worst
P(WorstIndex,:)=Xson;Q(WorstIndex)=y;
[Best,BestIndex]=min(Q);
[Worst,WorstIndex]=max(Q);
end
end
P_Best=P(BestIndex,:)
Time=toc
%函數f(x)
function y=f(x)
n=length(x);
y=1;
for i=1:n
s=0;
for j=1:5
s=s+j*cos((j+1)*x(i)+j);
end
y=y*s;
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -