遗传算法及Matlab说明

合集下载

MATLAB实验遗传算法与优化设计(可编辑)

MATLAB实验遗传算法与优化设计(可编辑)

MATLAB实验遗传算法与优化设计遗传算法与优化设计一实验目的1 了解遗传算法的基本原理和基本操作选择交叉变异2 学习使用Matlab中的遗传算法工具箱 gatool 来解决优化设计问题二实验原理及遗传算法工具箱介绍1 一个优化设计例子图1所示是用于传输微波信号的微带线电极的横截面结构示意图上下两根黑条分别代表上电极和下电极一般下电极接地上电极接输入信号电极之间是介质如空气陶瓷等微带电极的结构参数如图所示Wt分别是上电极的宽度和厚度D是上下电极间距当微波信号在微带线中传输时由于趋肤效应微带线中的电流集中在电极的表面会产生较大的欧姆损耗根据微带传输线理论高频工作状态下假定信号频率1GHz电极的欧姆损耗可以写成简单起见不考虑电极厚度造成电极宽度的增加图1 微带线横截面结构以及场分布示意图1其中为金属的表面电阻率为电阻率可见电极的结构参数影响着电极损耗通过合理设计这些参数可以使电极的欧姆损耗做到最小这就是所谓的最优化问题或者称为规划设计问题此处设计变量有3个WDt它们组成决策向量[W D t] T待优化函数称为目标函数上述优化设计问题可以抽象为数学描述2其中是决策向量x1xn为n个设计变量这是一个单目标的数学规划问题在一组针对决策变量的约束条件下使目标函数最小化有时也可能是最大化此时在目标函数前添个负号即可满足约束条件的解X 称为可行解所有满足条件的X组成问题的可行解空间2 遗传算法基本原理和基本操作遗传算法 Genetic Algorithm GA 是一种非常实用高效鲁棒性强的优化技术广泛应用于工程技术的各个领域如函数优化机器学习图像处理生产调度等遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化算法按照达尔文的进化论生物在进化过程中物竞天择对自然环境适应度高的物种被保留下来适应度差的物种而被淘汰物种通过遗传将这些好的性状复制给下一代同时也通过种间的交配交叉和变异不断产生新的物种以适应环境的变化从总体水平上看生物在进化过程中子代总要比其父代优良因此生物的进化过程其实就是一个不断产生优良物种的过程这和优化设计问题具有惊人的相似性从而使得生物的遗传和进化能够被用于实际的优化设计问题按照生物学知识遗传信息基因Gene 的载体是染色体Chromosome 染色体中一定数量的基因按照一定的规律排列即编码遗传基因在染色体中的排列位置称为基因座Locus在同一个基因座上所有可能的基因就称为等位基因Allele生物所持有的基因以及基因的构成形式称为生物的基因型Genotype而该生物在环境中所呈现的相应性状称为该生物的表现型Phenotype在遗传过程中染色体上的基因能够直接复制给子代从而使得子代具有亲代的特征此外两条染色体之间也通过交叉 Crossover 而重组即两个染色体在某个相同的位置处被截断其前后两串基因交叉组合而形成两个新的染色体在基因复制时也会产生微小的变异Mutation从而也产生了新的染色体因此交叉和变异是产生新物种的主要途径由于自然选择在子代群体新产生的物种或染色体当中只有那些对环境适应度高的才能生存下来即适应度越高的被选择的概率也越大然后又是通过遗传和变异再自然选择一代一代不断进化因此生物遗传和进化的基本过程就是选择即复制交叉和变异遗传算法就是通过模拟生物进化的这几个基本过程而实现的①编码编码是设计遗传算法首要解决的问题在生物进化中选择交叉变异这些基本过程都是基于遗传信息的编码方式进行的即基于染色体的基因型而非表现型因此要模拟生物进化过程遗传算法必须首先对问题的可行解X决策向量进行某种编码以便借鉴生物学中染色体和基因等概念在遗传算法中将每一个决策向量X用一个染色体V来表示3其中每一个vi代表一个基因染色体的长度m不一定等于设计变量的数目n取决于染色体上基因的编码方式一般有两种编码方式二进制编码和浮点数编码如果是二进制编码每一个设计变量xi的真实值用一串二进制符号0和1按照一定的编码规则来表示每个二进制符号就代表一个基因因此染色体长度要远大于设计变量的数目这种由二进制编码构成的排列形式V就是染色体也称个体的基因型而基因型经过解码后所对应的决策向量X即可行解就是个体的表现型如果是浮点数编码每个设计变量用其取值范围内的一个浮点数表示构成染色体的一个基因vi因此个体的编码长度m也就等于决策变量的个数n由于这种编码方式使用的是决策变量的真实值所以也称真值编码方法无论哪种编码方式所有可能的染色体个体V构成问题的搜索空间种群遗传算法对最优解的搜索就是在搜索空间中搜索适应度最高的染色体后面叙述适应度的计算因此通过编码将一个问题的可行解从其解空间转换到了遗传算法能够处理的搜索空间经过个体的编码后就可以进行遗传算法的基本操作选择交叉和变异②选择复制操作选择也就是复制是在群体中选择适应度高的个体产生新群体的过程生物的进化是以集团为主体的与此相应遗传算法的运算对象是有M个个体或染色体组成的集合称为种群M也称为种群规模遗传算法在模拟自然选择时以个体的适应度Fitness高低为选择依据即适应度高的个体被遗传到下一代种群的概率较高而适应度低的个体遗传到下一代的概率则相对较低个体适应度由适应度函数计算适应度函数总是和个体表现型 ie X 的目标函数值f X 关联一般是由目标函数经过一定的变换得到一种最简单的方法就是直接使用目标函数f X 作为适应度函数4选定了适应度函数之后个体适应度也随之确定则在选择操作时个体被选中的概率5其中Fi为个体的适应度这种选择方式称为比例选择也称轮盘赌选择除此之外还有多种选择方法如随机竞争选择均匀选择无回放随机选择等不一一介绍③交叉操作所谓交叉就是以一定的概率交叉概率从群体中选择两个个体染色体按照某种方式交换其部分基因从而形成两个新的个体在遗传算法中它是产生新个体同时也是获得新的优良个体的主要方法它决定了遗传算法的全局搜索能力对于不同的编码方式交叉操作的具体方法也不相同对于浮点数编码一般使用算术交叉对于二进制编码有单点交叉和多点交叉等方式不论何种方式在交叉操作时首先应定义交叉概率Pc这个概率表明种群中参与交叉的个体数目的期望值是M 是种群规模通常交叉概率应取较大的值以便产生较多的新个体增加全局搜索力度但是Pc过大时优良个体被破坏的可能性也越大如果Pc 太小则搜索进程变慢影响算法的运行效率一般建议的取值范围是04–099④变异操作遗传算法中的变异操作就是将染色体上某些基因座上的基因以一定的变异概率Pm用其他的等位基因替代从而形成新的个体对于浮点数编码变异操作就是将变异点处的基因用该基因取值范围内的一个随机数替换对于二进制编码则是将变异点处的基因由1变成00变成1变异操作也有多种方法如均匀变异非均匀变异高斯变异等变异操作的概率Pm要比交叉操作的概率Pc小得多变异只是产生新个体的辅助手段但它是遗传算法必不可少的一个环节因为变异操作决定了算法的局部搜索能力它弥补了交叉操作无法对搜索空间的细节进行局部搜索的不足因此交叉和变异操作相互配合共同完成对搜索空间的全局和局部搜索以上简要介绍了遗传算法的基本原理和操作归纳起来基本遗传算法一般可以表示为一个8元组6式中C 个体的编码方法E 个体适应度评价函数P0 初始种群M 种群规模选择操作交叉操作变异操作是进化终止代数进化终止条件其中有4个运行参数需要预先设定M T PcPm 种群规模M一般取为20100 终止代数T一般取100500交叉概率Pc一般取04099 变异概率Pm一般取0000101最后给出遗传算法的基本步骤①选择二进制编码或浮点数编码把问题的解表示成染色体②随机产生一群染色体个体也就是初始种群③计算每一个个体的适应度值按适者生存的原则从中选择出适应度较大的染色体进行复制再通过交叉变异过程产生更适应环境的新一代染色体群即子代④重复第3步经过这样的一代一代地进化最后就会收敛到最适应环境适应度最大的一个染色体即个体上它就是问题的最优解图2给出了基本遗传算法设计流程图其中t代表当前代数T是进化终止代数图2 基本遗传算法设计流程图3 Matlab遗传算法工具箱 gatoolMatlab的遗传算法工具箱有一个精心设计的图形用户界面可以帮助用户直观方便快速地利用遗传算法求解最优化问题在Matlab命令窗口输入命令gatool可以打开遗传算法工具箱的图形用户界面如图3所示GA工具箱的参数设置步骤如下图3 遗传算法工具1 首先使用遗传算法工具箱必须输入下列信息Fitness function 适应度函数这里指的是待优化的函数也即目标函数该工具箱总是试图寻找目标函数的最小值输入适应度函数的格式为fitnessfun其中符号产生函数fitnessfun的句柄fitnessfun代表用户编写的计算适应度函数目标函数的M文件名该M文件的编写方法如下假定我们要计算Rastrigin函数的最小值7M函数文件确定这个函数必须接受一个长度为2的行向量X也即决策向量向量的长度等于变量数目行向量X的每个元素分别和变量x1和x2对应另外M文件要返回一个标量Z其值等于该函数的值下面是计算Rastrigin函数的M文件代码function Z Ras_fun XZ 20X 1 2X 2 2-10 cos 2piX 1 cos 2piX 2M文件编写保存后再在gatool工具箱界面Fitness function栏输入 Ras_funNumber of variable 变量个数目标函数中的变量数目也即适应度函数输入向量的长度在上例中它的值是22 其次设置遗传算法参数即Options设置以下只介绍部分运行参数的设置其他未提及的参数采用默认设置即可①种群参数 PopulationPopulation size 种群规模每一代中的个体数目一般是20-100之间种群规模大算法搜索更彻底可以增加算法搜索全局最优而非局部最优的概率但是耗时也更长Initial range 初始范围其值是两行的矩阵代表初始种群中个体的搜索范围实际上是决策向量X中每个变量xi的初始搜索范围矩阵的列数等于变量个数Number of variable第一行是每个变量的下限第二行是每个变量的上限如果只输入2 1的矩阵则每个变量的初始搜索范围都一样注意初始范围仅限定初始种群中个体或决策向量的范围后续各代中的个体可以不在初始范围之内初始范围不能设置太小否则造成个体之间的差异过小即种群的多样性降低不利于算法搜索到最优解②复制参数 ReproductionCrossover fraction 交叉概率一般取04099默认08③算法终止准则 Stopping Criteria提供了5种算法终止条件Generations最大的进化代数一般取100500默认是100当遗传算法运行到该参数指定的世代计算终止Time limit指明算法终止执行前的最大时间单位是秒缺省是Inf 无穷大Fitness limit 适应度限当最优适应度值小于或等于此参数值时计算终止缺省是-InfStall generation 停滞代数如果每一代的最佳适应度值在该参数指定的代数没有改善则终止计算缺省是50代Stall time 停滞时间如果每一代的最佳适应度值在该参数指定的时间间隔内没有改善则终止计算缺省是20秒3 设置绘图参数即Plots设置绘图参数Plots工作时可以从遗传算法得到图形数据当选择各种绘图参数并执行遗传算法时一个图形窗口在分离轴上显示这些图形下面介绍其中2个参数Best fitness 选择该绘图参数时将绘制每一代的最佳适应度值和进化世代数之间的关系图如图4的上图所示图中蓝色点代表每一代适应度函数的平均值黑色点代表每一代的最佳值Distance 选择此参数时绘制每一代中个体间的平均距离它反映个体之间的差异程度所以可用来衡量种群的多样性图4的下图显示的即是每一代个体间的平均距离图44 执行算法参数设置好了之后点击工具箱界面上的按钮Star 执行求解器在算法运行的同时Current generation当前代数文本框中显示当前的进化代数通过单击Pause按钮可以使计算暂停之后再点击Resume可以恢复计算当计算完成时Status and results窗格中出现如图5所示的情形图5其中包含下列信息算法终止时适应度函数的最终值即目标函数的最优值Fitness function value 0003909079476983379算法终止原因Optimization terminated imum number of generations exceeded 超出最大进化世代数最终点即目标函数的最优解[x1 x2] [-0004 -000193]两个变量的例子三实验内容1 Rastrigin函数的最小值问题函数表达式如 7 式函数图像如下图6所示它有多个局部极小值但是只有一个全局最小值Rastrigin函数的全局最小值的精确解是0出现在[x1 x2] [0 0]处图6 Rastrigin函数图像使用遗传算法工具箱近似求解Rastrigin函数的最小值首先编写计算适应度函数的M文件然后设置运行参数绘图参数Plots勾选Best fitness和Distance两项其它参数可以使用默认值执行求解器Run solver计算Rastrigin函数的最优值观察种群多样性对优化结果的影响决定遗传算法的一个重要性能是种群的多样性个体之间的距离越大则多样性越高反之则多样性越低多样性过高或过低遗传算法都可能运行不好通过实验调整Population 种群的Initial range 初始范围参数可得到种群适当的多样性取Initial range参数值[1 11]观察Rastrigin函数最小值的计算结果取Initial range参数值[1 100]观察Rastrigin函数最小值的计算结果取Initial range参数值[1 2]观察Rastrigin函数最小值的计算结果2 微带电极欧姆损耗的优化微带电极的欧姆损耗公式可由 1 式表示令设计变量[WDt] [x1 x2 x3] X变量的约束条件如下8根据 1 式和 8 式使用遗产算法工具箱优化设计电极的结构参数W 宽度 D 间距 t 厚度使得电极的欧姆损耗最小 1 式中用到的常数提示对约束条件 8 式的处理可以在编写计算适应度函数的M文件中实现方法是在M文件中引入对每个输入变量值范围的判断语句如果任一变量范围超出 8 式的限制则给该个体的适应度施加一个惩罚使得该个体被遗传到下一代的概率减小甚至为0一般可用下式对个体适应度进行调整9其中F x 是原适应度F x 是调整后的适应度P x 是罚函数为简单计本问题中我们可以给个体的适应度 com件的返回值Z 加上一个很大的数即可如正无穷Inf四思考题1 在遗传算法当中个体的变异对结果有何影响如果没有变异结果又将如何试以Rastrigin函数最小值的计算为例说明取变异概率为0即交叉概率Crossover fraction 102 遗传算法工具箱针对的是最小化函数值问题如果要利用该工具箱计算函数的最大值该如何实现。

matlab遗传算法求解配送中心选址问题案例讲解

matlab遗传算法求解配送中心选址问题案例讲解

matlab遗传算法求解配送中心选址问题案例讲解遗传算法是一种基于生物进化原理的优化算法,可以用于求解各种复杂的问题,包括配送中心选址问题。

下面是一个使用MATLAB实现遗传算法求解配送中心选址问题的案例讲解。

一、问题描述假设有一组客户和一组候选的配送中心,每个客户都有一个需求量,配送中心有一个最大容量。

目标是选择一些配送中心,使得所有客户的需求量能够被满足,同时总成本最低。

二、算法实现1. 初始化种群在MATLAB中,可以使用rand函数随机生成一组候选配送中心,并使用二进制编码来表示每个配送中心是否被选中。

例如,如果候选配送中心有3个,则可以生成一个长度为3的二进制串来表示每个配送中心的状态,其中1表示被选中,0表示未被选中。

2. 计算适应度值适应度值是评估每个解的质量的指标,可以使用总成本来表示。

总成本包括建设成本、运输成本和库存成本等。

在MATLAB中,可以使用自定义函数来计算适应度值。

3. 选择操作选择操作是根据适应度值的大小选择解的过程。

可以使用轮盘赌选择、锦标赛选择等算法。

在MATLAB中,可以使用rand函数随机选择一些解,并保留适应度值较大的解。

4. 交叉操作交叉操作是将两个解的部分基因进行交换的过程。

可以使用单点交叉、多点交叉等算法。

在MATLAB中,可以使用自定义函数来实现交叉操作。

5. 变异操作变异操作是对解的基因进行随机修改的过程。

可以使用位反转、位变异等算法。

在MATLAB中,可以使用rand函数随机修改解的基因。

6. 终止条件终止条件是判断算法是否结束的条件。

可以使用迭代次数、最优解的变化范围等指标来判断终止条件。

在MATLAB中,可以使用自定义函数来实现终止条件的判断。

三、结果分析运行遗传算法后,可以得到一组最优解。

可以根据最优解的适应度值和总成本进行分析,并确定最终的配送中心选址方案。

同时,也可以使用其他评价指标来评估算法的性能,如收敛速度、鲁棒性等。

遗传算法的原理及MATLAB程序实现.

遗传算法的原理及MATLAB程序实现.

1 遗传算法的原理1.1 遗传算法的基本思想遗传算法(genetic algorithms,GA)是一种基于自然选择和基因遗传学原理,借鉴了生物进化优胜劣汰的自然选择机理和生物界繁衍进化的基因重组、突变的遗传机制的全局自适应概率搜索算法。

遗传算法是从一组随机产生的初始解(种群)开始,这个种群由经过基因编码的一定数量的个体组成,每个个体实际上是染色体带有特征的实体。

染色体作为遗传物质的主要载体,其内部表现(即基因型)是某种基因组合,它决定了个体的外部表现。

因此,从一开始就需要实现从表现型到基因型的映射,即编码工作。

初始种群产生后,按照优胜劣汰的原理,逐代演化产生出越来越好的近似解。

在每一代,根据问题域中个体的适应度大小选择个体,并借助于自然遗传学的遗传算子进行组合交叉和变异,产生出代表新的解集的种群。

这个过程将导致种群像自然进化一样,后代种群比前代更加适应环境,末代种群中的最优个体经过解码,可以作为问题近似最优解。

计算开始时,将实际问题的变量进行编码形成染色体,随机产生一定数目的个体,即种群,并计算每个个体的适应度值,然后通过终止条件判断该初始解是否是最优解,若是则停止计算输出结果,若不是则通过遗传算子操作产生新的一代种群,回到计算群体中每个个体的适应度值的部分,然后转到终止条件判断。

这一过程循环执行,直到满足优化准则,最终产生问题的最优解。

图1-1给出了遗传算法的基本过程。

1.2 遗传算法的特点1.2.1 遗传算法的优点遗传算法具有十分强的鲁棒性,比起传统优化方法,遗传算法有如下优点:1. 遗传算法以控制变量的编码作为运算对象。

传统的优化算法往往直接利用控制变量的实际值的本身来进行优化运算,但遗传算法不是直接以控制变量的值,而是以控制变量的特定形式的编码为运算对象。

这种对控制变量的编码处理方式,可以模仿自然界中生物的遗传和进化等机理,也使得我们可以方便地处理各种变量和应用遗传操作算子。

2. 遗传算法具有内在的本质并行性。

遗传算符MATLAB程序-入门基础必看

遗传算符MATLAB程序-入门基础必看

% 下面举例说明遗传算法%% 求下列函数的最大值%% f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] %% 将x 的值用一个10 位的二值形式表示为二值问题,一个10 位的二值数提供的分辨率是每为(10-0)/(2^10-1)≈0.01 。

%% 将变量域[0,10] 离散化为二值域[0,1023], x=0+10*b/1023, 其中b 是[0,1023] 中的一个二值数。

% M文件函数定义语句:function 输出变量=函数名称(输入变量1,输入变量2,…)语句; %输入变量与输出变量的关系end; %非必须的例如:function c=myadd(a,b)c=a+b;调用方式:c=myadd(1,2) % 输出结果为c=a+b=1+2=3% 2.1 初始化(编码)% initpop.m 函数的功能是实现群体的初始化,popsize 表示群体的大小,chromlength表示染色体的长度(二值数的长度),% 长度大小取决于变量的二进制编码的长度(在本例中取10位)。

%遗传算法子程序%Name: initpop.m (实现群体的初始化)%初始化function pop=initpop(popsize,chromlength) %定义M文件函数(实现种群初始化的函数)pop=round(rand(popsize,chromlength)); % rand()随机产生函数。

rand 随机产生每个单元为{0,1} 行数为popsize,列数为chromlength 的矩阵,此式子为输出变量pop与输入变量popsize和chromlength的关系式。

% round 对矩阵的每个单元进行圆整,round函数的作用是按指定的位数对数值进行四舍五入。

这样产生的初始种群。

% r% 2.2 计算目标函数值% 2.2.1 将二进制数转化为十进制数(1)%遗传算法子程序%Name: decodebinary.m%产生[2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制function pop2=decodebinary(pop) %定义M文件函数(将二进制数转化为十进制数的函数)[px,py]=size(pop); %求pop的行数和列数。

遗传算法平顶波束matlab

遗传算法平顶波束matlab

遗传算法平顶波束matlab
遗传算法是一种启发式搜索算法,常用于解决优化问题。

平顶波束是一种用于信号处理和通信系统中的波束形成技术,用于调整天线阵列的指向以最大化或最小化特定方向的信号强度。

在Matlab 中,可以使用遗传算法来优化平顶波束的设计。

首先,需要定义问题的优化目标,例如最大化接收信号强度或最小化干扰信号。

然后,需要将问题转化为遗传算法的优化框架。

这涉及定义变量的编码方式、适应度函数的设计以及遗传算法的参数设置。

在平顶波束的优化中,变量可以是天线阵列的几何参数(如天线间距、天线数目等)或者波束权重。

适应度函数可以根据平顶波束的性能指标进行定义,例如主瓣增益、副瓣水平和垂直方向的抑制比等。

遗传算法的参数设置包括种群大小、交叉概率、变异概率等。

在Matlab中,可以使用遗传算法工具箱来实现平顶波束优化。

首先,需要定义一个适应度函数,根据天线阵列的参数和波束权重计算平顶波束的性能指标。

然后,使用遗传算法工具箱中的遗传算
法函数,将适应度函数作为输入,进行优化求解。

最后,根据优化结果调整天线阵列的参数或者波束权重,以达到设计要求。

总之,利用遗传算法优化平顶波束需要深入理解遗传算法的原理和平顶波束的设计原理,合理设计适应度函数和选择合适的遗传算法参数,才能得到有效的优化结果。

希望这些信息能够帮助你理解在Matlab中如何利用遗传算法来优化平顶波束。

遗传算法多目标优化matlab源代码

遗传算法多目标优化matlab源代码

遗传算法多目标优化matlab源代码遗传算法(Genetic Algorithm,GA)是一种基于自然选择和遗传学原理的优化算法。

它通过模拟生物进化过程,利用交叉、变异等操作来搜索问题的最优解。

在多目标优化问题中,GA也可以被应用。

本文将介绍如何使用Matlab实现遗传算法多目标优化,并提供源代码。

一、多目标优化1.1 多目标优化概述在实际问题中,往往存在多个冲突的目标函数需要同时优化。

这就是多目标优化(Multi-Objective Optimization, MOO)问题。

MOO不同于单一目标优化(Single Objective Optimization, SOO),因为在MOO中不存在一个全局最优解,而是存在一系列的Pareto最优解。

Pareto最优解指的是,在不降低任何一个目标函数的情况下,无法找到更好的解决方案。

因此,在MOO中我们需要寻找Pareto前沿(Pareto Front),即所有Pareto最优解组成的集合。

1.2 MOO方法常见的MOO方法有以下几种:(1)加权和法:将每个目标函数乘以一个权重系数,并将其加和作为综合评价指标。

(2)约束法:通过添加约束条件来限制可行域,并在可行域内寻找最优解。

(3)多目标遗传算法:通过模拟生物进化过程,利用交叉、变异等操作来搜索问题的最优解。

1.3 MOO评价指标在MOO中,我们需要使用一些指标来评价算法的性能。

以下是常见的MOO评价指标:(1)Pareto前沿覆盖率:Pareto前沿中被算法找到的解占总解数的比例。

(2)Pareto前沿距离:所有被算法找到的解与真实Pareto前沿之间的平均距离。

(3)收敛性:算法是否能够快速收敛到Pareto前沿。

二、遗传算法2.1 遗传算法概述遗传算法(Genetic Algorithm, GA)是一种基于自然选择和遗传学原理的优化算法。

它通过模拟生物进化过程,利用交叉、变异等操作来搜索问题的最优解。

遗传算法在matlab中的实现

遗传算法在matlab中的实现

遗传算法是一种模拟自然选择与遗传机制的优化算法,它模拟了生物进化的过程,通过优化个体的基因型来达到解决问题的目的。

在工程和科学领域,遗传算法被广泛应用于求解优化问题、寻找最优解、参数优化等领域。

而MATLAB作为一款强大的科学计算软件,拥有丰富的工具箱和编程接口,为实现遗传算法提供了便利。

下面将通过以下步骤介绍如何在MATLAB中实现遗传算法:1. 引入遗传算法工具箱需要在MATLAB环境中引入遗传算法工具箱。

在MATLAB命令窗口输入"ver",可以查看当前已安装的工具箱。

如果遗传算法工具箱未安装,可以使用MATLAB提供的工具箱管理界面进行安装。

2. 定义优化问题在实现遗传算法前,需要清楚地定义优化问题:包括问题的目标函数、约束条件等。

在MATLAB中,可以通过定义一个函数来表示目标函数,并且可以采用匿名函数的形式来灵活定义。

对于约束条件,也需要进行明确定义,以便在遗传算法中进行约束处理。

3. 设置遗传算法参数在实现遗传算法时,需要对遗传算法的参数进行设置,包括种群大小、交叉概率、变异概率、迭代次数等。

这些参数的设置将会直接影响遗传算法的收敛速度和优化效果。

在MATLAB中,可以通过设置遗传算法工具箱中的相关函数来完成参数的设置。

4. 编写遗传算法主程序编写遗传算法的主程序,主要包括对适应度函数的计算、选择、交叉、变异等操作。

在MATLAB中,可以利用遗传算法工具箱提供的相关函数来实现这些操作,简化了遗传算法的实现过程。

5. 运行遗传算法将编写好的遗传算法主程序在MATLAB环境中运行,并观察优化结果。

在运行过程中,可以对结果进行实时监测和分析,以便对遗传算法的参数进行调整和优化。

通过以上步骤,可以在MATLAB中实现遗传算法,并应用于实际的优化问题与工程应用中。

遗传算法的实现将大大提高问题的求解效率与精度,为工程领域带来更多的便利与可能性。

总结:遗传算法在MATLAB中的实现涉及到了引入遗传算法工具箱、定义优化问题、设置算法参数、编写主程序和运行算法等步骤。

遗传算法matlab代码

遗传算法matlab代码

function youhuafunD=code;N=50; % Tunablemaxgen=50; % Tunablecrossrate=0.5; %Tunablemuterate=0.08; %Tunablegeneration=1;num = length(D);fatherrand=randint(num,N,3);score = zeros(maxgen,N);while generation<=maxgenind=randperm(N-2)+2; % 随机配对交叉A=fatherrand(:,ind(1:(N-2)/2));B=fatherrand(:,ind((N-2)/2+1:end));% 多点交叉rnd=rand(num,(N-2)/2);ind=rnd tmp=A(ind);A(ind)=B(ind);B(ind)=tmp;% % 两点交叉% for kk=1:(N-2)/2% rndtmp=randint(1,1,num)+1;% tmp=A(1:rndtmp,kk);% A(1:rndtmp,kk)=B(1:rndtmp,kk);% B(1:rndtmp,kk)=tmp;% endfatherrand=[fatherrand(:,1:2),A,B];% 变异rnd=rand(num,N);ind=rnd [m,n]=size(ind);tmp=randint(m,n,2)+1;tmp(:,1:2)=0;fatherrand=tmp+fatherrand;fatherrand=mod(fatherrand,3);% fatherrand(ind)=tmp;%评价、选择scoreN=scorefun(fatherrand,D);% 求得N个个体的评价函数score(generation,:)=scoreN;[scoreSort,scoreind]=sort(scoreN);sumscore=cumsum(scoreSort);sumscore=sumscore./sumscore(end);childind(1:2)=scoreind(end-1:end);for k=3:Ntmprnd=rand;tmpind=tmprnd difind=[0,diff(t mpind)];if ~any(difind)difind(1)=1;endchildind(k)=scoreind(logical(difind));endfatherrand=fatherrand(:,childind);generation=generation+1;end% scoremaxV=max(score,[],2);minV=11*300-maxV;plot(minV,'*');title('各代的目标函数值');F4=D(:,4);FF4=F4-fatherrand(:,1);FF4=max(FF4,1);D(:,5)=FF4;save DData Dfunction D=codeload youhua.mat% properties F2 and F3F1=A(:,1);F2=A(:,2);F3=A(:,3);if (max(F2)>1450)||(min(F2)<=900)error('DATA property F2 exceed it''s range(900,1450]')end% get group property F1 of data, according to F2 value F4=zeros(size(F1));for ite=11:-1:1index=find(F2<=900+ite*50);F4(index)=ite;endD=[F1,F2,F3,F4];function ScoreN=scorefun(fatherrand,D)F3=D(:,3);F4=D(:,4);N=size(fatherrand,2);FF4=F4*ones(1,N);FF4rnd=FF4-fatherrand;FF4rnd=max(FF4rnd,1);ScoreN=ones(1,N)*300*11;% 这里有待优化for k=1:NFF4k=FF4rnd(:,k);for ite=1:11F0index=find(FF4k==ite);if ~isempty(F0index)tmpMat=F3(F0index);tmpSco=sum(tmpMat);ScoreBin(ite)=mod(tmpSco,300);endendScorek(k)=sum(ScoreBin);endScoreN=ScoreN-Scorek;遗传算法实例:% 下面举例说明遗传算法 %% 求下列函数的最大值 %% f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] %% 将 x 的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为 (10-0)/(2^10-1)≈0.01 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

其MATLAB实现者:老牛网友评论17 条浏览次数602(1)遗传算法简介(2)遗传算法的MA TLAB实现(3)应用举例(4)遗传算法优化神经网络方向在工业工程中,许多最优化问题性质十分复杂,很难用传统的优化方法来求解.自1960年以来,人们对求解这类难解问题日益增加.一种模仿生物自然进化过程的、被称为“进化算法(evolutionary algorithm)”的随机优化技术在解这类优化难题中显示了优于传统优化算法的性能。

目前,进化算法主要包括三个研究领域:遗传算法、进化规划和进化策略。

其中遗传算法是迄今为止进化算法中应用最多、比较成熟、广为人知的算法。

一、遗传算法简介遗传算法(Genetic Algorithm, GA)最先是由美国Mic-hgan大学的John Holland于1975年提出的。

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

它的思想源于生物遗传学和适者生存的自然规律,是具有“生存+检测”的迭代过程的搜索算法。

遗传算法以一种群体中的所有个体为对象,并利用随机化技术指导对一个被编码的参数空间进行高效搜索。

其中,选择、交叉和变异构成了遗传算法的遗传操作;参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定等5个要素组成了遗传算法的核心内容。

遗传算法的基本步骤:遗传算法是一种基于生物自然选择与遗传机理的随机搜索算法,与传统搜索算法不同,遗传算法从一组随机产生的称为“种群(Population)”的初始解开始搜索过程。

种群中的每个个体是问题的一个解,称为“染色体(chromosome)”。

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

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

在每一代中用“适值(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算法使用的选择、交叉、变异这三个算子都是随机操作,而不是确定规则。

举例图解说明计算流程二、遗传算法的MA TLAB实现需要如下主函数:编码和种群生成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 oneof 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方式2step 1 编写目标函数gademo1eval1.mfunction [sol, val] = gaDemo1Eval(sol,options)x=sol(1);val = x + 10*sin(5*x)+7*cos(4*x);step 2 生成初始种群,大小为10initPop=initializega(10,[0, 9],\\\'gademo1eval1\\\',[],[1e-6,1]); step 325次遗传迭代[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 therun%endPop- the final population%bPop- a trace of the best population(解的变化)%traceInfo- a matrix of best and means of the gafor each generation(种群平均值的变化)%% Input Arguments:%bounds - a matrix of upper and lower boundson 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 solutionsdifferent, prob_ops 0 if you want to apply the%genetic operators probabilisticly to each solution,1 if you are supplying a deterministic numberof operator applications and display is 1 to outputprogress 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 namesof Xover.m files ([\\\'arithXover heuristicXoversimpleXover\\\'])%xOverOps- A matrix of options to pass to Xover.m files with the first column being the number of thatxOver to perform similiarly for mutation([2 0;2 3;2 0])%mutFNs- a string containing blank seperated names of mutation.m files ([\\\'boundaryMutationmultiNonUnifMutation ...%nonUnifMutation unifMutation\\\']) %mutOps- A matrix of options to pass to Xover.m files with the first column being the number of thatxOver 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方式2function [sol,val] = gaMichEval(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 sakerand(\\\'seed\\\',0)% Crossover OperatorsxFns = \\\'simpleXover\\\';xOpts = [.4];% Mutation OperatorsmFns = \\\'binaryMutation\\\';mOpts = [0.005];% Termination OperatorstermFns = \\\'maxGenTerm\\\';termOps = [200]; % 200 Generations% Selection FunctionselectFn = \\\'roulette\\\'selectOps = [];% Evaluation FunctionevalFn = \\\'gaMichEval\\\';evalOps = [];% Bounds on the variablesbounds = [-3, 12.1; 4.1, 5.8];% GA Options [epsilon float/binar display]gaOpts=[1e-6 0 1];% Generate an intialize population of size 20startPop = 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 foundx% endPop is the ending populationendPop% trace is a trace of the best value and average value of generationstraceclfplot(trace(:,1),trace(:,2));hold onplot(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 foundx% endPop is the ending population%endPop% trace is a trace of the best value and average value of generations%trace% Plot the best over timeclfplot(trace(:,1),trace(:,2));% Add the average to the graphhold onplot(trace(:,1),trace(:,3));4. floatExample.m二元函数例子浮点编码global bounds% Setting the seed to the same for binaryrand(\\\'seed\\\',156789)% Crossover OperatorsxFns = \\\'arithXover heuristicXover simpleXover\\\';xOpts = [1 0; 1 3; 1 0];% Mutation OperatorsmFns = \\\'boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation\\\'; mOpts = [2 0 0;3 200 3;2 200 3;2 0 0];% Termination OperatorstermFns = \\\'maxGenTerm\\\';termOps = [200]; % 200 Generations% Selection FunctionselectFn = \\\'normGeomSelect\\\';selectOps = [0.08];% Evaluation FunctionevalFn = \\\'gaMichEval\\\';evalOps = [];% Bounds on the variablesbounds = [-3 12.1; 4.1 5.8];% GA Options [epsilon float/binar display]gaOpts=[1e-6 1 1];% Generate an intialize population of size 20startPop = 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 foundx% endPop is the ending populationendPop% bestPop is the best solution tracked over generationsbestPop% Plot the best over timeclfplot(trace(:,1),trace(:,2));% Add the average to the graphhold onplot(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 foundx% endPop is the ending populationendPop% bestPop is the best solution tracked over generations bestPop% Plot the best over timeclfplot(trace(:,1),trace(:,2));% Add the average to the graphhold onplot(trace(:,1),trace(:,3));5. 求解货郎担问题(TSP)orderBasedExample.m6. 求解非线性规划问题max f(x)s.t. gi(x)<=0,i=1,...,mhi(x)=0,i=m+1,...,nx∈Ω?不可行的后代?&#61478; 拒绝策略&#61478; 修复策略&#61478; 改进遗传算子策略&#61478; 惩罚策略e.g. min f(x)=(x1-2)2+(x2-1)2s.t. g1(x)=x1-2x2+1>=0g2(x)=x12/4-x22+1>=0分析:取加法形式的适值函数:val(x)=f(x)+p(x)惩罚函数p(x)由两部分组成,可变乘法因子和违反约束乘法,其表达式如下:其中ri是约束i的可变惩罚系数。

相关文档
最新文档