还是这本书上的内容,不过我看演化计算这一章是倒着看的,这里练习的算法正好和书中介绍的顺序是相反的。

演化策略是最古老的的演化算法之一,和上一篇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)的更多相关文章

  1. matlab练习程序(SUSAN检测)

    matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像 ...

  2. (转)matlab练习程序(HOG方向梯度直方图)

    matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram o ...

  3. matlab练习程序(差异演化DE)

    这两天在看M.Tim Jones的<人工智能>,书中不只介绍原理,而且都有相应的c代码实现. 虽然代码不完全,不过缺少的部分完全可以自己补完. 差异演化和昨天实现的PSO很类似,都属于优化 ...

  4. matlab练习程序(简单多边形的核)

    还是计算几何, 多边形的核可以这样理解:这个核为原多边形内部的一个多边形,站在这个叫核的多边形中,我们能看到原多边形的任何一个位置. 算法步骤如下: 1.根据原多边形最大和最小的x,y初始化核多边形, ...

  5. matlab示例程序--Motion-Based Multiple Object Tracking--卡尔曼多目标跟踪程序--解读

    静止背景下的卡尔曼多目标跟踪 最近学习了一下多目标跟踪,看了看MathWorks的关于Motion-Based Multiple Object Tracking的Documention. 官网链接:h ...

  6. matlab练习程序(透视投影,把lena贴到billboard上)

    本练习程序是受到了这个老外博文的启发,感觉挺有意思,就尝试了一下.他用的是opencv,我这里用的是matlab. 过去写过透视投影,当时是用来做倾斜校正的,这次同样用到了透视投影,不过更有意思,是将 ...

  7. matlab练习程序(多圆交点)

    最近总是对计算几何方面的程序比较感兴趣. 多圆求交点,要先对圆两两求交点. 有交点的圆分为相切圆和相交圆. 相切圆求法: 1.根据两圆心求直线 2.求公共弦直线方程 3.求两直线交点即两圆切点. 相交 ...

  8. matlab练习程序(矩形变换为单连通形状)

    变换使用的模板必须是单连通的,而且模板中心必须在模板内,如果在模板中打个结或是月牙形,这里的程序就处理不了了. 虽然非单连通模板也有办法处理,不过不是这里要讨论的. 这里用到的方法和矩形变换为圆那片文 ...

  9. matlab练习程序(渲染三原色)

    这里我用的空间是x向右为正,y向下为正,z向屏幕里面为正.相当于标准右手系绕x轴旋转了180度. 将三个点光源放在 r = [0.3,0,0.5];g = [0.3,-0.5*cos(pi/6),-0 ...

随机推荐

  1. rest-assured之获取响应数据(Getting Response Data)

    我们使用rest-assured可以获得响应内容,比如:我们发起一个get请求 get("/lotto") 并且获得响应内容,我们有多种方式可以实现: // 通过流的方式获得响应内 ...

  2. 【算法笔记】B1048 数字加密

    1048 数字加密 (20 分) 本题要求实现一种数字加密方法.首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 ...

  3. Carryon 数数字

    Carryon 数数字 描述 Carryon 最近迷上了数数字,然后 Starry 给了他一个区间[l,r] ,然后提了几个要求, 需要将 l 到 r 之间的数全部转化成 16 进制,然后连起来. 将 ...

  4. Oracle列转行函数Listagg以及pivot查询示例

    简单的Oracle列转行函数Listagg示例: CREATE TABLE tbl_test (catalog VARCHAR(1),product VARCHAR(2),amount NUMBER) ...

  5. git 代码统计

    查看git上的个人代码提交量: git log --author="Marek Romanowski" --since="2019-01-01" --no-me ...

  6. Win10小娜关闭或删除进程

    先来说下我为什么想尽方法关闭win10小娜:我觉得功能并不适用于我,即便不启用Cortana小娜,在Win10进程中也会看到Cortana小娜启动着,耗费了内存.CPU,而且主要的我的磁盘利用率等都居 ...

  7. Python+Selenium之通过batch跑脚本

    例如在执行路径C:\Portal_Scripts\Scripts下的脚本CreateIndicativeBOP.py,可以在notepad里面编写如下: @echo off cd  C:\Portal ...

  8. (Frontend Newbie)JavaScript基础之常见数据类型

    JavaScript中的数据类型分为两种,一种是简单数据类型,包括Undefined.Null.Boolean.Number和String,另一种是复杂数据类型,即Object,也可称作为引用类型. ...

  9. 使用bind配置DNS服务(CentOS 6.5)

    DNS域名解析服务(Domain Name System)是用于解析域名与IP地址对应关系的服务,功能上可以实现正向解析与反向解析: 正向解析:根据主机名(域名)查找对应的IP地址. 反向解析:根据I ...

  10. 修改OPENSUSE 桌面快速搜索快捷键