matlab练习程序(差异演化DE)
这两天在看M.Tim Jones的《人工智能》,书中不只介绍原理,而且都有相应的c代码实现。
虽然代码不完全,不过缺少的部分完全可以自己补完。
差异演化和昨天实现的PSO很类似,都属于优化算法。
算法步骤:
1.设定种群个体个数和需要迭代的次数。当然也可以设定条件,然后判断是否停止迭代。
2.定义交叉概率CR,个体有一定概率进行变异,如果变异则进行第3步,如果不变异则下一代个体和当前个体一样。
3.在种群中随机选出三个互不相同的个体进行变异,变异公式如下(有博士论文总结了一大堆变异公式):
Xi,g+1=Xr1,g+F(Xr2,g-Xr3,g)
其中X是种群中个体特征向量,这里就是x和y坐标。g是种群的代数。i代表当前个体,r1,r2,r3是和i不同,并且也互不相同的个体。
4.计算变异后个体的适应度,如果变异后适应度不如变异前,那么将变异后个体重新恢复为变异前个体。
5.比较变异后个体适应度和种群最优个体适应度,将适应度高的个体赋给种群最优个体。
最后当然还是需要目标函数才能计算适应度。
算法结果如下图,小绿点代表种群最优个体适应度:

matlab代码如下:
main.m
clear all;close all;clc; [x y]=meshgrid(-:,-:);
sigma=;
img = (/(*pi*sigma^))*exp(-(x.^+y.^)/(*sigma^)); %目标函数,高斯函数
mesh(img);
hold on;
n=; %种群个体的数量 %初始化种群,定义结构体
par=struct([]);
for i=:n
par(i).x=-+*rand(); %个体的x特征在[- ]随机初始化
par(i).y=-+*rand(); %个体的y特征在[- ]随机初始化
par(i).fit=; %个体适应度为0初始化
end
par_best=par(); %初始化种群中最佳个体 for k=: %迭代次数
plot3(par_best.x+,par_best.y+,par_best.fit,'g*'); %画出最佳个体的位置,+为相对偏移
[par par_best]=select_and_recombine(par,par_best,n); %差异演化函数
end
select_and_recombine.m
function [next_par par_best]=select_and_recombine(par,par_best,n)
F=0.5; %加速因子
CR=0.8; %变异率
next_par=par; %新种群
for i=:n while %在原种群中任选三个互不相同的个体进行交叉变异
r1=floor(+*rand());
r2=floor(+*rand());
r3=floor(+*rand());
if i~=r1 && i~=r2 && i~=r3 &&...
r1~=r2 && r1~=r3 && r2~=r3
break;
end
end if rand()<CR %变异率,可以对每一个特征分别设置,我这里要变一起变了
next_par(i).x=par(r1).x+F*(par(r2).x-par(r3).x); %交叉变异准则
next_par(i).y=par(r1).y+F*(par(r2).y-par(r3).y);
end %计算变异后个体的适应度
next_par(i).fit=compute_fit(next_par(i));
%如果新个体没有变异前个体适应度高,新个体还原为旧个体
if par(i).fit>next_par(i).fit
next_par(i)=par(i);
end
%如果变异后适应度高于种群最高适应个体,则更新种群适应度最高个体
if next_par(i).fit>par_best.fit
par_best=next_par(i);
end
end
end
compute_fit.m
function re=compute_fit(par)
x=par.x;
y=par.y;
sigma=;
if x<- || x> || y<- || y>
re=; %超出范围适应度为0
else %否则适应度按目标函数求解
re=(/(*pi*sigma^))*exp(-(x.^+y.^)/(*sigma^));
end
end
matlab练习程序(差异演化DE)的更多相关文章
- matlab练习程序(演化策略ES)
还是这本书上的内容,不过我看演化计算这一章是倒着看的,这里练习的算法正好和书中介绍的顺序是相反的. 演化策略是最古老的的演化算法之一,和上一篇DE算法类似,都是基于种群的随机演化产生最优解的算法. 算 ...
- MATLAB最大均值差异(Maximum Mean Discrepancy)
MATLAB最大均值差异(Maximum Mean Discrepancy) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多内容,请看标签:MAT ...
- matlab练习程序(SUSAN检测)
matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像 ...
- (转)matlab练习程序(HOG方向梯度直方图)
matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram o ...
- matlab示例程序--Motion-Based Multiple Object Tracking--卡尔曼多目标跟踪程序--解读
静止背景下的卡尔曼多目标跟踪 最近学习了一下多目标跟踪,看了看MathWorks的关于Motion-Based Multiple Object Tracking的Documention. 官网链接:h ...
- matlab练习程序(透视投影,把lena贴到billboard上)
本练习程序是受到了这个老外博文的启发,感觉挺有意思,就尝试了一下.他用的是opencv,我这里用的是matlab. 过去写过透视投影,当时是用来做倾斜校正的,这次同样用到了透视投影,不过更有意思,是将 ...
- matlab练习程序(多圆交点)
最近总是对计算几何方面的程序比较感兴趣. 多圆求交点,要先对圆两两求交点. 有交点的圆分为相切圆和相交圆. 相切圆求法: 1.根据两圆心求直线 2.求公共弦直线方程 3.求两直线交点即两圆切点. 相交 ...
- matlab练习程序(矩形变换为单连通形状)
变换使用的模板必须是单连通的,而且模板中心必须在模板内,如果在模板中打个结或是月牙形,这里的程序就处理不了了. 虽然非单连通模板也有办法处理,不过不是这里要讨论的. 这里用到的方法和矩形变换为圆那片文 ...
- matlab练习程序(渲染三原色)
这里我用的空间是x向右为正,y向下为正,z向屏幕里面为正.相当于标准右手系绕x轴旋转了180度. 将三个点光源放在 r = [0.3,0,0.5];g = [0.3,-0.5*cos(pi/6),-0 ...
随机推荐
- CentOS 7 设置日期和时间
现代操作系统分为以下两种类型的时钟: 实时时钟(Real-Time Clock,RTC),通常称为硬件时钟(一般是系统主板上的集成电路),它完全独立于操作系统的当前状态,即使在计算机关闭时也能运行. ...
- HDU6464 (权值线段树)-(查找区间第k1小于第k2小之间的和)
http://acm.hdu.edu.cn/showproblem.php?pid=6464 不理解先看博客:https://blog.csdn.net/g21glf/article/details/ ...
- LightOJ - 1140 统计0的数位 数位DP
注意以下几点: 搜索维度非约束条件的都要记录,否则大概率出错,比如_0 st参数传递和_0的互相影响要分辨清楚 num==-1就要返回0而不是1 #include<iostream> #i ...
- 1144 The Missing Number (20 分)
Given N integers, you are supposed to find the smallest positive integer that is NOT in the given li ...
- [转] Akka实战:构建REST风格的微服务
[From] http://www.yangbajing.me/2015/11/27/akka%E5%AE%9E%E6%88%98%EF%BC%9A%E6%9E%84%E5%BB%BArest%E9% ...
- ISO端form表单获取焦点时网页自动放大问题
iOS端网页form表单输入信息时,网页自动放大,这是因为meta标签 刚开始的时候meta标签是 <meta name="viewport" content="w ...
- TT 安装之 Windwos
WINDOWS在 控制面板-〉管理工具-〉本地安全策略-〉本地策略-〉用户权限分配-〉锁定内存页-〉添加用户或组-〉高级查找 然后确定 然后安装 (WINDOWS在 控制面板-〉管理工具-〉ODBC工 ...
- Python+Selenium-BDD框架之behave
(查看behave具体教程可以访问官网: http://pythonhosted.org/behave/) 1.安装behave 安装好python后,使用 pip install behave命令安 ...
- zabbix 自定义监控
一,自定义监控 自定义key能被server和agent认可, zabbix_get -s 172.16.1.6 -p 10050 -k "system.cpu.load[all,avg1] ...
- Murano Weekly Meeting 2016.08.16
Meeting time: 2016.August.16 1:00~2:00 Chairperson: Kirill Zaitsev, from Mirantis Meeting summary: ...