【人工智能】蚁群算法(密恐勿入)

news2024/11/23 18:28:55

蚁群算法(密恐勿入)

蚁群算法--给你一个感性认识

  • 蚁群算法(密恐勿入)
    • 1. 算法简介
      • 1.1 基本原理
      • 1.1.1 模拟蚂蚁在简单地形,寻找食物
      • 1.1.2 模拟蚂蚁在复杂地形,找到食物
      • 1.2 算法应用
    • 2. 算法解析
    • 3.算法应用——TSP问题
      • 3.1 TSP旅行商介绍
      • 3.2 利用蚁群算法解决TSP问题
      • 总结一下:

1. 算法简介

1.1 基本原理

蚁群算法是一种模拟蚂蚁觅食行为的启发式算法,被广泛应用于优化问题的求解。蚁群算法的基本思想是,将一群蚂蚁放在问题的解空间上,让它们通过信息素的传递和挥发,逐渐找到最优解。

1.1.1 模拟蚂蚁在简单地形,寻找食物

阶段一:在蚁群算法的初始阶段,我们在地图上不放置任何食物,因为蚂蚁需要在没有任何信息素的情况下开始摸索前进。一开始,蚂蚁们在洞外随机移动,试图找到食物的位置。每只蚂蚁的速度相同,它们会按照随机的方向前进,直到遇到障碍物或者到达了边界。此时,它们会再次随机选择一个方向,并继续前进。这个过程会持续进行,

阶段二:当蚂蚁们找到了食物后,它们会将一些信息素沿着它们的路径释放出来,并且在回到蚁巢的路上也会释放信息素。

蚁群之间的规则:

  • 蚂蚁发现食物并将其带回巢穴时,通常会遵循已经标记的路径返回,即原路返回。在返回过程中,蚂蚁会释放归巢素和信息素,这些化学物质可以吸引其他蚂蚁跟随它的路径前往食物源。如果路径上有较多的归巢素或信息素,则越来越多的蚂蚁将会选择这条路径前往食物。

阶段三:当蚂蚁们回到巢穴时,它们会在原来的路径上释放更多信息素,增强这条路径的吸引力,并且尝试着寻找更短的路径。蚂蚁们会在路径上选择合适的地方停下来,释放信息素,然后返回巢穴。这个过程将持续进行,直到蚂蚁们找到了最优路径。

根据以上规则,随着时间的推移,蚂蚁们终会(可能)找到的最优路径。

1.1.2 模拟蚂蚁在复杂地形,找到食物

1.2 算法应用

蚁群算法已经应用于多种优化问题的求解,比如:

  • 旅行商问题
  • 图着色问题
  • 网络路由问题
  • 调度问题
  • 生产计划问题

在这些问题中,蚁群算法通常能够找到较优的解。此外,蚁群算法还可以用于机器学习领域中的聚类和分类等问题。

2. 算法解析

想要理解算法?需要去理解以下内容:

  • 蚁群是如何找到解的?解的步骤是什么?
    1. 蚂蚁在初始时随机选择一个起点,并向前行走。
    2. 当蚂蚁走到一个节点时,它会选择一个下一个节点进行移动。蚂蚁选择下一个节点的概率与该节点上的信息素浓度成正比。信息素浓度越高的节点,被选择的概率也越高。
    3. 当蚂蚁移动到一个节点时,它会在该节点上释放一定量的信息素。
    4. 当蚂蚁找到解后,它会回到起点,并在路径上释放更多的信息素,增强这条路径的吸引力。
    5. 当其他蚂蚁在寻找解的过程中遇到已经被标记的路径时,它们会更有可能选择这条路径。
    6. 随着时间的推移,信息素会挥发,路径上信息素的浓度会逐渐降低。这样,路径上的信息素浓度会经历一个上升和下降的过程。
    7. 蚂蚁们会根据路径上的信息素浓度来选择下一个节点。当信息素浓度很高时,它们更有可能选择这条路径。
    8. 蚂蚁们持续寻找解,直到找到最优解或者达到预设的迭代次数。
作者个人理解:

蚂蚁个体之间就是通过这种间接的通信机制实现协同搜索最短路径的目标的。我们举例简单说明蚂蚁觅食行为:

现阶段 蚂蚁有A→B→C 和 A→D→C两种较优路径, A→D→C的距离要大于A→B→C

因为大量蚂蚁的选择概率会不一样,会将蚂蚁大致分为两批,一批走A→B→C ,另一批走A→D→C,单位时间内A→B→C通过蚂蚁也要大于 A→D→C,随着时间的推移,A→B→C的信息素越来越多,正反馈调节下,走此条路径的蚂蚁也越来越多。所以越短路径的浓度会越来越大,经过此短路径达到目的地的蚂蚁也会比其他路径多。这样大量的蚂蚁实践之后就找到了最短路径。所以这个过程本质可以概括为以下几点:

  • 路径概率选择机制信息素踪迹越浓的路径,被选中的概率越大
  • 信息素更新机制路径越短,路径上的信息素踪迹增长得越快
  • 协同工作机制蚂蚁个体通过信息素进行信息交流。

蚂蚁在蚁群算法中通过信息素的传递和挥发来进行交流。通过信息素的传递和挥发,整个蚁群就会产生信息正反馈现象、种群分化等。

  • 正反馈现象

    由大量蚂蚁组成的蚁群的集体行为便表现出一种信息正反馈现象。某一路径上走过的蚂蚁越多,则后来者选择该路径的可能性就越大。

💡 在一个人流量比较大的商场,人们往往会选择人流量比较大的走廊或者通道来走,因为人流量越大,越能够说明这个通道是正确的,这样就会产生一种信息正反馈现象,后来的人也会选择这条路线,进一步增加这条路线的人流量。与蚁群算法类似,人们会根据前人的经验来选择路线,从而产生类似的正反馈现象。

  • 种群分化

    种群分化是蚁群算法中的一个现象,当蚂蚁在搜索过程中遇到了局部最优解时,会一直围绕这个局部最优解寻找,并且释放信息素。这会导致其他蚂蚁也会被吸引过来,导致整个蚁群陷入局部最优解,而无法找到全局最优解的情况。这种现象在蚁群算法中是非常常见的,需要特别注意。为了避免种群分化,蚂蚁需要具有一定的随机性,同时需要及时更新信息素,以便发现全局最优解。

💡一个人在某个领域上有很高的专业技能,但是如果他过于专注于这个领域,就可能会失去对其他领域的了解和认识,进而导致对问题的认识出现偏差,甚至无法解决某些问题。

就比如图1. 我如果此刻将原有阻碍去掉一部分,此时只靠信息素交流的蚁群会产生种群分化现象。陷入了局部最有解。

当蚁群算法陷入局部最优解时,可以使用以下方法进行优化:

  1. 增加蚂蚁的数量。增加蚂蚁的数量可以增加搜索的广度,从而有更大的可能性找到全局最优解。
  2. 调整信息素挥发速度。通过适当降低信息素挥发速度,可以增加信息素在路径上的积累,从而增加蚂蚁选择该路径的概率。
  3. 引入随机因素。在蚁群算法中引入随机因素,可以使蚂蚁更具有探索性,从而有可能跳出局部最优解,进而找到全局最优解。
  4. 改变参数。通过改变蚁群算法中的参数,如信息素浓度、信息素挥发速度、启发式因子等,可以使算法更加灵活,从而更容易找到全局最优解。
  5. 使用局部搜索算法。在蚁群算法的基础上,可以结合局部搜索算法,如模拟退火算法、遗传算法等,来寻找全局最优解。

上述的情况,可以利用第三条和第四条解决。

3.算法应用——TSP问题

3.1 TSP旅行商介绍

首先,我们先回顾一下,什么是TSP旅行商问题:

假设有一位邮递员,他从初始城市(任意一城市)出发,途径所有城市并回到初始城市,那么他一共会有

( n − 1 ) ! (n-1)! (n1)!

条路径。从中找出那条最短路径,这就是TSP旅行商问题。

如果我们遍历的去找那个最短路径,那么随着城市的增加,计算量大大增加。

3.2 利用蚁群算法解决TSP问题

在这里,蚂蚁仅有信息素这一项能力是不够的。所以我们给与蚂蚁一些其他的能力

  • 蚂蚁在一次旅行中不会重复访问相同的城市
  • 蚂蚁可以知晓城市之间的距离。
  • 蚂蚁在路上会释放信息素
  • 蚂蚁在选择下一个城市的概率依靠以下公式:

p i j k = ( τ i j α ) ( η i j β ) ∑ allowed k ( τ i j α ) ( η i j β ) p_{i j}^{k}=\frac{\left(\tau_{i j}^{\alpha}\right)\left(\eta_{i j}^{\beta}\right)}{\sum_{\text {allowed}_k}\left(\tau_{i j}^{\alpha}\right)\left(\eta_{i j}^{\beta}\right)} pijk=allowedk(τijα)(ηijβ)(τijα)(ηijβ)

参数名称参数意义参数设置过大参数设置过小
信息素因子ɑ反映了蚂蚁运动过程中路径上积累的信息素的量在指导蚁群搜索中的相对重要程度。取值范围通常在[1, 4]之间。蚂蚁选择以前已经走过的路可能性较大,容易使随机搜索性减弱蚁群易陷入纯粹的随机搜索,使种群陷入局部最优
启发函数因子𝛽反映了启发式信息在指导蚁群搜索中的相对重要程度,蚁群寻优过程中先验性、确定性因素作用的强度取值范围在[0, 5]之间虽然收敛速度加快,但是易陷入局部最优蚁群易陷入纯粹的随机搜索,很难找到最优解

其实这个公式也很好理解,蚂蚁选择城市的概率主要由 τ i j ( t ) \tau_{ij}(t) τij(t) η i j ( 𝑡 ) \eta_{ij}(𝑡) ηij(t)有关,分母为蚂蚁k可能访问的城市之和(为常数),这样才能使蚂蚁选择各个城市的概率之后为1,符合概率的定义。 τ i j ( t ) \tau_{ij}(t) τij(t)和$\eta_{ij}(𝑡)上的指数信息素因子ɑ和启发函数因子𝛽只决定了信息素浓度以及启发函数对蚂蚁k从i到j的可能性的贡献程度。

例:下图为计算蚂蚁从起点城市2到可达城市的概率(套公式,很好理解):

图2. 此图和此节部分内容借鉴于秃头小苏:蚁群算法(实例帮助理解)

OK,蚂蚁有了这些能力后,我们只需要控制一下流程,就可以解决TSP问题了,下面是给出了此问题的一种常用的解决流程

蚁群算法解决TSP问题的算法流程

  1. 初始化信息素浓度矩阵 τ i j ( t ) \tau_{ij}(t) τij(t),启发式函数 η i j \eta_{ij} ηij,以及蚂蚁的位置。
  2. 每只蚂蚁按照信息素和启发式函数的概率选择下一个城市。
  3. 记录蚂蚁的路径和距离。
  4. 在所有蚂蚁走完所有城市之后,根据蚂蚁走过的路径和距离更新信息素浓度矩阵 η i j ( t ) \eta_{ij}(t) ηij(t)
  5. 如果未达到停止条件,则返回步骤2。

其中,停止条件可以是迭代次数达到预设值或者最佳解不再改变。

起点的选择对最短路径是有影响的。不同的起点可能会导致不同的最短路径。在蚁群算法中,通过随机选择起始点,可以增加搜索的广度,从而有更大的可能性找到全局最优解。

信息素更新的时机一般有两种方式:

  1. 在每个迭代周期结束后进行更新,即在所有蚂蚁完成当前迭代周期后,根据其路径长度和信息素更新信息素浓度。
  2. 在每只蚂蚁走遍所有城市之后,立即更新信息素浓度。

信息素更新公式:

τ i j ( t + 1 ) = ( 1 − ρ ) τ i j ( t ) + ∑ k = 1 m Δ τ i j k ( t ) \tau_{i j}(t+1)=(1-\rho) \tau_{i j}(t)+\sum_{k=1}^{m} \Delta \tau_{i j}^{k}(t) τij(t+1)=(1ρ)τij(t)+k=1mΔτijk(t)

其中, ρ \rho ρ 是信息素挥发速度, Δ τ i j k ( t ) \Delta \tau_{i j}^{k}(t) Δτijk(t) 是蚂蚁 k 在迭代 t 中走过路径 i 到 j 所留下的信息素,m 是蚂蚁的数量。

在每个迭代周期结束后进行更新或在每只蚂蚁走遍所有城市之后立即更新信息素浓度均可。

Delta tau 是蚂蚁 k 在迭代 t 中走过路径 i 到 j 所留下的信息素,不同的 Delta tau 规则有以下几种:

  • 静态规则:所有蚂蚁在搜索过程中释放的信息素量是相等的,即 Δ τ i j k ( t ) = Q / L k ( t ) \Delta \tau_{i j}^{k}(t)=Q/L_{k}(t) Δτijk(t)=Q/Lk(t),其中 Q 是常量,L_k(t) 是蚂蚁 k 在迭代 t 中走过的路径长度。
  • 动态规则:蚂蚁在搜索过程中释放的信息素量是动态变化的,即 Δ τ i j k ( t ) = Q / L k ( t ) + ∑ k = 1 m w k ⋅ L k ( t ) \Delta \tau_{i j}^{k}(t)=Q/L_{k}(t)+\sum_{k=1}^{m} w_{k} \cdot L_{k}(t) Δτijk(t)=Q/Lk(t)+k=1mwkLk(t),其中 ∑ k = 1 m w k = 1 \sum_{k=1}^{m} w_{k}=1 k=1mwk=1,w_k 是蚂蚁 k 对信息素的贡献系数,L_k(t) 是蚂蚁 k 在迭代 t 中走过的路径长度。
  • 最大值规则:每只蚂蚁在搜索过程中释放的信息素量最多为 Δ τ i j k ( t ) = Q L b e s t \Delta \tau_{i j}^{k}(t)=\frac{Q}{L_{best}} Δτijk(t)=LbestQ,其中 L_best 是迄今为止找到的最短路径长度。

以上规则中,静态规则是最简单的,但是可能会导致信息素的浓度过高或过低,从而影响搜索效果。动态规则可以根据搜索的进展情况动态调整信息素的浓度,适应性更强。最大值规则可以防止信息素浓度过高,但可能会导致搜索无法跳出局部最优解。

例(静态规则):下图为信息素的更新过程,假设初始时各路径信息素浓度为10。

总结一下:

蚁群算法流程:

  1. 初始化信息素浓度矩阵𝜏_{ij}(t),启发式函数𝜂_{ij},以及蚂蚁的位置。
  2. 每只蚂蚁按照信息素和启发式函数的概率选择下一个城市。
  3. 记录蚂蚁的路径和距离。
  4. 在所有蚂蚁走完所有城市之后,根据蚂蚁走过的路径和距离更新信息素浓度矩阵𝜏_{ij}(t)。
  5. 如果未达到停止条件,则返回步骤2。

其中,停止条件可以是迭代次数达到预设值或者最佳解不再改变。

起点的选择对最短路径是有影响的。不同的起点可能会导致不同的最短路径。在蚁群算法中,通过随机选择起始点,可以增加搜索的广度,从而有更大的可能性找到全局最优解。

信息素更新的时机一般有两种方式:

  1. 在每个迭代周期结束后进行更新,即在所有蚂蚁完成当前迭代周期后,根据其路径长度和信息素更新信息素浓度。
  2. 在每只蚂蚁走遍所有城市之后,立即更新信息素浓度。

信息素更新公式:

τ i j ( t + 1 ) = ( 1 − ρ ) τ i j ( t ) + ∑ k = 1 m Δ τ i j k ( t ) \tau_{i j}(t+1)=(1-\rho) \tau_{i j}(t)+\sum_{k=1}^{m} \Delta \tau_{i j}^{k}(t) τij(t+1)=(1ρ)τij(t)+k=1mΔτijk(t)

其中, ρ \rho ρ 是信息素挥发速度, Δ τ i j k ( t ) \Delta \tau_{i j}^{k}(t) Δτijk(t) 是蚂蚁 k 在迭代 t 中走过路径 i 到 j 所留下的信息素,m 是蚂蚁的数量。

在每个迭代周期结束后进行更新或在每只蚂蚁走遍所有城市之后立即更新信息素浓度均可。

Delta tau 是蚂蚁 k 在迭代 t 中走过路径 i 到 j 所留下的信息素,不同的 Delta tau 规则有以下几种:

  • 静态规则:所有蚂蚁在搜索过程中释放的信息素量是相等的,即 Δ τ i j k ( t ) = Q / L k ( t ) \Delta \tau_{i j}^{k}(t)=Q/L_{k}(t) Δτijk(t)=Q/Lk(t),其中 Q 是常量,L_k(t) 是蚂蚁 k 在迭代 t 中走过的路径长度。
  • 动态规则:蚂蚁在搜索过程中释放的信息素量是动态变化的,即 Δ τ i j k ( t ) = Q / L k ( t ) + ∑ k = 1 m w k ⋅ L k ( t ) \Delta \tau_{i j}^{k}(t)=Q/L_{k}(t)+\sum_{k=1}^{m} w_{k} \cdot L_{k}(t) Δτijk(t)=Q/Lk(t)+k=1mwkLk(t),其中 ∑ k = 1 m w k = 1 \sum_{k=1}^{m} w_{k}=1 k=1mwk=1,w_k 是蚂蚁 k 对信息素的贡献系数,L_k(t) 是蚂蚁 k 在迭代 t 中走过的路径长度。
  • 最大值规则:每只蚂蚁在搜索过程中释放的信息素量最多为 Δ τ i j k ( t ) = Q L b e s t \Delta \tau_{i j}^{k}(t)=\frac{Q}{L_{best}} Δτijk(t)=LbestQ,其中 L_best 是迄今为止找到的最短路径长度。

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

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

相关文章

Spark 2:Spark Core RDD算子

RDD定义 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合。 Resilient:RDD中的数据可以存储在内存中或者磁盘中。 Distribut…

Jenkins入门使用详解,实现构建部署运行

Hi I’m Shendi Jenkins入门使用详解,实现构建部署运行 Jenkins简介 Jenkins 是一个用 Java 编写的开源自动化工具 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。 CI 指持续集成,属于开发人…

【数据结构】--单链表力扣面试题①移除链表元素

题述: 给你一个链表的头结点head和一个整数val,请你删除链表中所有满足Node.val val的节点,并返回新的头结点。 思考: 为什么说要返回新的头结点,因为你删除的可能存在把原来的头结点删除的情况,这时就需要有新的头结…

【机器学习】

说明:机器学习总结 0、数据集 1、贝叶斯分类器 (一)计算题 所有样本分为两类(c ):好瓜是、好瓜否 (1)计算先验概率:P(c ) (2)计算每个属性的条…

元宇宙:梦想能否照进现实?

开篇我想问大家一个问题:有没有想过人类的未来是什么样子? 就目前我们所能探索的世界,不论从空间上有跨越了几十亿光年的距离,还是从时间有上几万几亿年的演化,对于宇宙来说,我们人类实在是太过渺小、脆弱…

非暴力沟通模型

非暴力沟通模型 非暴力沟通的创始人是马歇尔.卢森堡,师从人本主义心理学之父卡尔.罗杰斯。《非暴力沟通》一书入选香港大学推荐的50本必读书籍之列。 模型介绍 非暴力沟通(英文名称:NonviolentCommunication,简称NVC)…

AMBER分子动力学模拟之结果分析(MMGB/PBSA)-- HIV蛋白酶-抑制剂复合物(4)

AMBER分子动力学模拟之结果分析(MMGB/PBSA)-- HIV蛋白酶-抑制剂复合物(4) 结合自由能计算 我们首先计算焙变,用到的是pbsa和gbsa方法。我们需要一下文件 三个top文件,pro.prmtop lig.prmtop com.prmtop;输入文件MM_GBSA.in;将要…

Nextcloud集成Onlyoffice实现协同办公。

Nextcloud 安装 LAMP(LinuxApacheMySQLPHP)方式。局域网单机模式。 安装环境: OS:ubuntu 22.04 Nextcloud:26 Apache:2.4.52 mysql:Server version: 8.0.33-0ubuntu0.22.04.1 (Ubuntu) php:PHP 8.1.2-1u…

(GCC)从零开始的ETH开发--STM32F407ZGTX

开发环境: windows10 软件: STM32CubeMX最新版本: gcc工具链: vscode 硬件: STM32F407ZGT6开发板,ETH原理图: ​ 根据硬件可知MAC和PHY之间的接口类型为RMII,且PHY使用的外…

【文老师软考数据库】(全)

目录 第一章 计算机系统基本知识 1.1 计算机系统 1.1.1 计算机硬件组成 1.1.2 中央处理单元 1.1.3 数据表示 1.1.4 校验码 1.2 计算机体系结构 1.2.1 体系结构分类 1.2.2 指令系统存 1.2.3 储系系统 1.2.4 输入/输出技术 1.2.5 总线结构 1.3 可靠性、性能、安全 …

Win10系统为什么又提示重装打印机驱动?

明明没干嘛,Win 10系统却提示需要重新安装打印机驱动程序。驱动人生就来说说Win10重新安装打印机驱动程序的原因及解决方法: 一般来说,如果用户更新了Win 10的操作系统,可能导致之前的打印机驱动错误或缺失,这时候就需…

运行KT001小车问题汇总

运行KT001小车问题汇总: Q: 在安装ros的时候,出现这样的问题是因为什么,是镜像文件里边缺少东西了吗,可以怎么解决? A: 导入的是vmk配置文件,缺少iso镜像文件,不影响ros的运行。 Q: 编辑好这个…

Android ANativeWindow 渲染画面

ANativeWindow 是 Android NDK(Native Development Kit)提供的一个C/C编程接口,用于与底层的图形系统进行交互,实现图像渲染和处理等功能。 使用方法:上层用 SurfaceView,传递 SurfaceView 的 Surface 给 n…

ChatGPT的插件能用了,每月 20 美元的实习生真香

文章目录 开启插件并使用其他补充缺点和不足总结 哈喽嗨!你好,我是小雨青年,一名 追赶 AI 步伐的程序员。 自从上周 OpenAI 官宣了即将开放插件给 Plus 用户以来,这三天我就每天都会刷新ChatGPT 设置页面。 直到今天早上&#x…

SolVES模型应用(生态系统服务社会价值模型)

生态系统服务是人类从自然界中获得的直接或间接惠益,可分为供给服务、文化服务、调节服务和支持服务4类,对提升人类福祉具有重大意义,且被视为连接社会与生态系统的桥梁。自从启动千年生态系统评估项目(Millennium Ecosystem Asse…

思迈特软件Smartbi荣登“2023未来银行科技服务商100强”

近日,中国科学院《互联网周刊》、eNet研究院联合发布了“2023未来银行科技服务商100强”企业榜单。思迈特软件以“商业智能BI产品”凭借在金融科技创新的独特优势及在银行数字化转型实践中的卓越成就荣耀上榜。 据了解,“未来银行科技服务商100强”榜单&…

SQL删除重复的记录(只保留一条)-窗口函数row_number()

文章目录 一、关于mysql表中数据重复二、聚合函数min(id)not in二、窗口函数row_number()四、补充:常见的窗口函数 一、关于mysql表中数据重复 关于删除mysql表中重复数据问题,本文中给到两种办法:聚合函数、窗口函数row_number()的方法。 (注…

ffmpeg-mpv配置详解04

mpv.conf 格式详解 存放位置 windows下 Roaming\mpv linux下在.conf/mpv # mpv conf ################################################################################ # 记忆播放[退出时记住播放状态、音量、播放速度、位置等] save-position-on-quit # 播放状态保存位置…

运行时栈帧结构与方法调用

1 运行时栈帧结构 Java虚拟机以方法作为最基本执行单元,“栈帧”则是用于支持虚拟机进行方法调用和方法执行背后的数据结构。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。 1.1 局部变量表 局部变量表的容量以变量槽为最小单位。 Java…

强化学习:贝尔曼方程(Bellman Equation)

∗ ∗ 重点:状态值、贝尔曼方程 ∗ ∗ **重点:状态值、贝尔曼方程** ∗∗重点:状态值、贝尔曼方程∗∗ return评估策略 在前面概念介绍中,我们知道了可以用 return 来评估一个策略的好坏。如图,有三个不同的策略&…