基于Matlab的GUI设计遗传算法优化软件
- 格式:pdf
- 大小:255.23 KB
- 文档页数:4
Matlab中的遗传算法与优化问题求解方法介绍引言随着科技的不断进步,优化问题在各个领域中的应用越来越广泛。
在实际问题中,我们往往需要找到一个最优解或者接近最优解的近似解。
为了解决这类问题,遗传算法作为一种自适应的搜索算法,被广泛应用于各个领域。
而Matlab作为一种功能强大的数学软件,提供了丰富的遗传算法工具箱,为优化问题的求解提供了便利。
本文将介绍Matlab中的遗传算法和一些常用的优化问题求解方法。
一、遗传算法概述遗传算法是源于达尔文的进化论思想的一种优化算法。
它是通过模拟自然选择、交叉、变异等生物遗传的过程来搜索最优解的方法。
遗传算法由编码、适应度评估、选择、交叉和变异等基本操作组成。
1. 编码:遗传算法使用二进制编码或者其他离散编码,将问题的解表示为一串二进制码或离散码。
2. 适应度评估:将编码得到的解转化为问题的实际解,并计算该解的适应度,即问题的目标函数值。
3. 选择:根据适应度对解进行选择,适应度越大的解,被选中的概率越大。
4. 交叉:从父代中选择两个个体,通过某种交叉方式生成子代。
5. 变异:对子代进行变异操作,以增加解的多样性。
二、Matlab中的遗传算法函数在Matlab的遗传算法工具箱中,包含了一系列的遗传算法函数,可以快速实现遗传算法优化问题的求解。
1. ga函数:这是Matlab中最基本的遗传算法函数,用于求解普通的优化问题。
它可以通过改变种群大小、交叉概率、变异概率等参数来调整算法的性能。
2. gamultiobj函数:这个函数是用于解决多目标优化问题的。
它使用了帕累托前沿的概念,可以得到一系列的非支配解,以帮助决策者选择最优解。
3. gaplotbestf函数:这个函数可以绘制遗传算法的收敛曲线,直观地展示算法求解的过程。
三、优化问题求解方法除了遗传算法外,Matlab还提供了其他一些常用的优化问题求解方法。
1. 粒子群算法(PSO):这是一种群体智能算法,通过模拟鸟群或鱼群的行为,寻找最优解。
第八章使用MATLAB遗传算法工具最新发布的MA TLAB 7.0 Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS)。
使用遗传算法与直接搜索工具箱,可以扩展MA TLAB及其优化工具箱在处理优化问题方面的能力,可以处理传统的优化技术难以解决的问题,包括那些难以定义或不便于数学建模的问题,可以解决目标函数较复杂的问题,比如目标函数不连续、或具有高度非线性、随机性以及目标函数没有导数的情况。
本章8.1节首先介绍这个遗传算法与直接搜索工具箱,其余各节分别介绍该工具箱中的遗传算法工具及其使用方法。
8.1 遗传算法与直接搜索工具箱概述本节介绍MA TLAB的GADS(遗传算法与直接搜索)工具箱的特点、图形用户界面及运行要求,解释如何编写待优化函数的M文件,且通过举例加以阐明。
8.1.1 工具箱的特点GADS工具箱是一系列函数的集合,它们扩展了优化工具箱和MA TLAB数值计算环境的性能。
遗传算法与直接搜索工具箱包含了要使用遗传算法和直接搜索算法来求解优化问题的一些例程。
这些算法使我们能够求解那些标准优化工具箱范围之外的各种优化问题。
所有工具箱函数都是MA TLAB的M文件,这些文件由实现特定优化算法的MA TLAB语句所写成。
使用语句type function_name就可以看到这些函数的MA TLAB代码。
我们也可以通过编写自己的M文件来实现来扩展遗传算法和直接搜索工具箱的性能,也可以将该工具箱与MA TLAB的其他工具箱或Simulink结合使用,来求解优化问题。
工具箱函数可以通过图形界面或MA TLAB命令行来访问,它们是用MA TLAB语言编写的,对用户开放,因此可以查看算法、修改源代码或生成用户函数。
遗传算法与直接搜索工具箱可以帮助我们求解那些不易用传统方法解决的问题,譬如表查找问题等。
基于Matlab遗传算法工具箱的优化计算实现一、概述随着科技的发展和社会的进步,优化问题在众多领域,如工程设计、经济管理、生物科学、交通运输等中扮演着越来越重要的角色。
优化计算的目标是在给定的约束条件下,寻找一组变量,使得某个或某些目标函数达到最优。
许多优化问题具有高度的复杂性,传统的数学方法往往难以有效求解。
寻求新的、高效的优化算法成为了科研人员的重要任务。
遗传算法(Genetic Algorithm, GA)是一种模拟自然选择和遗传学机制的搜索算法,通过模拟自然界的进化过程,寻找问题的最优解。
自20世纪70年代初由美国密歇根大学的John Holland教授提出以来,遗传算法因其全局搜索能力强、鲁棒性好、易于与其他算法结合等优点,被广泛应用于各种优化问题中。
1. 遗传算法简介遗传算法(Genetic Algorithm, GA)是一种模拟自然选择和遗传学机制的优化搜索算法。
该算法起源于对生物进化过程中遗传机制的研究,通过模拟自然选择和遗传过程中的交叉、突变等操作,在搜索空间内寻找最优解。
自20世纪70年代初由John Holland教授提出以来,遗传算法已在多个领域取得了广泛的应用,包括函数优化、机器学习、模式识别、自适应控制等。
遗传算法的基本思想是将问题的解表示为“染色体”,这些染色体在算法中通过选择、交叉和突变等操作进行演化。
选择操作模仿了自然选择中“适者生存”的原则,根据适应度函数对染色体进行筛选交叉操作则模拟了生物进化中的基因重组过程,通过交换染色体中的部分基因,生成新的个体突变操作则是对染色体中的基因进行小概率的随机改变,以维持种群的多样性。
在遗传算法中,种群初始化是算法的起点,通过随机生成一组初始解作为初始种群。
根据适应度函数对种群中的个体进行评估,选择出适应度较高的个体进行交叉和突变操作,生成新的种群。
这个过程不断迭代进行,直到满足终止条件(如达到最大迭代次数或找到满足精度要求的最优解)为止。
MATLAB实验遗传算法和优化设计遗传算法是一种模拟自然界生物进化过程的优化算法,它通过模拟选择、交叉和变异等操作来寻找问题的最优解。
在MATLAB中,我们可以使用遗传算法工具箱来实现遗传算法,并应用于优化设计问题。
优化设计是指在给定约束条件下,寻找问题的最优设计方案,以最大化或最小化设计目标。
遗传算法在优化设计中具有很好的应用潜力,因为它能够处理复杂的非线性问题,并且可以在多个设计变量之间进行优化。
下面我们以一个简单的优化设计问题为例,来演示如何使用MATLAB中的遗传算法工具箱进行分析。
假设我们要设计一个具有最小扬程损失的水泵系统,其中有三个设计变量:叶片数、叶片角度和进口直径。
我们的设计目标是最小化扬程损失,并且有以下约束条件:叶片数在3至6之间、叶片角度在10至60度之间、进口直径在0.1至0.3之间。
首先,我们需要定义一个适应度函数,用于评估每个设计方案的质量。
对于水泵系统,适应度函数可以定义为扬程损失的倒数,即适应度=1/扬程损失。
这样,我们的目标就是最大化适应度。
然后,我们需要设置遗传算法的参数,如种群大小、迭代次数和变量范围等。
在MATLAB中,遗传算法工具箱提供了一个函数gaoptimset,用于设置遗传算法的参数。
接下来,我们使用遗传算法工具箱中的函数ga来运行遗传算法,以求解最优设计方案。
在调用ga函数时,我们需要传入适应度函数、设计变量的约束条件和参数设置等。
在遗传算法的迭代过程中,每一代最优解都会被记录下来,并通过绘制适应度曲线来观察算法的收敛情况。
在MATLAB中,我们可以使用plot函数来绘制适应度曲线。
最后,我们可以输出找到的最优解,以及对应的适应度值和设计参数。
在MATLAB中,我们可以使用disp函数来输出结果。
通过以上步骤,我们就可以使用MATLAB中的遗传算法工具箱来实现优化设计,并找到最优解。
总结起来,MATLAB提供了强大的遗传算法工具箱,可以用于优化设计问题的求解。
遗传算法是一种模拟自然选择与遗传机制的优化算法,它模拟了生物进化的过程,通过优化个体的基因型来达到解决问题的目的。
在工程和科学领域,遗传算法被广泛应用于求解优化问题、寻找最优解、参数优化等领域。
而MATLAB作为一款强大的科学计算软件,拥有丰富的工具箱和编程接口,为实现遗传算法提供了便利。
下面将通过以下步骤介绍如何在MATLAB中实现遗传算法:1. 引入遗传算法工具箱需要在MATLAB环境中引入遗传算法工具箱。
在MATLAB命令窗口输入"ver",可以查看当前已安装的工具箱。
如果遗传算法工具箱未安装,可以使用MATLAB提供的工具箱管理界面进行安装。
2. 定义优化问题在实现遗传算法前,需要清楚地定义优化问题:包括问题的目标函数、约束条件等。
在MATLAB中,可以通过定义一个函数来表示目标函数,并且可以采用匿名函数的形式来灵活定义。
对于约束条件,也需要进行明确定义,以便在遗传算法中进行约束处理。
3. 设置遗传算法参数在实现遗传算法时,需要对遗传算法的参数进行设置,包括种群大小、交叉概率、变异概率、迭代次数等。
这些参数的设置将会直接影响遗传算法的收敛速度和优化效果。
在MATLAB中,可以通过设置遗传算法工具箱中的相关函数来完成参数的设置。
4. 编写遗传算法主程序编写遗传算法的主程序,主要包括对适应度函数的计算、选择、交叉、变异等操作。
在MATLAB中,可以利用遗传算法工具箱提供的相关函数来实现这些操作,简化了遗传算法的实现过程。
5. 运行遗传算法将编写好的遗传算法主程序在MATLAB环境中运行,并观察优化结果。
在运行过程中,可以对结果进行实时监测和分析,以便对遗传算法的参数进行调整和优化。
通过以上步骤,可以在MATLAB中实现遗传算法,并应用于实际的优化问题与工程应用中。
遗传算法的实现将大大提高问题的求解效率与精度,为工程领域带来更多的便利与可能性。
总结:遗传算法在MATLAB中的实现涉及到了引入遗传算法工具箱、定义优化问题、设置算法参数、编写主程序和运行算法等步骤。
Matlab中的遗传算法优化问题求解技术介绍引言遗传算法是一种基于进化论原理的优化算法,通过模拟生物进化过程中的遗传、交叉和变异等操作来搜索问题的最优解。
在实际应用中,遗传算法被广泛应用于求解各种类型的优化问题。
而Matlab作为一种强大的科学计算软件,提供了丰富的工具箱和函数,使得使用遗传算法求解优化问题变得更加简单和高效。
一. 遗传算法基本原理遗传算法的基本思想是通过模拟生物种群的进化过程来搜索解空间中的最优解。
其基本流程如下:1. 初始化种群:根据问题的特点,设定种群大小、染色体编码方式和初始解等。
2. 适应度评估:根据问题要求设计适应度函数,对种群中的个体进行评估,得到适应度值。
3. 选择操作:将适应度较高的个体选择出来,作为下一代种群的父代。
4. 交叉操作:从父代种群中选取两个个体,进行染色体的交叉操作,生成新的个体。
5. 变异操作:对新个体的染色体进行变异操作,引入随机性,增加种群的多样性。
6. 更新种群:将新个体加入到种群中,替换掉适应度较低的个体。
7. 终止条件:根据问题要求设定终止条件,例如达到最大迭代次数或达到满意的解。
二. Matlab中的遗传算法工具箱Matlab提供了优化工具箱,其中包含了遗传算法工具箱。
通过该工具箱,用户可以方便地使用遗传算法求解各种类型的优化问题。
1. 遗传算法函数Matlab提供了一系列的遗传算法函数,例如`ga`、`gamultiobj`等。
其中,`ga`函数用于求解单目标优化问题,而`gamultiobj`函数用于求解多目标优化问题。
2. 适应度函数适应度函数是遗传算法中的核心,决定了个体的适应度值。
在Matlab中,通过定义一个自定义函数来实现适应度函数。
用户需要根据问题的要求,根据输入参数计算个体的适应度值。
3. 变量约束在实际应用中,往往会有一些变量的取值范围需要满足。
Matlab中的遗传算法工具箱提供了变量约束的功能,可以限制个体染色体的取值范围,从而避免搜索的偏离。
【Matlab】自带遗传算法工具箱的介绍和使用注意事项简单的遗传算法可以使用Matlab自带的遗传算法工具箱,但是要从Matlab2010版本之后才会自带这个工具箱,且调用命令也有变化,分别是gatool和optimtool。
GUI界面如下图所示:GUI界面使用注意事项:这里直接按从上到下,从左到右的顺序对Matlab自带的遗传算法工具箱的GUI界面进行介绍和使用注意事项的一些说明(宅主使用的是Matlab2013a,调用命令是optimtool):1、problem setup and results设置与结果(1)Solver:求解程序,选择要用的求解程序(遗传算法,遗传算法多目标等)(2)problem:1)fitness function适应度函数,求最小,这里的使用度函数要自己编写,书写格式是“@函数名”。
2)number of variable变量数,必须是整数,即,使用这个GUI 界面的适应度函数的变量必须是[1*n]的向量,而不能是[m*n]的矩阵。
3)constraints约束4)linear inequalities线性不等式,A*x<=b形式,其中A是矩阵,b是向量5)linear equalities线性等式,A*x=b形式,其中A是矩阵,b 是向量6)bounds定义域,lower下限,upper上限,列向量形式,每一个位置对应一个变量7)nonlinear constraint function非线性约束,用户定义,非线性等式必须写成c=0形式,不等式必须写成c<=0形式8)integer variable indices整型变量标记约束,使用该项时Aeq 和beq必须为空,所有非线性约束函数必须返回一个空值,种群类型必须是实数编码举例,若是想让第一个、第三个、第五个变量保持是整数的话,则直接在此处填写[1 3 5]9)run solver and view results求解use random states from previous run使用前次的状态运行,完全重复前次运行的过程和结果2、population(1)population type编码类型1)double vector实数编码,采用双精度。
遗传算法优化相关MATLAB算法实现遗传算法1、案例背景遗传算法(Genetic Algorithm,GA)就是一种进化算法,其基本原理就是仿效生物界中的“物竞天择、适者生存”的演化法则。
遗传算法的做法就是把问题参数编码为染色体,再利用迭代的方式进行选择、交叉以及变异等运算来交换种群中染色体的信息,最终生成符合优化目标的染色体。
在遗传算法中,染色体对应的就是数据或数组,通常就是由一维的串结构数据来表示,串上各个位置对应基因的取值。
基因组成的串就就是染色体,或者叫基因型个体( Individuals) 。
一定数量的个体组成了群体(Population)。
群体中个体的数目称为群体大小(Population Size),也叫群体规模。
而各个个体对环境的适应程度叫做适应度( Fitness) 。
2、遗传算法中常用函数1)创建种群函数—crtbp2)适应度计算函数—ranking3)选择函数—select4)交叉算子函数—recombin5)变异算子函数—mut6)选择函数—reins7)实用函数—bs2rv8)实用函数—rep3、主程序:1、简单一元函数优化:clcclear allclose all%% 画出函数图figure(1);hold on;lb=1;ub=2; %函数自变量范围【1,2】ezplot('sin(10*pi*X)/X',[lb,ub]); %画出函数曲线xlabel('自变量/X')ylabel('函数值/Y')%% 定义遗传算法参数NIND=40; %个体数目MAXGEN=20; %最大遗传代数PRECI=20; %变量的二进制位数GGAP=0、95; %代沟px=0、7; %交叉概率pm=0、01; %变异概率trace=zeros(2,MAXGEN); %寻优结果的初始值FieldD=[PRECI;lb;ub;1;0;1;1]; %区域描述器Chrom=crtbp(NIND,PRECI); %初始种群%% 优化gen=0; %代计数器X=bs2rv(Chrom,FieldD); %计算初始种群的十进制转换ObjV=sin(10*pi*X)、/X; %计算目标函数值while gen<maxgen< p="">FitnV=ranking(ObjV); %分配适应度值SelCh=select('sus',Chrom,FitnV,GGAP); %选择SelCh=recombin('xovsp',SelCh,px); %重组SelCh=mut(SelCh,pm); %变异X=bs2rv(SelCh,FieldD); %子代个体的十进制转换ObjVSel=sin(10*pi*X)、/X; %计算子代的目标函数值[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新种群X=bs2rv(Chrom,FieldD);gen=gen+1; %代计数器增加%获取每代的最优解及其序号,Y为最优解,I为个体的序号[Y,I]=min(ObjV);trace(1,gen)=X(I); %记下每代的最优值trace(2,gen)=Y; %记下每代的最优值endplot(trace(1,:),trace(2,:),'bo'); %画出每代的最优点grid on;plot(X,ObjV,'b*'); %画出最后一代的种群hold off%% 画进化图figure(2);plot(1:MAXGEN,trace(2,:));grid onxlabel('遗传代数')ylabel('解的变化')title('进化过程')bestY=trace(2,end);bestX=trace(1,end);fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\n'])2、多元函数优化clcclear allclose all%% 画出函数图figure(1);lbx=-2;ubx=2; %函数自变量x范围【-2,2】lby=-2;uby=2; %函数自变量y范围【-2,2】ezmesh('y*sin(2*pi*x)+x*cos(2*pi*y)',[lbx,ubx,lby,uby],50); %画出函数曲线hold on;%% 定义遗传算法参数NIND=40; %个体数目MAXGEN=50; %最大遗传代数PRECI=20; %变量的二进制位数GGAP=0、95; %代沟px=0、7; %交叉概率pm=0、01; %变异概率trace=zeros(3,MAXGEN); %寻优结果的初始值FieldD=[PRECI PRECI;lbx lby;ubx uby;1 1;0 0;1 1;1 1]; %区域描述器Chrom=crtbp(NIND,PRECI*2); %初始种群%% 优化gen=0; %代计数器XY=bs2rv(Chrom,FieldD); %计算初始种群的十进制转换X=XY(:,1);Y=XY(:,2);ObjV=Y、*sin(2*pi*X)+X、*cos(2*pi*Y); %计算目标函数值while gen<maxgen< p="">FitnV=ranking(-ObjV); %分配适应度值SelCh=select('sus',Chrom,FitnV,GGAP); %选择SelCh=recombin('xovsp',SelCh,px); %重组SelCh=mut(SelCh,pm); %变异XY=bs2rv(SelCh,FieldD); %子代个体的十进制转换X=XY(:,1);Y=XY(:,2);ObjVSel=Y、*sin(2*pi*X)+X、*cos(2*pi*Y); %计算子代的目标函数值[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新种群XY=bs2rv(Chrom,FieldD);gen=gen+1; %代计数器增加%获取每代的最优解及其序号,Y为最优解,I为个体的序号[Y,I]=max(ObjV);trace(1:2,gen)=XY(I,:); %记下每代的最优值trace(3,gen)=Y; %记下每代的最优值endplot3(trace(1,:),trace(2,:),trace(3,:),'bo'); %画出每代的最优点grid on;plot3(XY(:,1),XY(:,2),ObjV,'bo'); %画出最后一代的种群hold off%% 画进化图figure(2);plot(1:MAXGEN,trace(3,:));grid onxlabel('遗传代数')ylabel('解的变化')title('进化过程')bestZ=trace(3,end);bestX=trace(1,end);bestY=trace(2,end);fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\nZ=',num2str(b estZ), '\n'])</maxgen<></maxgen<>。
文章编号:100622475(2004)1020015203收稿日期:2003211230作者简介:宋莹(19792),女,江西赣州人,南方冶金学院机电工程学院硕士研究生,研究方向:遗传算法、模糊控制、智能控制理论及应用;任金霞(19702),女,山西人,讲师,硕士,研究方向:模糊控制、鲁棒控制;李钟侠(19422),男,重庆人,教授,硕士生导师,研究方向:模糊控制、神经网络及进化计算等方面的智能控制理论及应用。
基于Matlab 的G UI 设计遗传算法优化软件宋 莹,任金霞,李钟侠(南方冶金学院机电工程学院,江西赣州 341000)摘要:简要阐述了遗传算法的基本原理和优化过程,并利用Matlab 6.5的图形用户界面(G UI )功能构造遗传算法优化软件包,为遗传算法解决数值优化问题提供了一个简单的G UI 平台。
数值仿真说明了该软件包的有效性和实用性。
关键词:遗传算法;Matlab ;G UI中图分类号:TP311.52 文献标识码:ADesign of G enetic Algorithm Optimized Softw are B ased on GUI of MatlabS ONG Y ing ,RE N Jin 2xia ,LI Zhong 2xia(Faculty of Mechanical and E lectronic Engineering ,S outhern Institute of Metallurgy ,G anzhou 341000,China )Abstract :This paper expounds the principle of genetic alg orithm (G A )and introduces a genetic alg orithm s oftware package which uses graphical user inter face (G UI )of Matlab 6.5.The package provides a sim ple inter face for s olving the numeric optimization.S imulation shows its effectiveness and K ey w ords :genetic alg orithm ;Matlab ;G UI0 引 言遗传算法(G enetic Alg orithm ,简称G A )是美国Michigan 大学H olland 教授于1962年首先提出来的,是一种基于自然选择和基因遗传学原理的优化搜索方法。
G A 吸收了自然生物系统“适者生存,优胜劣汰”的进化原理,从而使它能够提供一个在复杂空间中进行鲁棒搜索的方法,为解决许多传统的优化方法难以解决的优化问题提供了新的途径。
与传统的搜索和优化过程相比,G A 在计算机上模拟生物的进化过程和基因操作,因而不需要对象的特定知识,也不需要对象的搜索空间,是连续可微的,具有全局寻优的能力。
Matlab 作为一种拥有高速性能数值计算能力的通用科技计算机语言在其简单易用的操作环境中集成了数值分析、矩阵计算、符号计算、图视能力、文字处理、可视化建模仿真和实时控制能力,适合多学科、多部门的发展需求。
Matlab 开放、可扩展的体系结构允许用户开发自己的应用程序。
本文利用Matlab 6.5的图形用户界面(G UI )功能设计了遗传算法优化软件包,为遗传算法解决数值优化问题提供了一个简单的G UI 平台。
1 遗传算法简介遗传算法是具有“生成+检测”的迭代过程的搜索算法,是一种群体型操作,在遗传算法中,首先将问题空间中的决策变量通过一定编码方法表示成遗传空间的一个个体,它是一个基因型串数据结构,同时,将目标函数值转换成适应值,用来评价个体的优劣,并作为遗传操作的依据。
遗传操作主要包括三个算子:选择、交叉和变异。
选择用来实施适者生存的原则,以提高群体的平均适应值,即把当前群体中的个体按与适应值成比例的概率复制到新的群体中,构成交配池。
由于选择算子没有产生新个体,所以群体中最好个体的适应值不会因选择操作而有所改进。
交叉算子可以产生新的个体,它首先使交配池中的个体随机配对,然后将两两配对的个体按某种方式相互交换部分基因。
变异算子是对个体的某一个或某一些计算机与现代化 2004年第10期J IS UAN J I Y U XI ANDAIH UA总第110期基因值按某一较小概率进行改变。
从产生新个体的能力方面来说,交叉算子是产生新个体的主要方法,决定了遗传算法的全局搜索能力变异算子是产生新个体的辅助方法,决定了遗传算法的局部搜索能力。
交叉和变异相配合,共同完成对搜索空间的全局和局部搜索。
遗传算法的基本步骤如下:(1)在一定编码方式下,随机产生一个种群;(2)按照个体适应值的大小,从种群中选出适应值较大的一些个体构成交配池;(3)由交叉算子和变异算子对交配池中的个体进行遗传操作,并形成新一代的种群;(4)反复执行步骤2、3,直至满足收敛判据为止。
遗传算法常采用的收敛判据有:规定最大进化代数;最佳个体的适应值连续几次没有变化或变化很小等。
使用遗传算法需要设计的控制参数有:编码串长度、种群大小、交叉概率Pc 、变异概率Pm 。
编码串长度由优化问题所要求的求解精度决定。
种群大小表示种群中所含个体的数量,种群较小时,可提高遗传算法的运算速度,但却降低了群体的多样性,可能找不出最优解;种群较大时,又会增加计算量,使遗传算法的运行效率降低,一般取种群数目为20~100。
交叉概率Pc 控制着交叉操作的频率,由于交叉操作是遗传算法中产生新个体的主要方法,所以Pc 通常应取较大值;但若过大的话,又可能破坏群体的优良模式,一般取0.6~0.95。
变异概率Pm 也是影响新个体产生的一个因素,Pm 小,产生新个体少;Pm 太大,又会使遗传算法变成随机搜索,一般取Pm 为0.001~0.1。
2 Matlab 实现遗传算法2.1 编码及初始化binarystring variable funbinarystringvariablefun………binarystringvariablefun00110 (101011)binary representation real value fitness of functionof variableof variable图1 参数编码方式二进制编码理论分析方便,遗传操作与生物进化相似,能在相同的范围内表示最多的模式,充分体现G A 隐含的并行性,在此采用二进制编码。
首先用二进制串表示初始种群中的个体,每一个体由一系列二进制(0和1)组成,popsize 和stringlength 分别表示初始种群大小和二进制序列的长度,每一个体用如图1的方式来编码,整个初始种群的数据结构由大小为popsize ×(stringlength +numvar +1)的矩阵实现。
numvar 是变量的个数,第一列stringlength 包括了初始变量的二进制编码,(如果是多个变量,则是各个变量的二进制编码串)。
该串是随机产生的,只需满足在变量的定义域中,交叉和变异操作将会对此串进行操作,第(stringlength +1)至(stringlength +numvar )列为各变量的真值,第(stringlength +numvar +1)列为适应值函数fun ,所以其实现过程如下(initialize.m ):function[pop ]=initialize (popsize ,bounds ,evalFn ,evalOps ,gaOpts )%evalFn -适应值函数numvar =size (bounds ,1);bits =calcbits (bounds ,gaOpts (1));stringlength =sum (bits );k =stringlength +numvar +1;pop =round (rand (popsize ,k ));for i =1:num pop (i ,[stringlength +1:1:stringlength +numvar ])Νb2f (pop (i ,… 1:stringlength ),bounds ,bits ) x (i ,[1:1:numvar ])=pop (i ,[stringlength +1:1:stringlength … +numvar ]); pop (i ,k )=feval (evalFn ,x (i ,:),evalOps )end在上述代码中,首先随机产生二进制串,然后用变量的真值和适应值函数填充到(stringlength +1)、(stringlength +numvar )和(stringlength +numvar +1)中。
calcbits 、b2f 、f2b 、fun 都是以.m 文件形式编写的函数,用于计算编码长度、二进制值与实数值之间相互转换及计算适应值,在初始化和主程序中都需要运用这些函数,可以很方便地直接读出个体的真值和适应值。
2.2 选择选择操作是决定哪些个体可以进入下一代。
本文采用保存精英策略+轮盘赌(elite +roulette )方法来进行选择,即首先找出当前群体中适应值最高和最低的个体。
为保证当前最佳个体不被交叉、为保证当前最佳个体不被交叉、变异操作所破坏,允许其不参与交叉和变异而直接进入下一代。
然后将剩下的个体按轮盘算法选择。
这样的选择算子使遗传算法具有更好的收敛性。
在Matlab 中编写选择函数eliter 2oulette ()。
(详细代码略)。
2.3 交叉和变异交叉算子有一点交叉、两点交叉、一致交叉,其相应的在Matlab 中实现的交叉函数文件分别为one 2pointx over.m 、tw opointx over.m 、uniformx over.m 。
61计 算 机 与 现 代 化2004年第10期对于二进制的基因串而言,变异操作就是按照变异概率Pm随机选择变异点,在变异点处将其位取反即可,其m函数文件为mutation.m。
2.4 GUI制作根据上述遗传算法的基本流程及其操作算子编制成相应的m函数文件,得到遗传算法优化工具箱。
在此设计包含遗传算法优化功能的Windows标准图形用户界面,使优化问题操作简单方便。
与以前的Matlab版本相比,Matlab6.5重新设计制作了图形用户界面(G UI)的设计环境,引进了fig文件来保存G UI的布局,用M文件来进行G UI编程,使G UI设计变得简单、快捷。
2.4.1 GUI布局设计在Matlab的命令窗口下,输入guide命令或者利用文件菜单中的new选项下的G UI,即可以进入G UI 设计窗口。