基于改进遗传算法的路径规划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实现遗传算法程序一、本文概述遗传算法(Genetic Algorithms,GA)是一种模拟自然界生物进化过程的优化搜索算法,它通过模拟自然选择和遗传学机制,如选择、交叉、变异等,来寻找问题的最优解。
由于其全局搜索能力强、鲁棒性好以及易于实现并行化等优点,遗传算法在多个领域得到了广泛的应用,包括函数优化、机器学习、神经网络训练、组合优化等。
本文旨在介绍如何使用MATLAB实现遗传算法程序。
MATLAB作为一种强大的数学计算和编程工具,具有直观易用的图形界面和丰富的函数库,非常适合用于遗传算法的实现。
我们将从基本的遗传算法原理出发,逐步介绍如何在MATLAB中编写遗传算法程序,包括如何定义问题、编码、初始化种群、选择操作、交叉操作和变异操作等。
通过本文的学习,读者将能够掌握遗传算法的基本原理和MATLAB编程技巧,学会如何使用MATLAB实现遗传算法程序,并能够在实际问题中应用遗传算法求解最优解。
二、遗传算法基础遗传算法(Genetic Algorithm,GA)是一种模拟自然选择和遗传学机制的优化搜索算法。
它借鉴了生物进化中的遗传、交叉、变异等机制,通过模拟这些自然过程来寻找问题的最优解。
遗传算法的核心思想是将问题的解表示为“染色体”,即一组编码,然后通过模拟自然选择、交叉和变异等过程,逐步迭代搜索出最优解。
在遗传算法中,通常将问题的解表示为一个二进制字符串,每个字符串代表一个个体(Individual)。
每个个体都有一定的适应度(Fitness),适应度越高的个体在下一代中生存下来的概率越大。
通过选择(Selection)、交叉(Crossover)和变异(Mutation)等操作,生成新一代的个体,并重复这一过程,直到找到满足条件的最优解或达到预定的迭代次数。
选择操作是根据个体的适应度,选择出适应度较高的个体作为父母,参与下一代的生成。
常见的选择算法有轮盘赌选择(Roulette Wheel Selection)、锦标赛选择(Tournament Selection)等。
11基于遗传算法的机器人路径规划MATLAB源代码

基于遗传算法的机器人路径规划MATLAB源代码基本思路是:取各障碍物顶点连线的中点为路径点,相互连接各路径点,将机器人移动的起点和终点限制在各路径点上,利用最短路径算法来求网络图的最短路径,找到从起点P1到终点Pn的最短路径。
上述算法使用了连接线中点的条件,因此不是整个规划空间的最优路径,然后利用遗传算法对找到的最短路径各个路径点Pi (i=1,2,…n)调整,让各路径点在相应障碍物端点连线上滑动,利用Pi= Pi1+ti×(Pi2-Pi1)(ti∈[0,1] i=1,2,…n)即可确定相应的Pi,即为新的路径点,连接此路径点为最优路径。
function [L1,XY1,L2,XY2]=JQRLJGH(XX,YY)%% 基于Dijkstra和遗传算法的机器人路径规划% GreenSim团队——专业级算法设计&代写程序% 欢迎访问GreenSim团队主页→/greensim%输入参数在函数体内部定义%输出参数为% L1 由Dijkstra算法得出的最短路径长度% XY1 由Dijkstra算法得出的最短路径经过节点的坐标% L2 由遗传算法得出的最短路径长度% XY2 由遗传算法得出的最短路径经过节点的坐标%程序输出的图片有% Fig1 环境地图(包括:边界、障碍物、障碍物顶点之间的连线、Dijkstra的网络图结构)% Fig2 由Dijkstra算法得到的最短路径% Fig3 由遗传算法得到的最短路径% Fig4 遗传算法的收敛曲线(迄今为止找到的最优解、种群平均适应值)%% 画Fig1figure(1);PlotGraph;title('地形图及网络拓扑结构')PD=inf*ones(26,26);for i=1:26for j=1:26if D(i,j)==1x1=XY(i,5);y1=XY(i,6);x2=XY(j,5);y2=XY(j,6);dist=((x1-x2)^2+(y1-y2)^2)^0.5;PD(i,j)=dist;endendend%% 调用最短路算法求最短路s=1;%出发点t=26;%目标点[L,R]=ZuiDuanLu(PD,s,t);L1=L(end);XY1=XY(R,5:6);%% 绘制由最短路算法得到的最短路径figure(2);PlotGraph;hold onfor i=1:(length(R)-1)x1=XY1(i,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot([x1,x2],[y1,y2],'k');hold onendtitle('由Dijkstra算法得到的初始路径')%% 使用遗传算法进一步寻找最短路%第一步:变量初始化M=50;%进化代数设置N=20;%种群规模设置Pm=0.3;%变异概率设置LC1=zeros(1,M);LC2=zeros(1,M);Yp=L1;%第二步:随机产生初始种群X1=XY(R,1);Y1=XY(R,2);X2=XY(R,3);Y2=XY(R,4);for i=1:Nfarm{i}=rand(1,aaa);end% 以下是进化迭代过程counter=0;%设置迭代计数器while counter<M%停止条件为达到最大迭代次数%% 第三步:交叉%交叉采用双亲双子单点交叉newfarm=cell(1,2*N);%用于存储子代的细胞结构Ser=randperm(N);%两两随机配对的配对表A=farm{Ser(1)};%取出父代AB=farm{Ser(2)};%取出父代BP0=unidrnd(aaa-1);%随机选择交叉点a=[A(:,1:P0),B(:,(P0+1):end)];%产生子代ab=[B(:,1:P0),A(:,(P0+1):end)];%产生子代bnewfarm{2*N-1}=a;%加入子代种群newfarm{2*N}=b;for i=1:(N-1)A=farm{Ser(i)};B=farm{Ser(i+1)};newfarm{2*i}=b;endFARM=[farm,newfarm];%新旧种群合并%% 第四步:选择复制SER=randperm(2*N);FITNESS=zeros(1,2*N);fitness=zeros(1,N);for i=1:(2*N)PP=FARM{i};FITNESS(i)=MinFun(PP,X1,X2,Y1,Y2);%调用目标函数endfor i=1:Nf1=FITNESS(SER(2*i-1));f2=FITNESS(SER(2*i));if f1<=f2elsefarm{i}=FARM{SER(2*i)};fitness(i)=FITNESS(SER(2*i));endend%记录最佳个体和收敛曲线minfitness=min(fitness);meanfitness=mean(fitness);if minfitness<Yppos=find(fitness==minfitness);Xp=farm{pos(1)};Yp=minfitness;endif counter==10PPP=[0.5,Xp,0.5]';PPPP=1-PPP;X=PPP.*X1+PPPP.*X2;Y=PPP.*Y1+PPPP.*Y2;XY2=[X,Y];figure(3)PlotGraph;hold onfor i=1:(length(R)-1)x1=XY2(i,1);y1=XY2(i,2);x2=XY2(i+1,1);y2=XY2(i+1,2);plot([x1,x2],[y1,y2],'k');hold onendtitle('遗传算法第10代')hold onfor i=1:(length(R)-1)x1=XY1(i,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot([x1,x2],[y1,y2],'k','LineWidth',1);hold onendendif counter==20PPP=[0.5,Xp,0.5]';PPPP=1-PPP;X=PPP.*X1+PPPP.*X2;Y=PPP.*Y1+PPPP.*Y2;XY2=[X,Y];figure(4)PlotGraph;hold onfor i=1:(length(R)-1)x1=XY2(i,1);y2=XY2(i+1,2);plot([x1,x2],[y1,y2],'k');hold onendtitle('遗传算法第20代')hold onx1=XY1(i,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot([x1,x2],[y1,y2],'k','LineWidth',1);hold onendendif counter==30PPP=[0.5,Xp,0.5]';PPPP=1-PPP;X=PPP.*X1+PPPP.*X2;Y=PPP.*Y1+PPPP.*Y2;XY2=[X,Y];figure(5)PlotGraph;hold onfor i=1:(length(R)-1)x1=XY2(i,1);y1=XY2(i,2);x2=XY2(i+1,1);y2=XY2(i+1,2);plot([x1,x2],[y1,y2],'k');hold onendtitle('遗传算法第30代')hold onfor i=1:(length(R)-1)x1=XY1(i,1);y2=XY1(i+1,2);plot([x1,x2],[y1,y2],'k','LineWidth',1);hold onendendif counter==40PPP=[0.5,Xp,0.5]';PPPP=1-PPP;X=PPP.*X1+PPPP.*X2;Y=PPP.*Y1+PPPP.*Y2;XY2=[X,Y];figure(6)PlotGraph;hold onx1=XY2(i,1);y1=XY2(i,2);x2=XY2(i+1,1);y2=XY2(i+1,2);plot([x1,x2],[y1,y2],'k');hold onendtitle('遗传算法第40代')hold onfor i=1:(length(R)-1)x1=XY1(i,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot([x1,x2],[y1,y2],'k','LineWidth',1);hold onendendif counter==50PPP=[0.5,Xp,0.5]';PPPP=1-PPP;X=PPP.*X1+PPPP.*X2;Y=PPP.*Y1+PPPP.*Y2;XY2=[X,Y];figure(7)PlotGraph;hold onfor i=1:(length(R)-1)x1=XY2(i,1);y1=XY2(i,2);x2=XY2(i+1,1);y2=XY2(i+1,2);plot([x1,x2],[y1,y2],'k');hold onendtitle('遗传算法第50代')hold onfor i=1:(length(R)-1)x1=XY1(i,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot([x1,x2],[y1,y2],'k','LineWidth',1);hold onendendLC2(counter+1)=Yp;LC1(counter+1)=meanfitness;%% 第五步:变异for i=1:Nif Pm>rand&&pos(1)~=iAA=farm{i};AA(POS)=rand;farm{i}=AA;endendcounter=counter+1;disp(counter);end%% 输出遗传算法的优化结果PPP=[0.5,Xp,0.5]';PPPP=1-PPP;X=PPP.*X1+PPPP.*X2;Y=PPP.*Y1+PPPP.*Y2;XY2=[X,Y];L2=Yp;%% 绘制Fig3figure(8)PlotGraph;hold onhold onfor i=1:(length(R)-1)x1=XY1(i,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot([x1,x2],[y1,y2],'k','LineWidth',1);hold onendfor i=1:(length(R)-1)x1=XY2(i,1);y1=XY2(i,2);x2=XY2(i+1,1);y2=XY2(i+1,2);plot([x1,x2],[y1,y2],'k');hold onendtitle('遗传算法最终结果')figure(9)PlotGraph;hold onfor i=1:(length(R)-1)x1=XY1(i,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot([x1,x2],[y1,y2],'k','LineWidth',1);hold onendhold onfor i=1:(length(R)-1)x1=XY2(i,1);y1=XY2(i,2);x2=XY2(i+1,1);y2=XY2(i+1,2);plot([x1,x2],[y1,y2],'k','LineWidth',2);hold onendtitle('遗传算法优化前后结果比较')%% 绘制Fig4figure(10);plot(LC1);hold onplot(LC2);xlabel('迭代次数');title('收敛曲线');源代码运行结果展示。
研究生作业_基于遗传算法优化多元多目标函数的MATLAB实现

南京航空航天大学共 8 页第 1 页学院:航空宇航学院姓名: 魏德宸基于遗传算法优化多元多目标函数的MATLAB实现0.引言现实生活中的很多决策问题都要考虑同时优化若干个目标,而这些目标之间有时是彼此约束,甚至相互冲突,这样就需要从所有可能的方案中找到最合理、最可靠的解决方案。
而遗传算法是模拟达尔文的遗传选择和自然淘汰的生物进化过程的一种新的迭代的全局优化搜索算法,它能够使群体进化并行搜寻多个目标,并逐渐找到问题的最优解。
1.问题描述变量维数为5,含有2个优化目标的多目标优化问题表达式如下对于该问题,利用权重系数变换法很容易求出最优解,本题中确定f1和f2的权重系数都为0.5。
2.遗传算法2.1遗传算法简述遗传算法的基本原理是通过作用于染色体上的基因寻找好的染色体来求解问题,它需要对算法所产生的每个染色体进行评价,并基于适应度值来选择染色体,使适应性好的染色体有更多的繁殖机会,在遗传算法中,通过随机方式产生若干个所求解问题的数字编码,即染色体,形成初始种群;通过适应度函数给每个个体一个数值评价,淘汰低适应度的个体,选择高适应度的个体参加遗传操作,经过遗产操作后的个体集合形成下一代新的种群,对这个新的种群进行下一轮的进化。
2.2遗传算法的过程遗传算法的基本过程是:1.初始化群体。
2.计算群体上每个个体的适应度值3.由个体适应度值所决定的某个规则选择将进入下一代个体。
4.按概率Pc进行交叉操作。
5.按概率Pm进行变异操作。
6.没有满足某种停止条件,则转第2步,否则进入第7步。
7.输出种群中适应度值最优的染色体作为问题的满意解或最优界。
8.遗传算法过程图如图1:图1 遗传算法过程图3.遗传算法MATLAB代码实现本题中控制参数如下:(1)适应度函数形式FitnV=ranking(ObjV)为基于排序的适应度分配。
(2)交叉概率取为一般情况下的0.7,变异概率取其默认值.(3)个体数目分别为2000和100以用于比较对结果的影响。
基于Matlab的遗传算法解决TSP问题的报告

报告题目:基于Matlab的遗传算法解决TSP问题说明:该文包括了基于Matlab的遗传算法解决TSP问题的基本说明,并在文后附录了实现该算法的所有源代码。
此代码经过本人的运行,没有发现错误,结果比较接近理论最优值,虽然最优路径图有点交叉。
因为本人才疏学浅,本报告及源代码的编译耗费了本人较多的时间与精力,特收取下载积分,还请见谅。
若有什么问题,可以私信,我们共同探讨这一问题。
希望能对需要这方面的知识的人有所帮助!1.问题介绍旅行商问题(Traveling Salesman Problem,简称TSP)是一个经典的组合优化问题。
它可以描述为:一个商品推销员要去若干个城市推销商品,从一个城市出发,需要经过所有城市后,回到出发地,应如何选择行进路线,以使总行程最短。
从图论的角度看,该问题实质是在一个带权完全无向图中。
找一个权值最小的Hemilton回路。
其数学描述为:设有一个城市集合其中每对城市之间的距离(),i j d c c R +∈,求一对经过C中每个城市一次的路线()12,,n c c c ΠΠΠ⋯使()()()1111min ,,n i n i i d c c d c c −ΠΠΠΠ+=+∑其中()12,,12n n ΠΠΠ⋯⋯是,的一个置换。
2.遗传算法2.1遗传算法基本原理遗传算法是由美国J.Holland 教授于1975年在他的专著《自然界和人工系统的适应性》中首先提出的,它是一类借鉴生物界自然选择和自然遗传机制的随机化搜索算法。
遗传算法模拟自然选择和自然遗传过程中发生的繁殖、交叉和基因突变现象,在每次迭代中都保留一组候选解,并按某种指标从解群中选取较优的个体,利用遗传算子(选择、交叉和变异)对这些个体进行组合,产生新一代的候选解群,重复此过程,直到满足某种收敛指标为止。
遗传算法,在本质上是一种不依赖具体问题的直接搜索方法,是一种求解问题的高效并行全局搜索方法。
遗传算法在模式识别、神经网络、图像处理、机器学习、工业优化控制、自适应控制、负载平衡、电磁系统设计、生物科学、社会科学等方面都得到了应用。
用Matlab实现遗传算法

用GA找到函数最小值x = ga(fitnessfcn,nvars)局部无约束最小值,x是目标函数的适应度函数,nvars是适应度函数的尺寸(设计变量的数量)。
目标函数和适应度函数接受了1×N大小的x矢量,在x返回一个标量的计算值。
x = ga(fitnessfcn,nvars,A,b)在线性不等式约束下,适应度函数的局部最小值。
如果这个问题有m个线性不等式和n个变量,则A是m×n矩阵,b是m×1矩阵。
注意:当人口类型选项设置为“位串”或者“自定义”,线性约束不满足。
x = ga(fitnessfcn,nvars,A,b,Aeq,beq)存在线性等式约束下,适应度函数的局部最小值。
如果没有不等式存在,设置A=[] 和 b=[]。
如果问题存在r个线性等式约束和n个变量,那么Aeq 是r ×n矩阵的大小,beq是r大小的矢量。
注意:当人口类型选项设置为“位串”或者“自定义”,线性约束不满足。
x = ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB)定义了一系列设计变量x的最小和最大边界。
以至于在范围内找到一个解。
如果没有边界存在,LB 和 UB设置为空矩阵。
如果x(i)无下界,设置LB(i) = -Inf;如果x(i)无上界,设置UB(i) = Inf。
x = ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon)服从在非线性约束条件下的最小值,非线性函数接收x,返回C和Ceq向量,分别代表非线性的不等式和等式。
GA最小化适应度函数,在C(x)≤0和Ceq(x)=0的条件下。
如果无边界存在,设置 LB=[] 和 UB=[]。
注意:当人口类型选项设置为“位串”或者“自定义”,非线性约束不满足。
x = ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)用在结构选项中的值代替默认的优化参数来进行最小化,它也可以用gaoptimset函数来创建,具体参考gaoptimset的用法。
基于智能优化算法的无人机路径规划

基于智能优化算法的无人机路径规划发布时间:2022-01-04T02:15:56.669Z 来源:《福光技术》2021年21期作者:张倬铭[导读] 为更好地执行任务,需要根据环境信息、无人机自身性能、路径规划的指标体系以及优化算法等快速有效的为无人机规划出一条或多条实际可飞的路径。
航天神舟飞行器有限公司天津市 300000摘要:为更好地执行任务,需要根据环境信息、无人机自身性能、路径规划的指标体系以及优化算法等快速有效的为无人机规划出一条或多条实际可飞的路径。
为了提高决策效率,采用进化多目标算法有很多优势,可以同时对多个目标函数进行优化,找出一组非支配(Pareto最优)解,决策者可根据问题的需要,挑选出满意的解作为最终解。
为了提升任务成功率,多UA V的协同己成为必然选择,各UA V之间的相互配合、相互协调,使得其使用效能大幅超过单架UA V。
具体而言,其优势在于:(1)多UA V并行执行任务以提高任务执行效率;(2)各UA V协同配合在一定程度上保证了任务完成的质量;(3)多UA V共享信息资源增强了任务执行能力。
综上所述,本课题提出的基于智能优化算法的无人机路径规划研究,重点对考虑多目标优化的无人机路径规划和考虑时间协同的多无人机路径规划进行研究,前者将有助于满足决策者的多样化需求,后者能充分发挥多UA V的协作效能,具有一定的理论价值和科学意义。
关键词:智能优化算法;无人机;路径规划1基于智能优化算法的无人机路径规划本文所提出的基于改进NSGA-II算法的步骤如下:1)初始化参数,随机生成N个个体作为初始父代种群;2)计算路径规划模型的目标函数值;3)执行选择、交叉、变异及增加删除算子操作,生成新的#个子代个体;4)计算新生成个体种群的目标值;5)合并父代和子代种群;6)对合并后的种群进行非支配排序,并计算个体的拥挤距离;7)根据非支配排序和拥挤距离,在合并种群中选出较好的#个体作为新的父代种群;8)判断算法终止条件,若未达到最大进化代数maxGen则跳转3),否则算法运行结束,输出最优结果。
遗传算法优化相关MATLAB算法实现

遗传算法优化相关MATLAB算法实现遗传算法(Genetic Algorithm,GA)是一种基于生物进化过程的优化算法,能够在空间中找到最优解或接近最优解。
它模拟了自然选择、交叉和变异等进化操作,通过不断迭代的方式寻找最佳的解。
遗传算法的主要步骤包括:初始化种群、评估适应度、选择、交叉、变异和更新种群等。
在MATLAB中,可以使用遗传算法工具箱(Genetic Algorithm & Direct Search Toolbox)来实现遗传算法的优化。
下面以实现一个简单的函数优化为例进行说明。
假设我们要优化以下函数:```f(x)=x^2-2x+1```首先,我们需要定义适应度函数,即上述函数f(x)。
在MATLAB中,可以使用如下代码定义适应度函数:```MATLABfunction fitness = myFitness(x)fitness = x^2 - 2*x + 1;end```接下来,我们需要自定义遗传算法的参数,包括种群大小、迭代次数、交叉概率和变异概率等。
在MATLAB中,可以使用如下代码定义参数:```MATLABpopulationSize = 100; % 种群大小maxGenerations = 100; % 迭代次数crossoverProbability = 0.8; % 交叉概率mutationProbability = 0.02; % 变异概率```然后,我们需要定义遗传算法的上下界范围。
在本例中,x的范围为[0,10]。
我们可以使用如下代码定义范围:```MATLABlowerBound = 0; % 下界upperBound = 10; % 上界```接下来,我们可以使用遗传算法工具箱中的`ga`函数进行遗传算法的优化。
如下所示:```MATLAB```最后,我们可以得到最优解x和最优值fval。
在本例中,我们得到的结果应该接近1以上只是一个简单的例子,实际应用中可能需要根据具体问题进行参数的设定和函数的定义。
基于Matlab遗传算法工具箱的优化计算实现

基于Matlab遗传算法工具箱的优化计算实现一、概述随着科技的发展和社会的进步,优化问题在众多领域,如工程设计、经济管理、生物科学、交通运输等中扮演着越来越重要的角色。
优化计算的目标是在给定的约束条件下,寻找一组变量,使得某个或某些目标函数达到最优。
许多优化问题具有高度的复杂性,传统的数学方法往往难以有效求解。
寻求新的、高效的优化算法成为了科研人员的重要任务。
遗传算法(Genetic Algorithm, GA)是一种模拟自然选择和遗传学机制的搜索算法,通过模拟自然界的进化过程,寻找问题的最优解。
自20世纪70年代初由美国密歇根大学的John Holland教授提出以来,遗传算法因其全局搜索能力强、鲁棒性好、易于与其他算法结合等优点,被广泛应用于各种优化问题中。
1. 遗传算法简介遗传算法(Genetic Algorithm, GA)是一种模拟自然选择和遗传学机制的优化搜索算法。
该算法起源于对生物进化过程中遗传机制的研究,通过模拟自然选择和遗传过程中的交叉、突变等操作,在搜索空间内寻找最优解。
自20世纪70年代初由John Holland教授提出以来,遗传算法已在多个领域取得了广泛的应用,包括函数优化、机器学习、模式识别、自适应控制等。
遗传算法的基本思想是将问题的解表示为“染色体”,这些染色体在算法中通过选择、交叉和突变等操作进行演化。
选择操作模仿了自然选择中“适者生存”的原则,根据适应度函数对染色体进行筛选交叉操作则模拟了生物进化中的基因重组过程,通过交换染色体中的部分基因,生成新的个体突变操作则是对染色体中的基因进行小概率的随机改变,以维持种群的多样性。
在遗传算法中,种群初始化是算法的起点,通过随机生成一组初始解作为初始种群。
根据适应度函数对种群中的个体进行评估,选择出适应度较高的个体进行交叉和突变操作,生成新的种群。
这个过程不断迭代进行,直到满足终止条件(如达到最大迭代次数或找到满足精度要求的最优解)为止。
遗传算法在matlab中的实现

遗传算法是一种模拟自然选择与遗传机制的优化算法,它模拟了生物进化的过程,通过优化个体的基因型来达到解决问题的目的。
在工程和科学领域,遗传算法被广泛应用于求解优化问题、寻找最优解、参数优化等领域。
而MATLAB作为一款强大的科学计算软件,拥有丰富的工具箱和编程接口,为实现遗传算法提供了便利。
下面将通过以下步骤介绍如何在MATLAB中实现遗传算法:1. 引入遗传算法工具箱需要在MATLAB环境中引入遗传算法工具箱。
在MATLAB命令窗口输入"ver",可以查看当前已安装的工具箱。
如果遗传算法工具箱未安装,可以使用MATLAB提供的工具箱管理界面进行安装。
2. 定义优化问题在实现遗传算法前,需要清楚地定义优化问题:包括问题的目标函数、约束条件等。
在MATLAB中,可以通过定义一个函数来表示目标函数,并且可以采用匿名函数的形式来灵活定义。
对于约束条件,也需要进行明确定义,以便在遗传算法中进行约束处理。
3. 设置遗传算法参数在实现遗传算法时,需要对遗传算法的参数进行设置,包括种群大小、交叉概率、变异概率、迭代次数等。
这些参数的设置将会直接影响遗传算法的收敛速度和优化效果。
在MATLAB中,可以通过设置遗传算法工具箱中的相关函数来完成参数的设置。
4. 编写遗传算法主程序编写遗传算法的主程序,主要包括对适应度函数的计算、选择、交叉、变异等操作。
在MATLAB中,可以利用遗传算法工具箱提供的相关函数来实现这些操作,简化了遗传算法的实现过程。
5. 运行遗传算法将编写好的遗传算法主程序在MATLAB环境中运行,并观察优化结果。
在运行过程中,可以对结果进行实时监测和分析,以便对遗传算法的参数进行调整和优化。
通过以上步骤,可以在MATLAB中实现遗传算法,并应用于实际的优化问题与工程应用中。
遗传算法的实现将大大提高问题的求解效率与精度,为工程领域带来更多的便利与可能性。
总结:遗传算法在MATLAB中的实现涉及到了引入遗传算法工具箱、定义优化问题、设置算法参数、编写主程序和运行算法等步骤。
改进遗传算法求解TSP问题的Matlab程序设计

2 1 年 6月 01
湖 南 工 程 学 院 学 报
Vo . 1 No 2 12 _ .
J n 0 1 u e2 1
J u n l fHu a n tt t fEn ie r g o r a n n I si eo g n e i o u n
改 进 遗 传 算 法 求 解 TS 问 题 的 M a lb 程 序 设 计 P ta
f n t n p p— TS nt l e( OP I E, u ci o o Piii i P az SZ NCI —
TI ) ES
直接 将它们 复 制 到下 一 代 群 体 中. 文 中用 a表 示 本
最优 个体 保存 的 比例 .
f n t n p p — s lc ( e g h, OP I E, i u ci o o ee t L n t P SZ ft — n s , o D , C TI e s p p, N I ES, ) a t - o n ( OP I E *a -  ̄ ru d P SZ );
关键 词 :改进遗 传算 法 ; P问题 ; t b程序 TS Mal a 中 图分类号 :TP 9 31 文献标 识码 :A 文章 编号 :1 7 一 l9 2 1 ) 2 O 2 4 6 1 1X( O 1 0 一O 4 —0
0 引 言
旅 行 商 问 题 ( a eig ae n P o lm, Trv l S lma rbe n TS ) 又 叫货 郎担 问题 , P , 是最基 本 的路 线 问题 , 问 该
e nd
p etj : = p p M () : ; b s(, ) o ( j , )
e nd
3 2 适 应 度评 估 .
基于遗传算法的改进k-means算法

计算碼多媒体技术Computer A n d Multimedia Tech n o l ogy电子技术与软件工程Electronic Tech n o l ogy & Software Engineering 基于遗传算法的改进K-means 算法文/林龙成(江苏省南通卫生高等职业技术学校 江苏省南通市226010 )摘 要:本文对K-means 算法的缺点做出了一些改进,提出了一种基于遗传算法GA-K-means 的算法。
利用遗传算法初始化K-means 的初始聚类中心点,改进后的算法解决了 K-means 算法容易因为初始聚类中心的选择不同而陷入局部最优解的问题。
实验表明,改进后的 算法聚类结果稳定且聚类效果较好。
关键词:遗传算法;K-means 聚类算法;局部最优解K-means 算法⑴⑵⑶是一种广泛使用的聚类算法,思想简单易行,时间复杂度接近线性,对大数据集,具有高效性和可伸缩性。
但是算法也有一些局限性,需事先给定聚类数k 值;对于初始值的选择 比较敏感,选择不同的初始值,可能会导致不同的分类结果。
遗传算法[4][5]被广泛应用于提高人工智能技术的性能。
结合遗传算法能够寻找全局最优解的优势,以及K-means 算法容易因为初始聚类中心的选择不同而陷入局部最优解的问题,本文利用遗传算法初始化K-means 的初始聚类中心点,提出基于遗传算法的K-means聚类算法GA-K-meanso1 K-means 聚类算法K-means 算法,也被称为k ・均值算法,是基于距离的聚类算法,釆用距离作为相似性的评价指标,两个数据点的距离越近,则相似度越大。
计算样本间的距离公式有欧氏距离、曼哈顿距离、余弦相 似度等,其中最常用的是欧氏距离。
K-means 算法基本思想是通过迭代将数据集划分为不同的类簇,使得用不同类簇的均值来代表相应各类样本中心时所得的总体方差最小。
误差平方和准则函数公式为:E = S?=i SpeqllP 一 m 』|2 (1)E 表示样本空间中所有数据点到聚类中的平方误差的总和。
遗传算法(GeneticAlgorithm,GA)及MATLAB实现

遗传算法(GeneticAlgorithm,GA)及MATLAB实现遗传算法概述:• 遗传算法(Genetic Algorithm,GA)是⼀种进化算法,其基本原理是仿效⽣物界中的“物竞天择、适者⽣存”的演化法则,它最初由美国Michigan⼤学的J. Holland教授于1967年提出。
• 遗传算法是从代表问题可能潜在的解集的⼀个种群(population)开始的,⽽⼀个种群则由经过基因(gene)编码的⼀定数⽬的个体(individual)组成。
因此,第⼀步需要实现从表现型到基因型的映射即编码⼯作。
初代种群产⽣之后,按照适者⽣存和优胜劣汰的原理,逐代(generation)演化产⽣出越来越好的近似解,在每⼀代,根据问题域中个体的适应度(fitness)⼤⼩选择个体,并借助于⾃然遗传学的遗传算⼦(genetic operators)进⾏组合交叉和变异,产⽣出代表新的解集的种群。
这个过程将导致种群像⾃然进化⼀样,后⽣代种群⽐前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。
• 遗传算法有三个基本操作:选择(Selection)、交叉(Crossover)和变异(Mutation)。
• (1)选择。
选择的⽬的是为了从当前群体中选出优良的个体,使它们有机会作为⽗代为下⼀代繁衍⼦孙。
根据各个个体的适应度值,按照⼀定的规则或⽅法从上⼀代群体中选择出⼀些优良的个体遗传到下⼀代种群中。
选择的依据是适应性强的个体为下⼀代贡献⼀个或多个后代的概率⼤。
• (2)交叉。
通过交叉操作可以得到新⼀代个体,新个体组合了⽗辈个体的特性。
将群体中的各个个体随机搭配成对,对每⼀个个体,以交叉概率交换它们之间的部分染⾊体。
• (3)变异。
对种群中的每⼀个个体,以变异概率改变某⼀个或多个基因座上的基因值为其他的等位基因。
同⽣物界中⼀样,变异发⽣的概率很低,变异为新个体的产⽣提供了机会。
遗传算法的基本步骤:1)编码:GA在进⾏搜索之前先将解空间的解数据表⽰成遗传空间的基因型串结构数据,这些串结构数据的丌同组合便构成了丌同的点。
Matlab实现遗传算法的示例详解

Matlab实现遗传算法的⽰例详解⽬录1算法讲解1.1何为遗传算法1.2遗传算法流程描述1.3关于为什么要⽤⼆进制码表⽰个体信息1.4⽬标函数值与适应值区别1.5关于如何将⼆进制码转化为变量数值1.6关于代码改进2MATLAB⾃带ga函数2.1问题描述2.2⾃带函数使⽤3⾃编遗传算法各部分代码及使⽤3.1代码使⽤3.2Genetic1--主函数3.3PI(PopulationInitialize)--产⽣初始种群3.4Fitness--计算⽬标函数值3.5FitnessF--计算适应值3.6Translate--将⼆进制码转换3.7Probability--染⾊体⼊选概率3.8Select--个体选择3.9Crossing--交叉互换3.10Mutation--基因突变3.11Elitist--最优个体记录与最劣个体淘汰3.12完整代码这篇⽂章⽤了⼤量篇幅讲解了如何从零开始⾃⼰写⼀个遗传算法函数,主要是为了应对学⽣作业等情况,或者让⼤家对遗传算法有更充分的理解,如果要⽤于学术研究,最好还是使⽤⾃带遗传算法,之后可能会推出更多⾃带遗传算法⼯具箱的使⽤。
1 算法讲解1.1 何为遗传算法遗传、突变、⾃然选择、杂交,遗传算法是⼀种借鉴了进化⽣物学各类现象的进化算法。
看到⼀个很形象的⽐喻来描述各类进化算法的区别:爬⼭算法:⼀只袋⿏朝着⽐现在⾼的地⽅跳去。
它找到了不远处的最⾼的⼭峰。
但是这座⼭不⼀定是最⾼峰。
这就是爬⼭算法,它不能保证局部最优值就是全局最优值。
模拟退⽕:袋⿏喝醉了。
它随机地跳了很长时间。
这期间,它可能⾛向⾼处,也可能踏⼊平地。
但是,它渐渐清醒了并朝最⾼峰跳去。
这就是模拟退⽕算法。
遗传算法:有很多袋⿏,它们降落到喜玛拉雅⼭脉的任意地⽅。
这些袋⿏并不知道它们的任务是寻找珠穆朗玛峰。
但每过⼏年,就在⼀些海拔⾼度较低的地⽅射杀⼀些袋⿏。
于是,不断有袋⿏死于海拔较低的地⽅,⽽越是在海拔⾼的袋⿏越是能活得更久,也越有机会⽣⼉育⼥。
基于Matlab的遗传算法程序设计及优化问题求解

曲靖师范学院学生毕业论文(设计)题目:基于Matlab的遗传算法程序设计及优化问题求解院(系):数学与信息科学学院专业:信息与计算科学班级:20051121班学号:2005112104论文作者:沈秀娟指导教师:刘俊指导教师职称:教授2009年 5月基于Matlab的遗传算法程序设计及优化问题求解摘要遗传算法作为一种新的优化方法,广泛地用于计算科学、模式识别和智能故障诊断等方面,它适用于解决复杂的非线性和多维空间寻优问题,近年来也得到了较为广阔的应用. 本文介绍了遗传算法的发展、原理、特点、应用和改进方法,以及基本操作和求解步骤,再基于Matlab编写程序实现遗传算法并求解函数的优化问题. 程序设计过程表明,用Matlab语言进行优化计算,具有编程语句简单,用法灵活,编程效率高等优点. 经仿真验证,该算法是正确可行的.关键词:遗传算法;Matlab;优化Matlab-based genetic algorithm design and optimization of procedures forproblem solvingAbstract:As a new optimizated method,genetic algorithm is widely used in co mputational science,pattern recognition,intelligent fault diagnosisandsoon. It is suitable to solve complex non-linear and multi-dimensionaloptimizatio n problem.And it has been more widely used in recentyears.This paper descri bes the development of genetic algorithms,principle,features,application an d improvement of methods.At the same time,it in-troduces basic operation and solution steps.And then,it achievesgeneticalgorithm on the matlab programmi ng andsolves the function optimization problem.The program design process sh ows that this optimization calculation has advantages of simple programming language,flexible usage and high efficiency in Matlab language.The algorith m iscorrect and feasible by simulated authentication.Keywords: Genetic algorithm; Matlab;Optimization目录1 引言 (1)2 文献综述 (1)2.1国内外研究现状及评价 (1)2.2提出问题 (2)3 遗传算法的理论研究 (2)3.1遗传算法的产生背景 (2)3.2遗传算法的起源与发展 (3)3.2.1 遗传算法的起源 (3)3.2.2 遗传算法的发展 (3)3.3遗传算法的数学基础研究 (4)3.4遗传算法的组成要素 (6)3.5遗传算法的基本原理 (7)3.6遗传算法在实际应用时采取的一般步骤 (8)3.7遗传算法的基本流程描述 (9)3.8遗传算法的特点 (10)3.9遗传算法的改进 (11)3.10遗传算法的应用领域 (12)4 基于MATLAB的遗传算法实现 (14)5 遗传算法的函数优化的应用举例 (17)6 结论 (18)6.1主要发现 (18)6.2启示 (18)6.3局限性 (19)6.4努力的方向 (19)参考文献 (20)致谢 (21)附录 (22)1引言遗传算法(Genetic Algorithm)是模拟自然界生物进化机制的一种算法即遵循适者生存、优胜劣汰的法则也就是寻优过程中有用的保留无用的则去除. 在科学和生产实践中表现为在所有可能的解决方法中找出最符合该问题所要求的条件的解决方法即找出一个最优解. 这种算法是1960年由Holland提出来的其最初的目的是研究自然系统的自适应行为并设计具有自适应功能的软件系统. 它的特点是对参数进行编码运算不需要有关体系的任何先验知识沿多种路线进行平行搜索不会落入局部较优的陷阱,能在许多局部较优中找到全局最优点是一种全局最优化方法[1-3]. 近年来,遗传算法已经在国际上许多领域得到了应用. 该文将从遗传算法的理论和技术两方面概述目前的研究现状描述遗传算法的主要特点、基本原理以及改进算法,介绍遗传算法的应用领域,并用MATLAB 实现了遗传算法及最优解的求解.2文献综述2.1国内外研究现状及评价国内外有不少的专家和学者对遗传算法的进行研究与改进. 比如:1991年D.WHITEY 在他的论文中提出了基于领域交叉的交叉算子(ADJACENCY BASED CROSSOVER),这个算子是特别针对用序号表示基因的个体的交叉,并将其应用到了TSP问题中,通过实验对其进行了验证. 2002年,戴晓明等应用多种群遗传并行进化的思想,对不同种群基于不同的遗传策略,如变异概率,不同的变异算子等来搜索变量空间,并利用种群间迁移算子来进行遗传信息交流,以解决经典遗传算法的收敛到局部最优值问题. 国内外很多文献都对遗传算法进行了研究. 现查阅到的国内参考文献[1-19]中, 周勇、周明分别在文献[1]、[2]中介绍了遗传算法的基本原理;徐宗本在文献[3]中探讨了包括遗传算法在内的解全局优化问题的各类算法,文本次论文写作提出了明确的思路;张文修、王小平、张铃分别在文献[4]、[5]、[6]从遗传算法的理论和技术两方面概述目前的研究现状;李敏强、吉根林、玄光南分别在文献[7]、[8]、[9]中都不同程度的介绍了遗传算法的特点以及改进算法但未进行深入研究;马玉明、张丽萍、戴晓辉、柴天佑分别在文献[10]、[11]、[12]、[13]中探讨了遗传算法产生的背景、起源和发展;李敏强、徐小龙、林丹、张文修分别在文献[14]、[15]、[16]、[17]探讨了遗传算法的发展现状及以后的发展动向;李敏强,寇纪凇,林丹,李书全在文献[18]中主要论述了遗传算法的具体的实施步1骤、应用领域及特点;孙祥,徐流美在文献[19]中主要介绍了Matlab的编程语句及基本用法.所有的参考文献都从不同角度不同程度的介绍了遗传算法但都不够系统化不够详细和深入.2.2提出问题随着研究的深入,人们逐渐认识到在很多复杂情况下要想完全精确地求出其最优解既不可能,也不现实,因而求出近似最优解或满意解是人们的主要着眼点之一. 很多人构造出了各种各样的复杂形式的测试函数,有连续函数,有离散函数,有凸函数,也有凹函数,人们用这些几何特性各异的函数来评价遗传算法的性能. 而对于一些非线性、多模型、多目标的函数优化问题用其他优化方法较难求解遗传算法却可以方便地得到较好的结果. 鉴于遗传算法在函数优化方面的重要性,该文在参考文献[1-19]的基础上,用Matlab语言编写了遗传算法程序, 并通过了调试用一个实际例子来对问题进行了验证,这对在Matlab环境下用遗传算法来解决优化问题有一定的意义.3遗传算法的理论研究3.1遗传算法的产生背景科学研究、工程实际与国民经济发展中的众多问题可归结作“极大化效益、极小化代价”这类典型模型. 求解这类模型导致寻求某个目标函数(有解析表达式或无解析表达式)在特定区域上的最优解. 而为解决最优化问题目标函数和约束条件种类繁多,有的是线性的,有的是非线性的;有的是连续的,有的是离散的;有的是单峰值的,有的是多峰值的. 随着研究的深入,人们逐渐认识到:在很多复杂情况下要想完全精确地求出其最优解既不可能,也不现实,因而求出近似最优解或满意解是人们的主要着眼点之一. 总的来说,求最优解或近似最优解的方法有三种: 枚举法、启发式算法和搜索算法.(1)枚举法. 枚举出可行解集合内的所有可行解以求出精确最优解. 对于连续函数,该方法要求先对其进行离散化处理,这样就有可能产生离散误差而永远达不到最优解. 另外,当枚举空间比较大时该方法的求解效率比较低,有时甚至在目前最先进的计算工具上都无法求解.(2)启发式算法. 寻求一种能产生可行解的启发式规则以找到一个最优解或近似最优解. 该方法的求解效率虽然比较高,但对每一个需要求解的问题都必须找出其特有的2启发式规则,这个启发式规则无通用性不适合于其它问题.(3)搜索算法. 寻求一种搜索算法,该算法在可行解集合的一个子集内进行搜索操作以找到问题的最优解或近似最优解. 该方法虽然保证了一定能够得到问题的最优解,但若适当地利用一些启发知识就可在近似解的质量和求解效率上达到一种较好的平衡.随着问题种类的不同以及问题规模的扩大,要寻求一种能以有限的代价来解决上述最优化问题的通用方法仍是一个难题. 而遗传算法却为我们解决这类问题提供了一个有效的途径和通用框架开创了一种新的全局优化搜索算法.3.2遗传算法的起源与发展3.2.1 遗传算法的起源50年代末到60年代初,自然界生物进化的理论被广泛接受生物学家Fraser,试图通过计算的方法来模拟生物界“遗传与选择”的进化过程,这是遗传算法的最早雏形. 受一些生物学家用计算机对生物系统进行模拟的启发,Holland开始应用模拟遗传算子研究适应性. 在1967年,Bagley关于自适应下棋程序的论文中,他应用遗传算法搜索下棋游戏评价函数的参数集并首次提出了遗传算法这一术语. 1975年,Holland出版了遗传算法历史上的经典著作《自然和人工系统中的适应性》,首次明确提出遗传算法的概念. 该著作中系统阐述了遗传算法的基本理论和方法,并提出了模式(schemat atheorem)[4],证明在遗传算子选择、交叉和变异的作用下具有低阶、短定义距以及平均适应度高于群体平均适应度的模式在子代中将以指数级增长. Holand创建的遗传算法,是基于二进制表达的概率搜索方法. 在种群中通过信息交换重新组合新串;根据评价条件概率选择适应性好的串进入下一代;经过多代进化种群最后稳定在适应性好的串上. Holand最初提出的遗传算法被认为是简单遗传算法的基础,也称为标准遗传算法.3.2.2 遗传算法的发展(1)20世纪60年代,John Holland教授和他的数位博士受到生物模拟技术的启发,认识到自然遗传可以转化为人工遗传算法. 1962年,John Holland提出了利用群体进化模拟适应性系统的思想,引进了群体、适应值、选择、变异、交叉等基本概念.(2)1967年,J.D.Bagely在其博士论文中首次提出了“遗传算法”的概念.(3)1975年,Holland出版了《自然与人工系统中的适应性行为》(Adaptation in Natural and Artificial System).该书系统地阐述了遗传算法的基本理论和方法,提出了遗传算法的基本定理—模式定理,从而奠定了遗传算法的理论基础. 同年De Jong3在其博士论文中,首次把遗传算法应用于函数优化问题对遗传算法的机理与参数进行了较为系统地研究并建立了著名的五函数测试平台.(4)20世纪80年代初,Holland教授实现了第一个基于遗传算法的机器学习系统—分类器系统(Classifier System简称CS),开创了基于遗传算法的机器学习的新概念.(5)1989年,David Goldberg出版了《搜索、优化和机器学习中的遗传算法》(Genetic Algorithms in Search Optimization and Machine Learning).该书全面系统地总结了当时关于遗传算法的研究成果,结合大量的实例完整的论述了遗传算法的基本原理及应用,奠定了现代遗传算法的基础.(6)1992年,John R.Koza出版了专著《遗传编程》(Genetic Programming)提出了遗传编程的概念,并成功地把遗传编程的方法应用于人工智能、机器学习、符号处理等方面. 随着遗传算法的不断深入和发展,关于遗传算法的国际学术活动越来越多,遗传算法已成为一个多学科、多领域的重要研究方向.今天遗传算法的研究已经成为国际学术界跨学科的热门话题之一. 遗传算法是一种有广泛应用前景的算法,但是它的研究和应用在国内尚处于起步阶段. 近年来遗传算法已被成功地应用于工业、经济管理、交通运输、工业设计等不同领域解决了许多问题.例如可靠性优化、流水车间调度、作业车间调度、机器调度、设备布局设计、图像处理以及数据挖掘等.3.3 遗传算法的数学基础研究模式定理及隐含并行性原理被看作遗传算法的两大基石,后来又提出了建筑块假设,但是模式定理无法解释遗传算法实际操作中的许多现象,隐性并行性的论证存在严重漏洞,而建筑块假设却从未得到过证明. 对遗传算法的基础理论的研究主要分三个方面:模式定理的拓广和深入、遗传算法的新模型、遗传算法的收敛性理论.(1)模式定理的拓广和深入. Holland给出模式定理:具有短的定义长度、低阶、并且模式采样的平均适应值在种群平均适应值以上的模式在遗传迭代过程中将按指数增长率被采样模式定理可表达为:m(H,t+1)≥m(H,t).()fHf.()⎪⎭⎫⎝⎛---PHOlP mHc.1.1δ(1)其中m(Ht):在t代群体中存在模式H 的串的个数.4()Hf:在t 代群体中包含模式H 的串的平均适应值. f:t代群体中所有串的平均适应值.l表示串的长度pc 表示交换概率pm表示变异概率.Holland的模式定理奠定了遗传算法的数学基础根据隐性并行性得出每一代处理有效模式的下限值是()l c n2113.其中n是种群的大小c1是小整数. Bertoui和Dorigo进行了深入的研究获得当2βln=,β为任意值时处理多少有效模式的表达式. 上海交通大学的恽为民等获得每次至少产生()21-no数量级的结果. 模式定理中模式适应度难以计算和分析A.D.Berthke首次提出应用Walsh函数进行遗传算法的模式处理并引入模式变换的概念采用Walsh函数的离散形式有效地计算出模式的平均适应度并对遗传算法进行了有效的分析. 1972年Frantz首先发现一种常使GA从全局最优解发散出去的问题,称为GA-欺骗题[5]. Goldberg最早运用Walsh模式转换设计出最小的GA-欺骗问题并进行了详细分析.(2)遗传算法的新模型. 由于遗传算法中的模式定理和隐性并行性存在不足之处,为了搞清楚遗传算法的机理,近几年来人们建立了各种形式的新模型最为典型的是马氏链模型遗传算法的马氏链模型[6-7],主要由三种分别是种群马氏链模型、Vose模型和Cerf 扰动马氏链模型. 种群马氏链模型将遗传算法的种群迭代序列视为一个有限状态马氏链来加以研究,运用种群马氏链模型转移概率矩阵的某些一般性质分析遗传算法的极限行为,但转移概率的具体形式难以表达妨碍了对遗传算法的有限时间行为的研究;Vose 模型是在无限种群假设下利用相对频率导出,表示种群的概率的向量的迭代方程,通过这一迭代方程的研究,可以讨论种群概率的不动点及其稳定性,从而导致对遗传算法的极限行为的刻画,但对解释有限种群遗传算法的行为的能力相对差一些. Cerf扰动模型是法国学者Cerf将遗传算法看成一种特殊形式的广义模拟退火模型,利用了动力系统的随机扰动理论,对遗传算法的极限行为及收敛速度进行了研究. 还有其它改进模型,例如张铃、张钹等人提出的理想浓度模型,它首先引入浓度和家族的概念,通过浓度计算建立理想浓度模型[8-10],其浓度变化的规律为:5c(Hi,t +1)=c(H,t).()()()t ftOHfi,(2)c(Hi,t+1)表示模式Hi在t时刻的浓度,并对其进行分析,得出结论:遗传算法本质上是一个具有定向制导的随机搜索技术,其定向制导原则是导向适应度高的模式为祖先的染色体“家族”方向.(3)遗传算法的收敛性理论. 对于遗传算法的马氏链分析本身就是建立遗传算法的收敛性理论[11-12], Eiben等用马尔可夫链证明了保留最优个体的遗传算法的概率性全局收敛,Rudolph用齐次有限马尔可夫链证明了具有复制、交换、突变操作的标准遗传算法收敛不到全局最优解,不适合于静态函数的优化问题,建议改变复制策略以达到全局收敛,Back和Muhlenbein研究了达到全局最优解的算法的时间复杂性问题,近几年,徐宗本等人建立起鞅序列模型,利用鞅序列收敛定理证明了遗传算法的收敛性.3.4遗传算法的组成要素遗传算法所涉及的五大要素:参数编码、初始群体的设定、适应度函数的设计、遗传操作的设计和控制参数的设定,其具体内容如下:(1)参数编码. 遗传算法中常用的编码方法是二进制编码,它将问题空间的参数用字符集{0,1}构成染色体位串,符合最小字符集原则,操作简单,便于用模式定理分析.(2)适应度函数的设计. 适应度函数是评价个体适应环境的能力,使选择操作的依据,是由目标函数变换而成. 对适应度函数唯一的要求是其结果为非负值. 适应度的尺度变换是对目标函数值域的某种映射变换,可克服未成熟收敛和随机漫游现象. 常用的适应度函数尺度变化方法主要有线性变换、幂函数变换和指数变换.[13](3)遗传操作的设计. 包括选择、交叉、变异.①选择(Selection). 选择是用来确定交叉个体,以及被选个体将产生多少个子代个体. 其主要思想是个体的复制概率正比于其适应值,但按比例选择不一定能达到好的效果. 选择操作从早期的轮盘赌选择发展到现在最佳个体保存法、排序选择法、联赛选择法、随机遍历抽样法、局部选择法、柔性分段复制、稳态复制、最优串复制、最优串保留等.②交叉(Crossover). 交叉是指把两个父代个体的部分结构加以替换重组而生成新个体的操作,其作用是组合出新的个体,在串空间进行有效搜索,同时降低对有效模式的破坏概率. 各种交叉算子均包含两个基本内容:确定交叉点的位置和进行部分基因的6交换. 常用的交叉操作方法有单点交叉、双点交叉、一致交叉、均匀交叉、算术交叉、二维交叉、树结构交叉、部分匹配交叉、顺序交叉和周期交叉等等.③变异(Mutation). 变异是指将个体编码串中的某些基因值用其它基因值来替换,形成一个新的个体. 遗传算法中的变异运算是产生新个体的辅助方法,其目的是使遗传算法具有局部的随机搜索能力和保持群体的多样性. 变异算法包括确定变异点的位置和进行基因值替换. 常见的变异算子有基本位变异、均匀变异、高斯变异、二元变异、逆转变异、自适应变异等.(4) 控制参数设定. 遗传算法中需要确定一些参数取值,主要有串长l,群体大小n,交叉概率pc、变异概率pm等,对遗传算法性能影响很大. 目前对参数根据情况进行调整变化研究比较多,而一般确定的参数范围是:n=20~200,pc = 015 ~110,pm =0~0105.3.5遗传算法的基本原理在自然界,由于组成生物群体中各个体之间的差异,对所处环境有不同的适应和生存能力,遵照自然界生物进化的基本原则,适者生存、优胜劣汰,将要淘汰那些最差个体,通过交配将父本优秀的染色体和基因遗传给子代,通过染色体核基因的重新组合产生生命力更强的新的个体与由它们组成的新群体. 在特定的条件下,基因会发生突变,产生新基因和生命力更强的新个体;但突变是非遗传的,随着个体不断更新,群体不断朝着最优方向进化,遗传算法是真实模拟自然界生物进化机制进行寻优的. 在此算法中,被研究的体系的响应曲面看作为一个群体,相应曲面上的每一个点作为群体中的一个个体,个体用多维向量或矩阵来描述,组成矩阵和向量的参数相应于生物种组成染色体的基因,染色体用固定长度的二进制串表述,通过交换、突变等遗传操作,在参数的一定范围内进行随机搜索,不断改善数据结构,构造出不同的向量,相当于得到了被研究的不同的解,目标函数值较优的点被保留,目标函数值较差的点被淘汰.[14]由于遗传操作可以越过位垒,能跳出局部较优点,到达全局最优点.遗传算法是一种迭代算法,它在每一次迭代时都拥有一组解,这组解最初是随机生成的,在每次迭代时又有一组新的解由模拟进化和继承的遗传操作生成,每个解都有一目标函数给与评判,一次迭代成为一代. 经典的遗传算法结构图如下:图1 遗传算法的结构图3.6遗传算法在实际应用时采取的一般步骤(1)根据求解精度的要求,确定使用二进制的长度. 设值域的取值范围为[a i ,b i ],若要求精确到小数点后6位,则由(b i -a i )×106<2m i -1求得m i 的最小长度,进而可求出位于区间的任一数:x i =a i +decimal(1001...0012)×12--m i a b i i [15] (3)其中,i=1,2, ..., Popsize ;Popsize 为种群中染色体的个数;(2)利用随机数发生器产生种群;(3)对种群中每一染色体v i ,计算其对应适应度eval(v i ),i=1,2,… ,Popsize ;(4)计算种群适应度之和F :F=()v eval iPopsizei ∑=1(4) (5)计算每个染色体选择概率Pi :()F v eval p i i =(5) i=1,2, ... ,Popsize ;(6)计算每个染色体的累加概率qi:q i =∑=ijjp1(6)i=1, 2, ...,Popsize ;(7)产生一个位于[0,1]区间的随机数序列,其长度为N,如果其中任意一数r<q1,则选择第一个染色体,若qi1-<r<qi,则选择第i个染色体,i=1,2, ... Popsize,这样可以获得新一代种群;(8)对新一代种群进行交叉运算:设交叉概率为pc,首先产生一个位于区间[0,1]内的随机数序列,其长度为N,如果其中任意一数r<pc,则对应染色体被选中(如果选中奇数个,则可以去掉一个),然后在[1,m-1]区间中产生随机数,个数为选中的染色体数的一半,然后根据随机数在对应位置进行交换操作,从而构成新的染色体;(9)变异操作:设变异概率为pm,产生m×N个位于区间[0,1]上的随机数.如果某一随机数r<pm,则选中对应位变异,构成新的种群;(10)第一代计算完毕,返回③继续计算,直到达到满意的结果为止.3.7遗传算法的基本流程描述随机初始化种群p(0)={x1,x2,...,xn};t=0;计算p(0)中个体的适应值;while(不满足终止条件){ 根据个体的适应值及选择策略从p(t)中选择下一代生成的父体p(t);执行交叉,变异和再生成新的种群p(t+1) ;计算p(t+1)中个体的适应值;t=t+1;}伪代码为:BEGIN:I=0;Initialize P(I);Fitness P(I);While (not Terminate2Condition){I++;GA2Operation P(I);Fitness P(I);}END.3.8遗传算法的特点遗传算法不同于传统的搜索和优化方法. 主要区别在于:(1)自组织、自适应和自学习性(智能性). 应用遗传算法求解问题时,在编码方案、适应度函数及遗传算子确定后,算法将利用进化过程中获得的信息自行组织搜索. 由于基于自然的选择策略“适者生存、不适者被淘汰”,因而适应度大的个体具有较高的生存概率. 通常适应度大的个体具有更适应环境的基因结构,再通过基因重组和基因突变等遗传操作,就可能产生更适应环境的后代. 进化算法的这种自组织、自适应特征,使它同时具有能根据环境变化来自动发现环境的特性和规律的能力. 自然选择消除了算法设计过程中的一个最大障碍,即需要事先描述问题的全部特点,并要说明针对问题的不同特点算法应采取的措施.因此,利用遗传算法,我们可以解决那些复杂的非结构化问题.(2)遗传算法的本质并行性. 遗传算法按并行方式搜索一个种群数目的点,而不是单点. 它的并行性表现在两个方面,一是遗传算法是内在并行的( inherent paralleli sm),即遗传算法本身非常适合大规模并行. 最简单的并行方式是让几百甚至数千台计算机各自进行独立种群的演化计算,运行过程中甚至不进行任何通信(独立的种群之间若有少量的通信一般会带来更好的结果),等到运算结束时才通信比较,选取最佳个体.这种并行处理方式对并行系统结构没有什么限制和要求,可以说,遗传算法适合在目前所有的并行机或分布式系统上进行并行处理,而且对并行效率没有太大影响. 二是遗传算法的内含并行性. 由于遗传算法采用种群的方式组织搜索,因而可同时搜索解空间内的多个区域,并相互交流信息. 使用这种搜索方式,虽然每次只执行与种群规模N成比例的计算,但实质上已进行了大约O(N3)次有效搜索,这就使遗传算法能以较少的计算。
matlab实用教程实验十遗传算法与优化问题

matlab实用教程实验十遗传算法与优化问题matlab实用教程实验十遗传算法与优化问题一、问题背景与实验目的二、相关函数(命令)及简介三、实验内容四、自己动手一、问题背景与实验目的遗传算法(Genetic Algorithm—GA),是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,它是由美国Michigan大学的J.Holland教授于1975年首先提出的.遗传算法作为一种新的全局优化搜索算法,以其简单通用、鲁棒性强、适于并行处理及应用范围广等显著特点,奠定了它作为21世纪关键智能计算之一的地位.本实验将首先介绍一下遗传算法的基本理论,然后用其解决几个简单的函数最值问题,使读者能够学会利用遗传算法进行初步的优化计算.1.遗传算法的基本原理遗传算法的基本思想正是基于模仿生物界遗传学的遗传过程.它把问题的参数用基因代表,把问题的解用染色体代表(在计算机里用二进制码表示),从而得到一个由具有不同染色体的个体组成的群体.这个群体在问题特定的环境里生存竞争,适者有最好的机会生存和产生后代.后代随机化地继承了父代的最好特征,并也在生存环境的控制支配下继续这一过程.群体的染色体都将逐渐适应环境,不断进化,最后收敛到一族最适应环境的类似个体,即得到问题最优的解.值得注意的一点是,现在的遗传算法是受生物进化论学说的启发提出的,这种学说对我们用计算机解决复杂问题很有用,而它本身是否完全正确并不重要(目前生物界对此学说尚有争议).(1)遗传算法中的生物遗传学概念由于遗传算法是由进化论和遗传学机理而产生的直接搜索优化方法;故而在这个算法中要用到各种进化和遗传学的概念.首先给出遗传学概念、遗传算法概念和相应的数学概念三者之间的对应关系.这些概念如下:序号遗传学概念遗传算法概念数学概念1个体要处理的基本对象、结构也就是可行解2群体个体的集合被选定的一组可行解3染色体个体的表现形式可行解的编码4基因染色体中的元素编码中的元素5基因位某一基因在染色体中的位置元素在编码中的位置6适应值个体对于环境的适应程度,或在环境压力下的生存能力可行解所对应的适应函数值7种群被选定的一组染色体或个体根据入选概率定出的一组可行解8选择从群体中选择优胜的个体,淘汰劣质个体的操作保留或复制适应值大的可行解,去掉小的可行解9交叉一组染色体上对应基因段的交换根据交叉原则产生的一组新解10交叉概率染色体对应基因段交换的概率(可能性大小)闭区间[0,1]上的一个值,一般为0.65~0.9011变异染色体水平上基因变化编码的某些元素被改变12变异概率染色体上基因变化的概率(可能性大小)开区间(0,1)内的一个值, 一般为0.001~0.0113进化、适者生存个体进行优胜劣汰的进化,一代又一代地优化目标函数取到最大值,最优的可行解(2)遗传算法的步骤遗传算法计算优化的操作过程就如同生物学上生物遗传进化的过程,主要有三个基本操作(或称为算子):选择(Selection)、交叉(Crossover)、变异(Mutation).遗传算法基本步骤主要是:先把问题的解表示成“染色体”,在算法中也就是以二进制编码的串,在执行遗传算法之前,给出一群“染色体”,也就是假设的可行解.然后,把这些假设的可行解置于问题的“环境”中,并按适者生存的原则,从中选择出较适应环境的“染色体”进行复制,再通过交叉、变异过程产生更适应环境的新一代“染色体”群.经过这样的一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就是问题的最优解.下面给出遗传算法的具体步骤,流程图参见图1:第一步:选择编码策略,把参数集合(可行解集合)转换染色体结构空间;第二步:定义适应函数,便于计算适应值;第三步:确定遗传策略,包括选择群体大小,选择、交叉、变异方法以及确定交叉概率、变异概率等遗传参数;第四步:随机产生初始化群体;第五步:计算群体中的个体或染色体解码后的适应值;第六步:按照遗传策略,运用选择、交叉和变异算子作用于群体,形成下一代群体;第七步:判断群体性能是否满足某一指标、或者是否已完成预定的迭代次数,不满足则返回第五步、或者修改遗传策略再返回第六步.图1 一个遗传算法的具体步骤遗传算法有很多种具体的不同实现过程,以上介绍的是标准遗传算法的主要步骤,此算法会一直运行直到找到满足条件的最优解为止.2.遗传算法的实际应用例1:设,求.注:这是一个非常简单的二次函数求极值的问题,相信大家都会做.在此我们要研究的不是问题本身,而是借此来说明如何通过遗传算法分析和解决问题.在此将细化地给出遗传算法的整个过程.(1)编码和产生初始群体首先第一步要确定编码的策略,也就是说如何把到2这个区间内的数用计算机语言表示出来.编码就是表现型到基因型的映射,编码时要注意以下三个原则:完备性:问题空间中所有点(潜在解)都能成为GA编码空间中的点(染色体位串)的表现型;健全性:GA编码空间中的染色体位串必须对应问题空间中的某一潜在解;非冗余性:染色体和潜在解必须一一对应.这里我们通过采用二进制的形式来解决编码问题,将某个变量值代表的个体表示为一个{0,1}二进制串.当然,串长取决于求解的精度.如果要设定求解精度到六位小数,由于区间长度为,则必须将闭区间分为等分.因为所以编码的二进制串至少需要22位.将一个二进制串(b21b20b19…b1b0)转化为区间内对应的实数值很简单,只需采取以下两步(Matlab程序参见附录4):1)将一个二进制串(b21b20b19…b1b0)代表的二进制数化为10进制数:2)对应的区间内的实数:例如,一个二进制串a=<0111>表示实数0.637197.=(0111)2=2288967二进制串<0000>,<1111>,则分别表示区间的两个端点值-1和2.利用这种方法我们就完成了遗传算法的第一步——编码,这种二进制编码的方法完全符合上述的编码的三个原则.首先我们来随机的产生一个个体数为4个的初始群体如下:pop(1)={<1110>, %% a1<0010>, %% a2<0000>, %% a3<0101>} %% a4(Matlab程序参见附录2)化成十进制的数分别为:pop(1)={ 1.523032,0.574022 ,-0.697235 ,0.247238 }接下来我们就要解决每个染色体个体的适应值问题了.(2)定义适应函数和适应值由于给定的目标函数在内的值有正有负,所以必须通过建立适应函数与目标函数的映射关系,保证映射后的适应值非负,而且目标函数的优化方向应对应于适应值增大的方向,也为以后计算各个体的入选概率打下基础.对于本题中的最大化问题,定义适应函数,采用下述方法:式中既可以是特定的输入值,也可以是当前所有代或最近K代中的最小值,这里为了便于计算,将采用了一个特定的输入值.若取,则当时适应函数;当时适应函数.由上述所随机产生的初始群体,我们可以先计算出目标函数值分别如下(Matlab程序参见附录3):f [pop(1)]={ 1.226437 , 1.318543 , -1.380607 , 0.933350 }然后通过适应函数计算出适应值分别如下(Matlab程序参见附录5、附录6):取,g[pop(1)]= { 2.226437 , 2.318543 , 0 , 1.933350 }(3)确定选择标准这里我们用到了适应值的比例来作为选择的标准,得到的每个个体的适应值比例叫作入选概率.其计算公式如下:对于给定的规模为n的群体pop={},个体的适应值为,则其入选概率为由上述给出的群体,我们可以计算出各个个体的入选概率.首先可得,然后分别用四个个体的适应值去除以,得:P(a1)=2.226437 / 6.478330 = 0.343675 %% a1P(a2)=2.318543 / 6.478330 = 0.357892 %% a2P(a3)= 0 / 6.478330 = 0 %% a3P(a4)=1.933350 / 6.478330 = 0.298433 %% a4(Matlab程序参见附录7)(4)产生种群计算完了入选概率后,就将入选概率大的个体选入种群,淘汰概率小的个体,并用入选概率最大的个体补入种群,得到与原群体大小同样的种群(Matlab 程序参见附录8、附录11).要说明的是:附录11的算法与这里不完全相同.为保证收敛性,附录11的算法作了修正,采用了最佳个体保存方法(elitist model),具体内容将在后面给出介绍.由初始群体的入选概率我们淘汰掉a3,再加入a2补足成与群体同样大小的种群得到newpop(1)如下:newpop(1)={<1110>, %% a1<0010>, %% a2<0010>, %% a2<0101>} %% a4(5)交叉交叉也就是将一组染色体上对应基因段的交换得到新的染色体,然后得到新的染色体组,组成新的群体(Matlab程序参见附录9).我们把之前得到的newpop(1)的四个个体两两组成一对,重复的不配对,进行交叉.(可以在任一位进行交叉)<110101110 1001100011110>, <0010>交叉得:<100001100 1010001000010>, <1110><10000110010100 01000010>, <0101>交叉得:<01101010011011 10010101>, <0010>通过交叉得到了四个新个体,得到新的群体jchpop (1)如下:jchpop(1)={<0010>,<1110>,<0101>,<0010>}这里采用的是单点交叉的方法,当然还有多点交叉的方法,不过有些烦琐,这里就不着重介绍了.(6)变异变异也就是通过一个小概率改变染色体位串上的某个基因(Matlab程序参见附录10).现把刚得到的jchpop(1)中第3个个体中的第9位改变,就产生了变异,得到了新的群体pop(2)如下:pop(2)= {<0010>,<1110>,<0101>,<0010> }然后重复上述的选择、交叉、变异直到满足终止条件为止.(7)终止条件遗传算法的终止条件有两类常见条件:(1)采用设定最大(遗传)代数的方法,一般可设定为50代,此时就可能得出最优解.此种方法简单易行,但可能不是很精确(Matlab程序参见附录1);(2)根据个体的差异来判断,通过计算种群中基因多样性测度,即所有基因位相似程度来进行控制.3.遗传算法的收敛性前面我们已经就遗传算法中的编码、适应度函数、选择、交叉和变异等主要操作的基本内容及设计进行了详细的介绍.作为一种搜索算法,遗传算法通过对这些操作的适当设计和运行,可以实现兼顾全局搜索和局部搜索的所谓均衡搜索,具体实现见下图2所示.图2 均衡搜索的具体实现图示应该指出的是,遗传算法虽然可以实现均衡的搜索,并且在许多复杂问题的求解中往往能得到满意的结果,但是该算法的全局优化收敛性的理论分析尚待解决.目前普遍认为,标准遗传算法并不保证全局最优收敛.但是,在一定的约束条件下,遗传算法可以实现这一点.下面我们不加证明地罗列几个定理或定义,供读者参考(在这些定理的证明中,要用到许多概率论知识,特别是有关马尔可夫链的理论,读者可参阅有关文献).定理1 如果变异概率为,交叉概率为,同时采用比例选择法(按个体适应度占群体适应度的比例进行复制),则标准遗传算法的变换矩阵P是基本的.定理2 标准遗传算法(参数如定理1)不能收敛至全局最优解.由定理2可以知道,具有变异概率,交叉概率为以及按比例选择的标准遗传算法是不能收敛至全局最最优解.我们在前面求解例1时所用的方法就是满足定理1的条件的方法.这无疑是一个令人沮丧的结论.然而,庆幸的是,只要对标准遗传算法作一些改进,就能够保证其收敛性.具体如下:我们对标准遗传算法作一定改进,即不按比例进行选择,而是保留当前所得的最优解(称作超个体).该超个体不参与遗传.最佳个体保存方法(elitist model)的思想是把群体中适应度最高的个体不进行配对交叉而直接复制到下一代中.此种选择操作又称复制(copy).De Jong 对此方法作了如下定义:定义设到时刻t(第t代)时,群体中a*(t)为最佳个体.又设A(t+1)为新一代群体,若A(t+1)中不存在a*(t),则把a*(t)作为A(t+1)中的第n+1个个体(其中,n为群体大小)(Matlab程序参见附录11).采用此选择方法的优点是,进化过程中某一代的最优解可不被交叉和变异操作所破坏.但是,这也隐含了一种危机,即局部最优个体的遗传基因会急速增加而使进化有可能限于局部解.也就是说,该方法的全局搜索能力差,它更适合单峰性质的搜索空间搜索,而不是多峰性质的空间搜索.所以此方法一般都与其他选择方法结合使用.定理3 具有定理1所示参数,且在选择后保留当前最优值的遗传算法最终能收敛到全局最优解.当然,在选择算子作用后保留当前最优解是一项比较复杂的工作,因为该解在选择算子作用后可能丢失.但是定理3至少表明了这种改进的遗传算法能够收敛至全局最优解.有意思的是,实际上只要在选择前保留当前最优解,就可以保证收敛,定理4描述了这种情况.定理4 具有定理1参数的,且在选择前保留当前最优解的遗传算法可收敛于全局最优解.例2:设,求,编码长度为5,采用上述定理4所述的“在选择前保留当前最优解的遗传算法”进行二、相关函数(命令)及简介本实验的程序中用到如下一些基本的Matlab函数:ones, zeros, sum, size, length, subs, double 等,以及 for, while 等基本程序结构语句,读者可参考前面专门关于Matlab的介绍,也可参考其他数学实验章节中的“相关函数(命令)及简介”内容,此略.三、实验内容上述例1的求解过程为:群体中包含六个染色体,每个染色体用22位0—1码,变异概率为0.01,变量区间为,取Fmin=,遗传代数为50代,则运用第一种终止条件(指定遗传代数)的Matlab程序为:[Count,Result,BestMember]=Genetic1(22,6,'-x*x+2*x+0.5',-1,2,-2,0.01,50)执行结果为:Count =50Result =1.0316 1.0316 1.0316 1.0316 1.0316 1.03161.4990 1.4990 1.4990 1.4990 1.4990 1.4990BestMember =1.03161.4990图2 例1的计算结果(注:上图为遗传进化过程中每一代的个体最大适应度;而下图为目前为止的个体最大适应度——单调递增)我们通过Matlab软件实现了遗传算法,得到了这题在第一种终止条件下的最优解:当取1.0316时,.当然这个解和实际情况还有一点出入(应该是取1时,),但对于一个计算机算法来说已经很不错了.我们也可以编制Matlab程序求在第二种终止条件下的最优解.此略,留作练习.实践表明,此时的遗传算法只要经过10代左右就可完成收敛,得到另一个“最优解”,与前面的最优解相差无几.四、自己动手1.用Matlab编制另一个主程序Genetic2.m,求例1的在第二种终止条件下的最优解.提示:一个可能的函数调用形式以及相应的结果为:[Count,Result,BestMember]=Genetic2(22,6,'-x*x+2*x+0.5',-1,2,-2,0.01,0.00001)Count =13Result =1.0392 1.0392 1.0392 1.0392 1.0392 1.03921.4985 1.4985 1.4985 1.4985 1.4985 1.4985BestMember =1.03921.4985可以看到:两组解都已经很接近实际结果,对于两种方法所产生的最优解差异很小.可见这两种终止算法都是可行的,而且可以知道对于例1的问题,遗传算法只要经过10代左右就可以完成收敛,达到一个最优解.2.按照例2的具体要求,用遗传算法求上述例2的最优解.3.附录9子程序 Crossing.m中的第3行到第7行为注解语句.若去掉前面的%号,则程序的算法思想有什么变化?4.附录9子程序 Crossing.m中的第8行至第13行的程序表明,当Dim(1)>=3时,将交换数组Population的最后两行,即交换最后面的两个个体.其目的是什么?5.仿照附录10子程序Mutation.m,修改附录9子程序 Crossing.m,使得交叉过程也有一个概率值(一般取0.65~0.90);同时适当修改主程序Genetic1.m 或主程序Genetic2.m,以便代入交叉概率.6.设,求,要设定求解精度到15位小数.。
谢菲尔德大学Matlab遗传算法工具箱改进与应用

产生初始化种群个体适应值计算结束是满足结束条件否是迁移操作满足迁移条件否交叉(重组)操作变异操作选择操作产生下代种群谢菲尔德大学Matlab 遗传算法工具箱改进与应用王琦,陈发威,黄斌达(南昌航空大学飞行器工程学院,南昌330063)1引言遗传算法是一种借鉴生物界自然选择和进化机制发展起来的,具有并行、随机、自适应搜索算法[1]。
遗传算法从问题潜在的一个解群开始,种群是由每个个体通过某种方式的编码组成,初代种群随机产生,之后逐代地优胜劣汰,经过选择、交叉、变异等遗传操作产生比前代更加适应的下一代种群,末代种群中最优的个体为问题的近似最优解[2]。
与传统搜索和优化算法相比,搜索的点是并行的而不是单点,仅需要目标函数和相对的适应度函数,不需要辅助信息。
目前遗传算法已经广泛应用于函数优化、组合优化、生产调度、自动控制、图像处理等领域。
但在算法精度、可靠度等方面还没有有效的定量分析方法,另外也存在如编码表示的不准确性、容易出现过早收敛等不足[2]。
2工具箱简介Matlab 是一种集合了数值分析、矩阵运算、信号处理、图形显示于一体的高性能的数值计算和可视化软件,Matlab 具有良好的开放性和可扩充性,Matlab 还可以方便地与FORTRAN 、C 等语言接口。
另外用户可以根据自己具体的计算需求开发自己的工具箱[2]。
谢菲尔德大学遗传算法工具箱使用Matlab 将遗传操作的每一部分编写一个M 文件,通过函数间的相互调用来完成遗传计算,从而建立了能够完成遗传计算的一套通用工具。
2.1种群表示和初始化工具箱支持二进制、整数和浮点数编码。
其中二进制支持格雷码编码。
工具箱提供了二进制和实值之间的转化函数。
初始化种群由随机函数产生。
2.2适应度计算适应度函数用于转化目标函数值,给每个个体一个非负的价值数。
工具箱支持Goldberg 的偏移法和比率法以及贝克的线性评估法,另外支持非线性评估。
2.3选择函数选择函数有轮盘赌选择和随机遍历抽样选择,还有一个高级入口函数支持多种群遗传操作。
遗传算法的Matlab实现讲解

Matlab函数调用实现GA
• Matlab的GA函数
[x fval] = ga(@fitnessfun, nvars, [],[],[],[],[],[],[], options);
fitnessfcn — Fitness function nvars — Number of variables for the problem Aineq — Matrix for inequality constraints Bineq — Vector for inequality constraints Aeq — Matrix for equality constraints Beq — Vector for equality constraints LB — Lower bound on x UB — Upper bound on x nonlcon — Nonlinear constraint Function options — Options structure
global Cmin;
Cmin=-10^6; popsize=50; %群体大小 Gene=20; chromlength=20; %字符串长 度(个体长度) pc=0.8; %交叉概率 pm=0.01; %变异概率 Xmax=10; Xmin=0;
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的 个体及其适应值
Matlab函数调用实现GA
• GA函数调用步骤
第一步:编写适应度函数; 第二步:对GA参数进行设置; options = gaoptimset(‘参数名’, 参数值, …, ‘参数名’, 参数值) 例:options = gaoptimset('PopulationSize', 100) 第三步:调用GA函数; [x fval] = ga(@fitnessfun, nvars) [x fval exitflag output population scores] = ga(@fitnessfcn, nvars) [x fval] = ga(@fitnessfun, nvars, [],[],[],[],[],[],[],options);
遗传算法解决TSP问题的matlab程序

1.遗传算法解决TSP 问题(附matlab源程序)2.知n个城市之间的相互距离,现有一个推销员必须遍访这n个城市,并且每个城市3.只能访问一次,最后又必须返回出发城市。
如何安排他对这些城市的访问次序,可使其4.旅行路线的总长度最短?5.用图论的术语来说,假设有一个图g=(v,e),其中v是顶点集,e是边集,设d=(dij)6.是由顶点i和顶点j之间的距离所组成的距离矩阵,旅行商问题就是求出一条通过所有顶7.点且每个顶点只通过一次的具有最短距离的回路。
8.这个问题可分为对称旅行商问题(dij=dji,,任意i,j=1,2,3,…,n)和非对称旅行商9.问题(dij≠dji,,任意i,j=1,2,3,…,n)。
10.若对于城市v={v1,v2,v3,…,vn}的一个访问顺序为t=(t1,t2,t3,…,ti,…,tn),其中11.ti∈v(i=1,2,3,…,n),且记tn+1= t1,则旅行商问题的数学模型为:12.min l=σd(t(i),t(i+1)) (i=1,…,n)13.旅行商问题是一个典型的组合优化问题,并且是一个np难问题,其可能的路径数目14.与城市数目n是成指数型增长的,所以一般很难精确地求出其最优解,本文采用遗传算法15.求其近似解。
16.遗传算法:17.初始化过程:用v1,v2,v3,…,vn代表所选n个城市。
定义整数pop-size作为染色体的个数18.,并且随机产生pop-size个初始染色体,每个染色体为1到18的整数组成的随机序列。
19.适应度f的计算:对种群中的每个染色体vi,计算其适应度,f=σd(t(i),t(i+1)).20.评价函数eval(vi):用来对种群中的每个染色体vi设定一个概率,以使该染色体被选中21.的可能性与其种群中其它染色体的适应性成比例,既通过轮盘赌,适应性强的染色体被22.选择产生后台的机会要大,设alpha∈(0,1),本文定义基于序的评价函数为eval(vi)=al23.pha*(1-alpha).^(i-1) 。
遗传算法优化的matlab案例

遗传算法(Genetic Algorithm,GA)是一种模拟生物进化过程的搜索和优化算法,通过模拟生物的遗传、交叉和变异操作来寻找问题的最优解。
它以一种迭代的方式生成和改进解决方案,并通过评估每个解决方案的适应度来选择下一代解决方案。
在Matlab中,遗传算法优化工具箱提供了方便的函数和工具,可以帮助用户快速开发和实现遗传算法优化问题。
下面,我们以一个简单的最优化问题为例,演示在Matlab中如何使用遗传算法优化工具箱进行优化。
假设我们要优化一个简单的函数f(x),其中x是一个实数。
我们的目标是找到使得f(x)取得最小值的x值。
具体来说,我们将优化以下函数: f(x) = x² - 4x + 4首先,我们在Matlab中定义目标函数f(x)的句柄(用于计算函数值)和约束条件(如果有的话)。
代码如下:function y = testfunction(x)y = x^2 - 4*x + 4;end接下来,我们需要使用遗传算法优化工具箱的函数ga来进行优化。
我们需要指定目标函数的句柄、变量的取值范围和约束条件(如果有的话),以及其他一些可选参数。
以下是一个示例代码:options = gaoptimset('Display', 'iter'); % 设置显示迭代过程lb = -10; % 变量下界ub = 10; % 变量上界[x, fval] = ga(@testfunction, 1, [], [], [], [], lb, ub, [], options);在上面的代码中,gaoptimset函数用于设置遗传算法的参数。
在这里,我们使用了可选参数'Display',它的值设置为'iter',表示显示迭代过程。
变量lb和ub分别指定了变量的取值范围,我们在这里将其设置为-10到10之间的任意实数。
横线[]表示没有约束条件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于遗传算法的路径规划MATLAB实现主程序:clear all;close all;t=23; %过程点个数=t-1s=500; %种群规模pc=0.90; %交叉概率pm=0.20; %变异概率pop=zeros(s,t);for i=1:spop(i,1:t-1)=randperm(t-1);endfor k=1:1:2000 %进化代次数kif mod(k,10)==1kendpop=lujingdis(pop);c=15;%选择淘汰个数pop=lujingselect(pop,c);p=rand;if p>=pcpop=lujingcross(pop);endif p>=pmpop=lujingmutate(pop);Endendpopmin(pop(:,t))J=pop(:,t);fi=1./J;[Oderfi,Indexfi]=sort(fi); %安排fi从小到大BestS=pop(Indexfi(s),:); %使BestS=E(m),m即是属于max(fi)的Indexfi I=BestS;x=[2 3 6 10 14 17 22 20 23 25 30 28 25 21 29 16 18 15 9 11 6 5 ];y=[5 26 14 29 27 24 28 22 26 30 30 17 13 15 4 13 3 1 6 2 2 7];%过程点坐标% x=[1 2 3 4 6 9 11 10 8 9 6 4]; %12个过程点的坐标% y=[1 2 3 4 8 10 11 9 5 2 1 2];for i=1:1:t-1x1(i)=x(I(i));y1(i)=y(I(i));endx(t)=x(I(1));y(t)=y(I(1));a = [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 11 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 11 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 11 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 01 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 11 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 11 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 10 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1];%31*31栅格%a = [1 1 1 1 1 1 1 1 1 11 1 1 0 0 1 1 1 0 01 0 1 0 0 1 1 1 1 10 0 1 1 1 1 0 1 1 01 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 11 0 0 1 1 0 1 1 1 11 1 1 1 1 1 1 1 1 01 1 1 1 1 1 1 1 1 10 1 1 1 1 1 0 0 1 1];%11*11栅格b = a;b(end+1,end+1) = 0;colormap([0 0 0;1 1 1]),pcolor(b)axis image xy;%绘制栅格图hold on;figure(1);plot(x,y,'-or');适应度函数程序:lujingdis.mfunction [pop]=qiujuli(pop)[s,t]=size(pop);for i=1:1:sdd=0;for j=1:1:t-2dd=dd+lujingcalculate(pop(i,j),pop(i,j+1));endpop(i,t)=dd;End距离计算程序:lujingcalculate.mfunction [d]=juli(m,n)x=[2 3 6 10 14 17 22 20 23 25 30 28 25 21 29 16 18 15 9 11 6 5 ]; y=[5 26 14 29 27 24 28 22 26 30 30 17 13 15 4 13 3 1 6 2 2 7]; %x=[1 2 3 4 6 9 11 10 8 9 6 4];% y=[1 2 3 4 8 10 11 9 5 2 1 2];d=sqrt((x(m)-x(n))^2+(y(m)-y(n))^2);选择算子程序:lujingselect.mfunction [pop]=select(pop,k)[s,t]=size(pop);m11=(pop(:,t));m11=m11';mmax=zeros(1,k);mmin=zeros(1,k);num=1;while num<k+1[a,mmax(num)]=max(m11);m11(mmax(num))=a;num=num+1;endnum=1;while num<k+1[b,mmin(num)]=min(m11);m11(mmin(num))=a;num=num+1;endfor i=1:kpop(mmax(i),:)=pop(mmin(i),:);End交叉算子程序:lujingcross.mfunction [pop]=cross(pop)[s,t]=size(pop);pop1=pop;for i=1:2:sm=randperm(t-3)+1;crosspoint(1)=min(m(1),m(2));crosspoint(2)=max(m(1),m(2));for j=1:crosspoint(1)while find(pop(i,crosspoint(1)+1:crosspoint(2))==pop(i,j))zhi=find(pop(i,crosspoint(1)+1:crosspoint(2))==pop(i,j));y=pop(i+1,crosspoint(1)+zhi);pop(i,j)=y;endendfor j=crosspoint(2)+1:t-1while find(pop(i,crosspoint(1)+1:crosspoint(2))==pop(i,j))zhi=find(pop(i,crosspoint(1)+1:crosspoint(2))==pop(i,j));y=pop(i+1,crosspoint(1)+zhi);pop(i,j)=y;endendend[pop]=lujingdis(pop);for i=1:sif pop1(i,t)<pop(i,t)pop(i,:)=pop1(i,:);endEnd变异算子程序:lujingmutate.mfunction [pop] = mutate(pop)[s,t]=size(pop);pop1=pop;for i=1:2:sm=randperm(t-3)+1;mutatepoint(1)=min(m(1),m(2));mutatepoint(2)=max(m(1),m(2));mutate =round((mutatepoint(2)-mutatepoint(1))/2-0.5);for j=1:mutatezhong=pop(i,mutatepoint(1)+j);pop(i,mutatepoint(1)+j)=pop(i,mutatepoint(2)-j);pop(i,mutatepoint(2)-j)=zhong;endend[pop]=lujingdis(pop);for i=1:sif pop1(i,t)<pop(i,t)pop(i,:)=pop1(i,:);endend。