Loading [MathJax]/jax/input/TeX/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >经典优化算法 | 蚁群算法解析

经典优化算法 | 蚁群算法解析

作者头像
墨明棋妙27
发布于 2022-09-23 03:16:22
发布于 2022-09-23 03:16:22
3K00
代码可运行
举报
文章被收录于专栏:19961996
运行总次数:0
代码可运行

蚁群算法基本思想

蚁群算法的基本原理来源于自然界中蚂蚁觅食的最短路径问题。根据昆虫学家的观察,发现自然界的蚂蚁虽然视觉不发达,但它可以在没有任何提示的情况下找到从食物源到巢穴的最短路径,并且能在环境发生变化(如原有路径上有了障碍物)后,自适应地搜索新的最佳路径。蚂蚁是如何做到这一点的呢?

原来,蚂蚁在寻找食物源时,能在其走过的路径上释放一种蚂蚁特有的分泌物一信息激素一也可称之为信息素,使得一定范围内的其他蚂蚁能够察觉到并由此影响它们以后的行为。当一些路径上通过的蚂蚁越来越多时,其留下的信息素也越来越多,以致信息素强度增大(当然,随时间的推移会逐渐减弱),所以蚂蚁选择该路径的概率也越高,从而更增加了该路径的信息素强度,这种选择过程被称之为蚂蚁的自催化行为。由于其原理是一种正反馈机制.因此,也可将蚂蚁王国理解为所谓的增强型学习系统。

在自然界中,蚁群的这种寻找路径的过程表现为一种正反馈过程,“蚁群算法”就是模仿生物学蚂蚁群觅食寻找最优路径原理衍生出来的。

蚁群算法数学模型

应该说前面介绍的蚁群算法只是一种算法思想,要是想真正应用该算法,还需要针对一个特定问题, 建立相应的数学模型。现仍以经典的TSP问题为例,来进一步阐述如何基于蚁群算法来求解实际问题。

对于TSP问题,为不失一般性,设整个蚂蚁群体中蚂蚁的数量为m,城市的数量为n,城市i与城市j之间的距离为

dij

(i,j=1,2,…,n),t时刻城市i与城市j连接路径上的信息素浓度为

τij

(t)。初始时刻,蚂蚁被放置在不同的城市里,且各城市间连接路径上的信息素浓度相同,不妨设

τij

(0)=

τ

(0)。然后蚂蚁将按一定概率选择线路,不妨设

Pkij(t)

为t时刻蚂蚁k从城市i转移到城市j的概率。我们知道,“蚂蚁TSP”策略会受到两方面的左右,首先是访问某城市的期望,另外便是其他蚂蚁释放的信息素浓度,所以定义:

其中,

ηtij

为启发函数,表示蚂蚁从城市i转移到城市j的期望程度:

allowk

(k=1, 2, …, m)为蚂蚁k待访问城市集合,开始时,

allowk

中有n一1个元素,即包括除了蚂蚁k出发城市的其他多有城市, 随着时间的推移,

allowk

中的元素越来越少,直至为空;a为信息素重要程度因子,简称信息度因子。其值越大,表示信息影响强度越大;

β

为启发函数重要程度因子,简称启发函数因子,其值越大,表明启发函数影响越大。

在蚂蚁遍历城市的过程中,与实际情况相似的是,在蚂蚁释放信息素的同时,各个城市间连接路径上的信息素的强度也在通过挥发等方式逐渐消失。为了描述这一特征,不妨令p(0<p<1)表示信息素的挥发程度。这样,当所有蚂蚁完整走完一遍所有城市之后,各个城市间连接路径上的信息浓度为:

其中,

Δτkij

为第k只蚂蚁在城市i与城市j连接路径上释放信息素而增加的信息素浓度;

Δτij

为所有蚂蚁在城市i与城市j连接路径上释放信息素而增加的信息素浓度。

一般

Δτkij

的值可由ant cycle system模型进行计算:

其中,Q为信息素常数,表示蚂蚁循环一次所释放的信息素总量;

Lk

为第k只蚂蚁经过路径的总长度。

蚁群算法流程

用蚁群算法求解TSP问题的算法流程如下图所示,具体每步的含义如下:

  • 步骤1:对相关参数进行初始化,包括蚁初始化群规模、信息素因子、启发函数因子、信息素、挥发因子、信息素常数、最大迭代次数等,以及将数据读人程序,并对数据进行基本的处理,如将城市的坐标位置,转为城市间的矩阵。
  • 步骤2:随机将蚂蚁放于不同的出发点,对每个蚂蚁计算其下一个访问城市,直至所更新信息素表有蚂蚁访问完所有城市。
  • 步骤3:计算各个蚂蚁经过的路径长度
Lk

,记录当前迭代次数中的最优解,同时对各个城市连接路径上的信息素浓度进行更新。

  • 步骤4:判断是否达到最大迭代次数,若否,则返回步骤2,否则终止程序。
  • 步骤5:输出程序结果,并根据需要输出程序寻优过程中的相关指标,如运行时间、收敛迭代次数等。

python简单实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import matplotlib.pyplot as plt


# 建立“蚂蚁”类
class Ant(object):
    def __init__(self, path):
        self.path = path                       # 蚂蚁当前迭代整体路径
        self.length = self.calc_length(path)   # 蚂蚁当前迭代整体路径长度

    def calc_length(self, path_):              # path=[A, B, C, D, A]注意路径闭环
        length_ = 0
        for i in range(len(path_)-1):
            delta = (path_[i].x - path_[i+1].x, path_[i].y - path_[i+1].y)
            length_ += np.linalg.norm(delta)
        return length_

    @staticmethod
    def calc_len(A, B):                        # 静态方法,计算城市A与城市B之间的距离
        return np.linalg.norm((A.x - B.x, A.y - B.y))


# 建立“城市”类
class City(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y


# 建立“路径”类
class Path(object):
    def __init__(self, A):                     # A为起始城市
        self.path = [A, A]

    def add_path(self, B):                     # 追加路径信息,方便计算整体路径长度
        self.path.append(B)
        self.path[-1], self.path[-2] = self.path[-2], self.path[-1]


# 构建“蚁群算法”的主体
class ACO(object):
    def __init__(self, ant_num=50, maxIter=300, alpha=1, beta=5, rho=0.1, Q=1):
        self.ants_num = ant_num   # 蚂蚁个数
        self.maxIter = maxIter    # 蚁群最大迭代次数
        self.alpha = alpha        # 信息启发式因子
        self.beta = beta          # 期望启发式因子
        self.rho = rho            # 信息素挥发速度
        self.Q = Q                # 信息素强度
        ###########################
        self.deal_data('coordinates.dat')                         # 提取所有城市的坐标信息
        ###########################
        self.path_seed = np.zeros(self.ants_num).astype(int)      # 记录一次迭代过程中每个蚂蚁的初始城市下标
        self.ants_info = np.zeros((self.maxIter, self.ants_num))  # 记录每次迭代后所有蚂蚁的路径长度信息
        self.best_path = np.zeros(self.maxIter)                   # 记录每次迭代后整个蚁群的“历史”最短路径长度
        ###########################
        self.solve()              # 完成算法的迭代更新
        self.display()            # 数据可视化展示

    def deal_data(self, filename):
        with open(filename, 'rt') as f:
            temp_list = list(line.split() for line in f)                                   # 临时存储提取出来的坐标信息
        self.cities_num = len(temp_list)                                                   # 1. 获取城市个数
        self.cities = list(City(float(item[0]), float(item[1])) for item in temp_list)     # 2. 构建城市列表
        self.city_dist_mat = np.zeros((self.cities_num, self.cities_num))                  # 3. 构建城市距离矩阵
        for i in range(self.cities_num):
            A = self.cities[i]
            for j in range(i, self.cities_num):
                B = self.cities[j]
                self.city_dist_mat[i][j] = self.city_dist_mat[j][i] = Ant.calc_len(A, B)
        self.phero_mat = np.ones((self.cities_num, self.cities_num))                       # 4. 初始化信息素矩阵
        # self.phero_upper_bound = self.phero_mat.max() * 1.2                              ###信息素浓度上限
        self.eta_mat = 1/(self.city_dist_mat + np.diag([np.inf]*self.cities_num))          # 5. 初始化启发函数矩阵

    def solve(self):
        iterNum = 0                                                            # 当前迭代次数
        while iterNum < self.maxIter:
            self.random_seed()                                                 # 使整个蚁群产生随机的起始点
            delta_phero_mat = np.zeros((self.cities_num, self.cities_num))     # 初始化每次迭代后信息素矩阵的增量
            ##########################################################################
            for i in range(self.ants_num):
                city_index1 = self.path_seed[i]                                # 每只蚂蚁访问的第一个城市下标
                ant_path = Path(self.cities[city_index1])                      # 记录每只蚂蚁访问过的城市
                tabu = [city_index1]                                           # 记录每只蚂蚁访问过的城市下标,禁忌城市下标列表
                non_tabu = list(set(range(self.cities_num)) - set(tabu))
                for j in range(self.cities_num-1):                             # 对余下的城市进行访问
                    up_proba = np.zeros(self.cities_num-len(tabu))             # 初始化状态迁移概率的分子
                    for k in range(self.cities_num-len(tabu)):
                        up_proba[k] = np.power(self.phero_mat[city_index1][non_tabu[k]], self.alpha) * \
                        np.power(self.eta_mat[city_index1][non_tabu[k]], self.beta)
                    proba = up_proba/sum(up_proba)                             # 每条可能子路径上的状态迁移概率
                    while True:                                                # 提取出下一个城市的下标
                        random_num = np.random.rand()
                        index_need = np.where(proba > random_num)[0]
                        if len(index_need) > 0:
                            city_index2 = non_tabu[index_need[0]]
                            break
                    ant_path.add_path(self.cities[city_index2])
                    tabu.append(city_index2)
                    non_tabu = list(set(range(self.cities_num)) - set(tabu))
                    city_index1 = city_index2
                self.ants_info[iterNum][i] = Ant(ant_path.path).length
                if iterNum == 0 and i == 0:                                    # 完成对最佳路径城市的记录
                    self.best_cities = ant_path.path
                else:
                    if self.ants_info[iterNum][i] < Ant(self.best_cities).length: self.best_cities = ant_path.path
                tabu.append(tabu[0])                                           # 每次迭代完成后,使禁忌城市下标列表形成完整闭环
                for l in range(self.cities_num):
                    delta_phero_mat[tabu[l]][tabu[l+1]] += self.Q/self.ants_info[iterNum][i]

            self.best_path[iterNum] = Ant(self.best_cities).length

            self.update_phero_mat(delta_phero_mat)                             # 更新信息素矩阵
            iterNum += 1

    def update_phero_mat(self, delta):
        self.phero_mat = (1 - self.rho) * self.phero_mat + delta
        # self.phero_mat = np.where(self.phero_mat > self.phero_upper_bound, self.phero_upper_bound, self.phero_mat) # 判断是否超过浓度上限

    def random_seed(self):                                                     # 产生随机的起始点下表,尽量保证所有蚂蚁的起始点不同
        if self.ants_num <= self.cities_num:                                   # 蚂蚁数 <= 城市数
            self.path_seed[:] = np.random.permutation(range(self.cities_num))[:self.ants_num]
        else:                                                                  # 蚂蚁数 > 城市数
            self.path_seed[:self.cities_num] = np.random.permutation(range(self.cities_num))
            temp_index = self.cities_num
            while temp_index + self.cities_num <= self.ants_num:
                self.path_seed[temp_index:temp_index + self.cities_num] = np.random.permutation(range(self.cities_num))
                temp_index += self.cities_num
            temp_left = self.ants_num % self.cities_num
            if temp_left != 0:
                self.path_seed[temp_index:] = np.random.permutation(range(self.cities_num))[:temp_left]

    def display(self):                                                         # 数据可视化展示
        plt.figure(figsize=(6, 10))
        plt.subplot(211)
        plt.plot(self.ants_info, 'g.')
        plt.plot(self.best_path, 'r-', label='history_best')
        plt.xlabel('Iteration')
        plt.ylabel('length')
        plt.legend()
        plt.subplot(212)
        plt.plot(list(city.x for city in self.best_cities), list(city.y for city in self.best_cities), 'g-')
        plt.plot(list(city.x for city in self.best_cities), list(city.y for city in self.best_cities), 'r.')
        plt.xlabel('x')
        plt.ylabel('y')
        plt.savefig('ACO.png', dpi=500)
        plt.show()
        plt.close()


ACO()

输出:

参考文献

[1]https://www.cnblogs.com/xxhbdk/p/9177423.html

[2]《matlab在数学建模中的应用》

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 计算机视觉CV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于蚁群算法(ACO)的TSP(Python实现)
基于蚁群算法(Ant Colony Optimization, ACO)的TSP(Traveling Salesman Problem,旅行商问题),求解方法源自观察到蚂蚁在寻找食物时释放信息素,并根据信息素浓度选择路径的行为。这种自组织调节的行为启发了一种新颖的启发式优化方法,即蚁群算法。在TSP问题中,蚂蚁在搜索空间内移动,同时释放和感知路径上的信息素,通过反复迭代的过程,逐步寻找到较优的旅行路径。
不去幼儿园
2024/12/03
3540
基于蚁群算法(ACO)的TSP(Python实现)
蚁群算法(ACO)旅行商问题(TSP)路径规划MATLAB实现
蚁群算法(ant colony optimization)最早是由Marco Dorigo等人在1991年提出,他们在研究新型算法的过程中,发现蚁群在寻找食物时,通过分泌一种称为信息素的生物激素交流觅食信息从而能快速的找到目标,据此提出了基于信息正反馈原理的蚁群算法。
里克贝斯
2021/05/21
2.4K0
蚁群算法(ACO)旅行商问题(TSP)路径规划MATLAB实现
蚁群算法和简要matlab来源
从1991由意大利学者 M. Dorigo,V. Maniezzo 和 A. Colorni 通过模拟蚁群觅食行为提出了一种基于群体的模拟进化算法——蚁群优化。极大关注,蚁群算法的特点:
全栈程序员站长
2022/07/18
6830
数学建模--智能算法之蚁群优化算法
蚁群优化算法(Ant Colony Optimization, ACO)是一种模拟蚂蚁觅食行为的群体智能优化算法,由Marco Dorigo于1992年在他的博士论文中首次提出。该算法灵感来源于蚂蚁在寻找食物过程中发现路径的行为,通过模拟这种行为来解决组合优化问题。
用户11315985
2024/10/16
7450
数学建模--智能算法之蚁群优化算法
各种智能优化算法比较与实现(matlab版)
免疫算法是受生物免疫系统的启发而推出的一种新型的智能搜索算法。它是一种确定性和随机性选择相结合并具有“勘探”与“开采”能力的启发式随机搜索算法。免疫算法将优化问题中待优化的问题对应免疫应答中的抗原,可行解对应抗体(B细胞),可行解质量对应免疫细胞与抗原的亲和度。如此则可以将优化问题的寻优过程与生物免疫系统识别抗原并实现抗体进化的过程对应起来,将生物免疫应答中的进化过程抽象成数学上的进化寻优过程,形成一种智能优化算法。它具有一般免疫系统的特征,采用群体搜索策略,通过迭代计算,最终以较大的概率得到问题的最优解。相对于其他算法,免疫算法利用自身产生多样性和维持机制的特点,保证了种群的多样性,克服了一般寻优过程(特别是多峰值的寻优过程)的不可避免的“早熟”问题,可以求得全局最优解。免疫算法具有自适应性、随机性、并行性、全局收敛性、种群多样性等优点。 1.2 算法操作步骤 (1)首先进行抗原识别,即理解待优化的问题,对问题进行可行性分析,提取先验知识,构造出合适的亲和度函数,并制定各种约束条件。 (2)然后初始化抗体群,通过编码把问题的可行解表示成解空间中的抗体,在解的空间内随机产生一个初始种群。 (3)对种群中的每一个可行解进行亲和度评价。(记忆单元的更新:将与抗原亲和性高的抗体加入到记忆单元,并用新加入的抗体取代与其亲和性最高的原有抗体(抗体和抗体的亲和性计算)) (4)判断是否满足算法终止条件;如果满足条件则终止算法寻优过程,输出计算结果;否则继续寻优运算。 (5)计算抗体浓度和激励度。(促进和抑制抗体的产生:计算每个抗体的期望值,抑制期望值低于阈值的抗体;可以知道与抗原间具有的亲和力越高,该抗体的克隆数目越高,其变异率也越低) (6)进行免疫处理,包括免疫选择、克隆、变异和克隆抑制。 免疫选择:根据种群中抗体的亲和度和浓度计算结果选择优质抗体,使其活化; 克隆:对活化的抗体进行克隆复制,得到若干副本; 变异:对克隆得到的副本进行变异操作,使其发生亲和度突变; 克隆抑制:对变异结果进行再选择,抑制亲和度低的抗体,保留亲和度高的变异结果。 (7)种群刷新,以随机生成的新抗体替代种群中激励度较低的抗体,形成新一代抗体,转步骤(3)。 免疫算法运算流程图
全栈程序员站长
2022/08/31
2.6K0
各种智能优化算法比较与实现(matlab版)
蚁群(ACO)算法求解TSP问题(附C#,Java代码及注释)
在写这篇蚁群算法推文期间,小编曾一度崩溃,只是换掉原文算例,即将“60个城市随机生成距离”换成Oliver30等标准实例,跑出来的结果就惨不忍睹,实是被按在地上摩擦。正如鲁迅先生《狂人日记》中所写:凡事总须研究,才会明白。小编怀着一颗虔诚滴心,遍查全网,亲身试验诸般方法,尽管最终由于学识浅薄,还是没有成功解决,但对启发式算法的了解却也加深了几分。
用户1621951
2021/07/15
1.8K1
蚁群(ACO)算法求解TSP问题(附C#,Java代码及注释)
蚁群算法
蚁群算法是一种智能优化算法,在TSP商旅问题上得到广泛使用。蚁群算法于1992年由Marco Dorigo首次提出,该算法来源于蚂蚁觅食行为。由于蚂蚁没有视力,所以在寻找食物源时,会在其经过的路径上释放一种信息素,并能够感知其它蚂蚁释放的信息素。信息素浓度的大小表征路径的远近,信息素浓度越高,表示对应的路径距离越短。通常,蚂蚁会以较大的概率优先选择信息素浓度高的路径,并且释放一定的信息素,使该条路径上的信息素浓度增高,进而使蚂蚁能够找到一条由巢穴到食物源最近的路径。但是,随着时间的推移,路径上的信息素浓度会逐渐衰减。
六四零
2022/05/30
1.8K0
蚁群算法
干货|十分钟快速get蚁群算法(附代码)
之前分享了TSP的动态规划解法,本期来介绍它的另一种解法——蚁群算法。 什么?不知道?次元壁?高大上? 小编接下来这套 素质三连 攻略三连 会帮你十分钟快速搞定蚁群算法是什么、怎么用、注意啥,从零开始突破次元壁!!! * 内容提要: *什么是蚁群算法 *蚁群算法演练 *算法补充笔记 什么是蚁群算法? 蚁群系统(Ant System(AS)或Ant Colony System(ACS))是由意大利学者Dorigo、Maniezzo等人于20世纪90年代首先提出来的。他们在研究蚂蚁觅
用户1621951
2018/04/19
25.7K1
干货|十分钟快速get蚁群算法(附代码)
蚁群算法详解
如何寻找一条合适的路径,几乎是一个永恒的话题。每个人、每天都会遇到。大到全国列车的运行规划,小到每个人的手机导航。其中一部分是关于“如何寻找两个位置间的最短距离”的,这一部分有较为成熟的理论与确切的解法,还有与之匹配的各种算法。
智能算法
2020/09/24
6.9K0
蚁群算法详解
蚁群算法(ACO)MATLAB实现
蚁群算法(ant colony optimization)最早是由Marco Dorigo等人在1991年提出,他们在研究新型算法的过程中,发现蚁群在寻找食物时,通过分泌一种称为信息素的生物激素交流觅食信息从而能快速的找到目标,据此提出了基于信息正反馈原理的蚁群算法。
里克贝斯
2021/05/21
1.4K0
蚁群算法(ACO)MATLAB实现
一文详述蚁群算法
前几篇解释了一些智能优化算法,今天才想到还有一个重要的给忘了,,言归正传,蚁群算法也是一种生物仿生算法,它是通过模拟自然界中蚂蚁集体寻径行为而提出的一种基于种群的启发式随机搜索算法。自然界常理,蚂蚁可以通过群体行动在没有任何提示下从家找到食物源的最短路径,并能随着环境变化不断调整适应性地搜索出新的路径产生新的选择使得找到的路径最短。一般来说每个蚂蚁可以看成是独立的个体,相互交流的纽带是通过释放分泌信息素来实现的,所以这也是该算法模拟的核心地方,根据信息素的浓度进行下一个最优移动方向的选择,从而做到周游所有地点的最短路径,具体过程下面详述
用户7506105
2021/08/09
2.7K0
干货 | 十分钟快速搞懂什么是蚁群算法(Ant Colony Algorithm, ACA)(附代码)
     小编接下来这套 素质三连 攻略三连 会帮你十分钟快速搞定蚁群算法是什么、怎么用、注意啥,从零开始突破次元壁!!!
短短的路走走停停
2019/07/17
5.7K0
干货 | 十分钟快速搞懂什么是蚁群算法(Ant Colony Algorithm, ACA)(附代码)
蚁群算法解决旅行商(TSP)问题
在更新信息素的过程中,只有最优路线上的信息素会进行增加操作,且不能超过信息素最大值。
mwangblog
2018/12/13
2.3K0
蚁群算法求函数最大值一
ants = initant(Ant, xl, xu, yl, yu); % 初始化蚁群
mwangblog
2018/12/10
2.2K0
蚁群算法求函数最大值一
10分钟搞懂蚁群算法
蚂蚁几乎没有视力,但他们却能够在黑暗的世界中找到食物,而且能够找到一条从洞穴到食物的最短路径。它们是如何做到的呢? 蚂蚁寻找食物的过程 单只蚂蚁的行为及其简单,行为数量在10种以内,但成千上万只蚂蚁组成的蚁群却能拥有巨大的智慧,这离不开它们信息传递的方式——信息素。 蚂蚁在行走过程中会释放一种称为“信息素”的物质,用来标识自己的行走路径。在寻找食物的过程中,根据信息素的浓度选择行走的方向,并最终到达食物所在的地方。 信息素会随着时间的推移而逐渐挥发。 在一开始的时候,由于地面上没有信息素,因此蚂蚁们的行走
大闲人柴毛毛
2018/03/29
8.6K7
10分钟搞懂蚁群算法
智能调度 与 蚁群算法
我在前面的一篇文章《浅谈资源管理技术的未来发展之路》之中谈到,资源管理还需要完善三个方面的能力分别是: 1、完善资源使用收集反馈机制,资源分配出去之后,使用率怎么样?效果怎么样?应该有一个收集反馈机制。 2、资源分配策略智能学习能力,结合收集反馈的信息,可以动态调整资源分配调度策略,具有自主学习决策的能力。 3、异构集群的管理能力,当前资源管理平台,主要聚焦在同构平台,异构平台在工业界是一个非常现实的问题,老机器还要发挥余热,新机器要充分挖掘性能潜力,就同时存在新老并存的场面。资源管理框架应该要能抽象异构平
大数据和云计算技术
2018/03/08
3.7K0
《C 语言赋能蚁群算法:革新网络路由优化之路》
在当今数字化飞速发展的时代,网络技术的高效性和稳定性至关重要。网络路由作为网络数据传输的关键环节,其优化成为了研究的焦点。而蚁群算法,一种模拟蚂蚁觅食行为的智能优化算法,与 C 语言的结合,为网络路由优化带来了新的曙光。
程序员阿伟
2024/12/15
1560
《C 语言赋能蚁群算法:革新网络路由优化之路》
蚁群算法(独辟蹊径的进化算法)
1. 算法背景——蚁群的自组织行为特征 高度结构化的组织——虽然蚂蚁的个体行为极其简单,但由个体组成的蚁群却构成高度结构化的社会组织,蚂蚁社会的成员有分工,有相互的通信和信息传递。 自然优化——蚁群在觅食过程中,在没有任何提示下总能找到从蚁巢到食物源之间的最短路径;当经过的路线上出现障碍物时,还能迅速找到新的最优路径。 信息正反馈——蚂蚁在寻找食物时,在其经过的路径上释放信息素(外激素)。蚂蚁基本没有视觉,但能在小范围内察觉同类散发的信息素的轨迹,由此来决定何去何从,并倾向于朝着信息素强度
智能算法
2018/04/02
2K0
蚁群算法(独辟蹊径的进化算法)
蚁群算法解决作业调度问题;蚁群算法参数说明;与简单枚举法的区别(时间复杂度,空间复杂度)
今日推荐:大数据传输中的二进制加密方案文章链接:https://cloud.tencent.com/developer/article/2465816
zhangjiqun
2024/12/02
3840
蚁群算法(ACO)最短路径规划(MATLAB)
蚁群算法最早是由Marco Dorigo等人在1991年提出,他们在研究新型算法的过程中,发现蚁群在寻找食物时,通过分泌一种称为信息素的生物激素交流觅食信息从而能快速的找到目标,据此提出了基于信息正反馈原理的蚁群算法。
里克贝斯
2021/05/21
2.6K0
蚁群算法(ACO)最短路径规划(MATLAB)
推荐阅读
相关推荐
基于蚁群算法(ACO)的TSP(Python实现)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验