遗传算法[GA]

这篇具有很好参考价值的文章主要介绍了遗传算法[GA]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

遗传算法

遗传算法 (Genetic Algorithm,GA) 是模拟生物在自然环境中的遗传和进化的过程而形成的自适应 全局优化搜索算法。
遗传算法借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种并行、高效、全局搜索的方法, 它能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最优解。遗传 算法操作使用 “适者生存” 的原则,在潜在的解决方案种群中逐次产生一个近似最优的方案。在遗传算 法的每一代中,根据个体在问题域中的适应度值和从自然遗传学中借鉴来的再造方法进行个体选择,产 生一个新的近似解。这个过程导致种群中个体的进化,得到的新个体比原个体更能适应环境,就像自然 界中的改造一样。

算法流程

以下流程图显示了基本遗传算法流程的主要阶段:
遗传算法[GA]
​Step1: 种群初始化:进行随机初始化每个个体的染色体的基因型。
​Step2: 迭代设置:设置迭代次数 g m a x g_{max} gmax,令当前迭代次数 g = 1 g=1 g=1
​Step3: 染色体解码,根据染色体的表现型计算个体适应度。
Step4: 适者生存,只有优秀的个体才能存活,即对个体进行选择操作。
Step5: 产生下一代个体,即对染色体进行交叉、变异操作。
Step6: 终止条件判断:判断迭代次数时都达到 g m a x g_{max} gmax或误差是否足够小,如果满足则输出染色体的表现型和适应值;否则继续进行跌代,跳转至Step3。

代码

求Rastrigin函数的最小值。
Rastrigin函数: f ( x , y ) = 2 a + x 2 − a cos ⁡ 2 π x + y 2 − a cos ⁡ 2 π y \mathrm{f}(\mathrm{x}, \mathrm{y})=2 \mathrm{a}+\mathrm{x}^2-\mathrm{a} \cos 2 \pi \mathrm{x}+\mathrm{y}^2-\mathrm{a} \cos 2 \pi \mathrm{y} f(x,y)=2a+x2acos2πx+y2acos2πy

import numpy as np

def fitness_func(X):
    # 目标函数,即适应度值,X是种群的表现型
    a = 10
    pi = np.pi
    x = X[:, 0]
    y = X[:, 1]
    return 2 * a + x ** 2 - a * np.cos(2 * pi * x) + y ** 2 - a * np.cos(2 * 3.14 * y)


def decode(x, a, b):
    """解码,即基因型到表现型"""
    xt = 0
    for i in range(len(x)):
        xt = xt + x[i] * np.power(2, i)
    return a + xt * (b - a) / (np.power(2, len(x)) - 1)


def decode_X(X: np.array):
    """对整个种群的基因解码,上面的decode是对某个染色体的某个变量进行解码"""
    X2 = np.zeros((X.shape[0], 2))
    for i in range(X.shape[0]):
        xi = decode(X[i, :20], -5, 5)
        yi = decode(X[i, 20:], -5, 5)
        X2[i, :] = np.array([xi, yi])
    return X2

def select(X, fitness):
    """根据轮盘赌法选择优秀个体"""
    fitness = 1 / fitness  # fitness越小表示越优秀,被选中的概率越大,做 1/fitness 处理
    fitness = fitness / fitness.sum()  # 归一化
    idx = np.array(list(range(X.shape[0])))
    X2_idx = np.random.choice(idx, size=X.shape[0], p=fitness)  # 根据概率选择
    X2 = X[X2_idx, :]
    return X2

def crossover(X, c):
    """按顺序选择2个个体以概率c进行交叉操作"""
    for i in range(0, X.shape[0], 2):
        xa = X[i, :]
        xb = X[i + 1, :]
        for j in range(X.shape[1]):
            # 产生0-1区间的均匀分布随机数,判断是否需要进行交叉替换
            if np.random.rand() <= c:
                xa[j], xb[j] = xb[j], xa[j]
        X[i, :] = xa
        X[i + 1, :] = xb
    return X

def mutation(X, m):
    """变异操作"""
    for i in range(X.shape[0]):
        for j in range(X.shape[1]):
            if np.random.rand() <= m:
                X[i, j] = (X[i, j] + 1) % 2
    return X



def ga():
    """遗传算法主函数"""
    c = 0.3  # 交叉概率
    m = 0.05  # 变异概率
    best_fitness = []  # 记录每次迭代的效果
    best_xy = []
    iter_num = 100  # 最大迭代次数
    X0 = np.random.randint(0, 2, (50, 40))  # 随机初始化种群,为50*40的0-1矩阵
    for i in range(iter_num):
        X1 = decode_X(X0)  # 染色体解码
        fitness = fitness_func(X1)  # 计算个体适应度
        X2 = select(X0, fitness)  # 选择操作
        X3 = crossover(X2, c)  # 交叉操作
        X4 = mutation(X3, m)  # 变异操作
        # 计算一轮迭代的效果
        X5 = decode_X(X4)
        fitness = fitness_func(X5)
        best_fitness.append(fitness.min())
        x, y = X5[fitness.argmin()]
        best_xy.append((x, y))
        X0 = X4
    # 多次迭代后的最终效果
    print("最优值是:%.5f" % best_fitness[-1])

    print("最优解是:x=%.5f, y=%.5f" % best_xy[-1])
    # 最优值是:0.00000
    # 最优解是:x=0.00000, y=-0.00000
    # 打印效果
ga()

遗传算法[GA]文章来源地址https://www.toymoban.com/news/detail-487621.html

到了这里,关于遗传算法[GA]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基本遗传算法(GA)详解

    遗传算法由John H.Holland教授提出,为一种全局优化算法。它模拟自然进化与遗传理论,通过将优化问题进行转移,从而成功避免了一般优化算法中需要过多考虑的动力学信息问题,在原理上突破了常规的优化算法框架,算法结构较简单、处理信息能力较强,具有很好的鲁棒性

    2024年02月04日
    浏览(65)
  • 【Matlab】智能优化算法_遗传算法GA

    遗传算法(Genetic Algorithm,简称GA)是一种基于生物进化理论的优化算法,由John Holland于20世纪70年代初提出。它通过模拟自然选择和遗传机制,利用群体中个体之间的遗传信息交流和变异来搜索问题的解空间。 遗传算法的设计灵感来源于达尔文的进化论。达尔文提出,自然界

    2024年02月16日
    浏览(57)
  • 数学建模(二):遗传算法(GA)

    1、 算法简介 计算智能(Computational Intelligence,CI)方法主要包括: 神经网络(Neural Network,NN); 模糊逻辑(Fuzzy Logic,FL); 遗传算法 (Genetic Algorithm,GA); 蚁群优化算法(Ant Colony Optimization,ACO); 粒子群优化算法(Particle Swarm Op); 免疫算法(Immune Algorithm,IA); 分布估计算

    2024年02月02日
    浏览(39)
  • 【算法】遗传算法GA寻优xgboost最优参数模型

    需求:实现遗传算法GA寻优xgboost最优参数模型搭建 遗传算法(Genetic Algorithm)是一种 通过模拟生物进化过程来解决优化问题的算法 。它模拟了自然界中的遗传、变异和选择等过程,并通过不断迭代寻找最优解。 并行性强 遗传算法可以应用并行计算技术,同时对多个个体进行

    2024年02月12日
    浏览(39)
  • 遗传算法与Matlab GA工具箱

    GA是一种进化算法,基本原理效仿生物界“物竞天择,适者生存”的演化法则。 一些基本概念 种群population:问题潜在的解集 个体individual:每一个可能的解,通过基因编码一定数目的个体形成一个种群 适应度fitness:由此判断个体的优良,进而进行选择 选择selection、交叉cr

    2024年02月09日
    浏览(60)
  • 遗传算法(GA)入门知识梳理(超详细)

    目录 一、遗传算法的生物背景 二、遗传算法(GA)思想 2.1遗传算法的组成 2.2编码 2.3适应度函数 2.4遗传算子 2.4 运行参数 三、基本遗传算法(SGA)伪代码 3.1算法流程图 3.2 算法伪代码 四、遗传算法的优化、应用前景 4.2 遗传算法的优化 4.3 遗传算法的应用 五、遗传算法实例分析

    2024年02月06日
    浏览(42)
  • 遗传算法GA解决混合流水车间调度问题HFSP

    混合流水车间调度问题(HFSP)是传统流水车间调度问题(FSP)的拓展,本文针对HFSP问题进行描述、建模和求解。 通常模型做如下假设: HFSP符号描述: 决策变量: 主要约束: 优化目标: 本节使用带精英保留的遗传算法GA对HFSP问题进行求解。求解结果如下: 自定义算例如下:

    2024年02月11日
    浏览(50)
  • 基于遗传算法GA算法优化BP神经网络(Python代码实现)

        BP-GA算法的设计︰基于遗传算法的BP神经网络算法(以下简称BP-GA)就是在BP神经网络的学习过程中,将权重和阀值描述为染色体,并选取适宜的适应函数,然后进行GA迭代,直到某种意义上的收敛.与普通BP学习算法相比,算法 BP一GA的优势在于可以处理一些传统方法不能处理的例子

    2024年02月09日
    浏览(54)
  • 【MatLab】《遗传算法GA+BP神经网络——电路参数估计》

    根据采样数据训练BP神经网络,用训练好的网络来作为目标函数输出电路参数误差,通过GA寻找误差最小的电路参数值。 BP.m 主函数 BPMod.m 数据处理+训练BP网络 GA.m 遗传算法主函数 BP神经网络训练情况 本模型使用BP神经网络来代理实际电路的输出,因此神经网络的回归效果一定

    2024年02月02日
    浏览(56)
  • 遗传算法(GA)优化的BP神经网络实现回归预测——附代码

    目录 摘要: 1.BP神经网络介绍: 2.遗传算法原理介绍: 3.遗传算法优化的BP神经网络: 4.算例分析: 5.本文Matlab代码: 基于Matalb平台,将遗传算法(GA)与BP神经网络相结合,使用GA优化BP神经网络的主要参数。然后将影响输出响应值的多个特征因素作为GA-BP神经网络模型的输入

    2024年02月05日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包