天天看点

【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】

一、遗传算法简介

1 引言

【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】
【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】

2 遗传算法理论

2.1 遗传算法的生物学基础

【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】

2.2 遗传算法的理论基础

【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】

2.3 遗传算法的基本概念

【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】
【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】
【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】
【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】
【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】

2.4 标准的遗传算法

【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】
【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】

2.5 遗传算法的特点

【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】
【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】

2.6 遗传算法的改进方向

【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】

3 遗传算法流程

【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】
【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】
【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】

4 关键参数说明

【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】

二、部分源代码

%% 改进的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   %变异结束           

三、运行结果

【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】

四、matlab版本及参考文献

1 matlab版本

2014a

2 参考文献

《智能优化算法及其MATLAB实例(第2版)》包子阳 余继周 杨杉著 电子工业出版社