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

蚁群算法(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)

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

使用IDEA构建springboot项目+整合Mybatis

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

苹果系统中利用活动监视器来终止进程

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

宝塔安装雷池网站防护

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

JavaScript完整原型链

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

Vue 内置组件 keep-alive 中 LRU 缓存淘汰策略和实现

LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;是通过记录缓存项的访问顺序来决定淘汰的策略&#xff1a;当缓存满时&#xff0c;移除最久未被使用的项。 核心概念&#xff1a; 缓存存储&#xff1a;使用 Map 存储键值对&#xff0c;用于快速访问缓…...

李宏毅机器学习课程知识点摘要(14-18集)

线性回归&#xff0c;逻辑回归&#xff08;线性回归sigmoid&#xff09;&#xff0c;神经网络 linear regression &#xff0c; logistic regression &#xff0c; neutral network 里面的偏导的相量有几百万维&#xff0c;这就是neutral network的不同&#xff0c;他是…...

《AI大模型开发笔记》Faster-Whisper 免费开源的高性能语音识别模型

1 Whisper模型&#xff0c;免费开源的语音识别模型 Whisper模型是OpenAI公开的语音识别模型。这是一个免费可商用的模型。 Whisper模型根据参数量来区分&#xff0c;有多个不同的版本&#xff0c;分别是tiny&#xff0c;base&#xff0c;small medium&#xff0c;large&#x…...

蓝队基础,网络七杀伤链详解

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

golang开发一个海盗王的登录更新器

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

李宏毅机器学习课程知识点摘要(6-13集)

pytorch简单的语法和结构 dataset就是数据集&#xff0c;dataloader就是分装好一堆一堆的 他们都是torch.utils.data里面常用的函数&#xff0c;已经封装好了 下面的步骤是把数据集读进来 这里是读进来之后&#xff0c;进行处理 声音信号&#xff0c;黑白照片&#xff0c;红…...

003 STM32基础、架构以及资料介绍——常识

注&#xff1a; 本笔记参考学习B站官方视频教程&#xff0c;免费公开交流&#xff0c;切莫商用。内容可能有误&#xff0c;具体以官方为准&#xff0c;也欢迎大家指出问题所在。 01什么是STM32&#xff08;宏观&#xff09; STM32属于一个微控制器&#xff0c;自带了各种常用通…...

【大语言模型】ACL2024论文-20 SCIMON:面向新颖性的科学启示机器优化

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

开源可视化工具对比:JimuReport VS DataEase

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

2024年亚太地区数学建模大赛A题-复杂场景下水下图像增强技术的研究

复杂场景下水下图像增强技术的研究 对于海洋勘探来说&#xff0c;清晰、高质量的水下图像是深海地形测量和海底资源调查的关键。然而&#xff0c;在复杂的水下环境中&#xff0c;由于光在水中传播过程中的吸收、散射等现象&#xff0c;导致图像质量下降&#xff0c;导致模糊、…...

shell与QQ邮箱的连接

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

11.21 深度学习-tensor常见操作

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

【MySQL课程学习】:MySQL安装,MySQL如何登录和退出?MySQL的简单配置

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;MySQL课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 MySQL在Centos 7环境下的安装&#xff1a; 卸载…...

基于官网的Vue-router安装(2024/11)

&#xff01;&#xff01;&#xff01;首先声明&#xff0c;官网很重要。其次&#xff0c;不知道为啥&#xff0c;我不会安装时看不懂官网&#xff0c;会了之后就能看懂了。 官网地址&#xff1a;https://router.vuejs.org/zh/guide/ 1.npm安装 npm install vue-router4 官方貌…...

未来已来:少儿编程竞赛聚焦物联网,激发创新潜力

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

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...