引言

差分进化算法是基于群体智能理论的优化算法,是通过群体内个体间的合作与竞争而产生的智能优化搜索算法,它保留了基于种群的全局搜索策略,采用实数编码、基于差分的简单变异操作和“一对一”的竞争生存策略,降低了进化计算操作的复杂性。

差分进化算法的原理

差分进化算法是一种自组织最小化方法,利用种群中两个随机选择的不同向量来干扰现有向量,种群中的每一个向量都要进行干扰。

它通过把种群中的两个成员之间的加权差向量加到第三个成员上来产生新的参数向量,该操作成为“变异”。

将变异向量的参数与另外预先确定的目标向量参数按一定规则混合来产生实验向量,该操作成为“交叉”;

若实验向量的代价函数比目标向量的代价函数低,实验向量就在下一代中替代目标向量,该操作成为“选择”;

差分进化算法流程

具体步骤如下:

确定差分进化算法的控制参数和所要采用的具体策略。控制参数包括:种群数量、变异算子、交叉算子、最大进化代数、终止条件等。

随机产生初始种群,进化代数k=1;

对初始种群进行评价,即计算初始种群中每个个体的目标函数值。

判断是否达到终止条件或达到最大进化代数;若是,则进化终止,将此时的最佳个体作为解输出;否则,继续下一步操作。

进行变异操作和交叉操作,对边界条件进行处理,得到临时种群。

对临时种群进行评价,计算临时种群中每个个体的目标函数值。

对临时种群中的个体和原种群中对应的个体,进行“一对一”的选择操作,得到新种群。

进化代数k=k+1,转步骤(4).

实例:

$$计算函数的最小值,其中个体x的维数n=10.这是一个简单的平方和函数,只有一个极小点x=(0,0,…,0)。$$

%%%%%%%差分进化求函数极值%%%%%%%%%

%%%%%%%初始化%%%%%%%%

clear all;

close all;

clc;

NP = 50; %种群的数量

D = 10; %变量的维度

G = 200; %最大进化代数

F0 = 0.4; %初始变异算子

CR = 0.1; %交叉算子

Xs = 20; %上限

Xx = -20; %下限

yz = 10^-6; %阈值

%%%%%%%%赋初值%%%%%%%%%%%%

x = zeros(D,NP); %初始种群

v = zeros(D,NP); %变异种群

u = zeros(D,NP); %选择种群

x = rand(D,NP) * (Xs-Xx) + Xx; %赋初值

%%%%%%%%%%计算目标函数%%%%%%%%%%%

for m = 1:NP

Ob(m) = func1(x(:,m));

end

trace(1) = min(Ob);

%%%%%%%%%差分进化循环%%%%%%%%%%

for gen = 1:G

%%%%%%%%%%%变异操作%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%自适应变异算子%%%%%%%

lamda = exp(1-G/(G+1-gen));

F = F0*2^(lamda);

%%%%%%%%r1,r2,r3和m互不相同%%%%

for m = 1:NP

r1 = randi([1,NP],1,1);

while(r1 == m)

r1 = randi([1,NP],1,1);

end

r2 = randi([1,NP],1,1);

while (r2 == m) | (r2 == r1)

r2 = randi([1,NP],1,1);

end

r3 = randi([1,NP],1,1);

while (r3 == m) | (r3 == r1 | r3 == r2)

r3 = randi([1,NP],1,1);

end

v(:,m) = x(:,r1) + F * (x(:,r2) - x(:,r3));

end

%%%%%%%%%%%%%%%%%%交叉操作%%%%%%%%%%%%%%%%%

r = randi([1,NP],1,1); %确保必有一个v(:)进入u(:)中

for n = 1:D

cr = rand(1);

if (cr <= CR) | (n == r)

u(n,:) = v(n,:); %批量操作,替换所有个体第n维

else

u(n,:) = x(n,:);

end

end

%%%%%%%%%%%%%%%%边界条件的处理%%%%%%%%%%%%%%%

for n = 1:D

for m = 1:NP

if (u(n,m) < Xx) | (u(n,m) > Xs)

u(n,m) = rand * (Xs - Xx) + Xx;

end

end

end

%%%%%%%%%%%%%%%%选择操作%%%%%%%%%%%%%%%%%%%%

for m = 1:NP

Ob1(m) = func1(u(:,m));

end

for m = 1:NP

if Ob1(m) < Ob(m)

x(:,m) = u(:,m);

end

end

for m = 1:NP

Ob(m) = func1(x(:,m));

end

trace(gen+1) = min(Ob);

if min(Ob) < yz

break;

end

end

%%%%%%%%%%%%%%%%画图%%%%%%%%%%%%%%%

figure

plot(trace);

xlabel('迭代次数');

ylabel('目标函数值');

title('DE目标函数曲线');

%%%%%%%%%%%%%%适应度函数%%%%%%%%%%

function result = func1(x)

summ = sum(x.^2);

result = summ;

end

程序员灯塔

转载请注明原文链接:差分进化算法介绍及matlab实现

matlab 思维进化算法,差分进化算法介绍及matlab实现相关推荐

  1. 超级计算机进化算法,差分进化算法的并行实现

    摘要: 传统的并行计算任务往往由大型的并行计算机来完成,因而并行机的研究也就成为并行计算的主要研究方向.随着经济和科技的发展,生物医学.天气预报.高能物理等领域的计算任务越来越多,其特点是计算数据多. ...

  2. 【进阶一】Python实现MDCVRP常见求解算法——差分进化算法(DE)

    基于python语言,实现差分进化算法(DE)对多车场车辆路径规划问题(MDCVRP)进行求解. 目录 往期优质资源 1. 适用场景 2. 求解效果 3. 代码分析 4. 数据格式 5. 分步实现 6 ...

  3. Python实现VRP常见求解算法——差分进化算法(DE)

    基于python语言,实现经典差分进化算法(DE)对车辆路径规划问题(CVRP)进行求解. 目录 1. 适用场景 2. 求解效果 3. 问题分析 4. 数据格式 5. 分步实现 6. 完整代码 参考 ...

  4. 【进阶二】Python实现VRPTW常见求解算法——差分进化算法(DE)

    基于python语言,实现经典差分进化算法(DE)对带有时间窗的车辆路径规划问题( VRPTW )进行求解. 目录 往期优质资源 1. 适用场景 2. 求解效果 3. 代码分析 4. 数据格式 5. ...

  5. 【进阶四】Python实现(MD)HVRP常见求解算法——差分进化算法(DE)

    差分进化算法+Split 求解异构车辆路径规划问题 碧海蓝天 吹吹风 目录 信息传递 1. 适用场景 2. 求解效果 3. 代码分析 4. 数据格式 5. 分步实现 6. 完整代码 参考 信息传递 p ...

  6. matlab灰色预测弱化代码,灰色预测模型介绍及MATLAB代码实现

    灰色预测模型介绍及MATLAB代码实现 灰色预测模型介绍及MATLAB代码实现 文章目录 1. 按 2. 灰色模型介绍 3. 精度检验等级参照表 4. matlab代码 5. 实验数据 5.1. 测试 ...

  7. matlab 逻辑回归实现,逻辑回归原理介绍及Matlab实现

    一.逻辑回归基本概念 1. 什么是逻辑回归 逻辑回归就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型的好坏. Log ...

  8. matlab sdm,SDM For Face Alignment 流程介绍及Matlab代码实现之预处理篇

    SDM全称为 Supervised Descent Method,是一种机器学习的方法,可以被用来做Face Alignment. 下面我们将通过matlab代码来梳理整个实现的过程. 预处理阶段 I ...

  9. 差分进化算法求解函数最值问题

    差分进化算法求解函数最值问题 声明: 1.本文源代码来自书目<智能优化算法及其MATLAB实例(第3版)>,目的在于为MATLAB初学者提供更简明的代码解析,方便读者了解算法及MATLAB ...

最新文章

  1. openwrt编译时遇到的报错
  2. React开发(141):react中ref为class添加ref
  3. JDK 7,jdk1.7 安装及配置
  4. TQ210——下载总结
  5. C语言中,两整数相除,若分母为零,则会出现怎样的结果???
  6. [转载] 的士速递3
  7. NLP自然语言处理-Pytorch情感分析简介
  8. [译]C#控制管理VisualSVN Server
  9. SQL Server 2008超详细安装教程附下载链接
  10. Unlocker v4.1.3 VMware 虚拟机 MacOS 系统解锁工具
  11. MOLDFLOW 2012模流分析基础到实战视频教程
  12. 清华大学 IPV6 设置
  13. mybatis plus分页插件 total数为0
  14. cocoa-CoreData
  15. springboot发送邮件(QQ邮箱)
  16. sa提开放系统下的虚拟新贵Virtualbox权技巧之xp_regwrite替换sethc.exe
  17. 【YOLOv1原文+翻译】You Only Look Once Unified, Real-Time Object Detection
  18. html怎么修改版权信息,微擎修改免费版标题、logo、页脚版权信息教程(仅供学习)...
  19. 【BZOJ2754】【SCOI2012】喵星球上的点名(后缀数组)
  20. 文本话题聚类(Kmeans/LDA)

热门文章

  1. 绿联怎么样_绿联TWS耳机怎么样?
  2. 万字逐行解析与实现Transformer,并进行德译英实战(一)
  3. flutter的千层蛋糕 - The Layer Cake
  4. 游戏签名效验\能过的dd
  5. Pycharm中三种注释
  6. ES6中的 Symbol
  7. mysql中的mha简介_mha 简介
  8. Java mq 2059_com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2059'.
  9. 国海证券分析报告(0607)
  10. parrot linux安装试用