在本文中,描述了一个非常简单的模型来说明蚁群算法的工作原理。简而言之,它假设两个节点通过两条链路连接,其中一条链路较短。然后,给定信息素增量和信息素蒸发动力学,人们预计所有蚂蚁最终都会选择较短的路径。
现在,我正在尝试复制与上述场景相对应的本文的模拟,其结果应该(或多或少)如下所示。
这是我的一个实现(采用与上述测试相同的规范)。
import random
import matplotlib.pyplot as plt
N = 10
l1 = 1
l2 = 2
ru = 0.5
Q = 1
tau1 = 0.5
tau2 = 0.5
epochs = 150
success = [0 for x in range(epochs)]
def compute_probability(tau1, tau2):
return tau1/(tau1 + tau2), tau2/(tau1 + tau2)
def select_path(prob1, prob2):
if prob1 > prob2:
return 1
if prob1 < prob2:
return 2
if prob1 == prob2:
return random.choice([1,2])
def update_accumulation(link_id):
global tau1
global tau2
if link_id == 1:
tau1 += Q / l1
return tau1
if link_id == 2:
tau2 += Q / l2
return tau2
def update_evapuration():
global tau1
global tau2
tau1 *= (1-ru)
tau2 *= (1-ru)
return tau1, tau2
def report_results(success):
plt.plot(success)
plt.show()
for epoch in range(epochs-1):
temp = 0
for ant in range(N-1):
prob1, prob2 = compute_probability(tau1, tau2)
selected_path = select_path(prob1,prob2)
if selected_path == 1:
temp += 1
update_accumulation(selected_path)
update_evapuration()
success[epoch] = temp
report_results(success)
但是,我得到的结果很奇怪,如下所示。
看来我对信息素应该如何更新的理解是有缺陷的。
那么,可以解决我在此实现中缺少的内容吗?