此次使用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. 一次完整的从webshell到域控的探索之路
  2. 通过ArrayList对modCount的操作分析fail-fast 机制
  3. 经验之谈——送给年轻的职场人
  4. OpenCV导出模板参数文件
  5. ReportViewer教程(15)-矩阵报表-1
  6. c++ascii码转换为数字_在C++中将字符串转换为数字
  7. cookie、session和token
  8. 用vector编写一个矩阵模板
  9. 第二章 马尔科夫决策过程和贝尔曼等式-强化学习理论学习与代码实现(强化学习导论第二版)
  10. 教程:批量自动删除微博
  11. 3分钟教你绘制一个围棋棋盘
  12. 虚拟机ubuntu与真实机实现实现复制粘贴、传输文件
  13. 自然拼读(程序员必备技能)
  14. Js节流(防连点)和防抖动
  15. DirectX11-鼠标拾取
  16. python手机编程软件-手机上Python编程的软件分享
  17. 陈强教授《机器学习及R应用》课程 第十四章作业
  18. crosscheck命令
  19. Mac 鼠标卡顿现象
  20. 利用PHP编程生成蜘蛛访问记录txt文档

热门文章

  1. android mtk 系统架构,Android振动器(Vibrator)系统详解
  2. 用户为中心:华为消费者云服务背后揭示了啥?
  3. ghost网络克隆功能实现【批量】计算机操作【系统的安装】,万能ghost网络克隆工具...
  4. 使用AntiSamy拦截xss攻击
  5. android 数据存储的几种方式
  6. ip.cn dns.html,中国DNS解析服务器IP地址
  7. VB做外挂中触发Combo框的选项改变事件
  8. javascript入门书籍推荐《javascript基础教程》
  9. 用P5.js绘制创意作品
  10. 程序员提高代码编译速度,都怎么做的?