蚁群算法

更新时间:2023-03-06 00:49:51 阅读: 评论:0

毕业季歌曲-电脑上网卡

蚁群算法
2023年3月6日发(作者:三大风险)

蚁群算法的Python代码及其效果演示(含注释)

以下为基本蚁群算法的Python代码(含注释)。

随时可以运行:

fromturtleimport*

fromrandomimport*

fromjsonimportload

k=load(open(""))

city_num,ant_num=30,30#规定城市和蚂蚁总数

x_data=k[0]#城市的x坐标之集合

y_data=k[1]#城市的y坐标之集合

best_length=float("inf")

best_path=[]

alpha=1

beta=7

rho=0.5

potency_list=[1forxxinrange(city_num**2)]

Q=1

##城市的index从0开始

#下面列表存储城市间距离

defget_i_index(n):

ifn%city_num==0:

returnn//city_num-1

el:

returnn//city_num

defget_j_index(n):

ifn%city_num==0:

returncity_num-1

el:

returnn%city_num-1

distance_list=[((x_data[get_i_index(z)]-x_data[get_j_index(z)])**2+(y_data[get_i_index(z)]-

y_data[get_j_index(z)])**2)**0.5forzinrange(1,city_num**2+1)]

classant(object):

def__init__(lf,ant_index):

_index=ant_index

=list(range(city_num))

t_length=0

t_city=randint(0,city_num-1)

l_city=t_city

(t_city)

=[t_city]

=0

#根据城市的index求出两城市间距离

defget_distance(lf,index_1,index_2):

returndistance_list[index_1*city_num+index_2]

defget_potency(lf,index_1,index_2):

returnpotency_list[index_1*city_num+index_2]

defget_prob_list(lf):

res=[_potency(t_city,x)**alpha*(1/_distance(t_city,x))**bet

]

sum_=sum(res)

final_res=[y/sum_foryinres]

returnfinal_res

##轮盘赌选择城市

def__choo_next_city(lf):

city_list=

prob_list=_prob_list()

tmp=random()

sum_=0

forcity,probinzip(city_list,prob_list):

sum_+=prob

ifsum_>=tmp:

+=_distance(t_city,city)

t_city=city

(t_city)

(t_city)

return

defrunning(lf):

globalbest_length,best_path

forxinrange(city_num-1):

lf.__choo_next_city()

+=_distance(t_city,l_city)

(l_city)

best_length=

best_path=

return(,)

defgo():

operation=[]

forxinpotency_list:

x*=(1-rho)

forxinrange(ant_num):

(ant(x).running())

forxinoperation:

foryinrange(city_num-1):

potency_list[x[0][y]*city_num+x[0][y+1]]+=Q/x[1]

#print(f"potency_list:{potency_list}")

#print(f"best_path:{best_path}")

#print(f"best_length:{best_length}")

foryyinrange(1000):

go()

print(f"best_length:{best_length}")

pu()

tpos(x_data[best_path[0]],y_data[best_path[0]])

pd()

forxinrange(1,city_num+1):

tpos(x_data[best_path[x]],y_data[best_path[x]])

运行效果:

本文发布于:2023-03-06 00:49:51,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/zhishi/a/1678034991126107.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:蚁群算法.doc

本文 PDF 下载地址:蚁群算法.pdf

上一篇:企业年会
下一篇:返回列表
标签:蚁群算法
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 实用文体写作网旗下知识大全大全栏目是一个全百科类宝库! 优秀范文|法律文书|专利查询|