禁忌搜索算法求解 TSP 问题的代码示例

之前笔者曾经简要介绍过模拟退火算法求解 TSP 问题的代码示例:
模拟退火算法求解 TSP 问题的代码示例

本文以 TSP 问题为例,通过具体代码,说明禁忌搜索算法的迭代过程。


禁忌搜索算法流程图


禁忌搜索算法流程图

TSP 问题的代码示例


关于 TSP 问题的介绍从略,算法模块的代码(algorithm.py)如下,注释中已说明算法的迭代过程:

from datetime import datetime
from typing import Tuple, List, Set
import random

import pandas as pd


class TabuSearch(object):
    """
    禁忌搜索
    """
    def __init__(self, num_point: int, mat_dist: List[List[float]],
                 num_iter: int = 100, len_tabu: int = 10, size_neighbour: int = 50):
        """
        禁忌搜索,数据初始化

        :param num_point:  TSP 节点数量
        :param mat_dist:  距离矩阵
        :param num_iter:  迭代次数
        :param len_tabu:  禁忌表长度
        :param size_neighbour:  邻域搜索的次数
        """

        # 问题参数
        self.num_point = num_point
        self.mat_dist = mat_dist

        # 算法参数
        self.num_iter = num_iter
        self.len_tabu = len_tabu
        self.size_neighbour = size_neighbour

        # 结果
        self.route_opt, self.distance_opt = [], None  # 最优路径、最优路径距离
        self.route_res, self.distance_res = [], None  # 结果路径、结果路径距离

    def run(self):
        """
        算法运行
        :return: 无
        """

        dts = datetime.now()
        random.seed(1024)

        # 初始解
        route = self._init_solution()
        obj = self._get_distance(route=route)
        self.route_opt, self.distance_opt = route, obj
        print("初始解: {}".format(self.route_opt))
        print("初始解的路径距离: {}".format(self.distance_opt), '\n')

        # 禁忌表
        list_tabu = []

        # loop 1: 迭代次数 NG
        for i in range(self.num_iter
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值