jaya算法求解TSP

用jaya算法求解tsp问题,最好能给代码,还有思路等


import numpy as np
import random

# 定义目标函数:TSP问题的距离函数
def tsp_distance(g, r):
    d = 0
    for i in range(n - 1):
        d += g[r[i], r[i + 1]]
    d += g[r[n - 1], r[0]]
    return d

# 初始化参数
n = 10  # 城市数量
K = 20  # 群体数量
iter_times = 100  # 迭代次数
alpha = 0.9  # 缩小因子
p = np.zeros((K, n), dtype=int)  # 种群矩阵
d = np.zeros((K, ))  # 种群距离
best_d = 1e10  # 记录最优距离
best_p = np.zeros((n, ), dtype=int)  # 记录最优路径

# 随机初始化种群
for k in range(K):
    p[k, :] = np.random.permutation(n)
    d[k] = tsp_distance(np.random.rand(n, n), p[k, :])
    if d[k] < best_d:
        best_d = d[k]
        best_p = p[k, :]

# 迭代
for i in range(iter_times):
    for k in range(K):
        r1, r2 = random.sample(range(K), 2)
        new_p = (p[r1, :] + p[r2, :]) // 2  # 交叉操作
        new_d = tsp_distance(np.random.rand(n, n), new_p)
        if new_d < d[k]:  # 比较
            p[k, :] = new_p
            d[k] = new_d
            if new_d < best_d:
                best_d = new_d
                best_p = new_p
    alpha *= 0.95  # 更新缩小因子

# 输出结果
print("最优距离:", best_d)
print("最优路径:", best_p)