feisky

云计算、虚拟化与Linux技术笔记
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

遗传算法初接触

Posted on 2009-10-28 20:55  feisky  阅读(1315)  评论(0编辑  收藏  举报

遗传算法(Genetic Algorithm, GA)是模拟达尔文的遗传选择和自然淘汰的生物进化工程的计算模型,它由美国Michigan大学J.Holland教授于1975年首先提出。

GA是全局寻优的优化算法,简单通用,鲁棒性强,适用于并行处理,应用范围广。

image

从上述的流程可以看出,遗传算法包括5个基本要素:参数编码,初始群体设定,适应度函数的设计,遗传操作,控制参数的设定(群体大小、遗传操作的概率等)。

遗传算法的优点:

(1)处理的对象的不是参数本身,而是对参数及进行了编码的个体。

(2)同时对多个个体进行评估,具有较好的全局搜索性能,减少陷入局部最优解的风险。

(3)仅用适应度函数值来评估个体,适应度函数不受连续可微的约束,其定义域可以任意指定,这样就大大扩展了其应用范围。

(4)采用概率变迁规则来指导它的搜索方向。

遗传算法的主要应用领域

image

遗传算法今后的主要课题

  1. 优化搜索方向的研究;
  2. 学习系统的遗传算法研究;
  3. 生物进化与遗传算法的研究;
  4. 遗传算法的秉性分布处理;
  5. 人工生命与遗传算法的研究。

一个小例子:

题目:求解下列函数的最大值
      max f(x)=xsin(10*pi*x)+2,x∈[-1,2]

   1:  
   2: %fminbnd 单变量,黄金分割法,插值法
   3: x1=1.5;
   4: x2=2;
   5: [x,fval]=fminbnd('-x*sin(10*pi*x)-2',x1,x2)  %max
   6:  
   7: %fminunc 单多变量,梯度最优化算法
   8: x1=1.5;
   9: x2=2;
  10: [x,fval]=fminunc('-x*sin(10*pi*x)-2',x1,x2)  %max
  11:  
  12: %fminsearch 多变量 Nelder算法
  13: x1=1.5;
  14: x2=2;
  15: [x,fval]=fminsearch('-x*sin(10*pi*x)-2',x1,x2)   %max

采用遗传算法:(Matlab R2008a)

function y=cc(x)
y=-x*sin(10*pi*x)-2;

clc;clear all; close all;
FitnessFunction=@cc;
numberOfVariables=1;
LB=1.5;
UB=2;
[x,fval] = ga(FitnessFunction,numberOfVariables,[],[],[],[],LB,UB)

 

GA GUI工具:optimtool(‘ga’)  gatool

image

参考书籍:《MATLAB遗传算法工具箱及应用 》《遗传算法及其应用》

无觅相关文章插件,快速提升流量