经典启发算法【早期/启发式/HC爬山/SA模拟退火/TS禁忌搜/IA免疫 思想流程举例全】

news2025/5/20 0:59:53

文章目录

    • 一、早期算法
    • 二、启发式算法
    • 三、爬山法HC
      • 3.1 基本思路
      • 3.2 伪代码
    • 四、模拟退火SA
      • 4.1 算法思想
      • 4.2 基本流程
      • 4.3 再究原理
        • 4.3.1 Metropolis准则
        • 4.3.2 再理解
      • 4.4 小Tips
      • 4.5 应用举例
        • 4.5.1 背包问题:
          • 分析:
          • 求解:
        • 4.5.2 TSP问题:
          • 附图解:
      • 4.6 优缺点
          • 优点:
          • 缺点:
    • 五、禁忌搜索TS
      • 5.1 基本概念
      • 5.2 思想风暴
      • 5.3 基本流程
      • 5.4 应用举例
          • 问题:
          • 求解:
          • 另附手写例题:
    • 六、人工免疫算法IA
      • 6.1 必知专有名词
      • 6.2 深入理解免疫系统模型
        • 6.2.1 免疫系统VS免疫算法
        • 6.2.2 免疫算法详解
        • 6.2.3 阴性选择算法
          • 1. 什么是阴性选择算法?
          • 2. 流程图
          • 3. 算法步骤
      • 6.3 免疫算法流程
        • 步骤描述:
      • 6.4 算法改进
        • 6.4.1 克隆选择CSA
          • 1. 为什么要克隆选择?
          • 2. 案例
        • 6.4.2 基于抗体浓度的克隆选择
          • 创新又在哪里?
      • 6.4 免疫算法和进化算法区别

一、早期算法

也就是一些精确算法,包括:

  1. 分支定界法
  2. 背景分割法
  3. 动态规划

无法精确,我们就用近似算法,比如启发式算法,如下

二、启发式算法

首先我们要知道启发式算法包括:

  • 元启发

    • 基于个体:
      • 爬山法HC
      • 模拟退火SA
      • 禁忌搜索TS
    • 基于群体:(群智能优化算法)
      • 蚁群算法ACA
      • 粒子群算法PSO
      • 人工蜂群ABC
      • 人工鱼群AFSA
  • Specific

    主包还没涉猎

三、爬山法HC

3.1 基本思路

学过机器学习的同学可以不用看了,这不就是梯度下降法吗。其实是一种局部则有的贪心搜索算法:

每次从当前节点出发,与周围邻接点比较:

  • 若当前节点是最大的,那么返回当前节点,作为最大值
  • 若当前节点是最小的,就用最高的邻接点替换当前节点,从而实现向山峰的高处攀爬的目的

爬山法搜索到局部最优解后,就会停止搜索,因为在局部最优解这个点,无论向哪个方向小幅度的移动,都无法得到更优解

img

3.2 伪代码

int getPos(double x) {//比较答案并获取新坐标点
    int pos;//新坐标点
    double res = -INF;
    for (int i = 1; i <= n; i++) {
        double newRes = getRes(x, node[i]);//获取新状态答案
        if (newRes > res) { //比较答案
            res = newRes; //更新结果
            pos = i; //记录新坐标点
        }
    }
    return pos;
}
void HC(double &x,double &y) {
    double T = 1;
    while (T > EPS) {
        int pos = getPos(x);//获取下一状态的坐标
        sta = sta + (node[pos] - x) * T;//转移x状态
        T *= 0.96;
    }
}

四、模拟退火SA

关于爬⼭算法与模拟退⽕,有⼀个有趣的⽐喻:

  • 爬⼭算法:兔⼦朝着⽐现在⾼的地⽅跳去,找到了不远处的最⾼⼭峰,但不⼀定是珠穆朗玛峰。
  • 模拟退⽕:兔⼦喝醉随机地跳了很⻓时间,可能⾛向⾼处,也可能踏⼊平地。但是,它渐渐清醒了并朝最⾼⽅向跳去。

4.1 算法思想

一听这个名字我想多数人头脑都会冒出“???”,这咋还得退火嘞,难不成还能上火的吗?我们不妨想一想物理热力学的知识:

  • T高:固体内部粒子无序,内能大

  • T低:固体内部粒子逐渐有序,在每个温度达平衡态

  • T常温:内能最小

其实模拟退火(SImulated Annealing)算法的思想就是来源于物理的退火原理,也就是降温原理。先在一个高温状态下(相当于算法随机搜索),然后逐渐退火(引入随机因素,以一定概率接受一个更差解),在每个温度下(相当于算法的每一次状态转移)徐徐冷却(相当于算法局部搜索),最终达到物理基态(相当于算法找到最优解)。

不多说,上图:
在这里插入图片描述

4.2 基本流程

先附上模拟退火算法求解最优化问题的基本流程图和伪代码

在这里插入图片描述

其实这里算是有两层循环:

  • 内循环:在给定温度系统下达到平衡的过程。内循环中,每次都从当前解i的领域中随机找出一个新解j,按照Metropolis准则概率的接受新解。
  • 外循环:降温的过程,内循环结束后,即在一个温度下达到平衡后,开始外层的降温,然后再新的温度下重新开始内循环。

如果没有内循环:(领域变成不断地随机扰动

模拟退火算法_手把手教你模拟退火算法-CSDN博客

4.3 再究原理

4.3.1 Metropolis准则

在这里插入图片描述

  • 新解更优:接受新解
  • 新解不优:一定概率接受新解(并不是完全不接受),属于随机扰动
4.3.2 再理解

在这里插入图片描述

一开始在A,能量不断减小,100%接受新解;到达B后,发现新解不如旧解,(梯度下降法是不允许向前的),但用Metropolis准则,会以P(ΔE)跳出这个坑;如果B最终跳出来了,则会到达C,直到到达D后,就会稳定下来。

4.4 小Tips

  1. 初始点选取对算法有一定影响
  2. 初期温度下降快,避免接受过多的差结果;运行时间增加时,温度下降减缓(ΔE>0更有可能,P<1更有可能),以便于更快稳定结果。
  3. 加入适当的输出条件,满足则可以结束程序。

4.5 应用举例

4.5.1 背包问题:

已知背包的装载量为c=8,现有n=5个物品,它们的重量和价值分别是(2, 3, 5, 1, 4)和(2, 5, 8, 3, 6)。试使用模拟退火算法求解该背包问题,写出关键的步骤。

分析:

背包问题本身是一个组合优化问题,也是一个典型的NP难问题。如果使用枚举的方法,我们需要找到n个物品的所有子集,然后在那些满足约束条件的子集中比较物品的总价值,找到总价值最大的子集,也就是问题的最优解。

但是我们知道,大小为n的集合的子集数目为2^n ,所以当背包问题的规模变大(n变大)的时候,要找出所有的子集是一个不现实的做法,因为计算复杂度的指数级增长已经使得问题在规模稍大的时候就无法在可以接受的时间内得到解决。

因此背包问题需要采用一些计算复杂度较低的,但是能够提供令人满意的解的算法,而模拟退火算法是解决背包问题的重要手段。

求解:

假设问题的一个可行解用0和1的序列表示,例如i=(1010)表示选择第1和第3个物品,而不选择第2和第4个物品。用模拟退火算法求解例10.1的关键过程如图所示:

在这里插入图片描述

4.5.2 TSP问题:
附图解:

在这里插入图片描述

4.6 优缺点

优点:
  • 对全局最优解进行随机搜索,避免跳入局部最优解
  • 时间空间复杂度相对较低
  • 对问题的领域知识所知甚少
缺点:
  • 简单问题效率不高,较慢,降温方法较为严格
  • 已知待解问题相关知识用不上

五、禁忌搜索TS

5.1 基本概念

  • 禁忌表:存放记忆禁忌对象的表(有容量限制)

  • 禁忌对象:禁忌表中被禁的元素(TSP中可以是城市)

  • 禁忌期限:禁忌长度,指的是禁忌对象不能被选取的周期。期限太短就容易出现循环,跳不出局部最优;期限太长则计算周期过长。

    到底怎么理解?就是未来L代不计算/考虑该领域的候选解

  • 特赦准则:(所谓特赦:禁忌期限还没到就赦免!!)所有对象被禁忌之后,可以让其中性能最好的被禁忌的对象解禁;或者某个对象会带来目标值大幅改进

5.2 思想风暴

  1. 初始化领域范围、禁忌长度和初始解
  2. 领域范围内计算候选解并选择最优解
  3. 最优解加入TT禁忌表,设置为禁忌长度(每一步禁忌表内禁忌长度都要更新)
  4. 更新当前解为最优解(不妨更新全局最优解)
  5. 判断是否为终止条件

5.3 基本流程

在这里插入图片描述

5.4 应用举例

问题:

已知一个旅行商问题为四城市(a,b,c,d)问题,城市间的距离如矩阵D所示,为方便起见,假设邻域映射定义为两个城市位置对换,而始点和终点城市都是a。请分析使用禁忌搜索算法求解该问题的前面三代的过程与主要步骤。

在这里插入图片描述
求解:

在这里插入图片描述

另附手写例题:

在这里插入图片描述

六、人工免疫算法IA

6.1 必知专有名词

人体的免疫系统:

在这里插入图片描述

这里,我们着重借鉴特异性免疫并解释:

  • 抗原:异体,与抗体/淋巴细胞进行结合
  • 抗体:用来鉴别和移植外援物质的一种蛋白质复合体,每种抗体可以识别一种抗原
  • 淋巴细胞:
    • B细胞:B淋巴细胞,在骨髓分化成熟
    • T细胞:T淋巴细胞,在胸腺中成熟
    • 记忆细胞:包括记忆B细胞、记忆T细胞,在初次免疫应答后长期存活。二次感染时快速活化,产生更强、更迅速的免疫应答

在这里插入图片描述

滴滴,来回忆高中生物了,大家可以看看这个图,填一填空。

6.2 深入理解免疫系统模型

6.2.1 免疫系统VS免疫算法

img

  1. 把重心放在B细胞表层的抗体和抗原之间的机制上
  2. 抗体和抗原的亲和程度由它的抗体决定簇和抗原的决定基的匹配程度决定假设每个抗原和每个抗体型分别只有一个抗原决定簇(实际它们都有许多不同类型的抗原决定基)
  3. 通过这些决定基之间的匹配程度控制不同类型抗体的复制和减少,以达到优化系统的目的.

在这里插入图片描述

6.2.2 免疫算法详解

一般免疫算法就是对免疫系统机理的模拟,包括:

  • 免疫识别(免疫系统IS的主要功能,也是AIS的核心之一),识别的本质是区分"自我"和“非我”

    核心机制:根据识别的对象特征进行编码,定义一个自我集合随机产生一系列检测器,用于检测自我集合变化

  • 免疫学习:免疫系统通过学习促使免疫细胞的个体亲和度提⾼、群体规模扩⼤。

    最优个体以免疫记忆的形式得到保存当机体重复遇到同⼀抗原时,由于免疫记忆机制的作⽤,免疫系统对该抗原的应答速度⼤⼤提⾼。

    途径:

    • 增强学习
    • 遗传学习
    • 联想式学习
  • 免疫记忆

    • 初次应答:识别之后保留最优抗体、产生记忆细胞的形式保留对某抗原的记忆信息
    • 二次应答:仍存在的B细胞作为免疫记忆细胞快速与抗原反应(加快学习过程并提高学习质量)

    二次免疫应答:更迅速,无需重新学习

6.2.3 阴性选择算法
1. 什么是阴性选择算法?
  • 训练阶段:随机生成大量初识检测器,并逐一与系统定义的⾃体数据集进⾏匹配。若检测器能够识别某条⾃体数据,则被删除。那些与所有⾃体数据均不能匹配的检测器成为有效检测器,并被存⼊检测器集合。
  • 检测阶段:未知类别数据与有效检测器进⾏匹配。如果⾄少有⼀个检测器能够识别该数据,则该数据被归类为⾮⾃体;否则归为⾃体。
2. 流程图

在这里插入图片描述

3. 算法步骤
  1. 定义一个自身集合S,每个字符串由n个字母组成,字符串可以是一个网络数据包,电子邮件特征向量或程序的一般行为模式。
  2. 产生一个初始检测器集合R(随机产生)
  3. 训练阶段)R每个检测器经历阴性选择。R只要与自身集合S中的任意一个字符串相匹配,则删除该检测器;无任何字符串匹配,就保留,作为有效检测器
  4. 测试阶段)通过与R集合的匹配不断检测S的变化,一旦发生任何匹配,则说明S集合有了外来抗原侵入。

虽然一开始我们会疑问:为什么匹配就要删除这个检测器?看到测试阶段应该大家就明白了,当然要删除,留下的才可以识别外来的!

6.3 免疫算法流程

img

步骤描述:
  1. 抗原识别:免疫系统确认抗原入侵
  2. 初始抗体产生:激活记忆细胞分化,产生抗体
  3. 亲和力计算:计算抗体和抗原之间的亲和力
  4. 记忆细胞分化:T淋巴细胞刺激B细胞增殖、分化产生和记忆细胞(伏笔!? 怎么增值分化–>借鉴GA)
  5. 促进和抑制:亲和力搞得抗体受到促进,高密度抗体会被排挤(保证多样性)
  6. 终止条件判断

6.4 算法改进

6.4.1 克隆选择CSA

在这里插入图片描述

1. 为什么要克隆选择?

其实改进在哪里,就是分化产生记忆细胞,既然是一种遗传,为什么不利用遗传择优的思想筛选更好的记忆细胞去产生抗体?**亲和度高就克隆!**都克隆了那就也来个变异吧。。

2. 案例

以下是一个使用克隆选择算法解决旅行商问题的案例:

  1. 初始化抗体种群:随机生成一定数量的抗体,每个抗体代表一个旅行路线。
  2. 评估抗体亲和度:计算每个抗体路线的总距离。
  3. 克隆选择:选择亲和度较高的抗体进行克隆,克隆的个数根据亲和度大小决定。
  4. 变异:对克隆的抗体进行变异,如交换两条路线中的城市顺序。
  5. 迭代:重复步骤2-4,直到满足终止条件。

通过多次迭代,算法可以找到较短的旅行路线。

6.4.2 基于抗体浓度的克隆选择

创新又在哪里?

亲和力高的记忆细胞将会被克隆,如何保证记忆细胞的多样性?抗体浓度高的被抑制,浓度低的会促进。

6.4 免疫算法和进化算法区别

  • 记忆单元基础上进行,确保可以收敛到全局最优解;进化算法不可以

  • 亲和力有两种形式:

    • 抗体和抗原的关系:目标和解的匹配程度
    • 抗体之间的关系:保证免疫算法具有多样性

    而进化算法只是简单的计算个体适应度

  • 通过促进或抑制抗体的产生,体现了自我调节功能;而进化算法根据适应度选择⽗代个体,并没有对个体多样性进⾏调节

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2379634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IntraWeb 16.0.2 + Bootstrap 4 居中布局实战(附源码+效果图)

前言 最近在优化一个 IntraWeb 16.0.2 项目时&#xff0c;发现默认布局方式不够灵活&#xff0c;尤其是在不同屏幕尺寸下对齐效果不佳。于是&#xff0c;我决定引入 Bootstrap 4 来实现 完美居中布局&#xff0c;并成功落地&#xff01;今天就把完整的 源代码 实际效果图 分享…

【Java ee初阶】jvm(3)

一、双亲委派机制&#xff08;类加载机制中&#xff0c;最经常考到的问题&#xff09; 类加载的第一个环节中&#xff0c;根据类的全限定类名&#xff08;包名类名&#xff09;找到对应的.class文件的过程。 JVM中进行类加载的操作&#xff0c;需要以来内部的模块“类加载器”…

23种设计模式考试趋势分析之——适配器(Adapter)设计模式——求三连

文章目录 一、考点分值占比与趋势分析二、真题考点深入挖掘三、"wwwh"简述四、真题演练与解析五、极简备考笔记 适配器模式核心要点六、考点记忆顺口溜七、多角度解答 一、考点分值占比与趋势分析 由于知识库提供的真题年份信息不完整&#xff0c;我们仅能对现有数据…

【Linux笔记】——线程互斥与互斥锁的封装

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;Linux &#x1f339;往期回顾&#x1f339;&#xff1a;【Linux笔记】——Linux线程封装 &#x1f516;流水不争&#xff0c;争的是滔滔不息 一、线程互斥的概念二、互…

Android屏幕采集编码打包推送RTMP技术详解:从开发到优化与应用

在现代移动应用中&#xff0c;屏幕采集已成为一个广泛使用的功能&#xff0c;尤其是在实时直播、视频会议、远程教育、游戏录制等场景中&#xff0c;屏幕采集技术的需求不断增长。Android 平台为开发者提供了 MediaProjection API&#xff0c;这使得屏幕录制和采集变得更加简单…

【深度学习】残差网络(ResNet)

如果按照李沐老师书上来&#xff0c;学完 VGG 后还有 NiN 和 GoogLeNet 要学&#xff0c;但是这两个我之前听都没听过&#xff0c;而且我看到我导师有发过 ResNet 相关的论文&#xff0c;就想跳过它们直接看后面的内容。 现在看来这不算是不踏实&#xff0c;因为李沐老师说如果…

《Python星球日记》 第94天:走近自动化训练平台

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、自动化训练平台简介1. Kubeflow Pipelines2. TensorFlow Extended (TFX) 二…

S7 200 smart连接Profinet转ModbusTCP网关与西门子1200PLC配置案例

控制要求&#xff1a;使用MODBUSTCP通信进行两台PLC之间的数据交换&#xff0c;由于改造现场不能改动程序&#xff0c;只留出了对应的IQ地址。于是客户决定使用网关进行通讯把数据传到plc。 1、读取服务器端40001~40005地址中的数据&#xff0c;放入到VW200~VW208中&#xff1…

学习笔记:黑马程序员JavaWeb开发教程(2025.4.7)

12.9 登录校验-Filter-入门 /*代表所有&#xff0c;WebFilter&#xff08;urlPatterns “/*”&#xff09;代表拦截所有请求 Filter是JavaWeb三大组件&#xff0c;不是SpringBoot提供的&#xff0c;要在SpringBoot里面使用JavaWeb&#xff0c;则需要加上ServletComponentScan注…

OpenCV-python灰度变化和直方图修正类型

实验1 实验内容 该段代码旨在读取名为"test.png"的图像&#xff0c;并将其转换为灰度图像。使用加权平均值法将原始图像的RGB值转换为灰度值。 代码注释 image cv.imread("test.png")h np.shape(image)[0] w np.shape(image)[1] gray_img np.zeros…

图像定制大一统?字节提出DreamO,支持人物生成、 ID保持、虚拟试穿、风格迁移等多项任务,有效解决多泛化性冲突。

字节提出了一个统一的图像定制框架DreamO&#xff0c;支持人物生成、 ID保持、虚拟试穿、风格迁移等多项任务&#xff0c;不仅在广泛的图像定制场景中取得了高质量的结果&#xff0c;而且在适应多条件场景方面也表现出很强的灵活性。现在已经可以支持消费级 GPU&#xff08;16G…

Nginx 动静分离在 ZKmall 开源商城静态资源管理中的深度优化

在 B2C 电商高并发场景下&#xff0c;静态资源&#xff08;图片、CSS、JavaScript 等&#xff09;的高效管理直接影响页面加载速度与用户体验。ZKmall开源商城通过对 Nginx 动静分离技术的深度优化&#xff0c;将静态资源响应速度提升 65%&#xff0c;带宽成本降低 40%&#xf…

在vs code 中无法运行npm并报无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查

问题&#xff1a; npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查 原因&#xff1a; 可能是环境变量未正确继承或终端配置不一致 解决方法&#xff1a; 1.找到自己的node.js的版本号 2.重新下载node.js 下载 node.js - https://nodejs.p…

分布式2(限流算法、分布式一致性算法、Zookeeper )

目录 限流算法 固定窗口计数器&#xff08;Fixed Window Counter&#xff09; 滑动窗口计数器&#xff08;Sliding Window Counter&#xff09; 漏桶算法&#xff08;Leaky Bucket&#xff09; 令牌桶算法&#xff08;Token Bucket&#xff09; 令牌桶与漏桶的对比 分布式…

ARM A64 LDR指令

ARM A64 LDR指令 1 LDR (immediate)1.1 Post-index1.2 Pre-index1.3 Unsigned offset 2 LDR (literal)3 LDR (register)4 其他LDR指令变体4.1 LDRB (immediate)4.1.1 Post-index4.1.2 Pre-index4.1.3 Unsigned offset 4.2 LDRB (register)4.3 LDRH (immediate)4.3.1 Post-index…

实习记录小程序|基于SSM+Vue的实习记录小程序设计与实现(源码+数据库+文档)

实习记录小程序 目录 基于SSM的习记录小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、小程序端&#xff1a; 2、后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码…

老旧设备升级利器:Modbus TCP转 Profinet让能效监控更智能

在工业自动化领域&#xff0c;ModbusTCP和Profinet是两种常见的通讯协议。Profinet是西门子公司推出的基于以太网的实时工业以太网标准&#xff0c;而Modbus则是由施耐德电气提出的全球首个真正开放的、应用于电子控制器上的现场总线协议。这两种协议各有各的优点&#xff0c;但…

【从基础到模型网络】深度学习-语义分割-ROI

在语义分割中&#xff0c;ROI&#xff08;Region of Interest&#xff0c;感兴趣区域&#xff09;是图像中需要重点关注的部分。其作用包括&#xff1a;提高效率&#xff0c;减少高分辨率图像的计算量&#xff1b;增强分割精度&#xff0c;聚焦关键语义信息&#xff1b;减少背景…

掌握Docker:从运行到挂载的全面指南

目录 1. Docker的运行2. 查看Docker的启动日志3. 停止容器4. 容器的启动5. 删除容器6. 查看容器的详细信息7.一条命令关闭所有容器拓展容器的复制&#xff08;修改数据不会同步&#xff09;容器的挂载&#xff08;修改数据可以同步&#xff09;挂载到现有容器 1. Docker的运行 …

Pandas pyecharts数据可视化基础③

pyecharts基础绘图案例解析 引言思维导图代码案例分析 提前安装依赖同样操作安装完重新启动Jupyter Notebook三维散点图&#xff08;代码5 - 40&#xff09; 代码结果代码解析 漏斗图&#xff08;代码5 - 41&#xff09;结果代码解析 词云图&#xff08;代码5 - 42&#xff09;…