1 简介

遗传算法(GeneticAlgorithm,GA)是一种受人工生命启发,模拟生物进化过程的随机搜索算法。遗传算法的理论及应用的研究受到广大研究者们的重视,应用领域也得到了广泛推广。遗传算法在求解函数优化问题时,算法中的控制参数交叉概率Pc和变异概率Pm取值的选择对遗传算法的性能影响很大,目前,普遍接受的Pc和Pm取值范围分别是0.4~0.99和0.0001~0.1,这两个取值范围的合理性以及科学性缺乏有效研究。为此,本文针对一类能够展开成幂级数的函数,通过大量实验,以遗传算法在求得全局最优解时所需的迭代次数最少为目标,用实验验证和数据分析的方法对Pc和Pm的取值范围进行了系统的研究,得出结论如下: (1)通过对大量实验数据的分析,以遗传算法在求得全局最优解时所需的迭代次数最少为目标,本文得出Pc的建议取值区间为[0.6,0.99], Pm的建议取值区间为[0.009,0.03]; (2)通过实验数据,对Pc和Pm的交叉影响进行了分析,当Pc在本文建议的区间中取值时,Pm对遗传算法在求得全局最优解时所需的迭代次数有显著影响,然而当Pm在本文建议的区间中取值时,Pc对遗传算法在求得全局最优解时所需的迭代次数的影响不显著; (3)当变异概率Pm在本文建议的区间内取值时,GA取得全局最优解所需的计算量比在普遍接受的区间内取值时所需的计算量节约了3倍以上;比在本文建议区间之外但又在普遍接受的区间内取值时所需的计算量节约了4倍以上。 粒子群优化算法(PSO)是一种原理简单,操作易实现的优化算法。算法一经提出受到国内外学者的广泛关注,目前已存在各种改进的粒子群算法,针对于粒子群优化算法的收敛速度快、解具有记忆功能但全局搜索能力较遗传算法差等特点,本文提出一种新的粒子群遗传混合算法,结合了两种算法各自的优点,扬长避短。利用本文提出的粒子群遗传混合算法对常用的标准测试函数进行了函数优化问题求解,并且与单独的粒子群算法和遗传算法进行了对比实验,实验结果验证了本文提出的新的混合算法的有效性。

2 部分代码

%% GA 优化 PSO
%% 清空环境
clc;
clear
close all
%% 参数初始化
lenchrom=7;   %字符串长度(个体长度),染色体编码长度
pc=0.7;       %设置交叉概率,本例中交叉概率是定值,若想设置变化的交叉概率可用表达式表示,或从写一个交叉概率函数,例如用神经网络训练得到的值作为交叉概率
pm=0.3;       %设置变异概率,同理也可设置为变化的

%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;

maxgen=20;   % 进化次数  
popsize=30; %种群规模

%粒子更新速度
Vmax=1;
Vmin=-1;

%种群
popmax=50;
popmin=-50;

% 变量取值范围
bound=[popmin popmax;popmin popmax;popmin popmax;popmin popmax;popmin popmax;popmin popmax;popmin popmax]; %变量范围

% 优化粒子数目
par_num=7;

%% 产生初始粒子和速度
for i=1:popsize
  %随机产生一个种群
  pop(i,:)=popmax*rands(1,par_num);   %初始种群
  V(i,:)=rands(1,par_num); %初始化速度
  %计算适应度
  fitness(i)=fun(pop(i,:));   %染色体的适应度
end

%找最好的染色体
[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:);   %全局最佳
gbest=pop;   %个体最佳
fitnessgbest=fitness;   %个体最佳适应度值

            end
      end

      %个体最优更新
      if fitness(j) < fitnessgbest(j)
          gbest(j,:) = pop(j,:);
          fitnessgbest(j) = fitness(j);
      end
      
      %群体最优更新
      if fitness(j) < fitnesszbest
          zbest = pop(j,:);
          fitnesszbest = fitness(j);
      end
      
  end
  
  yy(i)=fitnesszbest;     
end

%% 结果
disp '*************best particle number****************'
zbest

%%
plot(yy,'linewidth',2);
grid on
title(['适应度曲线 ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');ylabel('适应度');

3 仿真结果

【粒子群算法】基于遗传结合粒子群算法求解单目标优化问题matlab代码_取值

【粒子群算法】基于遗传结合粒子群算法求解单目标优化问题matlab代码_遗传算法_02

【粒子群算法】基于遗传结合粒子群算法求解单目标优化问题matlab代码_遗传算法_03

4 参考文献

[1]倪全贵. 粒子群遗传混合算法及其在函数优化上的应用. Diss. 华南理工大学.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,有科研问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。