蚁群算法(Ant Colony Optimization, ACO)
简介
蚁群算法(Ant Colony Optimization, ACO)是一种基于自然启发的优化算法,由意大利学者马可·多里戈(Marco Dorigo)在1992年首次提出。它受自然界中蚂蚁觅食行为的启发,用于解决离散优化问题。
在自然界中,蚂蚁通过释放和追踪一种化学物质(即信息素)找到最短路径。蚁群算法通过模拟这种信息素的机制,在优化问题中迭代寻找近似最优解。
代码说明
距离矩阵:distance_matrix 是问题的输入,表示城市之间的距离。
信息素更新:信息素会随时间蒸发,并根据路径长度进行强化。
路径构建:每只蚂蚁根据概率选择下一步的城市,概率由信息素和启发式因子共同决定。
运行结果:输出最佳路径和对应路径长度。
代码
import numpy as npclass AntColony:def __init__(self, distance_matrix, n_ants, n_iterations, alpha=1, beta=2, evaporation_rate=0.5, Q=100):self.distance_matrix = distance_matrixself.n_ants = n_antsself.n_iterations = n_iterationsself.alpha = alpha # 控制信息素重要程度self.beta = beta # 控制启发式因子的权重self.evaporation_rate = evaporation_rateself.Q = Q # 信息素强度常数self.num_cities = distance_matrix.shape[0]self.pheromone_matrix = np.ones((self.num_cities, self.num_cities)) # 初始信息素矩阵def _initialize_ants(self):return [np.random.permutation(self.num_cities) for _ in range(self.n_ants)]def _calculate_path_length(self, path):return sum(self.distance_matrix[path[i], path[(i + 1) % len(path)]] for i in range(len(path)))def _update_pheromones(self, all_paths, all_lengths):self.pheromone_matrix *= (1 - self.evaporation_rate) # 信息素蒸发for path, length in zip(all_paths, all_lengths):for i in range(len(path)):start, end = path[i], path[(i + 1) % len(path)]self.pheromone_matrix[start, end] += self.Q / length # 信息素更新def _choose_next_city(self, current_city, visited):probabilities = []for city in range(self.num_cities):if city not in visited:pheromone = self.pheromone_matrix[current_city, city] ** self.alphavisibility = (1 / self.distance_matrix[current_city, city]) ** self.betaprobabilities.append(pheromone * visibility)else:probabilities.append(0)probabilities = probabilities / np.sum(probabilities)return np.random.choice(range(self.num_cities), p=probabilities)def _construct_solution(self, ant):path = [ant]visited = set(path)for _ in range(self.num_cities - 1):next_city = self._choose_next_city(path[-1], visited)path.append(next_city)visited.add(next_city)return pathdef run(self):best_path = Nonebest_length = float('inf')for iteration in range(self.n_iterations):all_paths = []all_lengths = []for ant in range(self.n_ants):start_city = np.random.randint(self.num_cities)path = self._construct_solution(start_city)length = self._calculate_path_length(path)all_paths.append(path)all_lengths.append(length)if length < best_length:best_path = pathbest_length = lengthself._update_pheromones(all_paths, all_lengths)print(f"Iteration {iteration + 1}: Best length = {best_length}")return best_path, best_length# 示例距离矩阵
distance_matrix = np.array([[0, 2, 2, 5, 7],[2, 0, 4, 8, 2],[2, 4, 0, 1, 3],[5, 8, 1, 0, 2],[7, 2, 3, 2, 0]
])# 创建蚁群算法实例
ant_colony = AntColony(distance_matrix, n_ants=10, n_iterations=100, alpha=1, beta=2, evaporation_rate=0.5, Q=100)# 运行算法
best_path, best_length = ant_colony.run()print("Best path:", best_path)
print("Best length:", best_length)
相关文章:

蚁群算法(Ant Colony Optimization, ACO)
简介 蚁群算法(Ant Colony Optimization, ACO)是一种基于自然启发的优化算法,由意大利学者马可多里戈(Marco Dorigo)在1992年首次提出。它受自然界中蚂蚁觅食行为的启发,用于解决离散优化问题。 在自然界…...

使用IDEA构建springboot项目+整合Mybatis
目录 目录 1.Springboot简介 2.SpringBoot的工作流程 3.SpringBoot框架的搭建和配置 4.用Springboot实现一个基本的select操作 5.SpringBoot项目部署非常简单,springBoot内嵌了 Tomcat、Jetty、Undertow 三种容器,其默认嵌入的容器是 Tomcat,…...

苹果系统中利用活动监视器来终止进程
前言 苹果系统使用的时候总是感觉不太顺手。特别是转圈的彩虹球出现的时候,就非常令人恼火。如何找到一个像Windows那样任务管理器来终止掉进程呢? 解决办法 Commandspace 弹出搜索框吗,如下图: 输入“活动”进行搜索ÿ…...

宝塔安装雷池网站防护
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、 加载镜像二、使用步骤三、如果启动不成三、 启动成功以后三、 进入雷池不知道密码 前言 提示:这里可以添加本文要记录的大概内容:…...

JavaScript完整原型链
在 JavaScript 中,每个函数都有一个prototype属性,这个属性是一个对象。当通过一个构造函数创建一个新的对象时,这个新对象会自动拥有一个内部属性[[Prototype]](在一些浏览器中可以通过__proto__访问,不过这是一个非标…...

Vue 内置组件 keep-alive 中 LRU 缓存淘汰策略和实现
LRU(Least Recently Used,最近最少使用)是通过记录缓存项的访问顺序来决定淘汰的策略:当缓存满时,移除最久未被使用的项。 核心概念: 缓存存储:使用 Map 存储键值对,用于快速访问缓…...

李宏毅机器学习课程知识点摘要(14-18集)
线性回归,逻辑回归(线性回归sigmoid),神经网络 linear regression , logistic regression , neutral network 里面的偏导的相量有几百万维,这就是neutral network的不同,他是…...

《AI大模型开发笔记》Faster-Whisper 免费开源的高性能语音识别模型
1 Whisper模型,免费开源的语音识别模型 Whisper模型是OpenAI公开的语音识别模型。这是一个免费可商用的模型。 Whisper模型根据参数量来区分,有多个不同的版本,分别是tiny,base,small medium,large&#x…...

蓝队基础,网络七杀伤链详解
声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…...

golang开发一个海盗王的登录更新器
前段时间,用golang配合界面库govcl开发一个海盗王的登陆更新器,实现多区注册和文件更新分离不同服务器等新功能。 由于govcl没有更换皮肤的功能,界面都是默认,不好看。 找了很多go语言的gui库,都没有符合要求的。 后来…...

李宏毅机器学习课程知识点摘要(6-13集)
pytorch简单的语法和结构 dataset就是数据集,dataloader就是分装好一堆一堆的 他们都是torch.utils.data里面常用的函数,已经封装好了 下面的步骤是把数据集读进来 这里是读进来之后,进行处理 声音信号,黑白照片,红…...

003 STM32基础、架构以及资料介绍——常识
注: 本笔记参考学习B站官方视频教程,免费公开交流,切莫商用。内容可能有误,具体以官方为准,也欢迎大家指出问题所在。 01什么是STM32(宏观) STM32属于一个微控制器,自带了各种常用通…...

【大语言模型】ACL2024论文-20 SCIMON:面向新颖性的科学启示机器优化
【大语言模型】ACL2024论文-20 SCIMON:面向新颖性的科学启示机器优化 目录 文章目录 【大语言模型】ACL2024论文-20 SCIMON:面向新颖性的科学启示机器优化目录摘要研究背景问题与挑战如何解决创新点算法模型实验效果推荐阅读指数:★★★★☆ …...

开源可视化工具对比:JimuReport VS DataEase
在当今数据驱动的时代,高效的数据可视化工具成为企业洞察业务、做出决策的关键利器。那对于企业来讲如何选择BI产品呢? 在开源可视化工具的领域中,JimuReport和DataEase 以其独特的优势脱颖而出,究竟谁更胜一筹呢?让我…...

2024年亚太地区数学建模大赛A题-复杂场景下水下图像增强技术的研究
复杂场景下水下图像增强技术的研究 对于海洋勘探来说,清晰、高质量的水下图像是深海地形测量和海底资源调查的关键。然而,在复杂的水下环境中,由于光在水中传播过程中的吸收、散射等现象,导致图像质量下降,导致模糊、…...

shell与QQ邮箱的连接
1.下载软件:yum install s-nail 2.配置文件:vim /etc/s-nail.rc 末尾添加此三行,加入QQ邮箱和验证码 3.验证码位于QQ邮箱安全管理内,进行复制粘贴 4.测试发消息给本地邮箱:echo "要发送的内容" | mail …...

11.21 深度学习-tensor常见操作
import torch from PIL import Image from torchvision import transforms # 获取元素值 tensor.item() 返回一个数值 只能是tensor里面有一个数字的 # 我们可以把单个元素tensor转换为Python数值,这是非常常用的操作 # tensor 里面超过了1个数字就不行 def g…...

【MySQL课程学习】:MySQL安装,MySQL如何登录和退出?MySQL的简单配置
🎁个人主页:我们的五年 🔍系列专栏:MySQL课程学习 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 MySQL在Centos 7环境下的安装: 卸载…...

基于官网的Vue-router安装(2024/11)
!!!首先声明,官网很重要。其次,不知道为啥,我不会安装时看不懂官网,会了之后就能看懂了。 官网地址:https://router.vuejs.org/zh/guide/ 1.npm安装 npm install vue-router4 官方貌…...

未来已来:少儿编程竞赛聚焦物联网,激发创新潜力
随着人工智能与物联网技术(IoT)的快速发展,少儿编程教育正在迎来新的变革浪潮。近年来,各类少儿编程竞赛纷纷增加了物联网相关主题,要求学生结合编程知识和硬件设备设计智能家居、智慧城市等创新项目。这一趋势不仅丰富…...

archlinux安装waydroid
目录 参考资料 注意 第一步切换wayland 第二步安装binder核心模组 注意 开始安装 AUR安裝Waydroid 启动waydroid 设置网络(正常的可以不看) 注册谷歌设备 安装Arm转译器 重启即可 其他 参考资料 https://ivonblog.com/posts/archlinux-way…...

Oralce数据库巡检SQL脚本
文章目录 Oralce数据库巡检SQL脚本1 检查表空间使用情况2 检查是否有 offline 状态的表空间3 在线日志是否存在小于 50M 的及状态不正常4 检查锁阻塞5 查看是否有僵死进程6 检查是否有失效索引7 检查不起作用的约束8 缓冲区命中率9 数据字典命中率10 库缓存命中率11 内存中的排…...

CentOS使用中遇到的问题及解决方法
一、CentOS 7网络配置(安装后无法联网问题) 现象说明 在安装CentOS系统后,有可能出现无法联网的问题,虚拟机中的网络配置并没有问题,而系统却无法联网,也ping不通。 原因描述 CentOS默认开机不启动网络,因…...

ThinkPad t61p 作SMB服务器,打印服务器,pc ,android ,ipad利用此服务器互传文件
1.在t61p上安装win7 2,配置好smb 服务 3.再安装好打印驱动程序 4.pc与win7利用系统的网络互相发现,映射为硬盘使用。 5.android,ipad安装ES文件浏览器访问win7 共享文件夹,互传文件。 6.android手机安装FE文件浏览器,可以利用花生壳外网…...

php:使用Ratchet类实现分布式websocket服务
一、前言 最近需要做一个有关聊天的小程序,逻辑很简单,所以不打算用Swoole和workerman之类的,最后选择了Ratchet,因为简单易用,适合小型websocket服务。 二、问题 但是目前我的项目是分布式环境,统一通过Ng…...

储能场站安全风险挑战
电化学储能目前最大的痛点问题就是安全问题,制约了储能行业的发展。 首先:锂作为最活泼的金属加上有机溶剂的电解液,安全性天生就差。基因不行。 其次储能系统的BMS对电池管理相对粗放,不足以保证锂电池的安全运行。 当前储能产业…...

Ubuntu系统为同一逻辑网口配置不同网段的IP
近期遇到一个问题:机载计算机的载版上有两个网口,但是这两个网口本质上是一个独立网口一个交换机,即对于机载计算机而言这两个物理网口是同一个逻辑网口。但是我需要将这两个网口分别连接到两个设备,并配置不同网段的IP࿰…...

MySQL出现Waiting for table metadata lock的原因以及解决方法(已亲测)
参考:MySQL出现Waiting for table metadata lock的原因以及解决方法 - digdeep - 博客园 当对表执行truncate\drop 操作时,会出现一直处于等待的状态,通过show processlist可以看到TableA停滞在Waiting for table metadata lock的状态。kill…...

学会Lambda,让程序Pythonic一点
Lambda是Python里的高阶用法,要把代码写得Pythonic,就需要了解这些高阶用法,想说自己是一名真正的Python程序员,先要把代码写得Pythonic。 今天聊下Lambda的用法,写篇简短的用法说明。 Lambda是匿名函数的意思&#…...

GDPU 信息安全 期末复习
文章目录 第一章 绪论✅ 单选题✅ 简答题6. 假定你是单位的安全主管,为了提高单位的网络安全性,在制定单位的安全保障方案时,有哪些措施(包括技术和非技术的)?9. 有人说只要我有足够多的钱,就可…...