遗传算法

article/2025/10/18 19:53:15

目录

一、算法原理

二、代码实现

三、结果分析

优化目标函数为Rastrigin(x)

目标函数为Schaffer(x)

目标函数为Griewank(x)

总结


一、算法原理

1、基本原理

       遗传算法是一种典型的启发式算法,属于非数值算法范畴。其目的是抽象和严谨地解释自然界的适应过程以及将自然生物系统的重要机理运用到人工系统的设计中。它是模拟达尔文的自然选择学说和自然界的生物进化过程的一种计算模型。它是采用简单的编码技术来表示各种复杂的结构,并通过对一组编码表示进行简单的遗传操作和优胜劣汰的自然选择来指导学习和确定搜索的方向。遗传算法的操作对象是一群二进制串(称为染色体、个体),即种群,每一个染色体都对应问题的一个解。从初始种群出发,采用基于适应度函数的选择策略在当前种群中选择个体,使用杂交和变异来产生下一代种群。如此模仿生命的进化进行不断演化,直到满足期望的终止条件。

算法设计的基本概念:
  • 种群:种群是指用遗传算法求解问题是,初始给定的多个解的集合。遗传算法的求解过程是从这个子集开始的。
  • 个体:个体是指种群中的单个元素,它通常由一个用于描述其基本遗传结构的数据结构来表示。
  • 染色体:染色体是指对个体进行编码后所得到的编码串。
  • 适应度函数:适应度函数是一种用来对种群中各个个体的环境适应性进行度量的函数。其函数值是遗传算法实现优胜劣汰的主要依据
  • 遗传操作:遗传操作是指作用于种群而产生新的种群的操作。标准的遗传操作有选择杂交变异

 

2、算法步骤

(1)对遗传算法的运行参数进行赋值。参数包括种群规模、变量个数、交叉概率、变异概
         率以及遗传运算的终止进化代数。
(2)建立区域描述器。根据轨道交通与常规公交运营协调模型的求解变量的约束条件,设置变量的取值范围。
(3)在(2)的变量取值范围内,随机产生初始群体,代入适应度函数计算其适应度值。
(4)执行比例选择算子进行选择操作。
(5)按交叉概率对交叉算子执行交叉操作。
(6)按变异概率执行离散变异操作。
(7)计算(6)得到局部最优解中每个个体的适应值,并执行最优个体保存策略。
(8)判断是否满足遗传运算的终止进化代数,不满足则返回(4),满足则输出运算结果。
 

3、流程图

 

 

 

 

 

 

 

二、代码实现

  • 主要函数  GA.m
clc;clear all;format long;%设定数据显示格式%初始化参数T=500;%仿真代数N=80;% 群体规模pm=0.05;pc=0.8;%交叉变异概率umax=30;umin=-30;%参数取值范围L=10;%单个参数字串长度,总编码长度Dim*L
Dim=5; %Dim维空间搜索bval=round(rand(N,Dim*L));%初始种群,round函数为四舍五入bestv=-inf;%最优适应度初值
funlabel=1;       %选择待优化的函数,1为Rastrigin,2为Schaffer,3为Griewank
Drawfunc(funlabel);%画出待优化的函数,只画出二维情况作为可视化输出%迭代开始for ii=1:T%解码,计算适应度for i=1:N  %对每一代的第i个粒子for k=1:Dimy(k)=0;for j=1:1:L  %从1到L,每次加以1y(k)=y(k)+bval(i,k*L-j+1)*2^(j-1);%把第i个粒子转化为十进制的值,例如y1是第一维end x(k)=(umax-umin)*y(k)/(2^L-1)+umin;%转化为实际的x1end%     obj(i)=100*(x1*x1-x2).^2+(1-x1).^2; %目标函数 obj(i)=fun(x,funlabel);xx(i,:)=x;endfunc=obj;%目标函数转换为适应度函数p=func./sum(func);q=cumsum(p);%累加[fmax,indmax]=max(func);%求当代最佳个体if fmax>=bestvbestv=fmax;%到目前为止最优适应度值bvalxx=bval(indmax,:);%到目前为止最佳位串optxx=xx(indmax,:);%到目前为止最优参数end   Bfit1(ii)=bestv; % 存储每代的最优适应度%%%%遗传操作开始%轮盘赌选择for i=1:(N-1)r=rand;tmp=find(r<=q);newbval(i,:)=bval(tmp(1),:);endnewbval(N,:)=bvalxx;%最优保留bval=newbval;%单点交叉for i=1:2:(N-1)cc=rand;if cc<pcpoint=ceil(rand*(2*L-1));%取得一个1到2L-1的整数ch=bval(i,:);bval(i,point+1:2*L)=bval(i+1,point+1:2*L);bval(i+1,point+1:2*L)=ch(1,point+1:2*L);endend   bval(N,:)=bvalxx;%最优保留%位点变异mm=rand(N,Dim*L)<pm;%N行mm(N,:)=zeros(1,Dim*L);%最后一行是精英不变异,强制赋0bval(mm)=1-bval(mm); end%输出
figure;plot(-Bfit1);% 绘制最优适应度进化曲线bestv   %输出最优适应度值optxx    %输出最优参数
  • fun.m,函数用于计算粒子适应度值
function y = fun(x,label)
%函数用于计算粒子适应度值
%x           input           输入粒子 
%y           output          粒子适应度值 
if label==1y=-Rastrigin(x);
elseif label==2y=-Schaffer(x);
elsey=-Griewank(x);
end
  • Rastrigin.m 
function y = Rastrigin(x)
% Rastrigin函数
% 输入x,给出相应的y值,在x = ( 0 , 0 ,…, 0 )处有全局极小点0.
% 编制人:
% 编制日期:
[row,col] = size(x);
if  row > 1 error( ' 输入的参数错误 ' );
end
y =sum(x.^2-10*cos(2*pi*x)+10);
%y =-y;
  • Schaffer.m
function y=Schaffer(x)[row,col]=size(x);
if row>1error('输入的参数错误');
end
y1=x(1,1);
y2=x(1,2);
temp=y1^2+y2^2;
y=0.5-(sin(sqrt(temp))^2-0.5)/(1+0.001*temp)^2;
y=-y;
  • Griewank.m
function y=Griewank(x)
%Griewan函数
%输入x,给出相应的y值,在x=(0,0,…,0)处有全局极小点0.
%编制人:
%编制日期:
[row,col]=size(x);
if row>1error('输入的参数错误');
end
y1=1/4000*sum(x.^2);
y2=1;
for h=1:coly2=y2*cos(x(h)/sqrt(h));
end
y=y1-y2+1;
%y=-y;
  •  Drawfunc.m
function Drawfunc(label)x=-5:0.05:5;%41列的向量
if label==1y = x;[X,Y] = meshgrid(x,y);[row,col] = size(X);for  l = 1 :colfor  h = 1 :rowz(h,l) = Rastrigin([X(h,l),Y(h,l)]);endendsurf(X,Y,z);shading interpxlabel('x1-axis'),ylabel('x2-axis'),zlabel('f-axis'); title('mesh'); 
endif label==2y = x;[X,Y] = meshgrid(x,y);[row,col] = size(X);for  l = 1 :colfor  h = 1 :rowz(h,l) = Schaffer([X(h,l),Y(h,l)]);endendsurf(X,Y,z);shading interp xlabel('x1-axis'),ylabel('x2-axis'),zlabel('f-axis'); title('mesh'); 
endif label==3y = x;[X,Y] = meshgrid(x,y);[row,col] = size(X);for  l = 1 :colfor  h = 1 :rowz(h,l) = Griewank([X(h,l),Y(h,l)]);endendsurf(X,Y,z);shading interp xlabel('x1-axis'),ylabel('x2-axis'),zlabel('f-axis'); title('mesh'); 
end

三、结果分析

优化目标函数为Rastrigin(x)

  • 空间维度Dim=2

种群数量N=10时:

种群数量N=40时:

种群数量N=80时:

种群数量N=140时:

  • 空间维度Dim=5

种群数量N=10时:

种群数量N=40时:

种群数量N=80时:

种群数量N=140时:

  • 空间维度Dim=10,

种群数量N=10时

种群数量N=40时,

种群数量N=80时,

种群数量N=140时,

 

目标函数为Schaffer(x)

  • 空间维度Dim=2

种群数量N=10,

种群数量N=40,

种群数量N=80,

种群数量N=140,

  • 空间维度Dim=5

种群数量N=10,

种群数量N=40,

种群数量N=80,

种群数量N=140,

 

  • 空间维度Dim=10

种群数量N=10,

种群数量N=40,

种群数量N=80,

种群数量N=140,

 

 

 

目标函数为Griewank(x)

  • 空间维度Dim=2

种群数量N=10,

种群数量N=40,

种群数量N=80,

种群数量N=140,

  • 空间维度Dim=5

种群数量N=10,

种群数量N=40,

种群数量N=80,

种群数量N=140,

  • 空间维度Dim=10

种群数量N=10,

 

 

种群数量N=40,

 

种群数量N=80,

种群数量N=140,

 

总结

  在上面的实验中,三个目标函数优化,每个函数当空间搜索维度Dim分别等于2,5,10时,分别分析种群数量N为10,40,80,140时最优适应度进化曲线的变化,发现以下:

  当空间维度一定时,若种群数量N设置较大,一次进化所覆盖的模式较多,可以保证群体的多样性,从而提高算法的搜索能力;若N设置较小,虽降低了计算量,但是同时降低了每次进化中群体包含更多较好染色体的能力。

 

 


http://chatgpt.dhexx.cn/article/HdHxW09j.shtml

相关文章

遗传算法(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;的方式。 下图为盒模型模型图 盒模型各部分说明…

Dreamweaver css定位

规定元素的定位类型。 说明&#xff1a;这个属性定义建立元素布局所用的定位机制。任何元素都可以定位&#xff0c;不过绝对定位或固定元素会生成一个块级框&#xff0c;而不论该元素本身是什么类型。相对定位元素会相对于它在正常流中的默认位置偏移。 通过设置top bottom l…

DWR(2):DWR配置详情

下面我们通过一个简单的入门项目来讲解DWR的配置。 首先新建一个maven项目&#xff0c;结构如下&#xff1a; 1 引入依赖 <dependency><groupId>org.directwebremoting</groupId><artifactId>dwr</artifactId><version>3.0.0-RELEASE<…

DreamWeaver下如何应用CSS样式

首先介绍一下CSS样式的属性&#xff1a; CSS样式属性被分为八大类&#xff1a;类型&#xff0c;背景&#xff0c;区块&#xff0c;边框&#xff0c;列表&#xff0c;定位&#xff0c;扩展。 类型主要定义文本的字体&#xff0c;大小&#xff0c;颜色&#xff0c;行高和修饰等…

DW的基本操作

1、首先先打开我们的DW软件。 2、进去之后点新建创建一个HTML的文档。 3、在桌面先创建一个文件夹&#xff0c;方便放文档之类的。 4、进去之后鼠标右键点右上角的Untitled- &#xff0c;再点另存为找到你之前创的那个文件夹&#xff0c;点进去&#xff0c;然后把他存放在这个文…

【CF #782 Div2】 A-D

A. Red Versus Blue 题目 分析 红方蓝方打比赛&#xff0c;确定红方比蓝方厉害&#xff0c;连胜的概率最低&#xff0c;排出比赛结果可能的序列。 因为R比B多&#xff0c;所以考虑在B之间插入R&#xff0c;b个B需要将R分为b1组&#xff0c;需要连胜数最小&#xff0c;就把R…

Dreamweaver css选择器

在 CSS 中&#xff0c;选择器是选取需设置样式的元素的模式。 下面我们介绍几种常用选择器: 元素选择器:通过选择html标签设置css样式 示例&#xff1a;直接选取p标签设置文本颜色 类选择器&#xff1a;通过设置class类设置css样式 注意&#xff1a;class命名不能以数字开头…

dw在html链接css代码怎么写,dw怎么链接css样式?

dw链接外部css样式的方式&#xff1a;在HTML文档中使用<link href"css文件的地址"rel"stylesheet"type"text/css"/>语句链接外部css样式。 Dreamweaver简称DW&#xff0c; 那么&#xff0c;我们想在外部写一个dw的外部样式&#xff0c;可是…

给DW2XLS源代码增加了同时导出多个dw的代码(合并多个dw)

给DW2XLS源代码增加了合并多个dw的代码。现在共享下载 客户定制的&#xff0c;如果后期我有修改的话&#xff0c;我会继续释放出来供下载的。 现在只是简单的合并&#xff0c;如果上下两个dw的栏位宽度不适合。需要自己修改改进。 换言之&#xff0c;适合上下两个dw栏位宽度…

PB导出数据excel格式dw2xls

PB导出数据excel格式dw2xls 使用DW2XLS控件 语法 uf_save_dw_as_excel ( dw, filename ) 参数 dw A reference to the datawindow object filename A string whose value is the name of the file you want to create. If filename is not on the operating systems sea…