TSP问题之Feiring矩阵逐次改进法

本文介绍了使用Feiring矩阵逐步改进法解决旅行商问题(TSP),详细阐述了算法思想、步骤,并通过两个实例(无向图和有向图)展示了算法的应用,通过多次迭代求得最优解。
摘要由CSDN通过智能技术生成

算法思想

在这里插入图片描述

算法步骤

在这里插入图片描述

算法代码

def feiring(D, H):
    # D是带权邻接矩阵,H是初始的H圈(本质上是1到n的一个排列)
    N = D.shape[0]

    # 初始化H圈权值和
    W = 0
    for i, j in zip(H, H[1:] + [H[0]]):
        W += D[i, j]
    print("初始H圈为:", [i + 1 for i in H], '权值和为:', W)

    # 初始化权值减小矩阵Y
    Y = np.zeros([N, N])

    # 初始化迭代次数
    k_iter = 1

    while 1:
        # 计算权值减小矩阵Y
        for i in range(N - 1):
            for j in range(i + 1, N):

                # 一般的相邻情况:在H中两个点相邻
                if j == i + 1:
                    H1 = [H[i - 1] if i != 0 else H[-1]] + [H[i], H[j]] + [H[j + 1] if j != N - 1 else H[0]]
                    H2 = H1.copy()
                    H2[1], H2[2] = H2[2], H2[1]
                    Y[i, j] = (D[H1[0], H1[1]] + D[H1[1], H1[2]] + D[H1[2], H1[3]]) - (
                            D[H2[0], H2[1]] + D[H2[1], H2[2]] + D[H2[2], H2[3]])

                # 特殊的相邻情况:调换的两个点刚好是H的两个端点
                elif j == i + (N - 1):
                    H1 = [H[-2], H[-1], H[0], H[1]]
                    H2 = 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

此账号已停更

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值