一、遗传算法简介
1 引言

2 遗传算法理论
2.1 遗传算法的生物学基础
2.2 遗传算法的理论基础
2.3 遗传算法的基本概念
2.4 标准的遗传算法
2.5 遗传算法的特点
2.6 遗传算法的改进方向
3 遗传算法流程
4 关键参数说明
二、部分源代码
%% 改进的GA %% 清空环境变量 clc,clear,close all % 清除变量空间 warning off % 消除警告 feature jit off % 加速代码执行 %% 遗传算法参数初始化 maxgen = 50; % 进化代数,即迭代次数 sizepop = 50; % 种群规模 pcross = [0.7]; % 交叉概率选择,0和1之间 pmutation = [0.01]; % 变异概率选择,0和1之间 delta = 0.1; % 城市交通信号系统参数 C = 140; L = 10; load('data.mat') % 包含交通流量q以及饱和流量xij q = q./3600; % 转化为秒s xij = xij./3600; % 转化为秒s %染色体设置 lenchrom=ones(1,3); % t1、t2、t3 bound=[38,59;26,37;33,44;]; % 数据范围 %---------------------------种群初始化------------------------------------ individuals=struct('fitness',zeros(1,sizepop), 'chrom',[]); %将种群信息定义为一个结构体 avgfitness = []; %每一代种群的平均适应度 bestfitness = []; %每一代种群的最佳适应度 bestchrom = []; %适应度最好的染色体 %% 初始化种群 for i=1:sizepop % 随机产生一个种群 individuals.chrom(i,:)=Code(lenchrom,bound); % 编码(binary和grey的编码结果为一个实数,float的编码结果为一个实数向量) x=individuals.chrom(i,:); % 计算适应度 individuals.fitness(i)=fun(x); % 染色体的适应度 end %% 找最好的染色体 [bestfitness bestindex] = min(individuals.fitness); bestchrom = individuals.chrom(bestindex,:); % 最好的染色体 % 记录每一代进化中最好的适应度和平均适应度 trace = [bestfitness]; %% 迭代求解最佳初始阀值和权值 % 进化开始 for i=1:maxgen disp(['迭代次数: ',num2str(i)]) % 选择 individuals=Select(individuals,sizepop); % 交叉 individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound); % 变异 individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,i,maxgen,bound); t4 = C-L - t(1)-t(2)-t(3); flag=1; if (t(1)<bound(1,1))||(t(2)<bound(2,1))||(t(3)<bound(3,1))||(t(1)>bound(1,2))||(t(2)>bound(2,2))||(t(3)>bound(3,2))||t4<22||t4>33 flag=0; end function ret=Mutation(pmutation,lenchrom,chrom,sizepop,num,maxgen,bound) % 本函数完成变异操作 % pcorss input : 变异概率 % lenchrom input : 染色体长度 % chrom input : 染色体群 % sizepop input : 种群规模 % opts input : 变异方法的选择 % pop input : 当前种群的进化代数和最大的进化代数信息 % bound input : 每个个体的上届和下届 % maxgen input :最大迭代次数 % num input : 当前迭代次数 % ret output : 变异后的染色体 k1 = 0.6; k2 = 0.7; k3 = 0.001; k4 = 0.01; % 计算适应度 for j=1:sizepop x=chrom(j,:); % 解码 f(j)=fun(x); % 染色体的适应度 end fmax = max(f); % 适应度最大值 fmin = min(f); % 适应度最小值 favg = mean(f); % 适应度平均值 for i=1:sizepop %每一轮for循环中,可能会进行一次变异操作,染色体是随机选择的,变异位置也是随机选择的, %但该轮for循环中是否进行变异操作则由变异概率决定(continue控制) % 随机选择一个染色体进行变异 pick=rand; while pick==0 pick=rand; end index=ceil(pick*sizepop); f1 = fun( chrom(index(1),:) ); % 个体适应度值 f3 = max(f1); % 两者中大者 if f3>=favg pmutation = k3*(fmax - f3)./(fmax-favg); else pmutation = k4; end % 变异概率决定该轮循环是否进行变异 pick=rand; if pick>pmutation continue; end flag=0; num = 0; chrom1 = chrom(i,:); while flag==0&&num<=20 % 变异位置 pick=rand; while pick==0 pick=rand; end pos=ceil(pick*sum(lenchrom)); %随机选择了染色体变异的位置,即选择了第pos个变量进行变异 pick=rand; %变异开始 fg=(rand*(1-num/maxgen))^2; if pick>0.5 chrom(i,pos)=chrom(i,pos)+(bound(pos,2)-chrom(i,pos))*fg; else chrom(i,pos)=chrom(i,pos)-(chrom(i,pos)-bound(pos,1))*fg; end %变异结束
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
《智能优化算法及其MATLAB实例(第2版)》包子阳 余继周 杨杉著 电子工业出版社