matlab练习程序(演化策略ES)
还是这本书上的内容,不过我看演化计算这一章是倒着看的,这里练习的算法正好和书中介绍的顺序是相反的。
演化策略是最古老的的演化算法之一,和上一篇DE算法类似,都是基于种群的随机演化产生最优解的算法。
算法步骤如下:
1.设定种群个体数和需要迭代的次数。
2.选择父代中的个体按照公式z1=sqrt(-2*ln(u1))*sin(2*pi*u2)*m,z2=sqrt(-2*ln(u1))*cos(2*pi*u2)*m进行演化。
这里u1,u2都是随机值,m是控制因子,演化次数越多m,m越小,父代通过与z1,z2相加得到后代。
3.计算后代的适应性。
4.选择后代中最优的适应性作为全局最优适应性。
其实整个过程和DE非常类似。过程都是随机变异,求适应性,再找最优。
我还试着将z1和z2横设为1,竟也能得到非常好的解。
算法结果如下:

matlab代码如下:
main.m
clear all;close all;clc; [x y]=meshgrid(-:,-:);
sigma=;
img = (/(*pi*sigma^))*exp(-(x.^+y.^)/(*sigma^)); %目标函数,高斯函数
mesh(img);
hold on;
n=; %种群个体的数量
iter=; %迭代次数 %初始化种群,定义结构体
par=struct([]);
for i=:n
par(i).x=-+*rand(); %个体的x特征在[- ]随机初始化
par(i).y=-+*rand(); %个体的y特征在[- ]随机初始化
par(i).fit=compute_fit(par(i)); %个体在[x,y]处的适应度
end
par_best=par(); %初始化种群中最佳个体 for k=:iter %迭代次数
plot3(par_best.x+,par_best.y+,par_best.fit,'g*'); %画出最佳个体的位置,+为相对偏移
[par par_best]=select_and_recombin(par,par_best,n,k,iter); %差异演化函数
end
select_and_recombin.m
function [next_par par_best]=select_and_recombin(par,par_best,n,k,iter)
mul=(iter-k)/iter; %限制进化因子,代数越高变异越小
next_par=par; %新种群
for i=:n %产生变异随机数
u1=rand();
u2=rand();
z1=sqrt(-*log(u1))*sin(*pi*u2)*mul;
z2=sqrt(-*log(u1))*cos(*pi*u2)*mul; %变异
next_par(i).x=par(i).x+z1;
next_par(i).y=par(i).y+z2; %计算变异后个体的适应度
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练习程序(演化策略ES)的更多相关文章
- 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练习程序(差异演化DE)
这两天在看M.Tim Jones的<人工智能>,书中不只介绍原理,而且都有相应的c代码实现. 虽然代码不完全,不过缺少的部分完全可以自己补完. 差异演化和昨天实现的PSO很类似,都属于优化 ...
- matlab练习程序(简单多边形的核)
还是计算几何, 多边形的核可以这样理解:这个核为原多边形内部的一个多边形,站在这个叫核的多边形中,我们能看到原多边形的任何一个位置. 算法步骤如下: 1.根据原多边形最大和最小的x,y初始化核多边形, ...
- 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 ...
随机推荐
- audiosprite的使用
github地址: https://github.com/tonistiigi/audiosprite 使用方法: http://www.jikexueyuan.com/course/2510_2.h ...
- String Reduction问题分析
问题描述: Given a string consisting of a,b and c's, we can perform the following operation: Take any two ...
- python之IO目录处理
IO目录处理 在使用io常用函数之前,必须要在py文件头部import os.os是(Operation system)的缩写,意思就是系统操作. 1. 创建删除目录 #!/usr/bin/pytho ...
- BZOJ 5421: 收藏家
传送门 直接搞很复杂,考虑转化问题 题目只要求第1个人最多能获得的物品数量 所以如果一种物品拥有多个和一个是没区别的 那么考虑每种物品对第1个人怎样贡献 显然要经过一些交换最终到达第一个人那里 发现很 ...
- dcoker machine
Docker Machine是一个安装和管理 Docker 的工具, 它有自己的命令行工具:docker-machine.Docker Machine简化了Docker的安装和远程管理, 不仅可以管理 ...
- 【Python】探测网站是否可以访问
首先贴上简陋的python脚本 #coding:utf-8 import urllib,linecache for line in linecache.updatecache('url.txt'): ...
- PIE SDK PCA融合
1.算法功能简介 PCA 融合分三步实现,首先将多光谱数据进行主成分变换,然后用高分辨单波段替换第一主成分波段,最后进行主成份逆变换得到融合图像. PIE支持算法功能的执行,下面对PCA融合算法功能进 ...
- groovy——运行方式、基本语法、引入方式、metaClass
jvm运行groovy类有两种方式: 1.使用groovyc编译所有的*.groovy为java的*.class文件,把这些*.class文件放在java类路径中,通过java类加载器来加载这些类. ...
- 弹出table页面--hq
function queryRelation(tableID,prosourceID){ //弹出页面 debugger; initqueryRelationGrid(tableID,prosour ...
- 51nod 1245 Binomial Coefficients Revenge
Description C(M,N) = M! / N! / (M - N)! (组合数).给出M和质数p,求C(M,0), C(M,1)......C(M,M)这M + 1个数中,有多少数不是p的倍 ...