以下是使用蚁群算法求解城市1到城市8的最优路线的 Python 代码:

import numpy as np

# 设置参数
num_cities = 8  # 城市数量
num_ants = 10  # 蚂蚁数量
alpha = 1.0  # 信息素重要程度
beta = 5.0  # 启发式因子重要程度
rho = 0.5  # 信息素蒸发因子
Q = 100  # 信息素增加强度
num_iterations = 100  # 迭代次数

# 城市距离矩阵
distance_matrix = np.array([[0, 3, 4, 5, 6, 7, 8, 9],
                            [3, 0, 2, 3, 4, 5, 6, 7],
                            [4, 2, 0, 1, 2, 3, 4, 5],
                            [5, 3, 1, 0, 1, 2, 3, 4],
                            [6, 4, 2, 1, 0, 1, 2, 3],
                            [7, 5, 3, 2, 1, 0, 1, 2],
                            [8, 6, 4, 3, 2, 1, 0, 1],
                            [9, 7, 5, 4, 3, 2, 1, 0]])

# 初始化信息素矩阵
pheromone_matrix = np.ones((num_cities, num_cities))

# 迭代寻找最优路线
best_path = None
best_distance = float('inf')

for iteration in range(num_iterations):
    # 初始化蚂蚁路线
ant_paths = np.zeros((num_ants, num_cities), dtype=int)

    # 每只蚂蚁按概率选择下一个城市
    for ant in range(num_ants):
        visited_cities = set()  # 已访问城市的集合
        current_city = np.random.randint(0, num_cities)  # 随机选择起始城市
        visited_cities.add(current_city)
        ant_paths[ant, 0] = current_city

        for step in range(1, num_cities):
            unvisited_cities = np.array(list(set(range(num_cities)) - visited_cities))
            next_city = -1

            if np.random.rand() < 0.9:
                # 按信息素和启发式因子选择下一个城市
                probabilities = np.zeros(len(unvisited_cities))

                for i, city in enumerate(unvisited_cities):
                    probabilities[i] = (pheromone_matrix[current_city, city] ** alpha) * \
                                       ((1.0 / distance_matrix[current_city, city]) ** beta)

                probabilities /= np.sum(probabilities)
                next_city = np.random.choice(unvisited_cities, p=probabilities)
            else:
                # 随机选择下一个城市
                next_city = np.random.choice(unvisited_cities)

            ant_paths[ant, step] = next_city
            visited_cities.add(next_city)
            current_city = next_city

    # 计算蚂蚁路径的总距离
    path_distances = np.zeros(num_ants)

    for ant in range(num_ants):
        path = ant_paths[ant]
        path_distances[ant] = np.sum(distance_matrix[path[:-1], path[1:]])

    # 更新最优路径
    if np.min(path_distances) < best_distance:
        best_distance = np.min(path_distances)
        best_path = ant_paths[np.argmin(path_distances)]

    # 更新信息素矩阵
    pheromone_matrix *= (1 - rho)

    for ant in range(num_ants):
        path = ant_paths[ant]
        for i in range(num_cities - 1):
            pheromone_matrix[path[i], path[i+1]] += (Q / path_distances[ant])

# 输出最终路线和距离
print('最终路线:', best_path + 1)  # 加1是因为城市编号从1开始
print('最短距离:', best_distance)

注意,以上代码中,城市编号从0开始,最终输出的最优路线需要将每个城市的编号加1才能得到1到8的城市顺序。

蚁群算法求解城市路线 - Python 代码实现

原文地址: https://www.cveoy.top/t/topic/qnIF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录