遗传算法及其应用

article/2025/11/6 21:38:22

一、遗传算法的定义

遗传算法的基本思想是参考生物学中物种“物竞天择,适者生存”的思想。在计算机中,通过给定约束条件,使初始参数不断迭代,从而接近最优解。
遗传算法可描述为:

Initialize population
process-chromosome
loop-while(no-solution OR generations < max-gen)crossovermutateselect new generations according to fitness
end-of-loop

对于一个最优化问题,一定数量的候选解(称为个体)可抽象表示为染色体,使种群向更好的解进化。传统上,解用二进制表示(即0和1的串),但也可以用其他表示方法。进化从完全随机个体的种群开始,之后一代又一代变异。在每一代中评价整个种群的适应度,从当前种群中随机地选择多个个体(基于它们的适应度),通过自然选择和突变产生新的生命种群,该种群在算法的下一次迭代中成为当前种群。
在这里插入图片描述

二、遗传算法应用(一):计算一元函数区间最值

  • 问题描述:计算函数f(x)=xsin10x+xcos2x在[0,5]上的最大值。

  • 分析:

    • 该问题中,采用二进制串来编码染色体,来表示自变量x的值,用函数的因变量作为适应度。因此,二进制转十进制的过程就是种群个体转化为解的过程,假设二进制串长度为10,转为[0,5]内的十进制的语法为:

      import numpy as np
      bytes = 0000000001
      value = np.dot(bytes, 2 ** np.arange(10)[::-1]) / float(2 ** 10 - 1) * 5
      
    • 交叉繁衍操作如下:假设父母DNA分别为DNA1与DNA2,以F代表继承父亲DNA,M代表继承母亲DNA,那么就生成了子代DNA3。

      DNA1 = [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
      DNA2 = [0, 1, 0, 1, 0, 1, 0, 1, 0, 1][F, F, M, M, F, M, M, M, F, M]
      DNA3 = [1, 0, 0, 1, 1, 1, 0, 1, 1, 1]
      
    • 变异即随机将DNA中的一位取反,0变1,1变0。

    • 选择操作也代表了适者生存的思想,这里将适应度作为淘汰条件,适应度越高的个体越有可能交叉繁衍。

  • 完整代码:

import numpy as npclass GA(object):def __init__(self, DNA_SIZE, POP_SIZE, CROSS_RATE, MUTATION_RATE, N_GENERATIONS, X_BOUND):self.DNA_size = DNA_SIZEself.pop_size = POP_SIZEself.cross_rate = CROSS_RATEself.mutate_rate = MUTATION_RATEself.generations = N_GENERATIONSself.bounds = X_BOUNDself.populations = np.random.randint(2, size=(POP_SIZE, DNA_SIZE))def fitness(self, y):return y + 1e-3 - np.min(y)def crossover(self, parent, pop):if np.random.rand() < self.cross_rate:i_ = np.random.randint(0, self.pop_size, size=1)cross_points = np.random.randint(0, 2, self.DNA_size).astype(np.bool)parent[cross_points] = pop[i_, cross_points]return parentdef mutate(self, child):for point in range(self.DNA_size):if np.random.rand() < self.mutate_rate:child[point] = 1 if child[point] == 0 else 0return childdef select(self, pop, fit):idx = np.random.choice(np.arange(self.pop_size), size=self.pop_size, replace=True, p=fit/fit.sum())return pop[idx]def translateDNA(self, pop):return np.dot(pop, 2 ** np.arange(self.DNA_size)[::-1]) / float(2 ** self.DNA_size - 1) * self.bounds[1]def F(self, x):return np.sin(10 * x) * x + np.cos(2 * x) * xif __name__ == '__main__':ga = GA(DNA_SIZE=10, POP_SIZE=100, CROSS_RATE=0.8, MUTATION_RATE=0.03, N_GENERATIONS=200, X_BOUND=[0, 5])fit_DNA = []for _ in range(ga.generations):F_values = ga.F(ga.translateDNA(ga.populations))fit = ga.fitness(F_values)fit_DNA.append(ga.translateDNA(ga.populations[np.argmax(fit), :]))ga.populations = ga.select(ga.populations, fit)pop_copy = ga.populations.copy()for parent in ga.populations:child = ga.crossover(parent, pop_copy)child = ga.mutate(child)parent[:] = childprint('最大值自变量x=', max(fit_DNA))print('最大值y=', ga.F(max(fit_DNA)))
  • 演示

三、遗传算法应用(二):猜句子

  • 问题描述:给定目标句子,例如目标句为Genetic algorithm is a search algorithm used in computational mathematics to solve optimization.,由随机字符组成的句子演化成目标句。
  • 分析
    • 基因编码
      对于该问题,需要一个基础字符集合,也需要一个目标字符串,如下所示:
      geneSet = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!."
      target = "Genetic algorithm is a search algorithm used in computational mathematics to solve optimization."
      
      geneSet表示所有包含的字符组成的集合,target表示目标字符串。
    • 生成初始个体
      接下来需要生成初始个体,即由字符集合随机生成一个与目标字符串长度相等的字符串。
    • 适应度
      遗传算法提供的适应度值是引擎获得的唯一反馈,可以引导其走向一个解决方案。在这个问题中,适应度值为当前字符串与目标字符串匹配的字符个数。
    • 变异
      将字符串的任意两个位置字符调换,即可完成变异操作。
    • 展示
  • 完整代码
import datetime
import randomgeneSet = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!."
target = "Genetic algorithm is a search algorithm used in computational mathematics to solve optimization."def generate_parent(length):genes = []while len(genes) < length:sampleSize = min(length - len(genes), len(geneSet))genes.extend(random.sample(geneSet, sampleSize))return ''.join(genes)def get_fitness(guess):return sum(1 for expected, actual in zip(target, guess) if expected == actual)def mutate(parent):idx = random.randrange(0, len(parent))childGenes = list(parent)newGene, alternate = random.sample(geneSet, 2)childGenes[idx] = alternate if childGenes[idx] == newGene else newGenereturn ''.join(childGenes)def display(guess, startTime):timeDiff = datetime.datetime.now() - startTimefitness = get_fitness(guess)print("{}\t{}\t{}".format(guess, fitness, timeDiff))random.seed()
startTime = datetime.datetime.now()
bestParent = generate_parent(len(target))
bestFitness = get_fitness(bestParent)
while True:child = mutate(bestParent)childFitness = get_fitness(child)if bestFitness >= childFitness:continuedisplay(child, startTime)if childFitness >= len(bestParent):breakbestFitness = childFitnessbestParent = child
  • 演示
    在这里插入图片描述

附上GitHub地址:遗传算法应用


http://chatgpt.dhexx.cn/article/ffcR3Zsk.shtml

相关文章

详解遗传算法(含MATLAB代码)

目录 一、遗传算法概述 二、遗传算法的特点和应用 三、遗传算法的基本流程及实现技术 3.1 遗传算法的基本流程 3.2 遗传算法的实现技术 1.编码 2.适应度函数 3.选择算子 4.交叉算子 5.变异算子 6.运行参数 四、遗传算法的基本原理 4.1 模式定理 4.2 积木块假设 …

遗传算法步骤

遗传算法是一种模拟生物自然进化的一种算法&#xff0c;通话对生物进化的模拟&#xff0c;实现对数值函数的模拟计算。它主要分为四个步骤&#xff1a;初始化、杂交、变异和选择。相关实现可参考https://github.com/ShaquallLee/evolutionary-programming/tree/master/aEP 1、…

遗传算法原理+程序案例详解

注明&#xff1a;这篇遗传算法程序我在网上看到多次&#xff0c;很多人在转载时&#xff0c;都称已经修改了错误的地方&#xff0c;程序在matlab上能够运行。 当我在学习这段程序时&#xff0c;发现结果仍存在很大问题(不稳定、不准确)。我一行一行看时&#xff0c;发现不仅有少…

遗传算法、遗传算法库函数ga和gamultiobj、遗传算法工具箱GOT实例介绍

目录 前言 适应度函数和目标函数的关系 1. 常规遗传算法 2.结合非线性规划fmincon函数的遗传算法 2.1 fmincon非线性规划函数使用 2.2 结合非线性规划fmincon函数的遗传算法使用及示例 2.2.1 编码 2.2.2 选择 2.2.3交叉 2.2.4变异 2.2.5非线性规划fmincon函数 2.2.…

遗传算法原理与应用详解

遗传算法 ( GA , Genetic Algorithm ) &#xff0c;也称进化算法 。 遗传算法是受达尔文的进化论的启发&#xff0c;借鉴生物进化过程而提出的一种启发式搜索算法。因此在介绍遗传算法前有必要简单的介绍生物进化知识。 一.进化论知识 作为遗传算法生物背景的介绍&#xff0…

遗传算法(一) 遗传算法的基本原理

遗传算法&#xff08;一&#xff09;遗传算法的基本原理 1.概述 遗传算法&#xff08;Genetic Algorithm, GA&#xff09;起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法&#xff0c;借鉴了达尔文的进化论和孟德尔的遗…

算法理解-遗传算法(Genetic Algorithm)(一个带计算过程的例子)

想要快速的了解一个算法&#xff0c;最好的方式便是拿个例子手动进行实现算一遍。这里借鉴了网络上的一个例子&#xff0c;求解如下的一个函数&#xff1a; f(x)x∗sin(10∗π∗x)2x∈[−1,2] f(x) = x*sin(10*\pi*x)+2 \\ x \in[-1, 2] 其函数图像为&#xff1a; 例子来源&a…

遗传算法及python实现

目录 一、遗传算法概念 二、遗传算法应用实例 基础概念&#xff1a; 1、种群和个体&#xff1a; 2、编码、解码与染色体&#xff1a; 3、适应度和选择&#xff1a; 4、 交叉、变异&#xff1a; 三、遗传算法python完整代码 “适者生存&#xff0c;不适者淘汰” …

遗传算法详解python代码实现以及实例分析

遗传算法 文章目录 遗传算法前言一、遗传算法是什么&#xff1f;二、实例讲解例题11.初始化种群2.优胜劣汰3.根据优胜劣汰的结果&#xff0c;交配生殖、变异5.生物遗传进化 例题21.初始化参数2.定义环境&#xff08;定义目标函数&#xff09;3.DNA解码&#xff08;计算x&#x…

遗传算法实例解析

遗传算法实例及MATLAB程序解析 遗传算法Genetic Algorithms&#xff0c;GA&#xff09;是一种基于自然选择原理和自然遗传机制的搜索&#xff08;寻优&#xff09;算法&#xff0c;它是模拟自然界中的生命进化机制&#xff0c;在人工系统中实现特定目标的优化。遗传算法的实质是…

遗传算法详解及代码实现

遗传算法 定义相关术语交叉变异产生子代完整过程 遗传算法应用问题的提出与解决方案“袋鼠跳”问题爬山法&#xff08;最速上升爬山法&#xff09;模拟退火遗传算法 遗传算法实现过程遗传算法的一般步骤遗传算法图解进化细节种群和个体编码方法二进制编码浮点编码法符号编码法 …

遗传算法详解

转载&#xff1a;https://blog.csdn.net/u010451580/article/details/51178225 三&#xff1a;遗传算法 照例先给出科学定义&#xff1a; 遗传算法&#xff08;Genetic Algorithm, GA&#xff09;起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起…

遗传算法(Genetic Algorithm)详解与实现

遗传算法&#xff08;Genetic Algorithm&#xff09;详解与实现 遗传算法简介类比达尔文进化论达尔文进化理论遗传算法对应概念 遗传算法理论图式定理&#xff08;schema theorem&#xff09; 遗传算法与传统算法的差异遗传算法的优缺点优点局限性 遗传算法应用场景遗传算法的组…

经典遗传算法及MATLAB实例

经典遗传算法及简单实例&#xff08;MATLAB&#xff09; 1. 遗传算法简单介绍1.1 理论基础1.2 算法要点1.1 编码1.2 适应度函数 1.3 基本流程 2. 代码实例&#xff08;MATLAB&#xff09;2.1 代码汇总2.1 初始化种群2.2 计算适应度2.3 迭代终止判断2.4 自然选择&#xff08;轮盘…

遗传算法及实例

遗传算法是模拟生物在自然环境下遗传的过程而形成的自适应全局优化搜索算法。如果把某个问题的可行域看作是一个族群&#xff0c;目标函数看作是自然选择的条件&#xff0c;那么&#xff0c;这个族群通过一代又一代的繁衍和进化最终变成最接近筛选条件的样子。遗传算法就是利用…

遗传算法原理及算法实例

遗传算法原理解析 遗传算法&#xff08;GA&#xff09;是一种元启发式自然选择的过程&#xff0c;属于进化算法&#xff08;EA&#xff09;大类。遗传算法通常是利用生物启发算子&#xff0c;如变异、交叉和选择来生成高质量的优化和搜索问题的解决方案。 借鉴生物进化理论&…

遗传算法小结及算法实例(附Matlab代码)

目录 1、遗传算法流程 2、关键参数说明 &#xff08;1&#xff09;群体规模 \(NP\) &#xff08;2&#xff09;交叉概率 \(P_c\) &#xff08;3&#xff09;变异概率 \(P_m\) &#xff08;4&#xff09;进化代数 \(G\) 3、MATLAB仿真实例 3.1 遗传算法求解一元函数的极…

遗传算法(Genetic Algorithm,GA)实例详解

遗传算法是模拟生物在自然环境中的遗传和进化的过程而形成的自适应全局优化搜索算法&#xff0c;他能有效求解NP问题以及非线性、多峰函数优化和多目标优化问题。 1.理论基础 1.1生物学基础 遗传算法的生物学基础是借鉴了达尔文的进化论和孟德尔的遗传学说&#xff0c;一个种…

遗传算法设计实例

1.遗传算法实例程序设计 随机初始化种群P(t){x1,x2…xn),计算P(t)中个体的适应值。其MATLAB程序的基本格式如下: Begin t0 初始化P(t) 计算P(t)的适应值; while (不满足停止准则)dobegintt1从P(t1)中选择P(t)重组P(t)计算P(t)的适应值 end例1 求函数 f(x) 9*sin(5x) cos(4x)…

遗传算法GA原理详解及实例应用 附Python代码

遗传算法GA 遗传算法&#xff08;Genetic Algorithm, GA&#xff09;是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型&#xff0c;是一种通过模拟自然进化过程搜索最优解的方法。 生物在自然界中的生存繁衍&#xff0c;显示了其对自然环境的优异的自适…