智能优化算法——python手动实现交叉进化算法

智能优化算法之萤火虫算法(FA)的实现(Python附源码) 使用Python编程语言实现萤火虫算法用于优化问题的求解,分别从实现思路、算法步骤以及实例这三个部分展开介绍,附源码,操作简单,适合新手学习。 阅读详情


之前我们手动实现了 遗传算法。交叉进化算法也是进化算法的一种,他具有参数少,易实现的优点(经测试,由于算法特性,暂时不能像遗传算法一样拟合图片),我们将通过拟合函数来介绍交叉进化算法

依赖包

我们用random来生成随机数,matplotlib画图,同时设置rcParams来保证正常显示中文标签

from random import randint, random
import matplotlib.pyplot as plt
import numpy as np
import os

plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号

超参数

我们用max_group表示种群中个体数;savePath来确定图像保存位置;feature即特征数,即函数由几个参数构成;F0为初始变异算子,后续会根据labda进行调整,后续的正在的变异算子F由F0和labda得出
其关系式为 : λ = e 1 − G m G m + 1 − G F = F 0 × 2 λ 其中 G m 为最大迭代次数, G 为当前迭代次数 第一次迭代 F 的值接近 2 F 0 , 随后逐渐接近 F 0 其关系式为: \\ \lambda=e^{1- \frac{G_m}{G_m + 1 -G}} \\ F=F0 \times2 ^{\lambda} \\ 其中G_m为最大迭代次数,G为当前迭代次数 \\ 第一次迭代F的值接近2F0, 随后逐渐接近F0 其关系式为:λ=e1−Gm​+1−GGm​​F=F0×2λ其中Gm​为最大迭代次数,G为当前迭代次数第一次迭代F的值接近2F0,随后逐渐接近F0

max_group = 50  # 种群中个体数
savePath = "./plt_image"
features = 2  # 个体特征数
F0 = 0.5  # 初始变异算子
CR = 0.1  # 交叉算子
epochs = 100
lower_range = -6
upper_range = 6
labda = np.e ** (1 - epochs / (epochs + 1))
bestScore = 0
bestOne = None

待优化的函数

为了便于后续的类封装,我们在优化时只使用func作为优化的函数,f函数仅用于画图

def f(x, y):
   return np.sin(np.sqrt(x ** 2 + y ** 2))

def func(x):
    X = x.reshape(-1, features).copy()
    return np.sin(np.sqrt(X[:, 0] ** 2 + X[:, 1] ** 2))

初始化

生成族群
这时我们应该注意生成矩阵的形状和范围应满足条件

groups = np.random.rand(max_group,features) * (upper_range - lower_range) + lower_range  # 随机生成族群

算法主体

变异

v = []

def variation(g):
    global groups
    for i in range(max_group):
        r1 = randint(0, max_group - 1)
        while r1 == i:
            r1 = randint(0, max_group - 1)

        r2 = randint(0, max_group - 1)
        while r2 == i or r2 == r1:
            r2 = randint(0, max_group - 1)

        r3 = randint(0, max_group - 1)
        while r3 == i or r3 == r1 or r3 == r2:
            r3 = randint(0, max_group - 1)

        x1 = groups[r1]
        x2 = groups[r2]
        x3 = groups[r3]
        labda = np.e * (1 - epochs / (epochs + 1 - g))
        F = F0 * 2 ** labda
        v.append(x1 + F * (x2 - x3))

交叉

交叉所满足的关系式为
u i , G + 1 = ( u 1 i , G + 1 , u 2 i , G + 1 , ⋅ ⋅ ⋅ , u D i , G + 1 ) u_{i,G+1}=(u_{1i,G+1},u_{2i,G+1}, \cdot \cdot \cdot , u_{Di,G+1}) ui,G+1​=(u1i,G+1​,u2i,G+1​,⋅⋅⋅,uDi,G+1​)
u j i , G + 1 = { v j i , G + 1 , r a n d b ( j ) ≤ C R 或 j = r n b r ( i ) x j i , G + 1 , r a n d b ( j ) > C R 且 j ≠ r n b r ( i ) u_{ji, G+1}=\begin{cases} v_{ji, G+1}, & {randb(j) \leq CR或j=rnbr(i)} \\ x_{ji,G+1}, & {randb(j) > CR且j \not= rnbr(i)} \end{cases} uji,G+1​={vji,G+1​,xji,G+1​,​randb(j)≤CR或j=rnbr(i)randb(j)>CR且j=rnbr(i)​
( i = 1 , 2 , ⋅ ⋅ ⋅ , N P , j = 1 , 2 , ⋅ ⋅ ⋅ , D ) (i=1, 2, \cdot \cdot \cdot,NP, j=1, 2,\cdot \cdot \cdot, D ) (i=1,2,⋅⋅⋅,NP,j=1,2,⋅⋅⋅,D)
其中v为变异向量,x为原本的向量,u为实验向量,NP为种群最多容纳的个体数,D为每个个体的特征数。randb(j) 为随机生成的概率值,与CR做比较。rnbr(i)为随机的下标,与当前个体下标做对比

u = []  # 选择种群

def cross():
    r = randint(0, max_group - 1)
    for i in range(max_group):
        cr = random()
        if cr <= CR or i == r:
            u.append(v[i])
        else:
            u.append(groups[i])

选择

通过比较相同位置的实验向量和原族群向量(即原本的向量),较好的将会替换掉原族群对应的向量,同时要注意边界约数

bestPath = []

def select():
    global bestScore
    global bestOne
    for i in range(max_group):
        s1 = func(u[i].copy())
        s2 = func(groups[i].copy())
        if s1 > s2 and s1 > bestScore:
            groups[i] = u[i]
            for j in range(len(groups[i])):
                if groups[i][j] < lower_range:
                    groups[i][j] = lower_range
                if groups[i][j] > upper_range:
                    groups[i][j] = upper_range

            bestScore = s1
            bestOne = groups[i]
    bestPath.append(bestOne.copy())

画图

在正式将各个组件组装起来之前,我们先构建一个画图函数,来直观的观察拟合过程

def plt_image(cur):
    if not os.path.exists(savePath):
        os.mkdir(savePath)

    x = np.linspace(-6, 6, 30)
    y = np.linspace(-6, 6, 30)

    X, Y = np.meshgrid(x, y)
    Z = f(X, Y)
    ax = plt.axes(projection='3d')
    ax.contour3D(X, Y, Z, 25, c=Z)
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    ax.set_zlabel('z')
    ax.set_title('寻优过程')
    if bestOne is not None:
        ax.plot3D(bestPath[:, 0], bestPath[:, 1], func(bestPath), c="r")
    plt.savefig(os.path.join(savePath, str(cur) + '.png'))
    plt.show()

交叉进化并调用

def Alternative_Evolutionary():
    for i in range(epochs):
        global v
        v = []
        variation()
        global u
        u = []
        cross()
        select()
        global bestScore
        global bestOne

        print("Epoch : ", i, " Score : ", bestScore)



Alternative_Evolutionary()
bestPath = np.array(bestPath)
plt_image(0)

拟合效果

由于初始化(生成随机数)不同,所以每次运行的结果不会完全相同,但是最终的bestScore总是相似的
在这里插入图片描述
在这里插入图片描述

代码

上述的所有代码按顺序执行就是完整代码
如果需要类封装后的代码可以从下面下载

GitHub地址:
https://github.com/AiXing-w/Python-Intelligent-Optimization-Algorithms
优快云地址:
https://download.youkuaiyun.com/download/DuLNode/84048830

智能优化算法之灰狼优化算法(GWO)的实现(Python附源码) 使用Python编程语言实现灰狼优化算法用于优化问题的求解,分别从实现思路、算法步骤以及实例这三个部分展开介绍,附源码,操作简单,适合新手学习。 阅读详情

相关推荐

智能优化算法之粒子群算法(PSO)的实现(Python附源码)

使用Python编程语言实现粒子群算法用于优化问题的求解,分别从实现思路、算法步骤以及实例这三个部分展开介绍,附源码,操作简单,适合新手学习。

weixin_42051846的博客 7238

智能优化算法(Ga,PSO,SA)高度模块化(可直接调用)python实现

智能优化算法(Ga,PSO,SA)高度模块化(可直接调用)python实现 为啥做这篇文章 此篇文章基于本人数学建模实验课程的智能算法研究,老师要求用matlab实现一种优化算法分析,并且实现函数封装模块化。本人由于数模需要且比较擅长python,于是在这里记录下算法实现,方便日后比赛利用。 三大智能优化算法本质探究 不要被智能蒙蔽了双眼,其实本质就是思维的转变。 我们之前的传统算法基本是遍历穷举进行可行范围内寻求目标函数的最优解。但在这里有如下几个基本思维步骤(不涉及具体实现)。 1.全局可行解随机

ligics的博客 5295

AI编程全景指南:从自动化生成到智能优化实战

在软件开发领域,自动化代码生成和智能优化算法正成为提升工程效率的核心技术。自动化代码生成基于大语言模型的模式识别能力,能将自然语言描述转化为结构化代码,显著减少重复性劳动。其技术价值在于将开发者从繁琐的编码中解放,使其更专注于架构设计和复杂逻辑。应用场景广泛覆盖日常业务代码编写、API快速生成以及原型开发。与此同时,智能优化算法如遗传算法、粒子群优化等,通过模拟自然进化或群体智能行为,在复杂问题空间中进行高效搜索,为解决资源调度、参数调优等NP难问题提供了新思路。本文以会议室智能排期为例,深入探讨了如何将白

weixin_33859231的博客 407

智能优化算法——灰狼优化算法(Python&Matlab实现)

目录1 灰狼优化算法基本思想2 灰狼捕食猎物过程2.1 社会等级分层2.2 包围猎物2.3 狩猎2.4 攻击猎物2.5 寻找猎物3 实现步骤及程序框图3.1 步骤3.2 程序框图4 Python代码实现5 Matlab实现。

Yan_she_He的博客 2996

神经架构搜索的进化算法优化方法

神经架构搜索(NAS)旨在自动化地发现最优的神经网络架构,以提高模型在各种任务上的性能。传统的神经网络架构设计依赖于专家的经验和手动调优,这不仅耗时费力,而且很难探索到所有可能的架构空间。进化算法作为一种优化算法,具有全局搜索能力,能够在复杂的架构空间中找到较优的解决方案。本文的目的是深入探讨如何使用进化算法来优化神经架构搜索,详细介绍相关的原理、算法、实际应用和未来发展趋势。范围涵盖了从基础概念到实际项目的实现,以及相关的学习资源和研究成果。

AI天才研究院 744

进化算法在多目标网络架构优化中的应用

在当今的信息技术领域,神经网络已经成为解决各种复杂问题的强大工具。然而,设计一个高效的网络架构是一项极具挑战性的任务。网络架构的选择不仅影响模型的性能,还会对计算资源的使用、训练时间等多个方面产生影响。传统的手动设计网络架构方法往往需要大量的专业知识和经验,而且效率低下。多目标网络架构优化旨在同时优化多个相互冲突的目标,如模型的准确率、计算复杂度等。进化算法作为一种模拟生物进化过程的优化算法,具有全局搜索能力强、无需梯度信息等优点,非常适合用于解决多目标优化问题。

AI架构全栈开发实战笔记 456

自适应微分进化算法:原理、实现与应用

优化问题在科学与工程领域无处不在,从工程设计到机器学习,从金融建模到资源分配。传统的基于梯度的方法在处理复杂优化问题时常常面临诸多挑战,特别是当问题具有多峰性、高维性、非线性或不可微特性时。群体智能优化算法为解决这类问题提供了有效途径,其中微分进化算法(Differential Evolution, DE)因其简单性、鲁棒性和高效性而备受关注。然而,标准DE算法的一个主要瓶颈在于其对控制参数(缩放因子FFF和交叉概率CRCRCR)的敏感性。不同的参数设置可能导致算法性能的巨大差异,而手动调参既耗时又依赖于使

T20151470的博客 768

六何时适合使用蜻蜓优化算法?

作者:禅与计算机程序设计艺术 1.简介 蜻蜓优化(Monkey King Evolution,MK-E)是一种基于进化算法的机器学习和优化方法。它结合了遗传算法、模拟退火算法等多种搜索方法的优点,并使用了蜂群(群体智能系统)的方法进行求解,在求解过程中自动产生新解,避免了手动选择解的繁琐过程。 基于蜻蜓

AI天才研究院 1260

还在手动调参?开源机器学习Python自动化方案让你效率提升10倍,

告别繁琐手动调参,开源机器学习Python自动化方案大幅提升模型优化效率。适用于分类、回归等场景,集成超参数搜索与交叉验证,支持主流框架,易用且灵活。效率提升10倍,值得收藏。

ProceNest的博客 1066

干货!进化算法优化提示工程的7个实战案例,覆盖多领域

问题背景某高校实验室的科研人员反馈:写SCI摘要时,要么太啰嗦(把实验细节都写进去),要么没抓住重点(漏了研究Gap或创新点),导致摘要不符合目标期刊的要求。手动调Prompt的效果:“写个SCI摘要”→录用率38%;“按‘Gap-方法-结果-意义’结构写摘要”→录用率45%,但还是不够。我是陈默,资深软件工程师,专注于AI优化算法和提示工程,曾为多家企业提供AI解决方案(比如电商客服机器人、科研写作助手)。我的公众号“AI优化笔记”会分享更多实战案例和技巧,欢迎关注!最后。

大数据洞察的博客 836

实战分享!提示工程架构师用进化算法搭建自适应提示系统的教训

你有没有过这样的经历?为了让AI生成符合要求的内容,你反复修改提示词:“把这句话写得更正式一点”→“不对,再口语化些”→“还是不行,加个例子”……手动调提示就像“盲人摸象”,既累又慢。我们的目标是用算法代替人工,自动生成“适应任务需求”的提示词——比如面对“情感分析”任务,系统能自动调整提示的语气(“判断情绪”vs“分析情感”)、结构(“先举例子再回答”vs“直接给出结果”),甚至关键词(“开心”vs“愉悦”),最终让AI的输出更符合用户预期。

小程序开发 377

如何用Python实现智能超参数搜索?这6种策略你不可不知

掌握高效超参数调优方法,提升机器学习模型性能。本文结合Python实现,介绍网格搜索、随机搜索、贝叶斯优化等6种主流策略,适用于深度学习与传统模型调参,兼顾效率与精度。助力算法工程师快速找到最优参数组合,值得收藏。

FuncInk的博客 422

CEC测试集实战指南:进化算法压力测试与Python封装

CEC测试集是进化计算领域权威的基准测试工具,本质是一组精心设计的数学优化函数,用于评估差分进化(DE)、粒子群(PSO)等元启发式算法的收敛性、鲁棒性与约束处理能力。其原理基于高维非线性、旋转偏移、混合复合等复杂地形构造,技术价值在于暴露算法在真实搜索空间中的结构性缺陷。典型应用场景包括智能优化算法研发、学术论文基准对比及工程调度类问题仿真。本文聚焦CEC2010至CEC2017多版本差异、Python环境快速封装及常见段错误、维度错配等实战坑点,特别结合CEC2013和CEC2017两大主流年份展开工程

weixin_29055137的博客 256

改进型微分进化算法实战:手写Python代码优化分布式光伏布局

群智能优化算法在新能源工程中的应用日益广泛,其中微分进化算法因其不依赖梯度信息、擅长处理非线性多峰问题,成为解决复杂工程优化难题的有效工具。在分布式光伏电站设计中,组件排布直接影响发电收益与建设成本,传统等间距排布在地形复杂地块下难以兼顾容量与遮挡约束,需要借助智能算法搜索全局最优解。微分进化通过差分变异、交叉与选择机制在解空间内高效迭代,改进型算法进一步采用拉丁超立方初始化、current-to-best变异策略、参数自适应与约束两阶段处理,显著提升了收敛速度与寻优稳定性。本文以光伏布局优化为工程场景,从

weixin_30607125的博客 313

CEC2013测试集使用指南:从C源码编译到Python ctypes调用

CEC2013是进化算法领域广泛采用的标准化基准测试集,本质是一套基于C语言实现的28个实数优化问题,强调数值稳定性、维度约束与接口契约。其核心原理在于通过硬编码的偏移数据(shift_data)和旋转矩阵(rotation_matrix)构造多峰、非分离、复合结构等挑战性场景,从而真实暴露算法在收敛性、鲁棒性与泛化能力上的缺陷。技术价值体现在可复现性高、平台差异可控、误差来源透明,特别适用于差分进化(DE)、粒子群(PSO)等元启发式算法的性能验证与论文实验。典型应用场景包括硕士论文基准对比、IEEE T

weixin_29185167的博客 145

遥感地质岩性识别实战:从光谱预处理到极端随机树与进化算法调参

机器学习在地质遥感中的应用日益广泛,岩性识别作为矿产资源勘探与地质填图的关键任务,其核心挑战并非算法选择,而是从影像数据到可靠分类结果的多阶段处理链条。辐射定标、大气校正与光谱特征提取构成数据预处理基石,高光谱数据的降维与波段选择直接影响模型性能。在此基础上,采用极端随机树等集成学习算法构建分类器,并利用布谷鸟算法与粒子群优化进行超参数自动调优,可有效提升分类精度。该套流程适用于多光谱/高光谱遥感影像的地质解译,为岩性填图与找矿预测提供工程化解决方案。完整技术链路涵盖数据预处理、特征工程、空间不重叠样本划分

weixin_33816946的博客 355

状态转移算法:一种讲道理的智能优化算法原理与实战

工程实践中常遇到目标函数无梯度、不可导甚至只能黑箱评估的优化难题,传统网格搜索或手工试参效率低,而以遗传算法、粒子群为代表的智能优化算法虽广泛使用,但算子随机性强、行为难解释。状态转移算法将寻优看作解空间中状态的几何转移,通过旋转、平移、伸缩、坐标轴四类结构化算子完成采样-择优-迭代,无需梯度信息即可完成参数优化与模型标定。其在多峰函数、黑箱评估和机器学习超参数调优中均表现出稳定的收敛性与可解释性。本文结合 Flask 校园失物招领平台的权重寻优案例,完整拆解状态转移算法的原理、实现与调参细节,为工程开发者

weixin_32821533的博客 293

GoDaddy域名解析 到 阿里云域名DNS

一:登录GODaddy,点击“个人中心”,然后点击“管理域名” 二:域名解析 第一种:直接解析到对应的服务器 添加一个,类型默认A,主机填写二级域名前缀(image.主域名),指向填写目标服务器ip即可(注意目标服务器80端口是否开放) 第二种:将主域名dns转到阿里云域名下 三:若要修给为阿里云解析服务器,要做以下修改,点击“更改” 点击更改后出现如下页面,此时需要到阿里云官网云解析DNS下添加域名解析 四:阿里云添加域名解析...

xiaolinzi176的博客 6705

Co-Harness:协同进化框架如何优化LLM智能体的任务性能

大语言模型(LLM)智能体的开发通常涉及模型微调与提示工程两大核心环节。模型微调旨在优化模型权重以适应特定任务,而提示工程则通过设计精妙的指令与控制逻辑来引导模型行为。然而,这两者往往被孤立优化,导致模型能力与任务控制框架之间出现失配,限制了智能体的最终性能。Co-Harness框架创新性地提出了协同进化的理念,将模型权重与任务控制系统(Harness)视为一个整体进行联合优化。该框架通过建立双向反馈闭环,让模型能力与任务规划、工具调用、评估机制等控制逻辑在训练过程中动态适配、共同进化。这种方法尤其适用于自

dengjuanshou7445的博客 440

别再只调电压了!深入理解数控电源的CC/CV模式与双闭环PID控制(以BUCK电路为例)

本文深入解析数控电源的CC/CV模式与双闭环PID控制技术,以BUCK电路为例,探讨如何通过双闭环控制优化负载突变响应和模式切换稳定性。文章详细介绍了电压环与电流环的协同工作原理、PID参数整定技巧及工程实践中的非线性补偿方法,帮助工程师提升电源设计的智能控制能力。

weixin_27017211的博客 264

卫星监测“America”级#两#栖#攻#击#舰#(LHA-6)出港

卫星监测“America”级#两#栖#攻#击#舰#(LHA-6)出港 前脚刚走,后脚又来,山姆大叔又来刷存在感,2020年7月28日,USS Ronald Reagan流窜在我国东海海区被卫星拍了下来: 2020年8月1日,最新卫星图像显示USS Ronald Reagan已经返回母港日本横须贺:距离其出港(2020年6月8日)已经过去了快两个月 然而事情并没有到此结束,“America”级#两#栖#攻#击#舰#(LHA-6)选择在 “八.一” 这个特殊的日子前后出港颇具挑衅的味道。 根据2020年

qq_46071146的博客 1565
上一篇: LeetCode刷题——LeetCode第 283 场周赛
下一篇: pytorch深度学习基础(一)——激活函数的介绍与对比
艾醒(AiXing-w)
艾醒(AiXing-w) 2021年度博客之星AI领域top5 2021年度博客之星AI领域top5
博客等级 码龄7年 1万+粉丝 320原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾醒(AiXing-w)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值