遗传算法的基本原理和matlab实现

article/2025/10/18 11:05:33

201697日星期三

T.s.road 总结笔记


         遗传算法解决全局优化(即为最值点如图中C,D),而局部最优解决的是极值点问题(如图中A,B)

1.       遗传算法流程;

 

%遗传算法的伪代码描述:
%Procedure GA
%Begin
%       T=0;
%       Initialize  p(t) ; //p(t)表示 t代种群
%       Evaluate p(t);  //评估第t代种群
%       While not finished do
%       Begin
%            T=t+1;
%            Select p(t) from p(t-1); //从上代种群众选择较优秀的个体到下代子群
%            Reproduce pairs in p(t);
%            Evaluate p(t);
%       End
%End

生物

算法

选择、交叉、变异

者生存

适应度

 

故遗传算法主要过程及流程图如下

1)编码(适应度函数,产生初始种群)

2)遗传算子(选择、交叉、变异)

3)繁衍种群

2.       参数初始化,编码阶段

假设目标函数为 

a.      定义个体基因,基因是遗传密码,这里自变量就是基因所携带的信息,即用2进制来表示自变量的可能取值。基因序列的长度由自变量取值范围确定。

b.     定义适应度函数,目标函数是,适应度函数就定义为。

c.      由a,b可知,我们定义好了个体(基因)与适应度函数,现初始化种群,定义种群大小,及繁衍代数。

1M:种群规模

2T:遗传运算的终止进化代数

3Pc:交叉概率

4Pm:变异概率


%% @authors Keung Charteris & T.s.road CZQ
% @version 1.0 ($Revision$)
% @date 7/9/2016 $LastChangedDate$
% @addr. GUET, Gui Lin, 540001,  P.R.China
% @contact : cztsiang@gmail.com
% @date Copyright(c) 2016-2020,  All rights reserved.
% This is an open access code distributed under theCreative Commons Attribution License, which permits
% unrestricted use, distribution, and reproduction in anymedium, provided the original work is properly cited.functionTestGA0904()clc;  %清除所有
clear all;%清除变量
close all;%关闭图片
format long%  step 1 编写目标函数
FUN =@(x) (x)^2+81*sin(x);%  step 2 生成初始种群,大小为100
initPop={[0, 9],100,10};[BestPop,Trace]=fga(FUN,initPop{1,1}(1),initPop{1,1}(2),initPop{1,2},initPop{1,3});

 

3.       遗传算子

         遗传算法使用选择运算来实现对群体中的个体进行优胜劣汰操作:适应度高的个体被遗传到下一代群体中的概率大;适应度低的个体,被遗传到下一代群体中的概率小。选择操作的任务就是按某种方法从父代群体中选取一些个体,遗传到下一代群体。

a.         轮盘赌选择又称比例选择算子,它的基本思想是:各个个体被选中的概率与其适应度函数值大小成正比。设群体大小为n,个体i 的适应度为 Fi,则个体i 被选中遗传到下一代群体的概率为:

 

%% @authorsKeung Charteris & T.s.road CZQ
% @version1.0 ($Revision$)
% @date6/9/2016 $LastChangedDate$
% @addr.GUET, Gui Lin, 540001,  P.R.China
% @contact :cztsiang@gmail.com
% @dateCopyright(c)  2016-2020,  All rights reserved.
% This is anopen access code distributed under the Creative Commons Attribution License,which permits
%unrestricted use, distribution, and reproduction in any medium, provided theoriginal work is properly cited.%选择操作
%采用基于轮盘赌法的非线性排名选择
%各个体成员按适应值从大到小分配选择概率:
%P(i)=(q/1-(1-q)^n)*(1-q)^i,  其中 P(0)>P(1)>...>P(n), sum(P(i))=1function [selectpop]=NonlinearRankSelect(FUN,pop,bounds,bits)global m n
selectpop=zeros(m,n);
fit=zeros(m,1);
for i=1:mfit(i)=feval(FUN(1,:),(b2f(pop(i,:),bounds,bits)));%以函数值为适应值做排名依据
end
selectprob=fit/sum(fit);%计算各个体相对适应度(0,1)
q=max(selectprob);%选择最优的概率
x=zeros(m,2);
x(:,1)=[m:-1:1]';
[yx(:,2)]=sort(selectprob);
r=q/(1-(1-q)^m);%标准分布基值
newfit(x(:,2))=r*(1-q).^(x(:,1)-1);%生成选择概率
newfit=cumsum(newfit);%计算各选择概率之和
rNums=sort(rand(m,1));
fitIn=1;newIn=1;
while newIn<=mifrNums(newIn)<newfit(fitIn)selectpop(newIn,:)=pop(fitIn,:);newIn=newIn+1;elsefitIn=fitIn+1;end
end


b.        交叉运算,是指对两个相互配对的染色体依据交叉概率 Pc 按某种方式相互交换其部分基因,从而形成两个新的个体。交叉运算是遗传算法区别于其他进化算法的重要特征,它在遗传算法中起关键作用,是产生新个体的主要方法。 SGA中交叉算子采用单点交叉算子。

交叉前

交叉后

00000|01110000000010000

11100|00000111111000101

00000|00000111111000101

11100|01110000000010000

 

%% @authorsKeung Charteris & T.s.road CZQ
% @version1.0 ($Revision$)
% @date6/9/2016 $LastChangedDate$
% @addr.GUET, Gui Lin, 540001,  P.R.China
% @contact :cztsiang@gmail.com
% @dateCopyright(c)  2016-2020,  All rights reserved.
% This is anopen access code distributed under the Creative Commons Attribution License,which permits
%unrestricted use, distribution, and reproduction in any medium, provided theoriginal work is properly cited.%交叉操作function [NewPop]=CrossOver(OldPop,pCross,opts)
%OldPop为父代种群,pcross为交叉概率global m NewPop
r=rand(1,m);
y1=find(r<pCross);
y2=find(r>=pCross);
len=length(y1);
if len>2&&mod(len,2)==1%如果用来进行交叉的染色体的条数为奇数,将其调整为偶数y2(length(y2)+1)=y1(len);y1(len)=[];
endif length(y1)>=2for i=0:2:length(y1)-2ifopts==0[NewPop(y1(i+1),:),NewPop(y1(i+2),:)]=EqualCrossOver(OldPop(y1(i+1),:),OldPop(y1(i+2),:));else[NewPop(y1(i+1),:),NewPop(y1(i+2),:)]=MultiPointCross(OldPop(y1(i+1),:),OldPop(y1(i+2),:));endend    
end
NewPop(y2,:)=OldPop(y2,:);

 

c.         所谓变异运算,是指依据变异概率 Pm 将个体编码串中的某些基因值用其它基因值来替换,从而形成一个新的个体。遗传算法中的变异运算是产生新个体的辅助方法,它决定了遗传算法的局部搜索能力,同时保持种群的多样性。交叉运算和变异运算的相互配合,共同完成对搜索空间的全局搜索和局部搜索。 SGA中变异算子采用基本位变异算子。

变异前

变异后

000001110000000010000

000001110001000010000

 

%% @authorsKeung Charteris & T.s.road CZQ
% @version1.0 ($Revision$)
% @date6/9/2016 $LastChangedDate$
% @addr.GUET, Gui Lin, 540001,  P.R.China
% @contact :cztsiang@gmail.com
% @dateCopyright(c)  2016-2020,  All rights reserved.
% This is anopen access code distributed under the Creative Commons Attribution License,which permits
%unrestricted use, distribution, and reproduction in any medium, provided theoriginal work is properly cited.%变异操作
function [NewPop]=Mutation(OldPop,pMutation,VarNum)global m n NewPop
r=rand(1,m);
position=find(r<=pMutation);
len=length(position);
if len>=1fori=1:lenk=unidrnd(n,1,VarNum); %设置变异点数,一般设置1点forj=1:length(k)ifOldPop(position(i),k(j))==1OldPop(position(i),k(j))=0;elseOldPop(position(i),k(j))=1;endendend
end
NewPop=OldPop;


结果如下:

 


http://chatgpt.dhexx.cn/article/7244lSlW.shtml

相关文章

遗传算法(三)——基本遗传算法

目录 2.基本遗传算法 2.1基本遗传算法描述 2.1.1基本遗传算法的构成要素 2.1.2基本遗传算法描述 2.1.3基本遗传算法的形式化定义 2.2基本遗传算法的实现 2.2.1个体适应度评价 2.2.2比例选择算子 2.2.3单点交叉算子 2.2.4基本位变异算子 2.3基本遗传算法应用举例 2.3…

遗传算法原理以及matlab代码

目录 1&#xff0c;算法原理以及形象解释 2&#xff0c;参数编码 3&#xff0c;算法框架 4&#xff0c;代码 MATLAB 1&#xff0c;算法原理以及形象解释 遗传算法&#xff08;Genetic Algorithm, GA&#xff09;是仿生物智能优化算法&#xff0c;是模拟达尔文生物进化论中…

遗传算法的基本原理

1、简介 遗传算法是一种基于自然选择和群体遗传机理的搜索算法,它模拟了自然选择和自然遗传过程中的繁殖、杂交和突变现象.再利用遗传算法求解问题时,问题的每一个可能解都被编码成一个“染色体”,即个体,若干个个体构成了群体(所有可能解).在遗传算法开始时,总是随机的产生一些…

遗传算法原理介绍

前言 遗传算法( genetic algorithm,GA)是模拟自然界生物进化机制的一种算法,即遵循适者生存、优胜劣汰的法则&#xff0c;也就是寻优过程中有用的保留无用的则去除。在科学和生产实践中表现为在所有可能的解决方法中找出最符合该问题所要求的条件的解决方法,即找出一个最优解。…

遗传算法原理及其matlab程序实现

遗传算法原理及其matlab实现 一、遗传算法背景二、遗传算法原理及其数学模型2.1 编码方式2.1.1 二进制编码2.1.2 浮点数编码 2.2 种群初始化2.3 计算初始种群的适应度函数值2.4 对初始种群个体进行筛选—天泽&#xff08;以轮盘赌方式进行选择&#xff09;2.5 个体染色体交叉及…

遗传算法原理及其python实现

遗传算法原理 基本思想&#xff1a; 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;是一种进化算法&#xff0c;其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则&#xff0c;它最初由美国Michigan大学的J. Holland教授于1967年提出。遗传算法…

智能算法——遗传算法原理、应用汇总

一、遗传算法原理 遗传算法&#xff08;GA&#xff09;是一种基于生物界规律和自然遗传机制的并行搜索算法。1975 年&#xff0c;J. Holland 教授首次在书中提出“自然组合人工智能系统的适应性”。它是一种多参数&#xff0c;多组合同时优化方法&#xff0c;模拟自然进化过程中…

遗传算法原理

一、遗传算法简介 遗传算法是进化算法的一个分支. 它将达尔文的进化理论搬进了计算机. 科学定义如下&#xff1a; **遗传算法&#xff08;Genetic Algorithm, GA&#xff09;**起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优…

遗传算法

目录 一、算法原理 二、代码实现 三、结果分析 优化目标函数为Rastrigin(x) 目标函数为Schaffer(x) 目标函数为Griewank(x) 总结 一、算法原理 1、基本原理 遗传算法是一种典型的启发式算法&#xff0c;属于非数值算法范畴。其目的是抽象和严谨地解释自然界的适应过程以…

遗传算法(GA)详解

遗传算法&#xff08;GA&#xff09;详解 遗传算法主要作用是求解最优解&#xff0c;例如求函数极值&#xff0c;或是飞机巡航问题中的最短巡航路线的求解等&#xff0c;其作用与模拟退火算法的作用较为相似。本文将从GA算法的原理&#xff0c;结构与两个实践应用进行比较详细…

html中热区如何设置,Dreamweaver中如何设置热区?DW设置热区方法图解

Dreamweaver中如何设置热区?下面小编就为大家详细介绍一下&#xff0c;一起来看看吧&#xff01; 方法/步骤 向平时一样&#xff0c;这里我们在设置Dreamweaver热区的时候。同样这里是需要建立一个新的HTML界面的。 建立完毕&#xff0c;如下图中所示的一个新的文档(HTML) 按照…

用html编写或在dw中完成,Dreamweaver教程-在 Dreamweaver 中编写 HTML 代码

Dreamweaver教程-在 Dreamweaver 中编写 HTML 代码,代码,教程,标签,光标,文本 Dreamweaver教程-在 Dreamweaver 中编写 HTML 代码 易采站长站&#xff0c;站长之家为您整理了Dreamweaver教程-在 Dreamweaver 中编写 HTML 代码的相关内容。 1.启动 Dreamweaver CS5 2.点击左上角…

dw写HTML怎么设置背景颜色,dreamweaver cs6设置div背景颜色的具体操作教程

最近有不少刚刚接触dreamweaver cs6的伙伴们&#xff0c;并不是很熟悉其中是怎么设置div背景颜色?本期为你们分享的文章就讲述dreamweaver cs6设置div背景颜色的具体流程介绍。 dreamweaver cs6设置div背景颜色的具体操作教程 首先需要打开dreamweaver cs6软件&#xff0c;添加…

dw html转为css,DIV+CSS辅助软件Dreamweaver介绍

DIVCSS开发软件之Adobe Dreamweaver介绍 接下来我们(www.divcss5.com)给大家介绍是大家最熟悉不过的软件Adobe Dreamweaver&#xff0c;他被称为网页三剑客之一主要成员。 Dreamweaver我们常称他为DW,是开发DIVCSS比较好的工具。 Dreamweaver特点 1、开发css具体完善快捷简便提…

html中水平线颜色代码,网页设计水平线代码 怎么在dw中修改水平线的颜色

在Dreamweaver里有以下办法&#xff1a; 设计视图&#xff0c;点插入菜单-HTML-水平线&#xff0c;或者在代码视图&#xff0c;直接输入即可&#xff1b; 插入一个高度为1px的表格或div&#xff0c;一定要删除空格符 &#xff0c;div的话还要设置超出隐藏&#xff1b; 可以用CS…

html基础dw,HTML基础DW使用教程

1、打开文件拓展名&#xff1a; 方法一.打开计算机→组→文件夹和搜索选项→查看&#xff0c;把隐藏拓展名的勾取掉。 方法二.打开计算机→文件夹选项→查看&#xff0c;把隐藏拓展名的勾取掉。 2.桌面新建一个记事本&#xff0c;把.txt后缀改成HTML。 3.右键打开方式&#xff…

前端基础--DW的使用

前端基础–DW 开发工具与关键技术&#xff1a;DW/浏览器 &#xff1b; DW的使用。 作者&#xff1a;刘佳明 撰写时间&#xff1a;2019年1月 28 日 在学习前端的第一步首先便是学会正确的使用DW这一个编程app&#xff1b;下面便由我自己编写关于DW的使用过程 第一步&#xff…

dw怎么让html使用css样式,dw怎么用css样式?

dw怎么用css样式&#xff1f; 首先介绍一下CSS样式的属性&#xff1a; CSS样式属性被分为八大类&#xff1a;类型&#xff0c;背景&#xff0c;区块&#xff0c;方框&#xff0c;边框&#xff0c;列表&#xff0c;定位&#xff0c;扩展。 类型主要定义文本的字体&#xff0c;大…

Dwr 实例教程

原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本人声明。否则将追究法律责任。 作者&#xff1a; 永恒の_☆ 地址&#xff1a; http://blog.csdn.net/chenghui0317/article/details/9842873 一、Dwr的介绍 Dwr 简称 Direct…

Dreamweaver css盒模型

CSS盒模型概述&#xff1a;CSS盒模型(Box Model)规定了元素处理元素内容&#xff08;content&#xff09;、内边距&#xff08;padding&#xff09;、边框&#xff08;border&#xff09;、外边距&#xff08;margin&#xff09;的方式。 下图为盒模型模型图 盒模型各部分说明…