
蟻群算法的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,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/1678034991126107.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:蟻群算法.doc
本文 PDF 下載地址:蟻群算法.pdf
| 留言與評論(共有 0 條評論) |