群体智能仿真之简单蚁群算法

2024-04-24 19:48

本文主要是介绍群体智能仿真之简单蚁群算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在生活中我们或多或少都会看到过蚂蚁,面对这个奇怪的家伙我们平时并不怎么关注它,但偶尔也会发现这个东西的神奇之处,为什么它们能成群结队的搬家,它们为什么能在群体中如此密切的配合行动,分工明确而不会乱成一团。
这就是我们要探讨的问题,这要从蚁群算法开始说起,蚁群算法是一种用来寻找优化路径的概率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。这是百度百科中对蚁群算法的简短描述,那么要想了解一个事物就要从他的本质开始了解。所以我就查找了一些相关的资料。首先我们知道蚂蚁是一种昆虫,而且蚂蚁的种类繁多,世界上已知有11700多种。这个就不做过多的描述了,到处都可以查得到。而蚂蚁算法的由来是从蚂蚁的社会形态中得到启发的。我们知道蚂蚁在8000万之前就建立了自己的社会,而我们人类的只有5000余年的文明史,可是我们经常会发现,小小的蚂蚁却能建立起组织完好的复杂城市,也就所谓的蚁穴。有许多“蚂蚁城市”往往由5000万个成员组成,而对比我们人类社会,人口稠密的大城市也不过1000多万人,但是却有不少的都市问题。
接下来我们了解下蚂蚁的分工,蚂蚁有四种不同的蚁型,即蚁后、雄蚁、工蚁和兵蚁,不同的蚁型有不同的分工,那么这些蚂蚁之间是怎么进行交流的呢?化学通信是蚂蚁采取的基本信息交流方式,自然界中的蚂蚁会分泌一种化学刺激物——信息素(pheromone)。这是一种很重要的东西,也是接下来算法中的一个很重要的条件。蚂蚁的许多行为受信息素调控,如蚁后分泌名为“女皇物质”的信息素来控制工蚁的发育。说到信息素我们开始进入正题了,在自然界中,尽管蚂蚁个体比较简单,但是整个蚂蚁群体却表现得高度机构化,在许多情况下可以完成许多复杂的任务,这种能力来源于蚂蚁群体中的个体协作行为,其群体行为主要包括寻找食物、任务分配和构造墓地。
那么我们主要来浅谈一下寻找食物,在自然界中,蚂蚁的食物来源总是随机散布于蚁巢周围。我们只要仔细观察就可以发现,经过一段时间之后,蚂蚁总能找到一条从蚁巢到食物的最短路线,这条路上蚂蚁都整整齐齐的排着队,在路线上来回运动。


 下面我们用几幅图来说明一下


如图a所示可以看到蚂蚁和事物源之间是一条直线;当食物和巢穴之间出现一个障碍物的时候如图b所示,我们可以看到各只蚂蚁之间的分布是均匀的,不管路径长短,蚂蚁总是按同等概率选择各条路径;蚂蚁在运动的过程中能留下信息素,而且能感知这种物质的存在及其强度,并倾向于信息素浓度高的方向运动的概率也会比浓度低的方向概率要高,也就形成了如图c所示的现象障碍物较短的一边蚂蚁比较多,因为路径比较短来回的蚂蚁所用的时间比较短次数多留下的信息素浓度比较高,也就慢慢的吸引了其他更多的蚂蚁往这条路上走。最后形成了图d的场景,蚂蚁都集中到了路线短的一边去了。这就是蚂蚁最优路线形成的关键原因。
下面去看一下用代码实现的Demo:
规则:1、首先固定蚁巢的位置在中间位置,开始的时候利用随机数random,蚂蚁从蚁巢随机走向各个位置。
2、蚂蚁活动的最大距离为屏幕斜线距离,当移动距离达到最大距离和步数时,蚂蚁开始自动回到家的位置进行重置,进行下一轮随机;移动距离在找到家或者食物的时候清零。
3、蚂蚁移动的方向是偏向信息素浓度高的一侧移动的,信息素撒播规则按照 屏幕斜线距离/蚂蚁移动距离,也就是蚂蚁移动的距离越远撒播的信息素浓度就越低,选择方向的计算公式采用 单元格浓度/8个方向单元格浓度总和,也就蚂蚁的的观察范围是9个单元格。
4、信息素在每次迭代时,进行统一挥发一个常量值,随着时间的推移信息素如果没有跟新就会消失。
5、如果周围没有信息素的指引时,蚂蚁的运动具有一定的惯性,并有一定的概率选择其他路径,蚂蚁遇到障碍物会绕开。


首先看初始的状态,蚂蚁向四周随机散开,图中黄色方块的是食物,白色圆点的代表蚂蚁,棕色方块的代表障碍物,黄色圆点代表找到食物的蚂蚁。


  
蚂蚁找到了去到食物的最优路线


 设置障碍物之后我们可以看到蚂蚁绕开了障碍物还是能找到食物

  这时候蚂蚁们进入了局部最优的状态,也是这个简单的蚁群算法的缺陷的地方,在蚂蚁的周围虽然还有很多的食物,但是搜索到一定程度,就会出现停滞状态陷入局部最优,或者盲目随机搜索,搜索时间较长,最后造成蚂蚁一直在一两个地方来回的搬运食物。

 
参考博客: http://www.cnblogs.com/Leo_wl/p/5665715.html
参考资料: 蚁群算法原理及其应用/段海滨著

这篇关于群体智能仿真之简单蚁群算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/932676

相关文章

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

基于Python实现智能天气提醒助手

《基于Python实现智能天气提醒助手》这篇文章主要来和大家分享一个实用的Python天气提醒助手开发方案,这个工具可以方便地集成到青龙面板或其他调度框架中使用,有需要的小伙伴可以参考一下... 目录项目概述核心功能技术实现1. 天气API集成2. AI建议生成3. 消息推送环境配置使用方法完整代码项目特点

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

利用Python实现Excel文件智能合并工具

《利用Python实现Excel文件智能合并工具》有时候,我们需要将多个Excel文件按照特定顺序合并成一个文件,这样可以更方便地进行后续的数据处理和分析,下面我们看看如何使用Python实现Exce... 目录运行结果为什么需要这个工具技术实现工具的核心功能代码解析使用示例工具优化与扩展有时候,我们需要将