Matlab遗传算法代码运行出现这两个问题,应该如何解决?
①错误使用 horzcat
串联的结构体数组中的字段数不匹配。结构体数组串联要求这些数组包含相同的字段集。
②出错 Ga4BusTime2 (line 89)
Chrom_all=[Chrom,NewChrom1,NewChrom2];
这是Matlab里面我的遗传算法代码:
clc
close all
clear all
%% 模型参数1
lambda1=0.8;
lambda2=0.4;
To=350;
Te=1290;
alpha=0.3;
beta=0.4;
tmin=2;
tmax=50;
deltaT=0.5;
n=50;
Tnum=Te-To+2;
%% Ga参数
GenMax=20;
Pc=0.8;
Pv=0.01;
Gen=0;
Popnum=11;
% GGAP=0.8;
Chrom=struct;
while Gen<GenMax
Gen=Gen+1;
i=1;
%% 生成初始种群
while i<Popnum+1
Index=randperm(Tnum)+To-1;
Chrom(i).list=Index(1:n);
Chrom(i).list=sort(Chrom(i).list);
interval(i,:)=diff(Chrom(i).list);
Tmax=max(interval(i,:));
Tmin=min(interval(i,:));
if (Tmax<tmax) && (Tmin>tmin) %符合要求的留下
Chrom(i).Time=zeros(Tnum,1);
Chrom(i).Time(Chrom(i).list)=1;
i=i+1;
end
end
% while Gen < GenMax
% Gen=Gen+1;
NewChrom1=struct;
t1=0;
NewChrom2=struct;
t2=0;
for i=1:Popnum
TempChrom=Chrom;
% %% 交叉
rate1=rand;
if rate1<Pc
t1=t1+1;
% %do cross
C_ID=randperm(Popnum);
C_ID(C_ID==i)=[];
T1=TempChrom(i).list;
T2=TempChrom(C_ID(1)).list;
%
C_Node=randi([2 49]);%交叉的节点
Temp1=T1(1:C_Node);
Temp2=T2(C_Node+1:end);
newT=sort([Temp1 Temp2]);
% interval(i,:)=diff(newT;);
% Tmax=max(interval(i,:));
% Tmin=min(interval(i,:));
% if (Tmax<tmax) && (Tmin>tmin) %符合要求的留下
NewChrom1(t1).list=newT;
NewChrom1(t1).Time=zeros(Tnum,1);
NewChrom1(t1).Time(NewChrom1(t1).list)=1;
% end
end
% % 变异
rate2=rand;
if rate2<Pv
t2=t2+1;
%do variation
T2=TempChrom(i).list;
Index1=randperm(Tnum)+To-1;
Index1(T2-To+1)=[];
P_Node=randi([1 50]);
T2(P_Node)=Index1(1);
newT=sort(T2);
NewChrom2(t2).list=newT;
NewChrom2(t2).Time=zeros(Tnum,1);
NewChrom2(t2).Time(NewChrom2(t2).list)=1;
end
end
Chrom_all=[Chrom,NewChrom1,NewChrom2];
fit=get_F(Chrom_all);
[best_fit,best_ind]=sort(fit);
best(Gen).fit=best_fit(1);
best(Gen).gen=Chrom_all(best_ind(1)).list;
Chrom=Chrom_all(best_ind(1:Popnum));
end
[best_fit,best_ind]=sort([best.fit],'descend')
plot(best_fit)
title('总成本进化曲线');
xlabel('迭代次数')
ylabel('总成本')
fid=fopen('bus_time.txt','w')
temp=best(best_ind(end)).gen;
for i=1:n
fprintf(fid,'%d\n',temp(i));
end
%