You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

蚁群算法求解旅行商问题(TSP)实现异常求助

蚁群优化算法求解TSP问题的代码问题排查求助

问题背景

我尝试用蚁群优化算法(Ant Colony Optimisation, ACO)求解旅行商问题(Travelling Salesman Problem, TSP),目前已基于现有认知用Python完成初步实现,但求解结果总距离在76-78之间,远高于已知最优解39,希望帮忙排查代码问题并提供优化建议。

实现思路

初始化信息素水平,通过多只“蚂蚁”遍历路径积累信息素,迭代过程中对信息素进行挥发,最终期望得到概率最高的最短路径。

代码实现

初始化参数

import numpy as np

num_cities = len(distance_matrix)
num_ants = 20
num_iterations = 100
decay = 0.5
alpha = 1  
beta = 2  

pheromone_levels = np.ones((num_cities, num_cities)) * 1e-6

辅助函数

def select_next_city(pheromone_levels, distance_matrix, current_city, visited):
    pheromones = pheromone_levels[current_city] ** alpha
    visibility = np.zeros_like(pheromones) 
    for city in range(num_cities):
        if city not in visited and distance_matrix[current_city][city] != 0:
            visibility[city] = (1.0 / distance_matrix[current_city][city]) ** beta
    probabilities = pheromones * visibility
    probabilities_sum = probabilities.sum()
    if probabilities_sum == 0:
        return np.random.choice([city for city in range(num_cities) if city not in visited])
    probabilities /= probabilities_sum
    return np.random.choice(num_cities, p=probabilities)

def update_pheromones(pheromone_levels, routes, scores):
    for i, route in enumerate(routes):
        for j in range(num_cities - 1):
            pheromone_levels[route[j], route[j+1]] += 1 / scores[i]
        pheromone_levels[route[-1], route[0]] += 1 / scores[i]
    pheromone_levels *= (1 - decay) 

核心循环

best_route = None
best_distance = float('inf')

for iteration in range(num_iterations):
    routes = []
    distances = []

    for ant in range(num_ants):
        route = [np.random.randint(num_cities)]
        while len(route) < num_cities:
            current_city = route[-1]
            next_city = select_next_city(pheromone_levels, distance_matrix, current_city, route)
            route.append(next_city)
        routes.append(route)
        route_distance = sum(distance_matrix[route[i]][route[i+1]] for i in range(-1, len(route)-1))
        distances.append(route_distance)

        if route_distance < best_distance:
            best_distance = route_distance
            best_route = route

    update_pheromones(pheromone_levels, routes, distances)

print("Best route:", best_route)
print("Best route distance:", best_distance)

问题排查请求

当前求解结果远高于已知最优解,恳请帮忙排查代码中可能存在的问题,提供优化方向。

内容的提问来源于stack exchange,提问作者a9302c

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 17:13:14