遗传算法求解函数优化问题的比较
遗传算法遗传算法

(5)遗传算法在解空间进行高效启发式搜索,而非盲 目地穷举或完全随机搜索;
(6)遗传算法对于待寻优的函数基本无限制,它既不 要求函数连续,也不要求函数可微,既可以是数学解 析式所表示的显函数,又可以是映射矩阵甚至是神经 网络的隐函数,因而应用范围较广;
(7)遗传算法具有并行计算的特点,因而可通过大规 模并行计算来提高计算速度,适合大规模复杂问题的 优化。
26
(4)基本遗传算法的运行参数 有下述4个运行参数需要提前设定:
M:群体大小,即群体中所含个体的数量,一般取为 20~100; G:遗传算法的终止进化代数,一般取为100~500; Pc:交叉概率,一般取为0.4~0.99;
Pm:变异概率,一般取为0.0001~0.1。
27
10.4.2 遗传算法的应用步骤
遗传算法简称GA(Genetic Algorithms)是1962年 由美国Michigan大学的Holland教授提出的模拟自然 界遗传机制和生物进化论而成的一种并行随机搜索最 优化方法。
遗传算法是以达尔文的自然选择学说为基础发展起 来的。自然选择学说包括以下三个方面:
1
(1)遗传:这是生物的普遍特征,亲代把生物信息交 给子代,子代总是和亲代具有相同或相似的性状。生 物有了这个特征,物种才能稳定存在。
18
(3)生产调度问题 在很多情况下,采用建立数学模型的方法难以对生
产调度问题进行精确求解。在现实生产中多采用一些 经验进行调度。遗传算法是解决复杂调度问题的有效 工具,在单件生产车间调度、流水线生产车间调度、 生产规划、任务分配等方面遗传算法都得到了有效的 应用。
19
(4)自动控制。 在自动控制领域中有很多与优化相关的问题需要求
10
一种遗传蚁群融合算法的函数优化求解问题

一种遗传蚁群融合算法的函数优化求解问题摘要:遗传算法是一种借鉴生物界自然选择和自然遗传机制的随机化搜索方法,可直接对结构对象进行操作,但是如果兼顾收敛速度和解的品质两个指标,单纯的遗传算法未必表现出原理本身的优越性。
针对上述问题,提出一种新的遗传蚁群融合算法,利用蚁群算法的正反馈机制,来提高遗传算法运行的速度和效率,从而更好更快的解决函数优化求解问题。
关键词:遗传算法蚁群算法算法融合函数优化遗传算法[1](genetic algorithm,GA)是一种模拟自然选择和遗传进化机制的优化算法,它是由美国Michigan大学的Holland教授于20世纪70年代提出的。
它的主要特点是简单、通用、鲁棒性强,适用于并行分布处理,应用范围广。
蚁群算法[2](ant colony algorithm,ACA)是由意大利学者Dorigo于20世纪90年代初在他自己的博士论文中提出。
它是一种最新发展的模拟昆虫王国中蚂蚁群体觅食行为的仿生优化算法,该算法采用了正反馈并行自催化机制,具有较强的鲁棒性、优良的分布式计算机制、易于与其它方法结合等优点。
但是它的缺点是运算初期信息素匮乏,求解速度缓慢。
优化问题的求解在遗传算法研究中占很大比重,诸如TSP等组合优化问题一直是遗传算法十分活跃的研究课题。
尽管遗传算法比其它传统搜索方法有更强的鲁棒性,但它对于算法计算过程中的反馈信息却没有利用,往往由此导致无为的冗余迭代,从而使得求解的效率不断降低。
且遗传算法更善长全局搜索而局部搜索能力却不足。
遗传算法可以用极快的速度达到最优解的90%左右,但要达到真正的最优解则要花费很长的时间。
一些对比实验还表明,如果兼顾收敛速度和解的品质两个指标,单纯的遗传算法方法未必比其它搜索方法更优越。
为此,除了要进一步改进基本理论和方法外,还要采用和神经网络、模拟退火或专家系统等其它方法结合的策略。
许多研究结果表明,采用这种混合模型可有效提高遗传算法的局部搜索能力,从而进一步改善其收敛速度和解的品质。
LabVIEW中的遗传算法和优化问题求解

LabVIEW中的遗传算法和优化问题求解LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种广泛应用于工程、科学和教育领域的可视化开发环境和图形编程语言,它的强大功能和灵活性使得它在工程领域中被广泛使用。
在LabVIEW中,遗传算法(Genetic Algorithm)被广泛应用于优化问题的求解。
遗传算法是一种基于生物进化理论的优化算法,它通过模拟生物进化的过程,通过选择、交叉和变异的操作来搜索最优解。
在LabVIEW 中,遗传算法通过使用遗传算法工具箱来实现。
使用遗传算法求解优化问题的一般步骤如下:1. 定义问题:首先需要明确优化问题是什么,以及问题的目标函数是什么。
例如,我们要最小化一个函数或者使得某个约束条件满足等。
2. 设计编码方案:遗传算法是基于染色体编码的,我们需要设计一个合适的编码方案来表示问题的解空间。
例如,可以使用二进制编码、实数编码或者排列编码等。
在LabVIEW中,可以使用BitArray或者RealArray来表示染色体。
3. 初始化种群:种群是遗传算法的基本单位,它由多个个体组成。
在LabVIEW中,可以使用一个数组来表示一个种群,数组的每个元素表示一个个体。
4. 评价个体适应度:每个个体都有一个适应度值,表示其在问题中的优劣程度。
在LabVIEW中,可以根据定义的目标函数来计算个体的适应度值。
5. 选择操作:根据个体的适应度值,选择一定数量的个体用于后续的交叉和变异操作。
选择操作根据适应度值的大小来进行,适应度值越大的个体被选中的概率越高。
6. 交叉操作:选择的个体通过染色体的交叉操作来生成新的个体。
交叉操作类似于生物中的基因交换过程,在LabVIEW中可以使用Crossover函数来实现。
7. 变异操作:对于新生成的个体,通过染色体的变异操作来引入新的基因变化。
变异操作类似于生物中的基因突变过程,在LabVIEW中可以使用Mutation函数来实现。
最佳遗传算法参数调优方法

最佳遗传算法参数调优方法遗传算法是一种模拟自然界中生物进化过程的优化算法。
在解决复杂问题和优化函数方面具有广泛的应用。
然而,遗传算法的性能很大程度上取决于参数的选择。
本文将介绍一些最佳的遗传算法参数调优方法,以帮助提高算法的性能。
1. 交叉率的选择交叉是遗传算法中的一个重要操作,用于产生新的个体。
交叉率决定了父代个体中被交叉的比例。
如果交叉率过高,可能导致早熟收敛和搜索空间的过早收缩。
相反,如果交叉率过低,可能导致搜索的速度过慢。
因此,选择一个合适的交叉率至关重要。
一种常见的方法是采用自适应交叉率。
在算法开始时,可以使用较高的交叉率,以便更好地探索搜索空间。
随着算法的进行,可以逐渐降低交叉率,以便更多地利用已经找到的优秀解。
这样可以平衡探索和利用的关系,提高算法的性能。
2. 变异率的选择变异是遗传算法中的另一个重要操作,用于引入新的基因信息。
变异率决定了个体中基因发生变异的概率。
如果变异率过高,可能导致搜索过于随机,难以收敛到最优解。
相反,如果变异率过低,可能导致搜索的局部最优解。
一种常见的方法是采用自适应变异率。
在算法开始时,可以使用较高的变异率,以便更好地探索搜索空间。
随着算法的进行,可以逐渐降低变异率,以便更多地利用已经找到的优秀解。
这样可以平衡探索和利用的关系,提高算法的性能。
3. 种群大小的选择种群大小是指每一代中个体的数量。
种群大小的选择对算法的性能有很大影响。
如果种群大小过小,可能导致搜索的多样性不足,难以找到全局最优解。
相反,如果种群大小过大,可能导致计算资源的浪费。
一种常见的方法是采用自适应种群大小。
在算法开始时,可以使用较大的种群大小,以便更好地探索搜索空间。
随着算法的进行,可以逐渐减小种群大小,以便更多地利用已经找到的优秀解。
这样可以平衡探索和利用的关系,提高算法的性能。
4. 选择算子的选择选择算子用于选择较优个体作为下一代的父代。
选择算子的选择对算法的性能有很大影响。
常见的选择算子有轮盘赌选择、锦标赛选择等。
基本遗传算法及的应用举例

基本遗传算法及应用举例遗传算法(Genetic Algorithms)是一种借鉴生物界自然选择和自然遗传机制的随机、高度并行、自适应搜索算法。
遗传算法是多学科相互结合与渗透的产物。
目前它已发展成一种自组织、自适应的多学科技术。
针对各种不同类型的问题,借鉴自然界中生物遗传与进化的机理,学者们设计了不同的编码方法来表示问题的可行解,开发出了许多不同环境下的生物遗传特征。
这样由不同的编码方法和不同的遗传操作方法就构成了各种不同的遗传算法。
但这些遗传算法有共同的特点,即通过对生物的遗传和进化过程中的选择、交叉、变异机理的模仿来完成对最优解的自适应搜索过程。
基于此共同点,人们总结出了最基本的遗传算法——基本遗传算法。
基本遗传算法只使用选择、交叉、变异三种基本遗传操作。
遗传操作的过程也比较简单、容易理解。
同时,基本遗传算法也是其他一些遗传算法的基础与雏形。
1.1.1 编码方法用遗传算法求解问题时,不是对所求解问题的实际决策变量直接进行操作,而是对表示可行解的个体编码的操作,不断搜索出适应度较高的个体,并在群体中增加其数量,最终寻找到问题的最优解或近似最优解。
因此,必须建立问题的可行解的实际表示和遗传算法的染色体位串结构之间的联系。
在遗传算法中,把一个问题的可行解从其解空间转换到遗传算法所能处理的搜索空间的转换方法称之为编码。
反之,个体从搜索空间的基因型变换到解空间的表现型的方法称之为解码方法。
编码是应用遗传算法是需要解决的首要问题,也是一个关键步骤。
迄今为止人们已经设计出了许多种不同的编码方法。
基本遗传算法使用的是二进制符号0和1所组成的二进制符号集{0,1},也就是说,把问题空间的参数表示为基于字符集{0,1}构成的染色体位串。
每个个体的染色体中所包含的数字的个数L 称为染色体的长度或称为符号串的长度。
一般染色体的长度L 为一固定的数,如X=10011100100011010100表示一个个体,该个体的染色体长度L=20。
组合优化问题的遗传算法优化研究

组合优化问题的遗传算法优化研究在当今数字化和信息化的时代,组合优化问题在各个领域中频繁出现,如物流配送路线规划、生产调度、资源分配等。
这些问题的求解往往具有极高的复杂性和计算难度,传统的优化方法在处理大规模问题时可能会陷入困境。
而遗传算法作为一种智能优化算法,为解决组合优化问题提供了一种全新的思路和有效的手段。
组合优化问题通常是在有限的解空间中寻找最优解,使得某个目标函数达到最优值。
然而,由于解空间的规模通常非常庞大,通过穷举所有可能的解来找到最优解几乎是不可能的。
例如,在旅行商问题中,要从多个城市中找到一条最短的旅行路线,随着城市数量的增加,可能的路线数量呈指数级增长。
遗传算法是一种基于自然选择和遗传机制的随机搜索算法。
它模拟了生物进化的过程,通过对一组潜在解(称为种群)进行选择、交叉和变异操作,逐步迭代优化,以找到最优解或近似最优解。
在遗传算法中,首先需要对问题的解进行编码。
常见的编码方式有二进制编码、实数编码等。
以旅行商问题为例,可以使用城市的排列顺序作为编码,例如1, 3, 2, 4, 5表示从城市 1 出发,依次经过城市 3、2、4、最后到达城市 5 的路线。
接下来,初始化一个种群,即生成一组随机的解。
然后,通过适应度函数来评估每个解的优劣。
适应度函数的设计是关键,它直接反映了问题的目标。
对于旅行商问题,适应度可以是路线的总长度,长度越短,适应度越高。
选择操作是根据适应度从当前种群中选择一部分优秀的个体,作为下一代种群的基础。
常见的选择方法有轮盘赌选择、锦标赛选择等。
交叉操作则是将选中的个体进行部分基因交换,以产生新的个体。
变异操作则是对个体的某些基因进行随机改变,以增加种群的多样性。
通过不断重复上述过程,种群逐渐朝着更优的方向进化。
在这个过程中,遗传算法能够有效地避免陷入局部最优解,因为它同时探索了多个解的空间。
然而,遗传算法在解决组合优化问题时也存在一些挑战。
例如,编码方式的选择可能会影响算法的性能;适应度函数的设计不当可能导致算法收敛速度慢或无法找到最优解;交叉和变异操作的参数设置也需要根据具体问题进行调整。
二进制遗传算法求himmelblau函数的最优解 -回复
二进制遗传算法求himmelblau函数的最优解-回复什么是二进制遗传算法?二进制遗传算法(Binary Genetic Algorithm,简称BGA)是一种优化算法,通常用于解决复杂的问题。
它模拟了自然界中的进化过程,通过二进制编码表示潜在解,并使用遗传操作(如交叉和变异)来搜索潜在解空间。
BGA广泛应用于在离散问题中寻找最优解。
什么是Himmelblau函数?Himmelblau函数,又称为Himmelblau's function,是数学上的一个多模态函数。
它与其他经典优化问题不同,因为它具有多个局部最优解。
函数的形式如下:f(x, y) = (x^2 + y - 11)^2 + (x + y^2 - 7)^2该函数的最小值点共有四个,分别为f(3, 2),f(-2.805118, 3.131312),f(-3.779310, -3.283186),f(3.584428, -1.848126)。
我们将使用BGA来找到这四个最优解。
BGA求解Himmelblau函数的最优解步骤如下:1. 初始化种群在遗传算法中,种群是由潜在解组成的集合。
对于BGA,我们使用二进制编码表示解。
在本例中,我们可以使用两个7位二进制串来表示变量x和y的取值范围在[-5, 5]之间的解。
同时,可以通过设置种群中个体的数量以及二进制串的长度来影响算法的性能。
我们在这里选择种群数为50,每个个体的二进制串长度为7。
2. 评估适应度适应度函数用于评估每个个体的性能。
在本例中,我们使用Himmelblau 函数的值作为适应度函数。
通过计算每个个体对应的二进制串对应的x和y值,然后代入Himmelblau函数中计算得到适应度。
3. 选择选择操作用于选择下一代中的个体。
一种常用的选择方法是轮盘赌选择,其中个体被随机选择用于交叉和变异操作。
适应度越高的个体在选择过程中被选择的概率也越高。
4. 交叉交叉操作模拟了生物进化中的基因重组。
组合优化问题的遗传算法求解
组合优化问题的遗传算法求解一、简介组合优化问题指的是在有限个元素中选取某些元素,以达到最优化的目标。
组合优化问题的求解在实际中应用广泛,如旅行商模型、调度问题、网络优化等领域。
但是这类问题求解面临着复杂度高、难以精确求解等困难。
在这种情况下,遗传算法是一种有效的求解方法。
遗传算法是一种基于达尔文进化论的计算方法,通过模拟生物进化的方式求解组合优化问题。
本文将介绍遗传算法在组合优化问题求解中的应用,着重介绍遗传算法基本框架、编码方法、适应度函数的构建以及遗传算法的优化策略等。
二、遗传算法基本框架遗传算法的求解过程主要包括初始种群生成、适应度评价、选择操作、交叉操作和变异操作等基本步骤。
(1)初始种群生成遗传算法首先需要生成一定数量的初始种群,初始种群可以通过随机生成或其他启发式算法生成。
例如,在旅行商问题中,初始种群可以随机生成多条路径。
(2)适应度评价适应度函数是遗传算法的核心,适应度函数的构建直接关系到遗传算法的性能。
适应度函数是对每个染色体的优劣进行量化评价,用以指导后续优化操作。
适应度函数构建需要根据问题特点进行设计。
(3)选择操作选择操作是指将上一代种群中的某些个体复制到下一代种群中,个体复制的概率与其适应度大小有关。
适应度越高的个体被选择的概率越大,从而使适应度高的个体更有机会进化到下一代。
选择操作可以通过轮盘赌选择、锦标赛选择等方式实现。
(4)交叉操作交叉操作是指对选择后的个体进行杂交,交叉操作是遗传算法的核心,它通过随机杂交个体的染色体,产生新的杂交染色体,从而增加搜索空间。
交叉操作可分为单点交叉、多点交叉、均匀交叉等。
(5)变异操作变异操作是指在交叉操作之后对个体发生变异,从而产生新的个体。
变异操作是通过随机改变染色体中的基因,从而增加多样性。
变异操作可以是简单变异、非一致变异、高斯变异等。
以上是遗传算法的基本框架,遗传算法的性能因素有适应度函数的设计、进化代数、群体大小、交叉概率、变异概率等。
组合优化问题中的遗传算法优化研究
组合优化问题中的遗传算法优化研究随着信息技术不断发展,计算机算法也在不断创新和优化。
其中,遗传算法在组合优化问题中得到了广泛的应用和重视。
本文将从遗传算法的基本原理、组合优化问题、遗传算法优化等方面展开讨论。
一、遗传算法的基本原理遗传算法是一种基于生物进化过程的优化算法,通过模拟进化过程,寻求给定问题的优化解。
遗传算法包括以下基本步骤:1.初始化种群,即初始候选解的随机生成。
2.选择算子,即选取适应度函数值高的候选解。
3.交叉算子,即两个父代个体之间产生子代的操作。
4.变异算子,即对种群中的某些个体进行基因突变的操作。
5.根据预设的停止准则,判断是否满足结束条件。
二、组合优化问题组合优化问题是指从一给定集合中选择一定的元素,并使其满足某些条件的问题。
组合优化问题涉及到多个领域,如图论、操作研究、信息学等。
在组合优化问题中,遗传算法可以帮助确定最优解。
组合优化问题通常有以下几个分类:1.背包问题:即在限定容量下,选取可能的物品使得其总价值最大。
2.图问题:即在一张给定的图中找到满足条件的最佳路径或图。
3.集合问题:即在给定一定条件下找到一个最合适的子集。
三、遗传算法优化遗传算法优化在组合优化问题中发挥着重要作用。
在遗传算法优化过程中,我们需要寻找到最优解,即使得适应度函数值最高。
在优化过程中,我们需要考虑以下问题:1.如何定义适应度函数适应度函数是衡量个体成功的度量标准,它需要合理地衡量每个个体的特定性。
适应度函数通常使用一些常见软件包进行计算。
2.如何选取交叉算子和变异算子交叉和变异算子可以影响解的质量。
交叉算子是指选择两个个体并获得两个子代。
在变异算子中,我们可以随机改变某些基因以获得更好的结果。
3.如何确定种群大小和停止准则种群大小和停止准则是遗传算法中最重要的两个参数。
种群的大小可以影响优化效果。
停止准则也非常重要,当满足停止准则时,算法将终止运行并返回结果。
4.如何选择合适的遗传算法模型遗传算法有多种模型,如标准遗传算法、粒子群优化等。
多目标优化问题求解算法研究
多目标优化问题求解算法研究1.引言多目标优化问题在现实生活中是非常常见的。
在这类问题中,决策者需要同时优化多个决策变量,同时满足多个不同的目标函数。
传统的单目标优化问题求解算法无法直接应用于多目标优化问题。
因此,多目标优化问题求解算法的研究一直是优化领域的热点之一。
本文将介绍几种常见的多目标优化问题求解算法以及它们的优缺点。
2.多目标进化算法多目标进化算法是一类基于进化计算理论的解决多目标优化问题的算法。
其中最广为人知的是多目标遗传算法(Multi-Objective Genetic Algorithm,MOGA)。
MOGA通过维护一个种群来搜索多目标优化问题的解。
通过遗传算子(交叉、变异等)不断迭代种群,从而逼近最优解的帕累托前沿。
MOGA的优点是能够并行地搜索多个解,然而其缺点是收敛速度较慢,对参数选择比较敏感。
3.多目标粒子群优化算法多目标粒子群优化算法(Multi-Objective Particle Swarm Optimization,MOPSO)是另一种常见的多目标优化问题求解算法。
粒子群优化算法(Particle Swarm Optimization,PSO)是一种基于群体智能的优化算法,通过模拟鸟群中鸟的移动行为来解决优化问题。
MOPSO对传统PSO进行了扩展,通过引入帕累托支配的概念来维护种群的多样性。
MOPSO的优点是搜索能力较强,但其缺点是难以处理高维问题和收敛到非帕累托前沿。
4.多目标蚁群算法多目标蚁群算法(Multi-Objective Ant Colony Optimization,MOACO)是一种基于蚁群算法的多目标优化问题求解算法。
蚁群算法通过模拟蚂蚁寻找食物的行为来解决优化问题。
MOACO引入了多目标优化的概念,通过引入多个目标函数的估计值来引导蚂蚁搜索。
MOACO的优点是在小规模问题上有较好的表现,但对于大规模问题需要更多的改进。
5.多目标模拟退火算法多目标模拟退火算法(Multi-Objective Simulated Annealing,MOSA)是一种基于模拟退火算法的多目标优化问题求解算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
遗传算法求解函数优化问题的比较 多极值点函数具有多个极值,对此问题,传统的优化技术很容易陷入局部最优解,求得全局优化解的概率不高,可靠性低;为此,建立尽可能大概率的求解全局优化解算法是求解函数优化的一个重要问题。 遗传算法是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传制)演化而来的随机搜索和优化方法,是当今影响最广泛的进化计算方法之一,是进化计算理论体系的中心。遗传算法借鉴了物种进化的思想,将欲求解问题编码,把可行解表示成字符串形式。初始化随机产生一个种群,用合理的评价函数对种群进行评估,在此基础上进行选择、交叉及变异等遗传操作。选择算子根据父代中个体适值大小进行选择或淘汰,它保证了算法的最优搜索方向。交叉算子模拟基因重组及随机信息交换,产生更好个体,使其在可行域内有效搜索。变异算子模拟基因突变,保证了遗传算法的全局搜索能力。遗传算法的搜索能力主要由选择算子及交叉算子赋存,变异算子尽可能保证算法达到全局最优,避免陷入局部最优。 遗传算法中的各个模块如下所示 1、编码 将数据进行二进制编码,其规则如下:设某一参数的取值范围为(L,U),使用长度为k的二进制编码表示该参数,则它共有2k种不同的编码。该参数编码时代对应关系为 00000000000000=0->L 00000000000001=1->L+Δ 00000000000010=2->L+2Δ 00000000000011=3->L+3Δ …… 11111111111111=2k-1->U 2、解码 解码的目的是为了将不直观的二进制数据串还成十进制。是编码过程的逆过程。 3、初始种群 随机产生k位的0、1排列,将该排列数来表示一个染色体,每个染色体代表一个初始值。初始种群就是随机产生数量为群体规模的染色体。 4、选择 这里选择轮盘赌方法,轮盘赌选择又称适应度比例选择方法,是最常见也是最为著名的选择方法,由Holland 教授提出。基本原理是根据个体适应值的比例来确定个体的选择概率,是一个随机采样的过程。为了防止当前群体的最优个体在下一代发生丢失,导致遗传算法不能收敛到全局最优解,引入了精英选择策略。 5、杂交 假设个体A和B被选择进行杂交。首先在个体中随机选择一个交配区域,如随机产生一个1到k的数,在个体A、B在该随机数后的染色体进行交换。如 交换前 A:00000111|110000 B:01100000|001111 交换后 A:00000111|001111 B:01100000|110000 6、变异 为了避免在算法迭代后期出现种群过早收敛,对于二进制的基因码组成的个体种群,实行基因码的小概率翻转,对于二进制编码即0变成1,而1变成0。例如个体01100000001111的第2个位发生变异,则个体变为00100000001111. 7、个体适应度评估 遗传算法利用个体的适应度函数搜索基本不利于外部信息的因素,在算法设计时,适应度函数决定系统是否能寻找到系统最优解。由目标函数变换而成的适应度函数在设计时应考虑一下几个因素:适应度函数是否能反映解的优劣,该函数是否是单值的和非负的,只有满足以上因素才能设计出合理的算法。对于函数优化问题,适应度可取为函数值。 8、复制 将子代复制为父代。 遗传算法的步骤如下所示: begin t<-0 初始化P(t) 评价P(t) while(终止条件不满足) do begin 杂交P(t)以产生C(t) 变异C(t) 评价C(t) 从P(t)和C(t)中选择P(t+1) t<-t+1 end end
函数y=x.*sin(10*pi*x)+2的图像如下图所示: 从上图可以看出,该函数在区间[-1 2]上有很多个极大值。 用遗传算法计算函数y=x.*sin(10*pi*x)+2在区间[-1 2]上的最大值,得到 如下图像:
从上图看出,在17代时,种群中出现了最大值,该种群几乎收敛于最优值。此时函数自变量x的取值为1.853511,函数值y的值为3.842246。 用遗传算法计算10次求得函数的最大值如下表所示: 第1次 3.8484 第2次 3.65928 第3次 3.85022 第4次 3.82508 第5次 3.84111 第6次 3.8489 第7次 3.7734 第8次 3.84869 第9次 3.65031 第10次 3.64293 平均值 3.73883
从上表看出,遗传算法每次得到的结果基本相同(除3.642933数据较小外),可见遗传算法具有较强的适应性。
附录: %主程序:用遗传算法求解y=x.*sin(10*pi*x)+2在[-2 2]区间上的最大值 clc; clear all; close all; global BitLength %全局变量,计算如果满足求解精度至少需要编码的长度 global boundsbegin %全局变量,自变量的起始点 global boundsend %全局变量,自变量的终止点 bounds=[-2 2];%一维自变量的取值范围 precision=0.0001; %运算精度 boundsbegin=bounds(:,1); boundsend=bounds(:,2); %计算如果满足求解精度至少需要多长的染色体 BitLength=ceil(log2((boundsend-boundsbegin)' ./ precision)); popsize=50; %初始种群大小 Generationnmax=20; %最大代数 pcrossover=0.90; %交配概率 pmutation=0.09; %变异概率 %产生初始种群 population=round(rand(popsize,BitLength)); %初始种群,行代表一个个体,列代表不同个体 %计算适应度,返回适应度Fitvalue和累积概率cumsump [Fitvalue,cumsump]=fitnessfun(population); %输入为群体population,返回适应度Fitvalue和累积概率cumsump Generation=1; while Generationfor j=1:2:popsize %1对1对的群体进行如下操作(交叉,变异) %选择操作 seln=selection(population,cumsump); %选择两个个体,返回个体的序号,有可能两个序号相同 %交叉操作 scro=crossover(population,seln,pcrossover); scnew(j,:)=scro(1,:); %%%先两个个体交叉,再分别对两个个体进行变异 scnew(j+1,:)=scro(2,:); %变异操作 smnew(j,:)=mutation(scnew(j,:),pmutation); smnew(j+1,:)=mutation(scnew(j+1,:),pmutation); end population=smnew; %产生了新的种群 %计算新种群的适应度 [Fitvalue,cumsump]=fitnessfun(population); %记录当前代最好的适应度和平均适应度 [fmax,nmax]=max(Fitvalue); %最好的适应度为fmax(即函数值最大),其对应的个体为nmax fmean=mean(Fitvalue); %平均适应度为fmean ymax(Generation)=fmax; %每代中最好的适应度 ymean(Generation)=fmean; %每代中的平均适应度 %记录当前代的最佳染色体个体 x=transform2to10(population(nmax,:));%population(nmax,:)为最佳染色体个体,x返回的是其对应的十进制数 %自变量取值范围是[-2 2],需要把经过遗传运算的最佳染色体整合到[-2 2]区间 xx=boundsbegin+x*(boundsend-boundsbegin)/(power(2,BitLength)-1);%%%%%%译码,boundsend为2 xmax(Generation)=xx; Generation=Generation+1 end Generation=Generation-1;%Generation加1、减1的操作是为了能记录各代中的最佳函数值xmax(Generation) %Bestpopulation=xx %%%%把最后1代中最优的当成全局最优的,欠妥 %Besttargetfunvalue=targetfun(xx)
targetfunvalue=targetfun(xmax) [Besttargetfunvalue,nmax]=max(targetfunvalue) Bestpopulation=xmax(nmax)
%绘制经过遗传运算后的适应度曲线。一般地,如果进化过程中种群的平均适应度与最大适 %应度在曲线上有相互趋同的形态,表示算法收敛进行得很顺利,没有出现震荡;在这种前 %提下,最大适应度个体连续若干代都没有发生进化表明种群已经成熟。 figure(1); hand1=plot(1:Generation,ymax); set(hand1,'linestyle','-','linewidth',1.8,'marker','*','markersize',6) hold on; hand2=plot(1:Generation,ymean); set(hand2,'color','r','linestyle','-','linewidth',1.8,... 'marker','h','markersize',6) xlabel('进化代数');ylabel('最大/平均适应度');xlim([1 Generationnmax]); legend('最大适应度','平均适应度'); box off;hold off;
%子程序:计算适应度函数, 函数名称存储为fitnessfun function [Fitvalue,cumsump]=fitnessfun(population); global BitLength global boundsbegin global boundsend popsize=size(population,1); %,计算个体个数,有popsize个个体 for i=1:popsize x=transform2to10(population(i,:)); %将二进制转换为十进制 %转化为[-2,2]区间的实数 xx=boundsbegin+x*(boundsend-boundsbegin)/(power(2,BitLength)-1); %%%%