此次使用python实现蚁群算法是仿照蚁群优化算法的JAVA实现中的蚁群算法实现方法,使用的也是其中的数据(此处为上传数据),如需更深一步了解蚁群算法原理和具体实现过程,请参考蚁群优化算法的JAVA实现和蚁群算法java实现以及TSP问题蚁群算法求解。

# ants 类

import numpy as np

import random

import math

class ant:

Tour = 0

unvisitedcity = 0

tourlength = 0

citys = 0

count = 0

def RandomSelectCity(self,citycount):

ant.citys = citycount

ant.tourlength = 0

ant.Tour = np.zeros((citycount+1),int)

ant.unvisitedcity = np.ones((citycount))

for i in np.arange(citycount):

ant.Tour[i] = -1

firstcity = random.randint(0,citycount-1)

ant.unvisitedcity[firstcity] = 0 #0表示已经访问过

ant.Tour[0] = firstcity #起始城市

def SelectNextCity(self,index,tao,distance):

p = np.zeros((ant.citys)) #citys

x = 0

alpha = 1.0

beta = 2.0

sum = 0

currentcity = ant.Tour[index-1]

# print("curr",ant.Tour)

# print(ant.unvisitedcity)

for i in range(ant.citys):

# print(ant.unvisitedcity[i])

if ant.unvisitedcity[i] == 1:

sum += (math.pow(tao[currentcity][i], alpha) * math.pow(1.0/distance[currentcity][i], beta))

# 计算每个城市被选中的概率

for i in range(ant.citys):

if ant.unvisitedcity[i] == 0:

p[i] = 0.0

else:

p[i] = (math.pow(tao[currentcity][i], alpha) * math.pow(1.0/distance[currentcity][i], beta))/sum

selectp = random.random()

# 轮盘赌选择一个城市

sumselect = 0.0

selectcity = -1

for i in range(ant.citys):

sumselect += p[i]

# print("i",i,"sumselect",sumselect)

if sumselect >= selectp:

selectcity = i

break

if selectcity == -1:

print('')

ant.Tour[index] = selectcity

# print("selectcity",selectcity)

ant.unvisitedcity[selectcity] = 0

# print(ant.Tour)

# 计算蚂蚁获得的路径的长度

# distance 全局的距离矩阵信息

def CalTourLength(self,distance):

ant.Tour[ant.citys] = ant.Tour[0]

for i in range(ant.citys):

ant.tourlength += distance[int(ant.Tour[i])][int(ant.Tour[i+1])]

# ACO类

from ACO_implement.ACO_implement import ants

import numpy as np

import math

import sys

class ACO:

# 定义蚂蚁群

ants = []

antcount = 0 # 蚂蚁数量

distance = 0 #城市之间的距离

tao = 0 #信息素矩阵

citycount = 0 #城市数量

besttour = 0 #求解的最佳路径

bestlength = 0 #求解最优解的长度

def __init__(self,filename,antnum):

ACO.antcount = antnum

#读取数据

x = []

y = []

z = []

str = open(filename).readlines()

ACO.citycount = int(str[0])

for i in range(1,ACO.citycount+1):

strbuff = str[i].split()

x.append(int(strbuff[1]))

y.append(int(strbuff[2]))

# 计算距离矩阵,计算的是点之间的距离

ACO.distance = np.zeros((ACO.citycount,ACO.citycount))

for i in range(ACO.citycount):

for j in range(ACO.citycount):

ACO.distance[i][j] = math.sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2))

# 初始化信息矩阵

ACO.tao = np.zeros((ACO.citycount,ACO.citycount))

for i in range(ACO.citycount):

for j in range(ACO.citycount):

ACO.tao[i][j] = 0.1

ACO.bestlength = sys.maxsize #最优路径长度

ACO.besttour = np.zeros((ACO.citycount)) #最优路径

# 随机放置蚂蚁

# for i in range(ACO.antcount):

# ACO.ants.append(ants.ant())

# ACO.ants[i].RandomSelectCity(ACO.citycount)

"""

跟新信息素矩阵

"""

def UpdateTao(self):

rou = 0.5

# 信息素挥发

for i in range(ACO.citycount):

for j in range(ACO.citycount):

ACO.tao[i][j] = ACO.tao[i][j] *(1-rou)

# 信息素更新

for i in range(ACO.citycount):

for j in range(ACO.citycount):

ACO.tao[int(ACO.ants[i].Tour[j])][ACO.ants[i].Tour[j+1]] += 1.0/ACO.ants[i].tourlength

"""

ACO的运行过程

maxgen ACO的最多次循环次数

"""

def run(self,maxgen):

# 每只蚂蚁移动的过程

for runtimes in range(maxgen):

# 随机放置蚂蚁

for i in range(ACO.antcount):

ACO.ants.append(ants.ant())

ACO.ants[i].RandomSelectCity(ACO.citycount)

for j in range(1,ACO.citycount):

ACO.ants[i].SelectNextCity(j,ACO.tao,ACO.distance)

# 计算蚂蚁获得的路径的长度

ACO.ants[i].CalTourLength(ACO.distance)

if ACO.ants[i].tourlength < ACO.bestlength:

# 保留最优路径

ACO.bestlength = ACO.ants[i].tourlength

print("第",runtimes+1,"次,发现解",ACO.bestlength)

for j in range(0,ACO.citycount):

ACO.besttour[j] = ACO.ants[i].Tour[j]

ACO.UpdateTao(self)

for i in range(ACO.antcount):

ACO.ants[i].RandomSelectCity(ACO.citycount)

"""输出运行结果"""

def ReportResult(self):

print("最优路径长度是",ACO.bestlength)

print("最优路径为:",ACO.besttour+1)

#main类

from ACO_implement.ACO_implement import ACO

aco = ACO.ACO("ant_data",1000)

# aco.init("ant_data",1000)

#点数量为50,蚂蚁数量

aco.run(200)

aco.ReportResult()

python蚁群算法路径规划_使用python实现蚁群算法相关推荐

  1. python蚁群算法 路径规划_蚁群算法(1) - Python实现

    1 importnumpy as np2 importmatplotlib.pyplot as plt3 4 5 #建立"蚂蚁"类 6 classAnt(object):7 def ...

  2. 多目标蚁群算法路径规划(四)------多目标约束过程常规流程框架

    多目标蚁群算法路径规划(四) 文章目录 多目标蚁群算法路径规划(四) 零.系列前言(一定要看) 一.内容说明 1.1 本章内容说明 1.2 本章主要分享内容简介(摘要) 二. 多目标计算预先准备 2. ...

  3. 基于MATLAB GUI的蚁群算法路径规划实现电动汽车充电站与换电站协调

    基于MATLAB GUI的蚁群算法路径规划实现电动汽车充电站与换电站协调 摘要: 随着电动汽车的普及和发展,电动汽车充电站与换电站的布局和规划变得尤为重要.本文基于MATLAB GUI平台,结合蚁群算 ...

  4. 机器人路径规划_人工蜂群算法

    机器人路径规划_人工蜂群算法 原理 ABC(Artificial BeesColony)算法最先由Basturk等人提出并应用于函数优化问题,蜂群采蜜行为与函数优化问题对应关系如表1所示.由表1可知, ...

  5. 算法学习之模拟退火算法路径规划(python代码实现)

    模拟退火算法路径规划(python代码实现) 一.引言 二.算法介绍以及伪代码 1.算法通俗介绍 2.路径规划算法伪代码 三.算法流程及代码实现 1.地图创建 2.初始化路径 小结 3.计算适应度值 ...

  6. 【APF三维路径规划】基于matlab人工势场算法无人机三维路径规划【含Matlab源码 168期】

    一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[三维路径规划]基于matlab人工势场算法无人机三维 ...

  7. 机器人路径规划_人工势场法

    机器人路径规划_人工势场法 原理 人工势场法是由Khatib提出的一种虚拟力法.原理是:将机器人在环境中的运动视为一种机器人在虚拟的人工受力场的运动.障碍物对机器人产生斥力,目标点对机器人产生引力,引 ...

  8. C#,人工智能,机器人,路径规划,A*(AStar Algorithm)算法、源代码及计算数据可视化

    Peter Hart Nils Nilsson Bertram Raphael 参考: C#,人工智能(AI)机器人路径规划(Path Planning)的ARA*(Anytime Replannin ...

  9. BS1036-基于java+路径规划+CS架构实现的A星算法求解最短路径问题演示程序

    本基于java+路径规划+CS架构实现的A星算法求解最短路径问题演示程序,系统采用多层C/S软件架构,采用java 编程语言开发技术实现A*算法求解地图中的最短路径问题,实时获取计算用户在地图中设置的 ...

最新文章

  1. 【我翻译的文章】你还需要数据层吗?
  2. linux的那些破事
  3. 【原创】如何在 Linux 下调整可打开文件/文件描述符数目
  4. ubuntu apache2配置
  5. 《dp补卡——343. 整数拆分、96. 不同的二叉搜索树》
  6. C# MVC 自定义ActionResult实现EXCEL下载
  7. UML建模之状态图(Statechart Diagram)
  8. 炸掉卡西欧991CNX
  9. Ruby on Rails,创建开发用的MYSQL数据库
  10. 深入学习heritrix---体系结构(Overview of the crawler)
  11. Mybatis——动态SQL实现数据的增删改查
  12. python mock server_python学习笔记6--mockserver
  13. 3D打印机USB联机打印是如何实现的?(以Cura插件USBPrinting为例)
  14. Exp2 后门原理与实践 20164302 王一帆
  15. mysql小计_Mysql必读用SQL实现统计报表中的小计与合计的方法详解
  16. python 求平面两点距离_Python求平面内点到直线距离的实现
  17. 物联网毕业设计 单片机遥控小车
  18. 国际版抖音正确打开方式
  19. 详解程序员驻场开发服务的具体流程
  20. IFIX系统配置指南(一)

热门文章

  1. Android Vibrator类
  2. 2006年9月机器状况
  3. 计算机黑屏时间怎么修改,怎么设置电脑黑屏时间,赶紧试试这个方法吧
  4. C/C++ 中的次方运算
  5. 【857. 雇佣 K 名工人的最低成本】
  6. Xampp浏览html证书错误,IE打开https网站localhost时,取消证书问题提示(示例代码)
  7. SpringBoot整合AOP
  8. 震撼,学习:如何提高理解力 彭思龙
  9. android 自动加载下一页,Android PullToRefresh下拉到底部自动加载下一页
  10. VxWorks阶段性学习总结