精华内容
下载资源
问答
  • 论文引入鞅方法取代传统的马尔科夫链理论,研究保留精英遗传算法(EGA)的收敛条件和收敛速度.通过 把EGA的最大适应值函数过程...使用鞅方法分析 遗传算法收敛性具有独特的优势,成为分析遗传算法收敛性及其性能的新方法.
  • 针对免疫遗传算法收敛性质的研究非常缺乏,提出了利用随机过程理论和引入遗传吸收率、散射率参数进行分析的方法。通过数学建模证明了免疫遗传算法所形成的种群序列的强马尔可夫,利用遗传吸收率和散射率的计算,...
  • 交叉概率 pc和变异概率 pm在整个进化进程... 为了提高算法的性能,文章提出了自适应交叉概率公式和自适应变异概率公式,并在非线性排序选择情 况下,证明了所提出的自适应交叉和自适应变异概率公式是收敛到全局最优解的。
  • 给出遗传算法全局收敛性的定义,描述当前遗传算法收敛性分析的主要模型,对自适应遗传算法、并行遗传算法、小生境遗传算法等典型遗传算法的收敛性进行分析,给出相关的研究结果,并指出遗传算法收敛性研究的未来发展方向...
  • 关于遗传算法收敛性关于遗传算法收敛性关于遗传算法收敛性
  • 遗传算法收敛性是关系到算法是否可以实现的关键问题。针对遗传算法的早熟收敛、收敛缓慢甚至不收敛, 国内外学 者进行了大量的研究, 并提出了许多的改进措施, 以提高遗传算法的收敛速度。
  • 寻找非劣解集合是遗传算法求解多目标优化问题的目标, 而标准的遗传算法收敛性分析方法对多目标遗传算法的分析 并不合适。本文利用有限马尔科夫链给出了遗传算法求解多目标优化问题的两个收敛性定义, 并给出了一个...
  • 最优保留GA (EGA )是目前GA 收敛性研究中比较典型的一类。在已有研究成果的基础上给 出了EGA 更一般的规范化定义, 指明了 EGA 全局收敛的本质及其两种实现方式, 并分别对它们进行 了收敛性分析。最后提出...
  • 用随机过程论中的马尔克夫链理论研究了几种遗传算法收敛性.提出了6个引理,3个定理和3个推论,证明了最优保存遗传算法和作者提出的2种新型遗传算法:模拟生物种族进化的遗传算法,带罗盘算法的GA是全局收敛的,而...
  • 本文阐述了遗传禁忌搜索算法的混合策略,从理论上对该算法收敛性进行了证明,对时间复杂度进行了分析。应用马尔科夫链模型证明了遗传禁忌搜索算法是以概率1收敛到全局最优解的,并应用求解随机算法时间复杂度的方法,...
  • 遗传算法(GA)作为一种新型的智能优化方法,以其结构简单、适应强等特点在众多实际领域取得了成功的应用,但存在计算复杂度大、易于局部收敛等方面的不足。本文在分析现有遗传操作的不足和生物进化的基本特征基础上,...
  • 遗传算法收敛性.doc

    2019-10-07 20:31:58
    遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法
  • 通过对遗传算法过早...提出几类与遗传算法全局收敛 性能关系较大的个体,并结合小生境进化共享函数思想,形成一种旨在提高遗传算法全局收敛性、 求解全局最优解的遗传算法,仿真结果验证了这种算法良好的全局收敛性能。
  • 基于群体搜索的遗传算法求解多目标优化问题具有独特的优势,多目标优化算法已有的研究大多为 ...(RMOGA) ,并用Markov 链的理论对RMOGA 的收敛性进行了研究,其结果表明RMOGA 依概率收敛到问题的 Pareto 前沿面。
  • 采用一种新的基于解空间分解的定量分析方法, 对遗传算法的种群进化过程进行分析, 阐明了选择、交叉和 变异操作的寻优机理, 给出了子代种群在解空间上的概率分布情况; 理论上, 证明了遗传算法具备寻找全局最优解...
  • 好东西,好东西,好东西,好东西,好东西好东西,
  • 遗传算法及其MATLAB实现(2006-04-29 08:52:47)遗传算法及其MATLAB实现主要参考书:MATLAB 6.5 辅助优化计算与设计 飞思科技产品研发中心编著电子工业出版社 2003.1遗传算法及其应用 陈国良等编著人民邮电出版社 1996...

    a4c26d1e5885305701be709a3d33442f.png

    遗传算法及其MATLAB实现

    (2006-04-29 08:52:47)

    遗传算法及其MATLAB实现

    主要参考书:

    MATLAB 6.5 辅助优化计算与设计 飞思科技产品研发中心编著

    电子工业出版社 2003.1

    遗传算法及其应用 陈国良等编著

    人民邮电出版社 1996.6

    主要内容:

    遗传算法简介

    遗传算法的MATLAB实现

    应用举例

    在工业工程中,许多最优化问题性质十分复杂,很难用

    传统的优化方法来求解.自1960年以来,人们对求解这类难

    解问题日益增加.一种模仿生物自然进化过程的、被称为“

    进化算法(evolutionary algorithm)”的随机优化技术在解这

    类优化难题中显示了优于传统优化算法的性能。目前,进化

    算法主要包括三个研究领域:遗传算法、进化规划和进化

    策略。其中遗传算法是迄今为止进化算法中应用最多、比较

    成熟、广为人知的算法。

    一、遗传算法简介

    遗传算法(Genetic Algorithm, GA)最先是由美国Mic-

    hgan大学的John Holland于1975年提出的。遗传算法是

    模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算

    模型。它的思想源于生物遗传学和适者生存的自然规律,

    是具有“生存+检测”的迭代过程的搜索算法。遗传算法

    以一种群体中的所有个体为对象,并利用随机化技术指

    导对一个被编码的参数空间进行高效搜索。其中,选择、

    交叉和变异构成了遗传算法的遗传操作;参数编码、初始

    群体的设定、适应度函数的设计、遗传操作设计、控制参

    数设定等5个要素组成了遗传算法的核心内容。

    遗传算法的基本步骤:

    遗传算法是一种基于生物自然选择与遗传机理的随机

    搜索算法,与传统搜索算法不同,遗传算法从一组随机产

    生的称为“种群(Population)”的初始解开始搜索过程。种

    群中的每个个体是问题的一个解,称为“染色体(chromos

    ome)”。染色体是一串符号,比如一个二进制字符串。这

    些染色体在后续迭代中不断进化,称为遗传。在每一代中

    用“适值(fitness)”来测量染色体的好坏,生成的下一代染

    色体称为后代(offspring)。后代是由前一代染色体通过交

    叉(crossover)或者变异(mutation)运算形成的。

    在新一代形成过程中,根据适度的大小选择部分后代,淘

    汰部分后代。从而保持种群大小是常数。适值高的染色体

    被选中的概率较高,这样经过若干代之后,算法收敛于最

    好的染色体,它很可能就是问题的最优解或次优解。

    主要步骤如下所示:

    (1)编码:GA在进行搜索之前先将解空间的解数据表示成

    遗传空间的基因型串结构数据,这些串结构数据的不同组

    合便构成了不同的点。

    (2)初始群体的生成:随机产生N个初始串结构数据,每个

    串结构数据称为一个个体,N个个体构成了—个群体。

    GA以这N个串结构数据作为初始点开始迭代。

    (3)适应性值评估检测:适应性函数表明个体或解的优劣性。

    对于不同的问题,适应性函数的定义方式也不同。

    (4)选择:选择的目的是为了从当前群体个选出优良的个体

    ,使它们有机会作为父代为下一代繁殖子孙。遗传算法通

    过选择过程体现这一思想,进行选择的原则是适应性强的

    个体为下一代贡献一个或多个后代的概率大。选择实现了

    达尔文的适者生存原则。

    (5)交叉:交叉操作是遗传算法中最主要的遗传操作。通过

    交叉操作可以得到新一代个体,新个体组合了其父辈个体

    的特性。交叉体现了信息交换的思想。

    (6)变异:变异首先在群体中随机选择一个个体,对于选中

    的个体以一定的概率随机地改变串结构数据中某个串的值。

    同生物界一样,GA中变异发生的概率很低,通常取值在

    0.001~0.01之间。变异为新个体的产中提供了机会。

    实际上,遗传算法中有两类运算:

    ● 遗传运算:交叉和变异

    ● 进化运算:选择

    GA的计算过程流程图

    遗传算法的特点

    GA是对问题参数的编码组进行计算,

    而不是针对参数本身。

    GA的搜索是从问题解的编码组开始搜素、

    而不是从单个解开始。

    GA使用目标函数值(适应度)这一信息进行搜索,

    而不需导数等其他信息。

    GA算法使用的选择、交叉、变异这三个算子都是随机操作,

    而不是确定规则。

    举例图解说明计算流程

    二、遗传算法的MATLAB实现

    需要如下主函数:

    编码和种群生成

    function [pop] = initializega(num,bounds,evalFN,evalOps,options)

    % pop - the initial, evaluated, random population

    % num - the size of the population, i.e. the number to create

    % bounds - the number of permutations in an individual (e.g., number

    % of cities in a tsp

    % evalFN - the evaluation fn, usually the name of the .m file for evaluation

    % evalOps- any options to be passed to the eval function defaults [ ]

    % options- options to the initialize function, ie. [eps, float/binary, prec]

    % where eps is the epsilon value and the second option is 1 for

    % orderOps, prec is the precision of the variables defaults [1e-6 1]

    交叉

    function [c1,c2] = arithXover(p1,p2,bounds,Ops)

    % Arith crossover takes two parents P1,P2 and performs an interpolation

    % along the line formed by the two parents.

    %

    % function [c1,c2] = arithXover(p1,p2,bounds,Ops)

    % p1 - the first parent ( [solution string function value] )

    % p2 - the second parent ( [solution string function value] )

    % bounds - the bounds matrix for the solution space

    % Ops - Options matrix for arith crossover [gen #ArithXovers]

    选择

    normGeomSelect:NormGeomSelect is a ranking selection

    function based on the normalized geometric distribution.

    (基于正态分布的序列选择函数)

    变异

    function[newPop] = normGeomSelect(oldPop,options)

    % NormGeomSelect is a ranking selection function based on

    the normalized

    % geometric distribution.

    %

    % function[newPop] = normGeomSelect(oldPop,options)

    % newPop - the new population selected from the oldPop

    % oldPop - the current population

    % options - options to normGeomSelect

    [gen probability_of_selecting_best]

    一些辅助函数:

    f2b :Return the binary representation of the float number

    fval(将浮点数转化为二进制数)

    b2f:Return the float number corresponing to the binary

    representation of bval. (将二进制数转化为

    浮点数)

    nonUnifMutation: Non uniform mutation changes one

    of the parameters of the parent based on a non-uniform

    probability distribution. This Gaussian distribution starts wide,

    and narrows to a point distribution as the current generation

    approaches the maximum generation.

    (基于非均一概率分布进行非均一变异)

    maxGenTerm:Returns 1, i.e. terminates the GA when the

    maximal_generation is reached.

    (当迭代次数大于最大迭代次数时,终止遗传算法,返回

    为1,否则返回为0。)

    roulette:roulette is the traditional selection function with the

    probability of surviving equal to the fittness of i / sum of the

    fittness of all individuals

    三、应用举例

    1.计算下列函数的最大值。

    f(x)=x+10*sin(5x)+7cos(4x) , x∈[0,9]

    方式1 >>gademo

    方式2

    step 1 编写目标函数gademo1eval1.m

    function [sol, val] = gaDemo1eval_r(sol,options)

    x=sol(1);

    val = x + 10*sin(5*x)+7*cos(4*x);

    step 2 生成初始种群,大小为10

    initPop=initializega(10,[0, 9],'gademo1eval1',[],[1e-6,1]);

    step 3 25次遗传迭代

    [x, endPop,bpop,trace] = ga([0 9],'gademo1eval1',[],initPop,...

    [1e-6 1 1],'maxGenTerm',25,...

    'normGeomSelect',[0.08],...

    ['arithXover'],[2],...

    'nonUnifMutation',[2, 25 ,3])

    % Output Arguments:

    % x - the best solution found during the course of the

    run

    % endPop - the final population

    % bPop - a trace of the best population

    (解的变化)

    % traceInfo - a matrix of best and means of the ga

    for each generation

    (种群平均值的变化)

    %

    % Input Arguments:

    % bounds - a matrix of upper and lower bounds

    on the variables

    % evalFN - the name of the evaluation .m function

    % evalOps

    - options to pass to the evaluation function ([NULL])

    % startPop - a matrix of solutions that can be initialized

    % from initialize.m

    % opts - [epsilon, prob_ops ,display]

    change required to consider two solutions

    different, prob_ops 0 if you want to apply the

    % genetic operators probabilisticly to each solution,

    1 if you are supplying a deterministic number

    of operator applications and display is 1 to output

    progress 0 for quiet. ([1e-6 1 0])

    % termFN - name of the .m termination function

    (['maxGenTerm'])

    % termOps - options string to be passed to the termination

    function ([100]).

    % selectFN - name of the .m selection function

    (['normGeomSelect'])

    % selectOpts - options string to be passed to select after

    % select(pop,#,opts) ([0.08])

    % xOverFNS - a string containing blank seperated names

    of Xover.m files (['arithXover heuristicXover

    simpleXover'])

    % xOverOps - A matrix of options to pass to Xover.m files

    with the first column being the number of that

    xOver to perform similiarly for mutation

    ([2 0;2 3;2 0])

    % mutFNs - a string containing blank seperated names of

    mutation.m files (['boundaryMutation

    multiNonUnifMutation ...

    % nonUnifMutation unifMutation'])

    % mutOps - A matrix of options to pass to Xover.m files

    with the first column being the number of that

    xOver to perform similiarly for mutation

    ([4 0 0;6 100 3;4 100 3;4 0 0])

    2.求sin(x) 在0到3.14之间的最大值.

    function [sol, val] = sin1(sol,options)

    x=sol(1);

    val =sin(x);

    initPop=initializega(10,[0, 3.14],'sin1',[],[1e-6,1]);

    [x, endPop,bpop,trace] = ga([0 3.14],'sin1',[],initPop,...

    [1e-6 1 1],'maxGenTerm',25,...

    'normGeomSelect',[0.08],...

    ['arithXover'],[2],...

    'nonUnifMutation',[2, 25 ,3])

    3. binaryExample.m

    二元函数例子 二进制编码

    方式1 >> binaryExample

    方式2

    function [sol,val] = gaMicheval_r(sol,options)

    val = 21.5 + sol(1) * sin(4*pi*sol(1)) + sol(2)*sin(20*pi*sol(2));

    %%%%%%%%%%%%%%

    global bounds

    % Setting the seed back to the beginning for comparison sake

    rand('seed',0)

    % Crossover Operators

    xFns = 'simpleXover';

    xOpts = [.4];

    % Mutation Operators

    mFns = 'binaryMutation';

    mOpts = [0.005];

    % Termination Operators

    termFns = 'maxGenTerm';

    termOps = [200]; % 200 Generations

    % Selection Function

    selectFn = 'roulette'

    selectOps = [];

    % Evaluation Function

    evalFn = 'gaMichEval';

    evalOps = [];

    % Bounds on the variables

    bounds = [-3, 12.1; 4.1, 5.8];

    % GA Options [epsilon float/binar display]

    gaOpts=[1e-6 0 1];

    % Generate an intialize population of size 20

    startPop = initializega(20,bounds,'gaMichEval',[],[1e-6 0]);

    [x endPop bestPop trace]=ga(bounds,evalFn,evalOps,startPop,gaOpts,...

    termFns,termOps,selectFn,selectOps,xFns,xOpts,mFns,mOpts);

    % x is the best solution found

    x

    % endPop is the ending population

    endPop

    % trace is a trace of the best value and average value of generations

    trace

    clf

    plot(trace(:,1),trace(:,2));

    hold on

    plot(trace(:,1),trace(:,3));

    % Lets increase the population size by running the defaults

    %

    rand('seed',0)

    termOps=[100];

    [x endPop bestPop trace]=ga(bounds,evalFn,evalOps,[],gaOpts,termFns,termOps,...

    selectFn,selectOps);

    % x is the best solution found

    x

    % endPop is the ending population

    %endPop

    % trace is a trace of the best value and average value of generations

    %trace

    % Plot the best over time

    clf

    plot(trace(:,1),trace(:,2));

    % Add the average to the graph

    hold on

    plot(trace(:,1),trace(:,3));

    4. floatExample.m

    二元函数例子 浮点编码

    global bounds

    % Setting the seed to the same for binary

    rand('seed',156789)

    % Crossover Operators

    xFns = 'arithXover heuristicXover simpleXover';

    xOpts = [1 0; 1 3; 1 0];

    % Mutation Operators

    mFns = 'boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation';

    mOpts = [2 0 0;3 200 3;2 200 3;2 0 0];

    % Termination Operators

    termFns = 'maxGenTerm';

    termOps = [200]; % 200 Generations

    % Selection Function

    selectFn = 'normGeomSelect';

    selectOps = [0.08];

    % Evaluation Function

    evalFn = 'gaMichEval';

    evalOps = [];

    % Bounds on the variables

    bounds = [-3 12.1; 4.1 5.8];

    % GA Options [epsilon float/binar display]

    gaOpts=[1e-6 1 1];

    % Generate an intialize population of size 20

    startPop = initializega(20,bounds,'gaMichEval',[1e-6 1])

    [x endPop bestPop trace]=ga(bounds,evalFn,evalOps,startPop,gaOpts,...

    termFns,termOps,selectFn,selectOps,xFns,xOpts,mFns,mOpts);

    % x is the best solution found

    x

    % endPop is the ending population

    endPop

    % bestPop is the best solution tracked over generations

    bestPop

    % Plot the best over time

    clf

    plot(trace(:,1),trace(:,2));

    % Add the average to the graph

    hold on

    plot(trace(:,1),trace(:,3));

    % Lets increase the population size by running the defaults

    [x endPop bestPop trace]=ga(bounds,evalFn,evalOps,[],gaOpts);

    % x is the best solution found

    x

    % endPop is the ending population

    endPop

    % bestPop is the best solution tracked over generations

    bestPop

    % Plot the best over time

    clf

    plot(trace(:,1),trace(:,2));

    % Add the average to the graph

    hold on

    plot(trace(:,1),trace(:,3));

    5. 求解货郎担问题(TSP)

    orderBasedExample.m

    6. 求解非线性规划问题

    max f(x)

    s.t. gi(x)<=0,i=1,...,m

    hi(x)=0,i=m+1,...,n

    x∈Ω

    ?不可行的后代?

    拒绝策略

    修复策略

    改进遗传算子策略

    惩罚策略

    e.g. min f(x)=(x1-2)2+(x2-1)2

    s.t. g1(x)=x1-2x2+1>=0

    g2(x)=x12/4-x22+1>=0

    分析:取加法形式的适值函数:

    val(x)=f(x)+p(x)

    惩罚函数 p(x)由两部分组成,可变乘法因子和

    违反约束乘法,其表达式如下:

    其中ri是约束i的可变惩罚系数。

    步骤如下:

    function [sol,eval]=f552(sol,options)

    x1=sol(1);

    x2=sol(2);

    r1=0.1;

    r2=0.8;

    %约束条件

    g1=x1-2*x2+1;

    g2=x1.^2/4-x2.^2+1;

    %加惩罚项的适值

    if (g1>=0)&(g2>=0)

    eval=(x1-2).^2+(x2-1).^2;

    else

    eval=(x1-2).^2+(x2-1).^2+r1*g1+r2*g2;

    end

    eval=-eval;

    %%%%%%%%%%%%%%%%%%%%%%%%%%%

    %维数n=2

    %设置参数边界

    bounds = ones(2,1)*[-1 1];%??????

    %遗传算法优化

    [p,endPop,bestSols,trace]=ga(bounds,'f552');

    p

    %性能跟踪

    plot(trace(:,1),trace(:,3),'b-')

    hold on

    plot(trace(:,1),trace(:,2),'r-')

    xlabel('Generation');

    ylabel('Fittness');

    legend('解的变化','种群平均值的变化');

    分享:

    a4c26d1e5885305701be709a3d33442f.png喜欢

    0

    a4c26d1e5885305701be709a3d33442f.png赠金笔

    加载中,请稍候......

    评论加载中,请稍候...

    发评论

    登录名: 密码: 找回密码 注册记住登录状态

    昵   称:

    评论并转载此博文

    a4c26d1e5885305701be709a3d33442f.png

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

    展开全文
  • 遗传算法收敛性数学实验 实验十 遗传算法与优化问题 问题背景和实验目的 遗传算法基本原理 遗传学相关概念 遗传学相关概念 遗传算法的步骤 遗传算法的步骤 遗传算法具体步骤 遗传算法具体步骤 遗传算法的实际应用 ...

    遗传算法的收敛性

    数学实验 实验十 遗传算法与优化问题 问题背景和实验目的 遗传算法基本原理 遗传学相关概念 遗传学相关概念 遗传算法的步骤 遗传算法的步骤 遗传算法具体步骤 遗传算法具体步骤 遗传算法的实际应用 编码 编码 产生初始群体 适应函数 适应函数和适应值 选择标准 产生种群 交叉 变异 终止条件 遗传算法的收敛性 遗传算法的收敛性 遗传算法的收敛性 最佳个体保存方法 最佳个体保存方法 实验举例 上机作业 * * 本实验主要介绍遗传算法的基本理论,然后通过求解几个简单的函数最值问题,来说明如何利用遗传算法进行初步的优化计算 。 遗传算法(Genetic Algorithm,简称 GA),是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算机算法,它由美国 Holland 教授1975年提出。 遗传算法作为一种新的全局优化搜索算法,以其简单通用、鲁棒性强、适合并行处理及应用范围广等显著特点,奠定了它作为21世纪关键智能计算之一的地位。 基本思想: 基于模仿生物界遗传学的遗传过程,把问题的参数用基因来表示,把问题的解用染色体来表示代表(在计算机里用二进制码表示),从而得到一个由具有不同染色体的个体组成的群体。 这个群体在问题特定的环境里生存竞争,适者有最好的机会生存和产生后代,后代随机化地继承父代的最好特征,并也在生存环境的控制支配下继续这一过程。 群体的染色体都将逐渐适应环境,不断进化,最后收敛到一族最适应环境的类似个体,即得到问题最优解。 保留或复制适应值大的可行解,去掉小的可行解 从群体中选择优胜的个体,淘汰劣质个体的操作 选择 8 根据入选概率定出的一组可行解 被选定的一组染色体或个体 种群 7 可行解所对应的适应函数值 个体对于环境的适应程度,或在环境压力下的生存能力 适应值 6 元素在编码中的位置 某一基因在染色体中的位置 基因位 5 编码中的元素 染色体中的元素 基因 4 可行解的编码 个体的表现形式 染色体 3 被选定的一组可行解 个体的集合 群体 2 也就是可行解 要处理的基本对象、结构 个体 1 数学 遗传算法 遗传学 目标函数取到最大值,最优的可行解 个体进行优胜劣汰的进化,一代又一代地优化 进化、 适者生存 13 开区间(0,1)内的一个值, 一般为0.001~0.01 染色体上基因变化的概率(可能性大小) 变异概率 12 编码的某些元素被改变 染色体水平上基因变化 变异 11 闭区间[0,1]上的一个值,一般为0.65~0.90 染色体对应基因段交换的概率(可能性大小) 交叉概率 10 根据交叉原则产生的一组新解 一组染色体上对应基因段的交换 交叉 9 数学 遗传算法 遗传学 遗传算法计算优化的过程就如同生物学上生物遗传进化的过程,主要有三个基本操作(或算子): 选择(Selection) 交叉(Crossover) 变异(Mutation) 遗传算法基本步骤: 把这些可行解置于问题的 “环境” 中,按适者生存的原则,选取较适应环境的“染色体”进行复制,并通过交叉、变异过程产生更适应环境的新一代 “染色体” 群 把问题的解表示成 “染色体”,在算法中就是以二进制编码的串,给出一群 “染色体”,也就是假设的可行解 经过这样的一代一代地进化,最后就会收敛到最适应环境的一个 “染色体” 上,它就是问题的最优解 遗传算法有很多种具体的不同实现过程, 这里仅介绍标准遗传算法的主要步骤。 选择编码策略,把参数集合(可行解集合)转换染色体结构空间; 定义适应函数,便于计算适应值; 确定遗传策略,包括选择群体大小,选择、交叉、变异方法以及确定交叉概率、变异概率等遗传参数; 随机产生初始化群体; 计算群体中的个体或染色体解码后的适应值; 按照遗传策略,运用选择、交叉和变异算子作用于群体,形成下一代群体; 判断群体性能是否满足某一指标,或者已完成预定的迭代次数,不满足则返回第五步,或者修改遗传策略再返回第六步. 产生初始群体 是否满足终止条件 得到结果 是 结束程序 否 计算每个个体的适应值 以概率选择遗传算子 选择一个个体复制到新群体 选择两个个体进行交叉插入到新群体 选择一个个体进行变异插入到新群体 得到新群体 例 1. 设 f(x) = -x2 + 2x + 0.5,求 max f(x), x?[-1, 2]。 我们将通过这个简单的求最值问题来详细给出遗传算法的整个过程。 (1)编码和产生初始群体 首先需要确定编码的策略,也就是说如何把 [-1, 2] 区间内的数用计算机语言表示出来。编码就是从表现型到基因型的映射,编码时要注意以下三个原则: 完备性:问题空间中所有点(潜在解)都能成为GA编码空间中的点(染色体位串)的表现型; 健全性:GA编码空间中的染色体位

    展开全文
  • 基于状态空间模型遗传算法是李茂军教授正式提出的一种新型进化算法,具有参数设置少、操作简单、搜索能力强、计算精度高和收敛速度快等特点。状态进化矩阵是种群进化的关键操作算子,相比于状态进化矩阵每一次迭代都...
  • 它是使用遗传算法来生成搜索方向,从而保证了算法的收敛性。 该算法利用遗传算法的全局搜索 能力,并采用 Nelder- Mead 单纯形法来加强算法的局部搜索能力,加快了算法的收敛速率。模拟实验表 明,该方法具有...
  • 论文研究-解非线性两层规划问题的新的遗传算法及全局收敛性.pdf, 针对两层规划问题本质上的非凸性和不可微性给其数值求解带来极大困难,特别是求非线性两层规划问题的...
  • 遗传算法PPT

    2018-06-13 18:16:43
    涵盖了遗传算法的基本内容介绍、特点、数学基础、算法的收敛性分析、应用举例
  • 遗传算法

    万次阅读 多人点赞 2019-04-06 21:41:47
    使用遗传算法求解多峰函数的最大值,是我的一项课程作业,做完之后,顺便把文档整理出来做个记录。全部内容如下: 1、问题描述 编程实现遗传算法,并求解多峰函数的最大值。多峰函数的表达式如下所示: 用MATLAB...

    使用遗传算法求解多峰函数的最大值,是我的一项课程作业,做完之后,顺便把文档整理出来做个记录。全部内容如下:

    1、问题描述

    编程实现遗传算法,并求解多峰函数的最大值。多峰函数的表达式如下所示:
    在这里插入图片描述
    用MATLAB做出函数的图像如下:
    在这里插入图片描述

    2、算法描述及实现

    2.1、遗传算法概述

    遗传算法(GA,Genetic Algorithm),也称为进化算法。遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。其主要特点是直接对结构对象进行操作,因此不同于其他求解最优解的算法,遗传算法不存在求导和对函数连续性的限定,采用概率化的寻优方法,不需要确定的规则就能自动获取和指导优化的搜索空间,自适应地调整搜索方向。

    以上是对遗传算法相对抽象的总结,为了更具体形象的解释遗传算法的一般原理,我们首先介绍一些生物学上的概念

    ①种群:不同生物个体形成的群体,生物的进化以群体的形式进行,这样的一个群体称为种群;

    ②个体:组成种群的单个生物;

    ③基因:带有遗传信息的DNA片段,可以通俗的将基因理解为一段信息,这段信息决定的生物个体的性状;

    ④表现型:根据基因形成的个体的外部表现;

    ⑤适应度:生物个体对于生存环境的适应程度,越适应那么其得以存活和繁衍的概率就越大;

    ⑥遗传:通过繁殖过程,子代将从父母双方各获取一部分基因,形成新的自己的基因,这个过程中,会发生基因的复制、交叉,也会以较低的概率发生基因突变;

    ⑦自然选择:物竞天择,适者生存的自然淘汰机制。具体为对环境适应度高的个体参与繁殖的机会比较多,后代就会越来越多。适应度低的个体参与繁殖的机会比较少,后代就会越来越少;

    ⑧进化:种群通过代际繁衍不断适应生存环境的过程,在这个过程中,以对外界环境的适应度为评判标准,生物的性状不断得到改良。

    了解了这些术语的含义,我们就可以进一步说说生物进化的过程了。由于自然选择是客观存在的,即生物只能改变自己去适应环境,那么在自然选择的过程中,适应度低的个体会被淘汰,适应度高的个体被保留,高适应度的父体与母体又有更高的概率繁衍出适应度高的子代,因此在一代又一代的繁衍之后,高适应度的个体在种群中所占的比例越来越大,种群就这样完成了进化。

    现在我们要参考生物进化的过程来设计算法解决求最优解的问题。对此,遗传算法的思路是,将要解决的问题模拟成一个生物进化的过程,通过进化来寻找最优解。以我们题目中寻找多峰函数的最大值这个问题为例

    将(x, y)这一可能的解作为一个个体;将多峰函数的函数值f(x, y)作为个体的适应度;对(x, y)进行编码作为个体的基因;以适应度为标准不断筛选生物个体;通过遗传算子(如复制、交叉、变异等)不断产生下一代。如此不断循环迭代,完成进化。最终,根据设定的迭代次数,可得到最后一代种群,该种群中的个体适应度都较高,而多峰函数的最大值就有比较大的概率存在于这一群解中,以种群中适应度最高的个体作为问题的解,则可以说该解有比较高的概率就是我们希望求得的最优解。

    文字述说终究还是不如图表好理解,因此还是看图吧(下图将本题与自然遗传联系了起来):
    在这里插入图片描述
    通过以上描述,我们不难看出,遗传算法不能保证一定能求得最优解,而只能以一定的概率求最优解。但是使用遗传算法时,我们可以不用关心具体如何去找最优解,要做的只是简单的否定一些表现不好的个体。这一优点也是遗传算法能够取得广泛应用的原因之一。

    2.2、算法的流程

    通过上文的阐述,对于如何模拟自然进化来求题中多峰函数的最优解已经比较明晰了。这里我将列出遗传算法的主要步骤,并一一解析:

    第一步:随机产生一个种群,作为问题的初代解(通常,初代解可能与最优解相差较大,这是可以容忍的,只要保证初代解是随机产生的,以确保个体基因的多样性即可);

    第二步:寻找一种合适的编码方案对种群中的个体进行编码,可以选择如浮点数编码或二进制编码等常用编码方案(需要指出的是,不同的编码方案直接影响后续遗传算子的实现细节);

    第三步:以多峰函数的函数值 作为个体的适应度,计算种群中每个个体的适应度(算出的适应度将为后续的个体选择提供依据);

    第四步:根据适应度的高低选择参与繁衍的父体与母体,选择的原则是适应度越高的个体越可能被选中(以此不断淘汰适应度低的个体);

    第五步:对被选出的父体与母体执行遗传操作,即复制父体与母体的基因,并采用交叉、变异等算子产生出子代(在较大程度保留优秀基因的基础上,变异增加了基因的多样性,从而提高找到最优解的概率);

    第六步:根据一定的准则判断是继续执行算法,还是找出所有子代中适应度最高个体作为解返回并结束程序(判断的准则可以是设定的解的阈值、指定的迭代次数等)。
    在这里插入图片描述

    2.3、算法的编码实现

    2.3.1、编码

    本文采用的是二进制编码方式,这种编码方式编解码过程简单易行,相应的交叉算子、变异算子等操作用位运算即可实现。当然,它也有一定的缺点,比如连续性不够强。为保证求解的精度,本文使用14个bit为 编码,使用11个bit为 编码,两者组合成25个bit的最终结果。不难算出,该方式的编码精度可达千分位。具体的编码操作可总结为,将 或 的取值区间映射到0~2n-1这一整数范围,其中n表示编码位数, 或 在其取值区间的某点,相应的映射到整数区间中的某点,改点即为 或 的基因编码。程序如下:

    /*
        基因编码
        gene1       输入型参数,待编码的基因段1
        gene2       输入型参数,待编码的基因段2
        gene_code   输出型参数,基因编码
    
        返回值:当输入的基因不符合要求时返回false,否则返回true
    */
    static bool gene_encode(const double gene1, const double gene2, unsigned int *gene_code)
    {
        /* 判断基因是否合法 */
        if (!is_gene_legal(gene1, gene2))
            return false;
    
        /* 若基因合法则对其进行编码 */
        unsigned int gene1_code = (gene1 - GENE1_RANGE_LEFT) * (GENE1_CODE_MAX - 1) / (GENE1_RANGE_RIGHT - GENE1_RANGE_LEFT);
        unsigned int gene2_code = (gene2 - GENE2_RANGE_LEFT) * (GENE2_CODE_MAX - 1) / (GENE2_RANGE_RIGHT - GENE2_RANGE_LEFT);
        
        /* 组合基因片段 */
        *gene_code = (gene1_code << 11) | gene2_code;
    
        return true;
    }
    

    2.3.2、解码

    解码是编码的逆过程,无需赘述,程序如下:

    /*
        基因解码
        gene_code   输入型参数,基因编码
        gene1       输出型参数,解码后的基因段1
        gene2       输出型参数,解码后的基因段2
    
        返回值:当输入的基因编码不符合要求时返回false,否则返回true
    */
    static bool gene_decode(const unsigned int gene_code, double *gene1, double *gene2)
    {
        /* 判断基因编码是否合法 */
        if (!is_gene_code_legal(gene_code))
            return false;
    
        /* 若基因编码合法则对其进行解码 */
        unsigned int gene1_code = GET_GENE1_CODE(gene_code);
        unsigned int gene2_code = GET_GENE2_CODE(gene_code);
    
        *gene1 = (double)gene1_code * (GENE1_RANGE_RIGHT - GENE1_RANGE_LEFT) / (GENE1_CODE_MAX - 1) + GENE1_RANGE_LEFT;
        *gene2 = (double)gene2_code * (GENE2_RANGE_RIGHT - GENE2_RANGE_LEFT) / (GENE2_CODE_MAX - 1) + GENE2_RANGE_LEFT;
    
        return true;
    }
    

    2.3.3、计算适应度

    适应度函数也称评价函数,通常用于区分群体中个体好坏的标准。适应度高的,也就是优秀的个体有更大的几率参与繁衍,遗传自己的基因。一般的,适应度函数根据目标函数来确定,有时候直接将目标函数值作为适应度。这里,考虑到待求解的多峰函数,尖峰分布密集而且峰的直径很窄,这不利于遗传算法的收敛,因此本文不直接将多峰函数值作为适应度,而是利用对数函数将多峰函数进行平缓,并将平缓后的函数值作为目标函数。具体做法是,将多峰函数进行两次求对数,因此,多峰函数与适应度的关系可如下表示:
    在这里插入图片描述
    用MATLAB做出适应度函数图像如下:
    在这里插入图片描述
    对比前文中的图不难看出,图像得到了有效的平缓,同时不同峰之间也保持着一定的高低之别。值得一提的是,这里更主要的是给出优化遗传算法的一个思路,即可以在适应度函数上做文章。本题的适应度函数只是对多峰函数本身做了一个简单的变换,读者不妨思考一下,就本题而言有没有什么非常好的适应度函数。

    据上文所述,适应度求值函数如下:

    /*
        多峰函数:z = 21.5 + x *sin(4 * 3.1415926 * x) + y * sin(20 * 3.1415926 * y)
        适 应 度:log(log(z))
        约    束:-3.0 <= x <= 12.1; 4.1 <= y <= 5.8
        精    度:精确到千分位
    */
    double get_fitness(const double x, const double y)
    {
        return log(log(21.5 + x * sin(4 * PI * x) + y * sin(20 * PI * y)));
    }
    

    2.3.4、选择算子

    本文的选择算法采用了非常常用的“轮盘赌算法”,赌盘算法的原理非常简单明了。创建赌盘时,我们将种群中所有个体的适应度求和,不妨将得到的结果称为总和适应度。然后,将每个个体的适应度除以总和适应度,然后将得到的商逐个累加,每加一次就得到赌盘的一个边界,累加完成后总和为1。如下的饼状图可以更形象的表明赌盘的原理:
    在这里插入图片描述
    由上文所述,赌盘创建函数可如下编写:

    /*
        创建赌盘
        ga      遗传算法器指针
    */
    static void create_roulette(GA *ga)
    {
        /* 计算赌盘中的概率 */
        ga->roulette[0] = ga->fitness[0] / ga->sum_fitness;
    
        for (int num = 1; num < ga->population_num - 1; num++)
        {
            ga->roulette[num] = ga->roulette[num - 1] + ga->fitness[num] / ga->sum_fitness;
        }
    
        ga->roulette[ga->population_num - 1] = 1.0;
    }
    

    再回到选择算子,选择算子需要赌盘作为基础,其运行时,会产生一个0到1的随机数,然后在赌盘中找到该数所在的区间,这个区间对应的个体即为被选中的个体。因此,适应度越高的个体被选中的几率越大,这是合理的。当然,也存在较小的概率选出适应度较低的个体,为了避免这种情况,本文引入了竞争机制,即一次选择的过程选出2个个体,再取其中适应度较高的那个个体,具体的程序如下:

    /*
        基因选择函数
        ga      遗传算法器指针
        返回值:返回使用轮盘赌的方式选出的个体(编号)
        说  明:选择策略为轮盘赌+随机竞争
    */
    static unsigned int select(GA *ga)
    {
        unsigned int index1 = 0, index2 = 0;
    
        /* 产生一个[0.0, 1.0]之间的浮点数 */
        double selector1 = rand() * 1.0 / RAND_MAX;
        double selector2 = rand() * 1.0 / RAND_MAX;
    
        /* 找出被选中的个体的索引 */
        for (; selector1 > ga->roulette[index1]; index1++);
        for (; selector2 > ga->roulette[index2]; index2++);
    
        return (ga->fitness[index1] > ga->fitness[index2] ? index1 : index2);
    }
    

    2.3.5、交叉算子

    遗传算法的交叉操作实质上是按某种方式交换父体和母体的部分基因,常见的交叉算子有单点交叉、两点交叉、多点交叉、均匀交叉及算术交叉等。本文选用两点交叉法,实现过程既不复杂,也有较好的随机性,该方法可由下图示意:
    在这里插入图片描述
    图中虚线指出的两个交叉点是随机产生的。具体程序如下:

    /*
        交叉函数
        ga          遗传算法器指针
        one         输出型参数,待交叉基因
        another     输出型参数,待交叉基因
        说明:
        1.对传入的基因编码执行两点交叉操作
    */
    static void cross(GA *ga, unsigned int *one, unsigned int *another)
    {
        /* 1.随机产生两个交叉点的位置 */
        unsigned char pos1 = rand() % GENE_CODE_LENGTH + 1;
        unsigned char pos2 = rand() % GENE_CODE_LENGTH + 1;
        unsigned char min_pos = min(pos1, pos2);
        unsigned char max_pos = max(pos1, pos2);
    
        /* 2.截出需要交换的基因段 */
        unsigned int one_gene_seg = get_bits(*one, min_pos, max_pos) << (min_pos - 1);
        unsigned int another_gene_seg = get_bits(*another, min_pos, max_pos) << (min_pos - 1);
        unsigned int mask = ~(get_bits(~(0U), min_pos, max_pos) << (min_pos - 1));
    
        /* 3.执行交叉操作 */
        *one = (*one & mask) | another_gene_seg;
        *another = (*another & mask) | one_gene_seg;
    }
    

    2.3.6、变异算子

    在自然界中,基因变异可以增加个体的多样性,这对于遗传算法来说是增加了个体的随机性,可以增加找到最优解的概率。本文采用的变异算子所做的操作是随机选择基因的某一位进行反转,程序如下:

    /*
        变异函数
        gene_code       输入型参数
        说明:
        1.对传入的基因编码执行变异操作
        2.随机选择基因编码中的一位做反转操作
    */
    static void mutate(unsigned int *gene_code)
    {
        unsigned int mutate_bit = 1 << (rand() % GENE_CODE_LENGTH);
        *gene_code ^= mutate_bit;
    }
    

    2.3.7、繁殖函数及进化函数

    遗传算法的主要算子都在上文中分析过了,下面要做的就是根据遗传算法的流程将这些算子整合起来以实现算法功能。在本文中,这其中涉及到两个关键的函数,即繁殖函数和进化函数。繁殖函数包括基因的复制、交叉及变异,同时本文还采用了子代竞争策略,即父代产生的两个子代个体仅保留适应度最高的,程序如下:

    /*
        繁殖函数
        ga       遗传算法器指针
        father   从种群中选出的父体
        mother   从种群中选出的母体
        返回值:  适应度最高的子代的基因编码
        说明: 
        1.一对父体与母体将繁殖出一对子代
        2.选择出适应性更好的子代返回
    */
    static unsigned int inherit(GA *ga, unsigned int father, unsigned int mother)
    {
        unsigned int son1 = ga->gene_code[father];
        unsigned int son2 = ga->gene_code[mother];
    
        /* 1.交叉 */
        cross(ga, &son1, &son2);
    
        /* 2.变异 */
        mutate(&son1);
        mutate(&son2);
    
        /* 3.子代竞争 */
        double son1_gene1, son1_gene2, son2_gene1, son2_gene2;
        gene_decode(son1, &son1_gene1, &son1_gene2);
        gene_decode(son2, &son2_gene1, &son2_gene2);
    
        return (ga->get_fitness(son1_gene1, son1_gene2) > ga->get_fitness(son2_gene1, son2_gene2)) ? son1 : son2;
    }
    

    进化函数则实现了遗传算法的一次完整的迭代过程,根据上文给出的遗传算法流程图,不难进行如下编码:

    /*
        进化函数
        ga      遗传算法器指针
    */
    static void evolve(GA *ga)
    {
        /* 1.申请暂存子代基因编码的内存 */
        unsigned int *descendants = (unsigned int *)calloc(ga->population_num, sizeof(unsigned int));
        
        /* 2.精英保留(将上一代中适应度最高的个体的基因编码保留) */
        descendants[0] = ga->gene_code[ga->best_individual];
        
        /* 3.选择合适的父体与母体 */
        unsigned int father = select(ga);
        unsigned int mother = select(ga);
    
        /* 4.繁殖(包含交叉与变异) */
        for (int num = 1; num < ga->population_num; num++)
            descendants[num] = inherit(ga, father, mother);
    
        /* 5.将子代记录到ga中并进行基因解码(使新一代的基因编码与基因对应) */
        for (int num = 0; num < ga->population_num; num++)
        {
            ga->gene_code[num] = descendants[num];
            gene_decode(ga->gene_code[num], &ga->gene[num].gene1, &ga->gene[num].gene2);
        }
        
        /* 5.更新种群适应度 */
        fit(ga);
        
        /* 6.更新赌盘 */
        create_roulette(ga);
    
        /* 7.释放之前申请的空间 */
        free(descendants);
    }
    

    3、运行结果及分析

    至此,本文已经给出了一个遗传算法的C语言实现的所有关键程序。下面就调用编写的遗传算法进行测试。本文将创建含有100个个体的种群,并进行100代迭代以求解多峰函数的最大值,一次完整的调用本文实现的遗传算法的程序如下所示:

    /* 创建遗传算法器 */
    GA *ga = create_ga(get_fitness, 100);
    
    /* 初始化遗传算法器 */
    ga->init(ga);
    
    /*迭代100代*/
    for (int i = 0; i < 100; i++)
    ga->evolve(ga);
    
    /*销毁遗传算法器*/
    delete_ga(ga);
    

    经多次调用测试,算法执行的结果较为稳定,所得的多峰函数最大值大多在38以上,多次运行结果中最好的解为38.849744,对应的坐标为(11.625331, 5.725256)。将迭代求得的最大值用MATLAB作图如下:
    在这里插入图片描述
    为验证是否找到了最优解,用MATLAB遍历求出该多峰函数在给定定义域内的最大值为38.8501,与本文求出的结果相差0.000356,可见本文实现的遗传算法表现还不算太差。

    文中给出的程序比较散,这里给出完整程序的下载链接

    展开全文
  • 利用遗传算法早熟的特点,构造出一种快速收敛的混合算法来求解优化问题,并分析了它的收敛性。它是使用遗传算法来生成搜索方向,从而保证了算法的收敛性。该算法利用遗传算法的全局搜索能力,并采用Nelder-Mead单纯...
  • 摘要:遗传算法存在未成熟收敛收敛速度慢等不足之处,传统的自适应遗传算法虽能有效提高算法的收敛速度,却难以增强算法的鲁棒。文中提出的改进的自适应遗传算法,提高了其搜索能力,具有更快的收敛速度和更可靠...

    摘要:遗传算法存在未成熟收敛和收敛速度慢等不足之处,传统的自适应遗传算法虽能有效提高算法的收敛速度,却难以增强算法的鲁棒性。文中提出的改进的自适应遗传算法,提高了其搜索能力,具有更快的收敛速度和更可靠的稳定性,达到了预期的效果。关键词:遗传算法;自适应;收敛;改进;性能

    中图分类号: TP18文献标识码:A文章编号:1009-3044(2012)21-5202-04

    遗传算法(Genetic Algorithm,以下简称GA)[1]是一种模仿生物群体进化的随机优化算法,它是由美国密歇根大学J.H.Holland教授创立的。标准的遗传算法(Standard GA,以下简称SGA)往往存在一定的不足之处,比如容易出现早熟以及过慢的收敛速度等不良现象。鉴于此,Srinvas等提出了自适应遗传算法(Adaptive GA,以下简称AGA)[4],在GA中应用自适应调整交叉率和变异率,结果证明,这种算法在GA的收敛速度方面能够较好的改进。不过,AGA在演化初期存在停滞现象,故将自适应调整交叉率和变异率的方法用于GA以提高算法收敛速度和鲁棒性仍十分具有挑战性[6]。文献[3]提出一种改进的自适应遗传算法,在一定程度上提高算法的计算速度和收敛速度。但因为它们计算所得到的变异概率Pm及交叉概率Pc具有不良的稳定性,同时该算法对整体协作能力存在不足。

    为此,该文提出一种新的改进遗传算法,改进后的算法效果良好,在算法的收敛速度以及全局搜索性能等方面都具备良好的效果。

    公式中:?max是指群体的最大适应度;?avg是指群体的适应度平均值;?’是指杂交双方适应度大者的适应度;?是指个体的适应度;0  这种算法可以根据每代个体适应度的改变来自适应地改变Pm和Pc,在保护最优个体的同时,加快了较差个体的淘汰速度。该算法在一定程度上可以改善遗传算法的性能。但该算法也存在不容易跳出局部最优解,因为该算法是以个体为单位改变Pm和Pc,缺乏对整体的协作精神。同时,由于该算法对每个个体都要分别计算Pm和Pc,这样会影响程序的执行效率,也不利于硬件的实现。1.2文献[3]提出的自适应遗传算法(本文中简称IAGA)

    针对M.Srinivas所提出的算法的缺点,文献[3]提出一种改进的自适应遗传算法。其通过判断适应度集中程度的情况,对整个群体的Pm以及Pc进行自适应地变化调整,同时将群体适应度的集中程度用三个变量来衡量,即:适应度平均值、群体的最大适应度、最小适应度。文献[3]提出的算法在一定程度上可以提高算法的计算速度和收敛速度。但因为它们计算所得到的变异概率Pm及交叉概率Pc具有不良的稳定性。尤其在遇到峰值密度较高的多峰值函数时,更容易出现得到概率较大的结果的现象。同时,该算法在一定程度上也是缺乏对算法的整体协作能力。

    整体把控能力等方面都存在一定的不足之处。为此,本文在基于上述自适应遗传算法的基础上,提出一种新的自适应遗传算法,以改进其在上述所存在的不足。

    2.1与进化代数有关的杂交概率的改进介绍

    杂交算子的主要目的是用来产生新个体,同时也是为了让算法具备全局搜索的能力。因此,当我们以种群中的个体来观察时,如果杂交的概率偏大,群体中的优良模式就会被破坏;而如果杂交的概率偏小时,对于新个体的产生速度又会变得缓慢。在这里可以看出,与个体适应度有关的杂交概率的算法是具有一定的优势的。当我们以种群整体进化的整个过程来观察时,杂交概率应该会一个稳定但会慢慢变小,最终会向某一个稳定值靠近的过程。当我们以新个体的产生方面来看,在杂交操作上,群体中所有的个体应该具有相同的地位,也就是概率是一样的,这样就可以使得遗传算法在搜索空间拥有每个方向的匀称性。文献[3,4]的交叉概率算法都只注意了个体的作用,而忽视了整个种群的进化趋势情况和各个体的变异机会。

    在本文中,为了改善目前算法所存在的不足,设计了一种与适应度没有关系,只同进化代数有关的概率公式:

    本公式可以达到交叉概率随着进化过程而逐渐变化,同时能够对同一代的种群中的个体给予一样的交叉能力。这样也可以更好的实现全局搜索能力,同时,算法的计算速度也可以得到极大的提高。相对文献[4],该文的算法对劣质个体的处理显得相对薄弱,但可以通过下面的方法来进行弥补此缺陷。

    2.2自适应变异概率的改进介绍

    维持种群多样性是变异算子的主要用处,其主要是用来抑制早熟现象的出现以及产生新个体。但杂交算子则不同,其主要是在全局搜索中起作用。因此,就变异概率来说,应该是在同一种群中每个个体都是随着个体本身的好坏而发生变化。同时,变异概率的取值也是十分关键的。如果变异概率的取值偏小,就很容易导致抑制早熟现象以及产生新个体的能力减弱。而如果变异概率取值偏大,又容易导致遗传算法搜索过程成为随机过程的现象产生,从而使种群中较好的模式被破坏的可能性增加。所以,自适应变化的变异操作的设计十分重要。

    变异概率设计需要满足:(1)应该使变异概率慢慢减小,从而能够使得群体快速集中。(2)较小的变异概率给优秀的个体。(3)较大的变异概率给劣质的个体。针对上述条件,在本文中设计了如下的自适应变异概率公式:

    在公式中,Pm(t)指的是第t代种群中个体Xi的变异概率;Pm,min指的是预先设置的最小的变异概率;Pm,max指的是预先设置的最大的变异概率。

    以上式子的计算可以实现变异概率随进化过程自适应地变化。也能够针对所有待变异个体的适应值做相应的自适应变化。

    上面所选取的函数在遗传算法性能测试方面都是很经典的函数,它们都有全局最小值,不过也存在有多个极值点的函数。在本实验中,先对函数?1、?3和?4进行求负处理,目的是方便对这些函数求最大值。

    3.2仿真实验结果及分析

    在对上面三种遗传算法进行仿真实验时,对所用到的参数作说明:收敛时间的单位是秒;群体的规模是64;最大进化代数是180。其他参数见表2

    表2各算法中参数说明

    针对传统遗传算法的早熟和收敛速度慢等缺点,文中提出一种改进的自适应遗传算法,实验数据表明,该算法具有良好的搜索能力,具有更快的收敛速度和更可靠的稳定性,达到了预期的效果。

    [1] Holland J H.Adaptation in Natural Artificial Systems[M].MIT Press,1975.

    [2] Masanori Suglsaka,Xinjian Fan.Adaptive Genetic Algorithm with a Cooperative Mode[C].Proceedings of IEEE International Symposium on Industrial Electronics,2001.

    [3]王蕾,沈庭芝,招扬.一种改进的自适应遗传算法[J].系统工程与电子技术,2002:24(5):75-78.

    [4] Srinvas M,Patnaik L.M.Adaptive Probabilities of Crossover and Mutation in Genetic Algorithms[J].IEEE Trans on Systems,Man and Cyber? netics,1994:24(4).

    [5]欧阳森,王建华,耿英三,等.一种新的改进遗传算法[J].计算机工程与应用, 2003(11).

    [6] F Herrera,M Lozano.Adaptive Genetic Operators Based on Coevolution with Fuzzy Behaviors[J].IEEE Trans on Evolutionary Computation, 2001(5):149-165.

    [7]李茂军,童调生.用单亲遗传算法求解有序组合优化问题[J].系统工程与电子技术,1998(20):58-61.

    [8]王小平,曹立明.遗传算法:理论、应用与软件实现[M].西安:西安交通大学出版社,2002.

    [9]沙智明.基于改进自适应遗传算法的电力系统相量测量装置安装地点选择优化[J].电工技术学报,2004(8).

    展开全文
  • 详解遗传算法(含MATLAB代码)

    万次阅读 多人点赞 2019-05-29 11:30:47
    一、遗传算法概述 二、遗传算法的特点和应用 三、遗传算法的基本流程及实现技术 3.1 遗传算法的基本流程 3.2 遗传算法的实现技术 1.编码 2.适应度函数 3.选择算子 4.交叉算子 5.变异算子 6.运行参数 四、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,602
精华内容 2,240
关键字:

遗传算法收敛性