精华内容
下载资源
问答
  • 关于遗传算法收敛性关于遗传算法收敛性关于遗传算法收敛
  • 给出遗传算法全局收敛性的定义,描述当前遗传算法收敛性分析的主要模型,对自适应遗传算法、并行遗传算法、小生境遗传算法等典型遗传算法的收敛性进行分析,给出相关的研究结果,并指出遗传算法收敛性研究的未来发展方向...
  • 遗传算法收敛性是关系到算法是否可以实现的关键问题。针对遗传算法的早熟收敛收敛缓慢甚至不收敛, 国内外学 者进行了大量的研究, 并提出了许多的改进措施, 以提高遗传算法收敛速度。
  • 用随机过程论中的马尔克夫链理论...提出了6个引理,3个定理和3个推论,证明了最优保存遗传算法和作者提出的2种新型遗传算法:模拟生物种族进化的遗传算法,带罗盘算法的GA是全局收敛的,而简单遗传算法不是全局收敛的.
  • 通过对遗传算法过早收敛原因的分析,认为遗传算法出现过早收敛主要与问题解的 分布状况、种群个体的分布情况及遗传算子的应用有关,提高算法全局收敛性能的核心就是如何 使算法科学地处理种群多样性及识别个体对全局...
  • 最优保留GA (EGA )是目前GA 收敛性研究中比较典型的一类。在已有研究成果的基础上给 出了EGA 更一般的规范化定义, 指明了 EGA 全局收敛的本质及其两种实现方式, 并分别对它们进行 了收敛性分析。最后提出...
  • 需要用到遗传算法解个函数的最值,感觉遗传算法在这类不算复杂的问题上挺好用的,不过感觉染色体的表示是核心,弄不好后面的变异、交叉出的结果会差很多。 来源:...

           https://zhuanlan.zhihu.com/p/112788663 写得挺好的,觉得有启发的记录以下:

    生动理解1:

    在遗传算法中,有很多袋鼠,它们降落到喜玛拉雅山脉的任意地方。这些袋鼠并不知道它们的任务是寻找珠穆朗玛峰。但每过几年,就在一些海拔高度较低的地方射杀一些袋鼠,并希望存活下来的袋鼠是多产的,在它们所处的地方生儿育女。

    生动理解2:

    有一大群袋鼠,它们被莫名其妙的零散地遗弃于喜马拉雅山脉。于是只好在那里艰苦的生活。海拔低的地方弥漫着一种无色无味的毒气,海拔越高毒气越稀薄。可是可怜的袋鼠们对此全然不觉,还是习惯于活蹦乱跳。于是,不断有袋鼠死于海拔较低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有机会生儿育女。

    结果

    就这样经过许多年,这些袋鼠们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的袋鼠中,只有聚拢到珠穆朗玛峰的袋鼠被带回了美丽的澳洲(最优解)。

    一些概率

    基因型(genotype):性状染色体的内部表现;

    表现型(phenotype):染色体决定的性状的外部表现,或者说,根据基因型形成的个体的外部表现;

    进化(evolution):种群逐渐适应生存环境,品质不断得到改良。生物的进化是以种群的形式进行的。

    适应度(fitness):度量某个物种对于生存环境的适应程度。

    选择(selection):以一定的概率从种群中选择若干个个体。一般,选择过程是一种基于适应度的优胜劣汰的过程。

    复制(reproduction):细胞分裂时,遗传物质DNA通过复制而转移到新产生的细胞中,新细胞就继承了旧细胞的基因。

    交叉(crossover):两个染色体的某一相同位置处DNA被切断,前后两串分别交叉组合形成两个新的染色体。也称基因重组或杂交;

    变异(mutation):复制时可能(很小的概率)产生某些复制差错,变异产生新的染色体,表现出新的性状。

    编码(coding):DNA中遗传信息在一个长链上按一定的模式排列。遗传编码可看作从表现型到基因型的映射。

    解码(decoding):基因型到表现型的映射。

    个体(individual):指染色体带有特征的实体;

    种群(population):个体的集合,该集合内个体数称为种群的大小。

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

         《提高数字光栅投影测量系统精度的gamma校正技术》中解\gamma

            需要用到遗传算法解个函数的最值,感觉遗传算法在这类不算复杂的问题上挺好用的,不过感觉染色体的表示是核心,弄不好后面的变异、交叉出的结果会差很多。

            来源:https://blog.csdn.net/quinn1994/article/details/80501542

            这个代码解最优解并没有收敛,只是展示时sort排序了看上去收敛了,目前的分析应该是染色体编码以及交叉变异产生的下一代差异比较大,例如1000 0101 1001 1001 1111 变为  1100 0101 1001 1001 1111 染色体看上去只变了一位,但表征剧变,那父代的最优值又有什么意义呢?自己也是刚刚开始看,可能理解不到位,后续有用到再继续研究。

    # -*-coding:utf-8 -*-
    # 目标求解2*sin(x)+cos(x)最大值
    import random
    import math
    import matplotlib.pyplot as plt
    
    
    class GA(object):
        # 初始化种群 生成chromosome_length大小的population_size个个体的种群
    
        def __init__(self, population_size, chromosome_length, max_value, pc, pm):
    
            self.population_size = population_size
            self.choromosome_length = chromosome_length
            # self.population=[[]]
            self.max_value = max_value
            self.pc = pc
            self.pm = pm
            # self.fitness_value=[]
    
        def species_origin(self):
            population = [[]]
            for i in range(self.population_size):
    
                temporary = []
                # 染色体暂存器
                for j in range(self.choromosome_length):
                    temporary.append(random.randint(0, 1))
                # 随机产生一个染色体,由二进制数组成
    
                population.append(temporary)
                # 将染色体添加到种群中
            return population[1:]
            # 将种群返回,种群是个二维数组,个体和染色体两维
    
        # 从二进制到十进制
        # 编码  input:种群,染色体长度 编码过程就是将多元函数转化成一元函数的过程
        def translation(self, population):
    
            temporary = []
            for i in range(len(population)):
                total = 0
                for j in range(self.choromosome_length):
                    total += population[i][j] * (math.pow(2, j))
                # 从第一个基因开始,每位对2求幂,再求和
                # 如:0101 转成十进制为:1 * 2^0 + 0 * 2^1 + 1 * 2^2 + 0 * 2^3 = 1 + 0 + 4 + 0 = 5
                temporary.append(total)
            # 一个染色体编码完成,由一个二进制数编码为一个十进制数
            return temporary
            # 返回种群中所有个体编码完成后的十进制数
    
        # from protein to function,according to its functoin value
    
        # a protein realize its function according its structure
        # 目标函数相当于环境 对染色体进行筛选,这里是2*sin(x)+math.cos(x)
        def function(self, population):
            temporary = []
            function1 = []
            temporary = self.translation(population)
            for i in range(len(temporary)):
                x = temporary[i] * self.max_value / (math.pow(2, self.choromosome_length) - 10)
                function1.append(2 * math.sin(x) + math.cos(x))
    
                # 这里将sin(x)作为目标函数
            return function1
    
        # 定义适应度
        def fitness(self, function1):
    
            fitness_value = []
    
            num = len(function1)
    
            for i in range(num):
    
                if (function1[i] > 0):
                    temporary = function1[i]
                else:
                    temporary = 0.0
                    # 如果适应度小于0,则定为0
    
                fitness_value.append(temporary)
            # 将适应度添加到列表中
    
            return fitness_value
    
        # 计算适应度和
    
        def sum(self, fitness_value):
            total = 0
    
            for i in range(len(fitness_value)):
                total += fitness_value[i]
            return total
    
        # 计算适应度斐伯纳且列表
        def cumsum(self, fitness1):
            for i in range(len(fitness1) - 2, -1, -1):
                # range(start,stop,[step])
                # 倒计数
                total = 0
                j = 0
    
                while (j <= i):
                    total += fitness1[j]
                    j += 1
    
                fitness1[i] = total
                fitness1[len(fitness1) - 1] = 1
    
    
                # 3.选择种群中个体适应度最大的个体
    
        def selection(self, population, fitness_value):
            new_fitness = []
            # 单个公式暂存器
            total_fitness = self.sum(fitness_value)
            # 将所有的适应度求和
            for i in range(len(fitness_value)):
                new_fitness.append(fitness_value[i] / total_fitness)
                # 将所有个体的适应度正则化
            self.cumsum(new_fitness)
            #
            ms = []
            # 存活的种群
            population_length = pop_len = len(population)
            # 求出种群长度
            # 根据随机数确定哪几个能存活
    
            for i in range(pop_len):
                ms.append(random.random())
                # 产生种群个数的随机值
                # ms.sort()
                # 存活的种群排序
            fitin = 0
            newin = 0
            new_population = new_pop = population
    
            # 轮盘赌方式
            while newin < pop_len:
                if (ms[newin] < new_fitness[fitin]):
                    new_pop[newin] = population[fitin]
                    newin += 1
                else:
                    fitin += 1
            population = new_pop
    
        # 4.交叉操作
        def crossover(self, population):
            # pc是概率阈值,选择单点交叉还是多点交叉,生成新的交叉个体,这里没用
            pop_len = len(population)
    
            for i in range(pop_len - 1):
    
                if (random.random() < self.pc):
                    cpoint = random.randint(0, len(population[0]))
                    # 在种群个数内随机生成单点交叉点
                    temporary1 = []
                    temporary2 = []
    
                    temporary1.extend(population[i][0:cpoint])
                    temporary1.extend(population[i + 1][cpoint:len(population[i])])
                    # 将tmporary1作为暂存器,暂时存放第i个染色体中的前0到cpoint个基因,
                    # 然后再把第i+1个染色体中的后cpoint到第i个染色体中的基因个数,补充到temporary2后面
    
                    temporary2.extend(population[i + 1][0:cpoint])
                    temporary2.extend(population[i][cpoint:len(population[i])])
                    # 将tmporary2作为暂存器,暂时存放第i+1个染色体中的前0到cpoint个基因,
                    # 然后再把第i个染色体中的后cpoint到第i个染色体中的基因个数,补充到temporary2后面
                    population[i] = temporary1
                    population[i + 1] = temporary2
                    # 第i个染色体和第i+1个染色体基因重组/交叉完成
    
        def mutation(self, population):
            # pm是概率阈值
            px = len(population)
            # 求出种群中所有种群/个体的个数
            py = len(population[0])
            # 染色体/个体基因的个数
            for i in range(px):
                if (random.random() < self.pm):
                    mpoint = random.randint(0, py - 1)
                    #
                    if (population[i][mpoint] == 1):
                        # 将mpoint个基因进行单点随机变异,变为0或者1
                        population[i][mpoint] = 0
                    else:
                        population[i][mpoint] = 1
    
                        # transform the binary to decimalism
                        # 将每一个染色体都转化成十进制 max_value,再筛去过大的值
    
        def b2d(self, best_individual):
            total = 0
            b = len(best_individual)
            for i in range(b):
                total = total + best_individual[i] * math.pow(2, i)
    
            total = total * self.max_value / (math.pow(2, self.choromosome_length) - 1)
            return total
    
        # 寻找最好的适应度和个体
        def best(self, population, fitness_value):
    
            px = len(population)
            bestindividual = []
            bestfitness = fitness_value[0]
            # print(fitness_value)
    
            for i in range(1, px):
                # 循环找出最大的适应度,适应度最大的也就是最好的个体
                if (fitness_value[i] > bestfitness):
                    bestfitness = fitness_value[i]
                    bestindividual = population[i]
    
            return [bestindividual, bestfitness]
    
        def plot(self, results):
            X = []
            Y = []
    
            for i in range(500):
                X.append(i)
                Y.append(results[i][0])
    
            plt.plot(X, Y)
            plt.show()
    
        def main(self):
    
            results = [[]]
            fitness_value = []
            fitmean = []
    
            population = pop = self.species_origin()
    
            for i in range(500):
                function_value = self.function(population)
                # print('fit funtion_value:',function_value)
                fitness_value = self.fitness(function_value)
                # print('fitness_value:',fitness_value)
    
                best_individual, best_fitness = self.best(population, fitness_value)
    
                results.append([best_fitness, self.b2d(best_individual)])
    
                # 将最好的个体和最好的适应度保存,并将最好的个体转成十进制,适应度函数
                self.selection(population, fitness_value)
                self.crossover(population)
                self.mutation(population)
            results = results[1:]
            # results.sort()
            self.plot(results)
    
    
    if __name__ == '__main__':
        population_size = 400  # 种群大小
        max_value = 10
        chromosome_length = 20 # 染色体长度
        pc = 0.6
        pm = 0.01
        ga = GA(population_size, chromosome_length, max_value, pc, pm)
        ga.main()

     

    展开全文
  • 通过对浮点遗传算法早熟收敛现象的分析,提出了一种新的父代选择策略, 即使用当前代的子 代个体作为下代的父代个体,可使交叉算子持续地探索和开发新空间。引入对个体的代数保护策略, 即 在它发生变异前保证...
  • 遗传算法(GA)作为一种新型的智能优化方法,以其结构简单、适应性强等特点在众多实际领域取得了成功的应用,但存在计算复杂度大、易于局部收敛等方面的不足。本文在分析现有遗传操作的不足和生物进化的基本特征基础上,...
  • 遗传算法收敛性.doc

    2019-10-07 20:31:58
    遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法
  • 论文研究-n 进制编码遗传算法收敛速度.pdf,
  • 遗传算法近年发展迅速,虽然在很多学科得到了很好的应用,但是遗传算法存在早熟收敛和搜索精度不够的问题,本论文探讨了如何改进这些缺陷。
  • 基于群体搜索的遗传算法求解多目标优化问题具有独特的优势,多目标优化算法已有的研究大多为 算法的设计和数值实验效果的比较,理论研究则很少,本文作者给出了一种求解多目标优化问题的新遗传算法 (RMOGA) ,并用Markov...
  • 寻找非劣解集合是遗传算法求解多目标优化问题的目标, 而标准的遗传算法收敛性分析方法对多目标遗传算法的分析 并合适。本文利用有限马尔科夫链给出了遗传算法求解多目标优化问题的两个收敛性定义, 并给出了一个...
  • 摘要:遗传算法存在未成熟收敛收敛速度慢等不足之处,传统的自适应遗传算法虽能有效提高算法的收敛速度,却难以增强算法的鲁棒性。文中提出的改进的自适应遗传算法,提高了其搜索能力,具有更快的收敛速度和更可靠...

    摘要:遗传算法存在未成熟收敛和收敛速度慢等不足之处,传统的自适应遗传算法虽能有效提高算法的收敛速度,却难以增强算法的鲁棒性。文中提出的改进的自适应遗传算法,提高了其搜索能力,具有更快的收敛速度和更可靠的稳定性,达到了预期的效果。关键词:遗传算法;自适应;收敛;改进;性能

    中图分类号: TP18文献标识码:A文章编号:1009-3044(2012)21-5202-04

    遗传算法(Genetic Algorithm,以下简称GA)[1]是一种模仿生物群体进化的随机优化算法,它是由美国密歇根大学J.H.Holland教授创立的。标准的遗传算法(Standard GA,以下简称SGA)往往存在一定的不足之处,比如容易出现早熟以及过慢的收敛速度等不良现象。鉴于此,Srinvas等提出了自适应遗传算法(Adaptive GA,以下简称AGA)[4],在GA中应用自适应调整交叉率和变异率,结果证明,这种算法在GA的收敛速度方面能够较好的改进。不过,AGA在演化初期存在停滞现象,故将自适应调整交叉率和变异率的方法用于GA以提高算法收敛速度和鲁棒性仍十分具有挑战性[6]。文献[3]提出一种改进的自适应遗传算法,在一定程度上提高算法的计算速度和收敛速度。但因为它们计算所得到的变异概率Pm及交叉概率Pc具有不良的稳定性,同时该算法对整体协作能力存在不足。

    为此,该文提出一种新的改进遗传算法,改进后的算法效果良好,在算法的收敛速度以及全局搜索性能等方面都具备良好的效果。

    公式中:?max是指群体的最大适应度;?avg是指群体的适应度平均值;?’是指杂交双方适应度大者的适应度;?是指个体的适应度;0  这种算法可以根据每代个体适应度的改变来自适应地改变Pm和Pc,在保护最优个体的同时,加快了较差个体的淘汰速度。该算法在一定程度上可以改善遗传算法的性能。但该算法也存在不容易跳出局部最优解,因为该算法是以个体为单位改变Pm和Pc,缺乏对整体的协作精神。同时,由于该算法对每个个体都要分别计算Pm和Pc,这样会影响程序的执行效率,也不利于硬件的实现。1.2文献[3]提出的自适应遗传算法(本文中简称IAGA)

    针对M.Srinivas所提出的算法的缺点,文献[3]提出一种改进的自适应遗传算法。其通过判断适应度集中程度的情况,对整个群体的Pm以及Pc进行自适应地变化调整,同时将群体适应度的集中程度用三个变量来衡量,即:适应度平均值、群体的最大适应度、最小适应度。文献[3]提出的算法在一定程度上可以提高算法的计算速度和收敛速度。但因为它们计算所得到的变异概率Pm及交叉概率Pc具有不良的稳定性。尤其在遇到峰值密度较高的多峰值函数时,更容易出现得到概率较大的结果的现象。同时,该算法在一定程度上也是缺乏对算法的整体协作能力。

    整体把控能力等方面都存在一定的不足之处。为此,本文在基于上述自适应遗传算法的基础上,提出一种新的自适应遗传算法,以改进其在上述所存在的不足。

    2.1与进化代数有关的杂交概率的改进介绍

    杂交算子的主要目的是用来产生新个体,同时也是为了让算法具备全局搜索的能力。因此,当我们以种群中的个体来观察时,如果杂交的概率偏大,群体中的优良模式就会被破坏;而如果杂交的概率偏小时,对于新个体的产生速度又会变得缓慢。在这里可以看出,与个体适应度有关的杂交概率的算法是具有一定的优势的。当我们以种群整体进化的整个过程来观察时,杂交概率应该会一个稳定但会慢慢变小,最终会向某一个稳定值靠近的过程。当我们以新个体的产生方面来看,在杂交操作上,群体中所有的个体应该具有相同的地位,也就是概率是一样的,这样就可以使得遗传算法在搜索空间拥有每个方向的匀称性。文献[3,4]的交叉概率算法都只注意了个体的作用,而忽视了整个种群的进化趋势情况和各个体的变异机会。

    在本文中,为了改善目前算法所存在的不足,设计了一种与适应度没有关系,只同进化代数有关的概率公式:

    本公式可以达到交叉概率随着进化过程而逐渐变化,同时能够对同一代的种群中的个体给予一样的交叉能力。这样也可以更好的实现全局搜索能力,同时,算法的计算速度也可以得到极大的提高。相对文献[4],该文的算法对劣质个体的处理显得相对薄弱,但可以通过下面的方法来进行弥补此缺陷。

    2.2自适应变异概率的改进介绍

    维持种群多样性是变异算子的主要用处,其主要是用来抑制早熟现象的出现以及产生新个体。但杂交算子则不同,其主要是在全局搜索中起作用。因此,就变异概率来说,应该是在同一种群中每个个体都是随着个体本身的好坏而发生变化。同时,变异概率的取值也是十分关键的。如果变异概率的取值偏小,就很容易导致抑制早熟现象以及产生新个体的能力减弱。而如果变异概率取值偏大,又容易导致遗传算法搜索过程成为随机过程的现象产生,从而使种群中较好的模式被破坏的可能性增加。所以,自适应变化的变异操作的设计十分重要。

    变异概率设计需要满足:(1)应该使变异概率慢慢减小,从而能够使得群体快速集中。(2)较小的变异概率给优秀的个体。(3)较大的变异概率给劣质的个体。针对上述条件,在本文中设计了如下的自适应变异概率公式:

    在公式中,Pm(t)指的是第t代种群中个体Xi的变异概率;Pm,min指的是预先设置的最小的变异概率;Pm,max指的是预先设置的最大的变异概率。

    以上式子的计算可以实现变异概率随进化过程自适应地变化。也能够针对所有待变异个体的适应值做相应的自适应变化。

    上面所选取的函数在遗传算法性能测试方面都是很经典的函数,它们都有全局最小值,不过也存在有多个极值点的函数。在本实验中,先对函数?1、?3和?4进行求负处理,目的是方便对这些函数求最大值。

    3.2仿真实验结果及分析

    在对上面三种遗传算法进行仿真实验时,对所用到的参数作说明:收敛时间的单位是秒;群体的规模是64;最大进化代数是180。其他参数见表2

    表2各算法中参数说明

    针对传统遗传算法的早熟和收敛速度慢等缺点,文中提出一种改进的自适应遗传算法,实验数据表明,该算法具有良好的搜索能力,具有更快的收敛速度和更可靠的稳定性,达到了预期的效果。

    [1] Holland J H.Adaptation in Natural Artificial Systems[M].MIT Press,1975.

    [2] Masanori Suglsaka,Xinjian Fan.Adaptive Genetic Algorithm with a Cooperative Mode[C].Proceedings of IEEE International Symposium on Industrial Electronics,2001.

    [3]王蕾,沈庭芝,招扬.一种改进的自适应遗传算法[J].系统工程与电子技术,2002:24(5):75-78.

    [4] Srinvas M,Patnaik L.M.Adaptive Probabilities of Crossover and Mutation in Genetic Algorithms[J].IEEE Trans on Systems,Man and Cyber? netics,1994:24(4).

    [5]欧阳森,王建华,耿英三,等.一种新的改进遗传算法[J].计算机工程与应用, 2003(11).

    [6] F Herrera,M Lozano.Adaptive Genetic Operators Based on Coevolution with Fuzzy Behaviors[J].IEEE Trans on Evolutionary Computation, 2001(5):149-165.

    [7]李茂军,童调生.用单亲遗传算法求解有序组合优化问题[J].系统工程与电子技术,1998(20):58-61.

    [8]王小平,曹立明.遗传算法:理论、应用与软件实现[M].西安:西安交通大学出版社,2002.

    [9]沙智明.基于改进自适应遗传算法的电力系统相量测量装置安装地点选择优化[J].电工技术学报,2004(8).

    展开全文
  • 遗传算法收敛性数学实验 实验十 遗传算法与优化问题 问题背景和实验目的 遗传算法基本原理 遗传学相关概念 遗传学相关概念 遗传算法的步骤 遗传算法的步骤 遗传算法具体步骤 遗传算法具体步骤 遗传算法的实际应用 ...

    遗传算法的收敛性

    数学实验 实验十 遗传算法与优化问题 问题背景和实验目的 遗传算法基本原理 遗传学相关概念 遗传学相关概念 遗传算法的步骤 遗传算法的步骤 遗传算法具体步骤 遗传算法具体步骤 遗传算法的实际应用 编码 编码 产生初始群体 适应函数 适应函数和适应值 选择标准 产生种群 交叉 变异 终止条件 遗传算法的收敛性 遗传算法的收敛性 遗传算法的收敛性 最佳个体保存方法 最佳个体保存方法 实验举例 上机作业 * * 本实验主要介绍遗传算法的基本理论,然后通过求解几个简单的函数最值问题,来说明如何利用遗传算法进行初步的优化计算 。 遗传算法(Genetic Algorithm,简称 GA),是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算机算法,它由美国 Holland 教授1975年提出。 遗传算法作为一种新的全局优化搜索算法,以其简单通用、鲁棒性强、适合并行处理及应用范围广等显著特点,奠定了它作为21世纪关键智能计算之一的地位。 基本思想: 基于模仿生物界遗传学的遗传过程,把问题的参数用基因来表示,把问题的解用染色体来表示代表(在计算机里用二进制码表示),从而得到一个由具有不同染色体的个体组成的群体。 这个群体在问题特定的环境里生存竞争,适者有最好的机会生存和产生后代,后代随机化地继承父代的最好特征,并也在生存环境的控制支配下继续这一过程。 群体的染色体都将逐渐适应环境,不断进化,最后收敛到一族最适应环境的类似个体,即得到问题最优解。 保留或复制适应值大的可行解,去掉小的可行解 从群体中选择优胜的个体,淘汰劣质个体的操作 选择 8 根据入选概率定出的一组可行解 被选定的一组染色体或个体 种群 7 可行解所对应的适应函数值 个体对于环境的适应程度,或在环境压力下的生存能力 适应值 6 元素在编码中的位置 某一基因在染色体中的位置 基因位 5 编码中的元素 染色体中的元素 基因 4 可行解的编码 个体的表现形式 染色体 3 被选定的一组可行解 个体的集合 群体 2 也就是可行解 要处理的基本对象、结构 个体 1 数学 遗传算法 遗传学 目标函数取到最大值,最优的可行解 个体进行优胜劣汰的进化,一代又一代地优化 进化、 适者生存 13 开区间(0,1)内的一个值, 一般为0.001~0.01 染色体上基因变化的概率(可能性大小) 变异概率 12 编码的某些元素被改变 染色体水平上基因变化 变异 11 闭区间[0,1]上的一个值,一般为0.65~0.90 染色体对应基因段交换的概率(可能性大小) 交叉概率 10 根据交叉原则产生的一组新解 一组染色体上对应基因段的交换 交叉 9 数学 遗传算法 遗传学 遗传算法计算优化的过程就如同生物学上生物遗传进化的过程,主要有三个基本操作(或算子): 选择(Selection) 交叉(Crossover) 变异(Mutation) 遗传算法基本步骤: 把这些可行解置于问题的 “环境” 中,按适者生存的原则,选取较适应环境的“染色体”进行复制,并通过交叉、变异过程产生更适应环境的新一代 “染色体” 群 把问题的解表示成 “染色体”,在算法中就是以二进制编码的串,给出一群 “染色体”,也就是假设的可行解 经过这样的一代一代地进化,最后就会收敛到最适应环境的一个 “染色体” 上,它就是问题的最优解 遗传算法有很多种具体的不同实现过程, 这里仅介绍标准遗传算法的主要步骤。 选择编码策略,把参数集合(可行解集合)转换染色体结构空间; 定义适应函数,便于计算适应值; 确定遗传策略,包括选择群体大小,选择、交叉、变异方法以及确定交叉概率、变异概率等遗传参数; 随机产生初始化群体; 计算群体中的个体或染色体解码后的适应值; 按照遗传策略,运用选择、交叉和变异算子作用于群体,形成下一代群体; 判断群体性能是否满足某一指标,或者已完成预定的迭代次数,不满足则返回第五步,或者修改遗传策略再返回第六步. 产生初始群体 是否满足终止条件 得到结果 是 结束程序 否 计算每个个体的适应值 以概率选择遗传算子 选择一个个体复制到新群体 选择两个个体进行交叉插入到新群体 选择一个个体进行变异插入到新群体 得到新群体 例 1. 设 f(x) = -x2 + 2x + 0.5,求 max f(x), x?[-1, 2]。 我们将通过这个简单的求最值问题来详细给出遗传算法的整个过程。 (1)编码和产生初始群体 首先需要确定编码的策略,也就是说如何把 [-1, 2] 区间内的数用计算机语言表示出来。编码就是从表现型到基因型的映射,编码时要注意以下三个原则: 完备性:问题空间中所有点(潜在解)都能成为GA编码空间中的点(染色体位串)的表现型; 健全性:GA编码空间中的染色体位

    展开全文
  • 好东西,好东西,好东西,好东西,好东西好东西,
  • 论文引入鞅方法取代传统的马尔科夫链理论,研究保留精英遗传算法(EGA)的收敛条件和收敛速度.通过 把EGA的最大适应值函数过程...使用鞅方法分析 遗传算法收敛性具有独特的优势,成为分析遗传算法收敛性及其性能的新方法.
  • 利用遗传算法早熟的特点, 构造出一种快速收敛的混合算法来求解优化问题, 并分析了它的收 敛性。 它是使用遗传算法来生成搜索方向,从而保证了算法的收敛性。 该算法利用遗传算法的全局搜索 能力,并采用 ...
  • 针对免疫遗传算法收敛性质的研究非常缺乏,提出了利用随机过程理论和引入遗传吸收率、散射率参数进行分析的方法。通过数学建模证明了免疫遗传算法所形成的种群序列的强马尔可夫性,利用遗传吸收率和散射率的计算,...
  • 论文研究-一种防止遗传算法成熟前收敛的有效算法.pdf, 针对遗传算法成熟前收敛的原因进行了理论分析,提出了一种能够较好地防止成熟前收敛算法,并通过实例验证,结果...
  • 采用一种新的基于解空间分解的定量分析方法, 对遗传算法的种群进化过程进行分析, 阐明了选择、交叉和 变异操作的寻优机理, 给出了子代种群在解空间上的概率分布情况; 理论上, 证明了遗传算法具备寻找全局最优解...
  • 基于状态空间模型遗传算法是李茂军教授正式提出的一种新型进化算法,具有参数设置少、操作简单、搜索能力强、计算精度高和收敛速度快等特点。状态进化矩阵是种群进化的关键操作算子,相比于状态进化矩阵每一次迭代都...
  • 针对遗传算法收敛速度慢的缺点,可以采用模糊逻辑来自动调整遗传算法的交叉率和变异率,以加快遗传算法的收敛,可以应用到多个领域中。
  • 遗传算法通常需要很长的时间收敛到最优解,交叉算法是一种提升速度的方法,但是加快速度会导致收敛质量的下降,也就是 premature convergence问题,crossover算法处理这个问题包括以下几方面: 1.Faster ...

    遗传算法通常需要很长的时间收敛到最优解,交叉算法是一种提升速度的方法,但是加快速度会导致收敛质量的下降,也就是

    premature convergence问题,crossover算法处理这个问题包括以下几方面:
     
    1.Faster Convergence,可以更快收敛但是不会降低解的质量的方法:
    • Rank and Proximity Based Crossover (RPBC) 1999: 这种交叉算子从相似等级的染色体和更近的位置形成后代。这就避免了对好染色体的破坏,这反过来又有助于更快地收敛到解决方案。
    • NEW Crossover Operator 2006:这个交叉算子保留了有效的bit组合,有助于在搜索空间中利用具有有用解的稀疏区域。这种对解空间有用区域的使用可以更快地收敛。
    • MPX, MLX (Multi-Parent Crossover Operators) 2011:MPX,MLX虽然可以提升子代的质量,由于考虑到多于两个父代染色体的特征也挺高了收敛速度。
    • New OX 2013,PMX+OX 2013,M-X 2013 , LGX 2014 RGFGA 2007, HWCO 2007

    2.Avoiding Premature Convergence,引起Premature Convergence的原因有很多,比如 small population size, lack of diversity,disproportionate relationship between exploration and exploitation,genetic operators used, less mutation rate, loss of effificacy of the crossover operator, incorrect application of selection pressure, fifitness function等,crossover可以通过以下方法避免Premature Convergence:

    • Crossover for Maintaining Exploration and Exploitation Levels:在E-E中适当的平衡可以以适当的速度得到最优解

    1)MMX-BLXexploit and MMX-BLXexplore 2015,通过3个主要步骤避免过早收敛

    2)Herrera 2007年提出了四种基于fuzzy connectives crossover算子

    3)McGinley 2011年提出了基于欧氏距离的crossover和mutation的自适应

    单峰的函数优化与多峰函数相比需要更少的exporation。E-E的级别可能会根据不同的应用程序目标会有所不同。

    • Crossover for Maintaining Diversity of Population:以下算法只在维持适当的多样性避免过早收敛

    1)PMX 1985 ,CX1987 ,SMX(Brady’s Sorted Match Crossover) 1985

    2) chaotic crossover operator 2015:采用混沌随机数生成器从父代生成1个子代,从而得到ner-global解。

    3)Frequency Crossover 2013:因的等位基因频率是在双亲之间计算的,一般等位基因是由与双亲同一基因位置的后代遗传的,其余的基因是按照双亲染色体上基因的顺序填充的。这在初始时会降低多样性可能出现过早收敛,因此,引入了突变与交叉一切增加多样性避免过早收敛。

    4)Srinivas 在1994年通过使用自适应的突变和交叉概率控制多样性

    5)Li 在2004年提出基于熵entropy的交叉和变异自适应控制多样性

    6)Krawiec 和 Lichocki geometric crossover几何交叉  2014 and the EAX crossover 2008 

    Burke 在2014年提出在GP问题中,适应度函数和多样性方法没有正相关关系,这种情况下多样性不能提高performance。另外,多样性与E-E并没有很大的相关性,多样性并不能保证一个fit population,只给出了种群中不同的个体。

    • Crossover Repair Operators,repair operatiors可以在交叉操作之前或之后应用解决过早收敛问题

    1)Determinism Operator 1998:自适应交叉算子通过分别优化每个变量来优化全局函数,同时考虑了完全可分函数的问题。

    2)Random Offspring Generation (ROG) 1999:在交叉操作前先测试一个个体的遗传为u之,如果它们共享共同的遗传物质,一个或两个后代是随机产生的

    3)cleanup operation 2000 for TSP

    4) Duplication operator 1995

    repair operatiors 是针对特定问题的,在设计repair operation时应确定应用需要。

     

    展开全文
  • 遗传算法

    万次阅读 多人点赞 2019-04-06 21:41:47
    使用遗传算法求解多峰函数的最大值,是我的一项课程作业,做完之后,顺便把文档整理出来做个记录。全部内容如下: 1、问题描述 编程实现遗传算法,并求解多峰函数的最大值。多峰函数的表达式如下所示: 用MATLAB...
  • 利用遗传算法早熟的特点,构造出一种快速收敛的混合算法来求解优化问题,并分析了它的收敛性。它是使用遗传算法来生成搜索方向,从而保证了算法的收敛性。该算法利用遗传算法的全局搜索能力,并采用Nelder-Mead单纯...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,893
精华内容 2,757
关键字:

遗传算法不收敛