使用蚁群算法求解 8 个城市旅行商问题 (TSP) 的 Python 代码示例
以下是一个使用蚁群算法求解 8 个城市旅行商问题的 Python 代码示例:
import random
# 城市数
num_cities = 8
# 蚂蚁数量
num_ants = 10
# 信息素的重要程度
alpha = 1
# 启发因子的重要程度
beta = 2
# 信息素的衰减系数
rho = 0.5
# 最大迭代次数
max_iterations = 100
# 城市距离矩阵
distance_matrix = [
[0, 2, 3, 4, 5, 6, 7, 8],
[2, 0, 3, 4, 5, 6, 7, 8],
[3, 3, 0, 4, 5, 6, 7, 8],
[4, 4, 4, 0, 5, 6, 7, 8],
[5, 5, 5, 5, 0, 6, 7, 8],
[6, 6, 6, 6, 6, 0, 7, 8],
[7, 7, 7, 7, 7, 7, 0, 8],
[8, 8, 8, 8, 8, 8, 8, 0]
]
# 初始化信息素矩阵
pheromone_matrix = [[1 for _ in range(num_cities)] for _ in range(num_cities)]
# 初始化最佳路径和最短距离
best_path = []
best_distance = float('inf')
# 迭代搜索
for iteration in range(max_iterations):
# 初始化蚂蚁当前城市位置
ant_cities = [[i] for i in range(num_ants)]
# 蚂蚁按概率选择下一个城市
for ant in range(num_ants):
for _ in range(num_cities - 1):
current_city = ant_cities[ant][-1]
next_city_probabilities = []
for next_city in range(num_cities):
if next_city not in ant_cities[ant]:
pheromone = pheromone_matrix[current_city][next_city]
distance = distance_matrix[current_city][next_city]
next_city_probabilities.append(pheromone ** alpha * (1 / distance) ** beta)
else:
next_city_probabilities.append(0)
sum_probabilities = sum(next_city_probabilities)
next_city_probabilities = [prob / sum_probabilities for prob in next_city_probabilities]
next_city = random.choices(range(num_cities), weights=next_city_probabilities)[0]
ant_cities[ant].append(next_city)
# 更新最佳路径和最短距离
for ant in range(num_ants):
current_path = ant_cities[ant]
current_distance = sum([distance_matrix[current_path[i]][current_path[i+1]] for i in range(num_cities-1)])
if current_distance < best_distance:
best_path = current_path
best_distance = current_distance
# 更新信息素矩阵
for i in range(num_cities):
for j in range(num_cities):
pheromone_matrix[i][j] = (1 - rho) * pheromone_matrix[i][j]
for ant in range(num_ants):
current_path = ant_cities[ant]
for i in range(num_cities - 1):
pheromone_matrix[current_path[i]][current_path[i+1]] += 1 / best_distance
# 输出结果
print('Best Path:', best_path)
print('Best Distance:', best_distance)
在这个代码示例中,我们首先定义了城市数、蚂蚁数、信息素和启发因子的重要程度、信息素的衰减系数和最大迭代次数。然后根据城市之间的距离构建了距离矩阵和初始的信息素矩阵。接下来,进行了迭代搜索的过程,每一轮迭代中,蚂蚁按照一定的概率选择下一个城市,并更新最佳路径和最短距离。最后,输出了最佳路径和最短距离。
代码解释:
- 参数设置:
num_cities:城市数量num_ants:蚂蚁数量alpha:信息素的重要程度beta:启发因子的重要程度rho:信息素的衰减系数max_iterations:最大迭代次数
- 距离矩阵:
distance_matrix表示城市之间的距离,例如distance_matrix[0][1]表示城市 0 到城市 1 的距离。 - 信息素矩阵:
pheromone_matrix表示城市之间的信息素浓度,初始值设置为 1。 - 蚂蚁选择路径:
- 每个蚂蚁根据信息素和启发因子,按概率选择下一个城市。
- 信息素浓度越高,蚂蚁越倾向于选择该城市。
- 距离越短,蚂蚁越倾向于选择该城市。
- 信息素更新:
- 每次迭代结束后,信息素矩阵会根据蚂蚁走过的路径进行更新。
- 蚂蚁走过的路径上,信息素浓度会增加,而其他路径上的信息素浓度会衰减。
- 最佳路径和最短距离:
- 程序会记录所有蚂蚁找到的最佳路径和最短距离,并最终输出结果。
使用说明:
- 修改
distance_matrix中的距离值,以适应您的实际问题。 - 调整其他参数,例如
num_ants、alpha、beta和max_iterations,以优化算法的性能。 - 运行代码,输出结果将包括最佳路径和最短距离。
注意:
- 蚁群算法是一个随机算法,每次运行的结果可能会有所不同。
- 算法的性能会受到参数设置的影响。
- 对于规模较大的问题,算法的运行时间可能会很长。
希望以上代码和解释能够帮助您理解蚁群算法及其应用。
原文地址: https://www.cveoy.top/t/topic/qnIx 著作权归作者所有。请勿转载和采集!