当前位置: 首页 > news >正文

遗传算法详解及在matlab中的使用

遗传算法分析

  • 一 遗传算法概述
    • 1 算法概念
    • 2 基本特点
    • 3 启发式算法
  • 二 原理与方法
    • 1 实现步骤
      • 1.1 个体编码
      • 1.2 种群初始化
      • 1.3 适应度计算
      • 1.4 选择运算
      • 1.5 交叉运算
      • 1.6 变异运算
    • 2 总结
  • 三 应用实例
    • 1 GA工具使用教程
    • 2 设置目标函数
    • 3 搜索最小值
    • 4 搜索最大值

一 遗传算法概述

本章简单介绍遗传算法的概念、特点

1 算法概念

遗传算法是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,它借鉴了达尔文的进化论和孟德尔的遗传学说,其本质是一种高效,并行,全局搜索的方法,它能在搜索过程中自动获取和积累有关搜索空间的知识并自适应的控制搜索过程以求得最优解

遗传算法常用于求解非线性最优化问题,函数最值问题,旅行商问题,背包问题。但遗传算法主要还是解决优化类问题,尤其是那种不能直接求解的十分复杂的问题。

是的,你没有看错,就是那位孟德尔~


2 基本特点

算法特点介绍
智能式搜索根据适应度(也就是目标函数)进行智能搜索
渐进式搜索利用复制,交叉,突变,选择等操作使下一代的结果优于上一代,经过几代的运行,解就会慢慢向局部最优聚集靠拢。
得到全局最优解利用交叉突变操作产生新个体,扩大了搜索的范围,使得解逐渐逼近全局最优解,而不会陷入局部最优解。
黑箱式结构依据问题的特性进行编码(输入),和确定适应度(输出)。具有只考虑输入输出关系的黑箱式结构,并不深究输入和输出关系的原因。
通用性强不要求明确的数学表达式,只需要一些简单的原则要求,可应用于解决离散问题、函数关系不明确的复杂问题
并行式运算每次迭代运算都是对群体中,所有的个体同时进行运算,运算方式是搜索速度快的并行式运算。

3 启发式算法

启发式算法是相对于最优化算法提出的。一个问题的最优算法求得该问题每个实例的最优解。启发式算法可以这样定义:一个基于直观经验构造的算法,在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个可行解,该可行解与最优解的偏离程度一般不能被预计。

简单来说,就是得到的解不一定是全局最优解,可能会和全局最优解存在一定的偏离。遗传算法也是计算机科学人工智能领域中用于解决最优化的一种搜索启发式算法,是进化算法的一种。它的每个解都是近似最优,不能保证是全局最优。这决定了遗传算法的每次结果都有可能不相同。但是遗传算法常用来求解十分复杂的问题,甚至连明确的表达式都没有的问题。

可以理解为牛刀,不需要过于精细的维护就能保持良好的性能,对噪声和干扰不敏感,用于处理复杂结构


二 原理与方法

本章介绍遗传算法的实现流程:个体编码,种群初始化,适应度计算,选择运算,交叉运算,变异运算,展开讨论每一具体步骤。

1 实现步骤

(1) 整体流程

标准遗传算法实现的基本步骤是:个体编码,种群初始化,适应度计算,选择运算,交叉运算,变异运算。遗传算法模拟基因重组与进化的自然过程,把需要解决的问题的参数编译成二进制码,也就是基因。许多基因(二进制串)组成一个染色体(个体),由染色体进行交叉,变异的运算。经过世代遗传,得到最后优化的结果。流程图如下:

在这里插入图片描述
(2) 生物学角度理解
一个染色体代表一个个体,N个个体形成一个种群,计算每一个个体的适应度大小。从种群中挑选适应度大的个体,进行遗传、交叉、变异等操作生成下一代种群。

(3) 数学角度理解
对某个待求解的问题,先随机生成N个初始解,形成一个解集。根据适应度函数计算每一个解的好坏,留下好的解,对留下的解进行相关操作,再生成下一组解,迭代循环,最后得到理想值。


1.1 个体编码

(1) 什么是编码
编码即把一个问题的可行解从其解空间转换到遗传算法所能处理的搜索空间的转换方法就成为编码。编码的目的是使后续交叉变异等操做更容易进行。

(2) 编码方法
二进制编码方法是遗传算法中最主要的一种编码方法,使用二进制符号0和1构成二进制编码符号串,代表个体基因型。符号串的长度与问题要求精度有关。但是,二进制编码在连续函数离散化时存在映射误差,符号长度不当会造成精度达不到或搜索空间增大的问题。举例说明:

  • 函数 f(x) = xsin(25 pi x) + 3.0 定义域为 [-1,2],

  • 假设精度为0.001,那么就是3000个数。
    需要12位二进制编码(2 ^ 11=2048)

  • 需注意:12位可以达到4096个数,超出搜索范围。这会造成搜索空间增大的问题。

但仍需要以补满位数为前提,优先保证满足精度,12位二进制,在[-1,2]上分4096个数,精度为0.0007,matlab绘图如下:
在这里插入图片描述
在这里插入图片描述


1.2 种群初始化

(1) 初始设置
对于一个初始种群,我们需要对:种群的大小,迭代次数(即最大代数),交叉概率变异概率,等相关参数进行初始化。

遗传算法中控制参数选择非常关键,较大会影响到算法性能。尤其是:初始种群大小,二进制编码长度,交叉概率Pc,变异概率Pm。

【交叉运算】是产生新个体的主要方法,决定了遗传算法全局搜索能力,
【变异运算】作决定了遗传算法的局部搜索能力。所以,Pc和Pm的选择十分关键。

(2) 参数取值范围

参数名称介绍
初始种群大小一般情况下种群数目在10-200之间。数目较大会增加计算量,造成计算机速度降低,太小容易收敛到局部最优解
迭代次数通常是在100-1000之间,与数据量的大小有关
交叉概率一般取0.4 - 0.99,太高会使适应的结构很快就被破坏,概率太低搜索会始终停滞不前
变异概率通常取0.0001-0.1, 太小会使新个体生过少,太大则使遗传算法变成随机搜索

1.3 适应度计算

(1) 适应度概念
适应度(Fitness):指在群体中,各个个体在优化计算中能达到或接近于或有助于找到最优解的优良程度。一般来说,一个个体如果适应度较高,遗传到下一代的概率就较大,反之适应度较低的个体遗传到下一代的概率就较小。遗传算法是一种概率引导搜索过程的算法。

【适应度函数】:度量个体适应度的函数就叫做适应度函数。适应度函数的设计应尽可能简单,这样可以减少时间复杂度和空间复杂度,降低计算的成本。

(2) 评价个体适应度过程

  • 对个体编码串进行解码处理后,得到个体表现型。(就是二进制编码串进行解码,当然也有可能不是二进制串)
  • 根据个体表新型计算对应个体的目标函数值。
  • 根据问题类型(求最大值或最小值),由目标函数按一定的规则转换求出个体的适应度。
  • 对于适应度函数的选择,多数情况可以直接将目标函数值作为个体的适应度
例:
直接以目标函数f(x)转化为适应度函数 FIt(f(x))有:Fit(f(x))  =  f(x)目标函数求解要求 最大化Fit(f(x))  = -f(x) 目标函数求解要求 最小化

1.4 选择运算

(1) 基本介绍
选择又称复制,就是在群体中选择适应度较高的个体产生新群体的过程。选择操作建立在适应度函数已确立的基础上。从生物学角度讲,如果把适应度函数比作 ‘物竞’,那么选择操作就好比‘天择’。选择操作的目的就是选择出适应度较高的个体,提高全局的收敛性。更加直观的说法是:选择运算就是用来确定怎样从父代群体中选取个体遗传到下一代的操作。

(2) 实现方法
遗传算法使用选择算子来对群体中的个体进行优胜劣汰操作,就是根据每个个体的适应度大小进行选择。下面介绍一种遗传算法常用的选择算子:轮盘赌

【轮盘赌】:每个个体进入下一代的概率就等于他的适应度值与整个种群中个体适应度值总和的比例。各个个体被选中的概率与其适应度函数值大小成正比,它是为了防止适应度数值较小的个体被直接淘汰而提出的。过程如下:

轮盘赌步骤介绍
个体选择概率就是指个体适应度值与整个种群中个体适应度值的总和的比。 ( 设第xi个的个体的个体选择概率表示为P(xi) )
累积概率指的是把每个个体的个体选择概率用线段表示,组合成一条长度为1的直线,先后顺序可以随意排列。个体的累积概率是个体前面所有数据长度的累加和。所以个体选择概率越大,对应长度区间越长
如何选择某个个体在[0,1]中随机生成一个数,该数落在的区间,对应的个体就被选中。这就利用到了2的累积概率:个体 xi 对应有效区间为[Q(xi-1),Q(xi)],显而易见,个体选择概率较大的个体被选中机会大。

( 设第xi个个体的累积概率表示为Q(xi) )
在这里插入图片描述


1.5 交叉运算

(1) 什么是交叉运算
在生物进化过程中,同源染色体交换重组,形成新染色体。模拟这个过程,遗传算法中用交叉算子产生新个体。交叉运算指对两个相互配对的染色体按某种方式相互交换其等位基因而形成两个新个体。是产生新个体的主要方法。

交叉运算之前需要对种群的个体进行两两配对,常用配对方法是随机配对。N个个体配对后形成N/2个组,交叉运算就在这些组的两个个体之间进行。常用的交叉方式为: 单点交叉,两点交叉(设置两个交叉点),均匀交叉,算数交叉。

(2) 单点交叉
单点交叉:在编码串中只设计一个交叉点,然后两个相互配对的个体在该点交换部分染色体。以两个相互配对的二进制编码串AB为例说明:
在这里插入图片描述

  • 1.对个体两两配对(已执行)

  • 2.随机设置某一基因座之后的位置为交叉点(基因座就是指串中的位置)
    在这里插入图片描述

  • 3.在交叉点处,依据叫交叉概率交换两个个体的部分染色体,交换后为:
    在这里插入图片描述

这里就体现了编码的优点,编码使得交叉运算可以很简单的实现


1.6 变异运算

(1) 变异介绍
变异值是根据设置的,较小的概率,把个体编码串上的某些位置的值进行更改。类似于生物中的基因突变,比如二进制编码串中,0变异成1 , 1变异为0,从而产生新个体。交叉运算是产生新个体主要方式,变异运算是辅助方法。

【变异】本身是一种随机算法,但同选择交叉结合之后,就能够避免因为选择和交叉而造成的某些遗传信息丢失的问题。

(2) 变异算法
变异算法目的:改善遗传算法局部搜索能力,维持群体多样性。变异算子包含:基本位变异,有效基因变异,均匀变异,边界变异等,下面简单介绍标准遗传算法中使用的 基本位变异:

  • 先随机产生变异点
  • 再根据变异概率将变异点基因取反(1变0,0变1)

(3) 举例说明

例:
(1) 假设x=3,采用二进制编码,编码串长度为8,设置x编译后为:1000 1111(2) 我假设第4位变异,于是:产生x’编码串:1001 1111(3) 将x’解码,得到十进制的x’,可以肯定:x’!= x (4)x’带入 适应度函数 中得到的值恰好比x的大,说明产生优秀的变异

再扩大到整个种群中N个个体,然后进行若干次迭代,就会产生许许多多的变异。总会有上述变异出适应度更高的个体的情况存在。促进了向最优解靠拢的过程。不断迭代,直至寻找到最优解。

交叉运算决定了遗传算法的全局搜索能力,而变异运算决定了局部搜索能力。
一定要注意,如果变异概率很大,那么整个搜索过程就退化为一个随机搜索过程。交叉算子和变异算子相互配合,使算法能够以优秀的性能解决问题。


2 总结

遗传算法实现过程:

  • 把待解决的问题的参数,编码成而二进制码(或其它)也就是基因。
  • 基因组成染色体(对应个体)。
  • 设置对应适应度函数(目标函数)求出每个个体的适应度。
  • 然后对许多染色体进行 选择运算 , 交叉运算 , 变异运算 。
  • 再经过多次迭代(循环,或者称之为世代遗传)。
  • 直至搜索到最大适应度的个体,找到最优解。

三 应用实例

用matlab中的GA函数求解函数最值问题。GA即实现遗传算法(Genetic Algorithm)的函数

1 GA工具使用教程

(1) matlab 中GA函数基本语法

函数格式:[x, fval] = ga(fun, nvars, A, b, Aeq, beq, lb, ub, nonlcon, options)

注意:该工具本身只提供计算最小值,后文讲如何计算最大值


(2) 输入参数介绍

名称作用使用方式
fun目标函数(需要最小化的函数)function handle,例如 @(x) x^2
nvars变量个数即优化问题的维度,几个自变量
A, b线性不等式约束 A*x ≤ b不需要则设为 []
Aeq, beq线性等式约束 Aeq*x = beq不需要则设为 []
lb变量的下界lb = [0, 0],几个自变量,括号就设几个数,(简易理解:定义域下限)
ub变量的上界ub = [1, Inf] (即变量最大值,lnf为无穷大)
nonlcon非线性约束函数返回 [c, ceq],其中 c ≤ 0 且 ceq = 0,不需要则设为 []
options优化选项通过 optimoptions(‘ga’, …) 设置,不需要则设为 []

【注意1】若直到末尾都不需设置参数,例如nonlcon 与options 无需设置,则可[]也可以省略
注意2】若GA函数options 不设置,ga算法会使用默认优化选项,根据已知信息,自动调整options 参数值。
options】参数值,就是我们上文讨论的:种群大小、最大迭代次数、交叉概率、变异函数、交叉函数等等。


(3)输出参数介绍

  • x:找到的最优解.
  • fval:最优解对应的目标函数值

(4) 对应matlab代码

1 定义目标函数,如求最小化 f(x) = x₁² + x₂²fun = @(x) x^2 + 15x ;2 设置约束条件:(不需要则填写 [])* 线性不等式约束(例如 x₁ + x₂ ≤ 1)A = [1, 1];b = 1;* 变量上下界(例如 0 ≤ x₁ ≤ 5, x₂ ≥ -1)lb = [0, -1];ub = [5, Inf];* 非线性约束(需自定义函数 nonlcon.mfunction [c, ceq] = nonlcon(x)c = x(1)^2 + x(2)^2 - 1; % 非线性不等式约束 c ≤ 0ceq = []; % 非线性等式约束 ceq = 0end
3 设置遗传算法参数options = optimoptions('ga', ...'PopulationSize', 100, ...   % 种群大小'MaxGenerations', 200, ...   % 最大迭代次数'CrossoverFraction', 0.8, ...% 交叉概率'Display', 'iter');         % 显示迭代过程4 调用 ga 函数nvars = 2; % 变量个数[x, fval] = ga(fun, nvars, A, b, [], [], lb, ub, @nonlcon, options);5 输出最优解和最优值disp(['最优解: ', num2str(x)]);disp(['目标函数值: ', num2str(fval)]);

通过合理配置参数和约束,ga 函数可有效解决各类非线性、非凸优化问题


2 设置目标函数

例:
(1) 函数:y=x^2sin(8 pi x)+2x+3.0  (自拟)(2) 定义域:[-1,5],每隔 0.01取点(3) 求函数的最小值

3 搜索最小值

(1) matlab绘图
在这里插入图片描述
在这里插入图片描述

(2) 创建函数
在这里插入图片描述

(3) 设置GA函数
此处options使用默认设置,GA算法会根据设置数据的范围,默认初始化合适的options参数,如:种群数量,迭代次数,交叉概率等等。

在这里插入图片描述
答案为:
在这里插入图片描述

在函数中位置:
在这里插入图片描述


4 搜索最大值

(1) 调整参数
matlab里所有优化工具箱函数是求最小值,如果是要求函数的最大值,只要在编写函数的时候,把函数取负即可。做出如下更改:
在这里插入图片描述
运行结果为:在这里插入图片描述
因为函数取负,故最大值为:10.5371,在x=4.8131处取得,见下图:
在这里插入图片描述


相关文章:

遗传算法详解及在matlab中的使用

遗传算法分析 一 遗传算法概述1 算法概念2 基本特点3 启发式算法 二 原理与方法1 实现步骤1.1 个体编码1.2 种群初始化1.3 适应度计算1.4 选择运算1.5 交叉运算1.6 变异运算 2 总结 三 应用实例1 GA工具使用教程2 设置目标函数3 搜索最小值4 搜索最大值 一 遗传算法概述 本章简…...

智能AI替代专家系统(ES)、决策支持系统(DSS)?

文章目录 前言一、专家系统(ES)是什么?二、决策支持系统(DSS)是什么?1.决策支持系统定义2.决策系统的功能与特点3.决策支持系统的组成 三、专家系统(ES)与决策支持系统(D…...

活在AI原生时代的05后,开始用AI创业

大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 人工智能&AIGC术语100条 Shelly聊AI-重…...

【官方配图】win10/win11 安装cuda 和 cudnn

文章目录 参考资料1.安装cuda toolkit1. 下载安装包2.安装验证 2. 安装cudnn下载cudnn安装包安装cudnn安装后的配置 参考资料 官方nvidia安装cuda官方nvidia安装cudnn 1.安装cuda toolkit 1. 下载安装包 下载地址 https://developer.nvidia.com/cuda-downloads?target_osW…...

释放微软bing的力量:深度剖析其主要功能

在浩瀚无垠的互联网海洋中,搜索引擎就如同指南针,引领我们找到所需要的信息。微软必应凭借其一系列强大功能,在搜索引擎领域脱颖而出,成为极具竞争力的一员。在这篇博客文章中,我们将深入探讨微软必应的主要功能,这些功能使其独具特色,成为全球用户的得力工具。 1. 智能…...

【Nginx 】Nginx 部署前端 vue 项目

1. 项目打包 1.1 安装依赖 在项目部署之前,确保开发环境中已安装Node.js和npm,这是运行Vue项目的基础。通过执行npm install命令,可以安装项目所需的所有依赖。这一步是打包流程的前提,确保了后续编译的顺利进行。 根据npm的官…...

DO-254航空标准飞行器电机控制器设计注意事项

DO-254航空标准飞行器电机控制器设计注意事项 1.核心要求1.1 设计保证等级(DAL)划分1.2生命周期管理1.3验证与确认2.电机控制器硬件设计的关键注意事项2.1需求管理与可追溯性2.2冗余与容错设计2.3验证与确认策略2.4元器件选型与管理2.5环境适应性设计2.6文档与配置管理3.应用…...

C# Unity 唐老狮 No.3 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: Unity课程 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体…...

视频推拉流EasyDSS点播平台云端录像播放异常问题的排查与解决

EasyDSS视频直播点播平台是一个功能全面的系统,提供视频转码、点播、直播、视频推拉流以及H.265视频播放等一站式服务。该平台与RTMP高清摄像头配合使用,能够接收无人机设备的实时视频流,实现无人机视频推流直播和巡检等多种应用。 最近&…...

【分布式锁通关指南 05】通过redisson实现分布式锁

引言 在上个篇章中,我们通过redis手撸了一套分布式锁,但是最后也提到了它依然存在不完美的地方。那么有没有更简单和靠谱的实现方式。当然有,在本篇章中,我们将讲解如何使用redisson框架实现分布式锁以及理解它的源码。 什么是red…...

路劲家园大学:教育创新赋能社区人文生态建设

2025年2月10日至13日,路劲家园大学集训活动成功举办,众多教育领域学者与一线教师齐聚,通过专题研讨、教学展示、技术探索等多元形式,为家园大学注入全新活力,探索教育创新发展之路。 双院揭牌 构建社区美育新生态 集训…...

【前端进阶】10 掌握前端框架模板引擎的实现原理

前端框架模板引擎的实现原理 当用户对页面进行操作,页面内容更新,我们要实现的功能包括 如果使用前端框架 如果使用数据驱动的方式,还可以让逻辑与UI解耦的方式,提升代码的可维护性,其中的数据绑定、事件绑定等功能&a…...

Spring Boot 接口 JSON 序列化优化:忽略 Null 值的九种解决方案详解

一、针对特定接口null的处理: 方法一:使用 JsonInclude 注解 1.1 类级别:在接口返回的 ‌DTO 类或字段‌ 上添加 JsonInclude 注解,强制忽略 null 值: 类级别:所有字段为 null 时不返回 JsonInclude(Js…...

Golang 中如何实现一个强大的重试机制,来解决瞬态错误

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...

冒泡排序算法优化

一 概述 冒泡排序是一种简单的交换排序算法,其核心思想是通过相邻元素比较和交换将最大元素逐步移动到数组末尾。 二、基础冒泡排序 void bubbleSort(int arr[], int n) { for (int i = 0; i < n-1; i++) { for (int j = 0; j < n-i-1; j++) { if…...

2025年Linux主力系统选择指南:基于最新生态的深度解析(附2025年发行版对比速查表)

Linux发行版生态在2025年持续演进&#xff0c;既有经典系统的迭代升级&#xff0c;也有新兴项目的崛起。本文结合最新行业动态&#xff0c;从个人用户到企业场景&#xff0c;梳理主力系统选择策略&#xff0c;助你找到最适合的Linux发行版。 一、新手友好型&#xff1a;平滑过渡…...

聊聊大数据测试开展方向有哪些?

目录 一、功能性测试与验证 二、数据的更新实时性测试 三、数据响应的及时性测试 四、算法的效果验证 五、AI算法系统的线上稳定性保证 大数据测试实施建议 大数据测试和传统软件测试有什么不同呢&#xff1f;可能涉及数据量大、多样性、处理速度这些特点。然后&#xff…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(11)

详解&#xff08;11&#xff09; 初始化配置解析上下文 senv environ;ngx_memzero(&conf, sizeof(ngx_conf_t));/* STUB: init array ? */conf.args ngx_array_create(pool, 10, sizeof(ngx_str_t));if (conf.args NULL) {ngx_destroy_pool(pool);return NULL;}conf.te…...

AI与机器学习、深度学习在气候变化预测中的应用

全球气候变化是现代社会面临的最重要的环境挑战之一&#xff0c;影响了气温、降水、海平面、农业、生态系统等多个方面。气候变化的驱动因素主要包括温室气体排放、气溶胶浓度、火灾频发、海冰融化、叶绿素变化、农业变化和生态环境变化等。这些因素在全球范围内交互作用&#…...

湖仓一体概述

湖仓一体之前&#xff0c;数据分析经历了数据库、数据仓库和数据湖分析三个时代。 首先是数据库&#xff0c;它是一个最基础的概念&#xff0c;主要负责联机事务处理&#xff0c;也提供基本的数据分析能力。 随着数据量的增长&#xff0c;出现了数据仓库&#xff0c;它存储的是…...

Go红队开发—语法补充

文章目录 错误控制使用自定义错误类型错误包装errors.Is 和 errors.Aspanic捕获、recover 、defer错误控制练习 接口结构体实现接口基本类型实现接口切片实现接口 接口练习Embed嵌入文件 之前有师傅问这个系列好像跟红队没啥关系&#xff0c;前几期确实没啥关系&#xff0c;因为…...

【VSCode】VSCode下载安装与配置极简描述

VSCode 参考网址&#xff1a;[Visual Studio Code Guide | GZTime’s Blog]. 下载安装 下载地址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows. 注&#xff1a;推荐不更改安装位置&#xff0c;并且在附加任务中“其他”中的四项全部勾选&#xff0c;即将用…...

揭开人工智能中 Tokens 的神秘面纱

揭开人工智能中 Tokens 的神秘面纱 在人工智能&#xff0c;尤其是自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;"tokens" 是一个频繁出现且至关重要的概念。对于理解语言模型如何处理和理解人类语言&#xff0c;tokens 起着基础性的作用。那么&#xff…...

Node.js安装与学习的简单记录

1. 下载与安装 参考&#xff1a; 2024最新版Node.js下载安装及环境配置教程【保姆级】 Node.js中文网 选择长期维护版: 18.19.0&#xff0c;Windows 安装包 (.msi) 64位。 安装选项都默认&#xff0c;安装路径可以改一下。 查看node版本&#xff1a;node -v v18.19.0 查看npm版…...

Spring也能接入Deepseek?

引言 最近DeepSeek可谓风光无限&#xff0c;AI可谓是目前互联网最火热的几个名词&#xff0c;我也一直在关注他的发展&#xff0c;从以前的人工智障&#xff0c;到chatGPT的高不可攀&#xff08;价格太贵&#xff09;&#xff0c;再到DeepSeek的横空出世&#xff0c;才看到了A…...

STM32 物联网智能家居 (七) 设备子系统--风扇控制

STM32 物联网智能家居 (七) 设备子系统–风扇控制 一、概述 下面我们来讲解设备子系统中的风扇控制,这是我们设备子系统中的最后一章,相信前面大家一家掌握了这种架构分层的编程思想,后续会很容易将程序进行扩展和开发。 上一节我们介绍了OLED屏幕的编程思想,有很多小伙…...

MySQL—Keepalived+MySQL双主复制实现MySQL高可用

Keepalived原理&#xff1a; Keepalived 的原理主要基于虚拟路由冗余协议&#xff08;VRRP&#xff0c;Virtual Router Redundancy Protocol&#xff09;、健康检查机制和负载均衡机制&#xff0c;以下为你详细介绍&#xff1a; VRRP 协议实现高可用&#xff1a;VRRP 是 Keep…...

CSS 使用white-space属性换行

一、white-space属性的常见值 * 原本格式&#xff1a; 1、white-space:normal 默认值&#xff0c;空格和换行符会被忽略过滤掉&#xff1b;宽度不够时文本会自动换行 * 宽度足够时&#xff0c;normal 处理后的格式 * 宽度不够时&#xff0c; normal 处理后的格式 2、white-spa…...

【数据结构第十六节】实现链式结构二叉树(详细递归图解—呕心沥血版!)

必须有为成功付出代价的决心&#xff0c;然后想办法付出这个代价。云边有个稻草人-CSDN博客 这节课挺抽象&#xff08;苦笑&#xff09;&#xff0c;没事&#xff0c;我会帮你&#xff01;干就完了&#xff01; &#xff08;目录在路上&#xff09; 正文开始—— 引言 用链表…...

mysqldump 参数详解

mysqldump 是一个用于备份 MySQL 数据库的工具。它可以生成一组 SQL 语句,这些语句可以用来重现原始数据库对象定义和表数据。以下是一些常用的 mysqldump 参数及其详细解释: 常用参数 基本参数 --host=host_name, -h host_name: 指定 MySQL 数据库主机地址,默认为 localh…...

Vue-Flow绘制流程图(Vue3+ElementPlus+TS)简单案例

本文是vue3Elementplusts框架编写的简单可拖拽绘制案例。 1.效果图&#xff1a; 2.Index.vue主代码&#xff1a; <script lang"ts" setup> import { ref, markRaw } from "vue"; import {VueFlow,useVueFlow,MarkerType,type Node,type Edge } fro…...

【11】RUST使用cargo组织crate

文章目录 使用cargo组织crate重导出编译文档生成测试 cargo组织工作空间 TODOcrate.io账号 TODO暂时不看发布crate 使用cargo组织crate 重导出 在模块顶部使用pub use self::重导出&#xff0c;方便使用模块时候直接使用use mod_X::xxx。从而隐藏crate内部模块的结构。方便向…...

开放标准(RFC 7519):JSON Web Token (JWT)

开放标准&#xff1a;JSON Web Token 前言基本使用整合Shiro登录自定义JWT认证过滤器配置Config自定义凭证匹配规则接口验证权限控制禁用session缓存的使用登录退出单用户登录Token刷新双Token方案单Token方案 前言 JSON Web Token &#xff08;JWT&#xff09; 是一种开放标准…...

Linux上用C++和GCC开发程序实现不同MySQL实例下单个Schema之间的稳定高效的数据迁移

设计一个在Linux上运行的GCC C程序&#xff0c;同时连接两个不同的MySQL实例&#xff0c;两个实例中分别有两个Schema的表结构完全相同&#xff0c;复制一个实例中一个Schema里的所有表的数据到另一个实例中一个Schema里&#xff0c;使用以下快速高效的方法&#xff0c;加入异常…...

【Windows】Windows常用命令

目录 文件和目录相关命令系统信息查看命令网络相关命令进程管理命令磁盘管理命令用户和权限管理命令计划任务和脚本命令其他常用命令1. 文件和目录相关命令 命令作用示例cd切换目录cd C:\Usersdir列出目录内容dirmkdir创建新目录mkdir NewFolderrmdir删除空目录rmdir OldFolder…...

趣讲TCP三次握手

一、TCP三次握手简介 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP连接中&#xff0c;只有两方进行通信&#xff0c;它使用校验和、确认和重传机制来保证数据的可靠传输。…...

vue3中的标签属性中的Ref

用在普通 DOM 标签上&#xff0c;获取的是 DOM 节点&#xff1a; 当你在一个普通的 HTML 标签&#xff08;例如 <div>、<input> 等&#xff09;上使用 ref 属性时&#xff0c;ref 会返回该 DOM 元素的直接引用。这使得你可以在 JavaScript 代码中方便地访问和操作…...

vue3.2 + vxe-table4.x 实现多层级结构的 合并、 展开、收起 功能

<template><div style"padding: 20px"><vxe-table border :data"list" :height"800" :span-method"rowspanMethod"><vxe-column title"一级类目" field"category1"><template #defaul…...

DeepSeek R1 + 飞书机器人实现AI智能助手

效果 TFChat项目地址 https://github.com/fish2018/TFChat 腾讯大模型知识引擎用的是DeepSeek R1&#xff0c;项目为sanic和redis实现&#xff0c;利用httpx异步处理流式响应&#xff0c;同时使用buffer来避免频繁调用飞书接口更新卡片的网络耗时。为了进一步减少网络IO消耗&…...

Java虚拟机监控工具

在Java应用高频出现的OOM、卡顿、线程阻塞等问题背后&#xff0c;往往隐藏着复杂的JVM运行机制异常。本文将通过真实案例场景&#xff0c;演示6款主流工具的组合使用技巧&#xff0c;助你快速定位90%以上的线上故障。 一、基础监控三板斧 1. jstat&#xff1a;GC性能透视仪 …...

利用python和gpt写一个conda环境可视化管理工具

最近在学习python&#xff0c;由于不同的版本之间的差距较大&#xff0c;如果是用环境变量来配置python的话&#xff0c;会需要来回改&#xff0c;于是请教得知可以用conda来管理&#xff0c;但是conda在管理的时候老是要输入命令&#xff0c;感觉也很烦&#xff0c;于是让gpt帮…...

软件工程----统一过程模型RUP

统一过程RUP是一种以用例驱动、以体系结构为核心、迭代和增量的软件开发过程&#xff0c;由UML方法和工具支持&#xff0c;广泛应用于各类面向对象项目。 RUP本身支持可裁剪性&#xff0c;可应付给类领域软件和不同的项目规模 RUP蕴含了大量优秀的实践方法&#xff0c;如&…...

Spring的MutipartFile 会直接将流转成文件存放在临时目录嘛?

Spring 的 MultipartFile 默认会将上传的文件存储到临时目录。具体行为取决于底层的 MultipartResolver 实现。常见的实现包括&#xff1a; 1. StandardServletMultipartResolver&#xff08;默认实现&#xff09; 如果使用的是 StandardServletMultipartResolver&#xff08…...

基于大数据的空气质量数据可视化分析系统

【大数据】基于大数据的空气质量数据可视化分析系统&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 本系统的实践价值在于将大数据技术与空气质量监测相结合&#xff0c;为公众、研究机构和政府…...

一文了解:部署 Deepseek 各版本的硬件要求

很多朋友在咨询关于 DeepSeek 模型部署所需硬件资源的需求&#xff0c;最近自己实践了一部分&#xff0c;部分信息是通过各渠道收集整理&#xff0c;so 仅供参考。 言归正转&#xff0c;大家都知道&#xff0c;DeepSeek 模型的性能在很大程度上取决于它运行的硬件。我们先看一下…...

国内访问Github的四种方法(2025版)

声明&#xff1a;以下内容&#xff0c;仅供学习使用&#xff0c;不得他用。如有他用&#xff0c;与本文作者无关。 国内访问GitHub及下载文件的解决方案整理如下&#xff0c;结合最新技术方案和实测有效方法&#xff1a; 一、网络层解决方案 Hosts文件修改法 通过DNS查询工具…...

企业级AI办公落地实践:基于钉钉/飞书的标准产品解决方案

一、平台化AI的崛起&#xff1a;开箱即用的智能革命 2024年企业AI应用调研数据显示&#xff1a; 73%的中型企业选择平台标准产品而非自研头部SaaS平台AI功能渗透率达89%典型ROI周期从18个月缩短至3-6个月 核心优势对比&#xff1a; 维度自研方案平台标准产品部署周期6-12个…...

金融行业专题|某基金公司基于超融合信创平台支持人大金仓数据库的性能评测

随着“自主可控”在 IT 基础设施领域不断深化&#xff0c;数据库的国产化替代也被很多金融机构提上日程。为了保证性能&#xff0c;大部分国产数据库都基于信创架构的裸金属服务器部署。在国产虚拟化/超融合平台上&#xff0c;国产数据库性能表现如何&#xff1f;尤其是搭配信创…...

Python异常处理面试题及参考答案

目录 什么是 Python 中的异常?程序为什么需要异常处理机制? 解释 BaseException 和 Exception 的区别 Python 的异常处理与传统的错误代码返回机制相比有哪些优势? 列出至少 5 个 Python 内置异常类型并说明触发场景 语法错误 (SyntaxError) 与运行时异常 (Runtime Erro…...

Java 实现快速排序算法:一条快速通道,分而治之

大家好&#xff0c;今天我们来聊聊快速排序&#xff08;QuickSort&#xff09;算法&#xff0c;这个经典的排序算法被广泛应用于各种需要高效排序的场景。作为一种分治法&#xff08;Divide and Conquer&#xff09;算法&#xff0c;快速排序的效率在平均情况下非常高&#xff…...