cleclc
close all ar all
%% 模型参数 1
lambda1=0.8;%公交成本
lambda2=0.4;%乘客成本
To=420;%首班车时间
Te=1170;%末班车时间
alpha=0.43;%加权系数
beta=0.57;%加权系数
tmin=5;%最小发车间隔
tmax=30;%最大发车间隔
deltaT=0.5;
n=50;%发车班次数
Tnum=Te-To+2;
%% Ga 参数
GenMax=1000;
Pc=1;%0.8 交叉概率 Pm 变异概率
Pv=1;%0.05
Gen=0;
Popnum=5;
% GGAP=0.2;
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
%
% clear all
% close all
% clc
%% Cb1
% load list.mat
function C_all=get_F(Chrom_all)
lambda1=0.8;
lambda2=0.4;
tmin=5;
tmax=30;
alpha=0.43;
beta=0.57;
n=50;
T_wait=0.5;
%% Cw
Bs=[4.1 2.2 4.4
4.2 1.7 1.6
4.3 3.1 3.3
3.5 1.2 3.1
2.8 0.4 2.2
1.2 0.5 1.6
0.4 1.5 0.8
1.8 1.1 2.2
2.4 1.3 2.2];
s=length(Bs);
T_run=[0
1.1
2.1
1.5
1.6
1.1
2.4
1.9
2.1];
% %%
for i=1:length(Chrom_all)
list(i,:)=Chrom_all(i).list;
Cb=lambda1*sum(T_run)*n;
Cw=0;
T_left=list(i,:);
for nn=2:n
Tbs=T_left(nn);
deltaT=diff(T_left);
Tmax=max(deltaT);
Tmin=min(deltaT);
if (Tmax<tmax) && (Tmin>tmin)
Cw=1e10;
continue
end
for ss =1:s
Tbs=Tbs+T_run(ss)+T_wait;
if Tbs<=720
bs=Bs(ss,1);
elseif Tbs<=1020
bs=Bs(ss,2);
else
bs=Bs(ss,3);
end
Cw=Cw+lambda2*0.5*bs*(deltaT(nn-1)-T_wait)^2;
% end
end
end
C_all(i)=alpha*Cb+beta*Cw;
end
end
长时间跑不出结果,不知道怎么优化,想请教一下各位。
这个好像是我贴的代码。。你看看我的帖子