蚁群算法的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 条评论) |