基于禁忌搜索的TSP问题求解仿真输出路线规划图和收敛曲线

news2025/7/7 11:14:46

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

        禁忌搜索(Tabu Search或Taboo Search,简称TS)是对局部搜索(LS)的一种扩展,是一种全局寻优算法,其特点是采用禁忌技术,即用一个禁忌表记录下已经到达过的局部最优点及求解过程,在下一次搜索中,利用禁忌表中的信息不再或有选择地搜索这些点,以此来跳出局部最优点。该算法可以克服爬山算法全局搜索能力不强的弱点。

禁忌搜索(Tabu Search,TS )也是一种模拟人类智能的优化算法。

上图涉及禁忌搜索的一些基本概念,现在我们来讨论这些概念。

禁忌表(Tabu List,TL)

这是用于保管(记忆)禁忌对象的表。 是进行禁忌搜索的基本前提。 禁忌表本身有容量限制,其大小会影响禁忌对象的存储个数,影响算法的性能。

禁忌对象(Tabu Object,TO)

是指禁忌表中禁止的变化要素。 禁忌对象的选择可以根据具体问题确定。 例如,旅行者问题(Traveling Salesman Problem,TSP ) )可以禁忌被交换的城市对,也可以禁忌总路径长度。

禁忌期限(Tabu Tenure,TT)

也称为禁忌长,是指禁忌对象未被选择的周期。 禁忌期过短容易发生循环,难以跳出局部最佳,过长会增加计算时间。

渴望准则(Aspiration Criteria,AC)

也称为特赦规则。 所有对象被禁忌后,可以解禁其中性能最好的对象,也可以在解禁某个对象能带来目标值大幅改善的情况下使用特赦规则。

1.2 基本流程

       禁忌搜索算法在初始化时,在搜索空间中随机生成初始解I、禁忌表H 置空,将当前解I记录为历史最优解s,进入迭代搜索过程。 对于每次迭代,从当前解I开始,在当前禁忌表h的限制下,构造解I的邻域A,从a中选出适应值最好的解j替换解I,同时http://www 否则,s保持不变,即使解I暂时变差,也有利于通过扩大搜索空间来摆脱局部最优。 在获得新的当前解I之后,该算法返回开始迭代,并且在找到最佳解或已经执行更新(例如,一定的迭代次数)时结束该算法。

禁忌搜索算法的一般流程如下:

(1)初始化TS算法的参数,按照准则生成问题的初始解,生成0禁忌表;

(2)判断是否满足终止条件,若是,则结束算法,输出结果

(3)根据算法的特性生成领域解,并从中选择合适规模大小的候选解;

(4)判断候选解中的最优解Next是否满足特赦准则,若满足特赦准则,则用Next替代当前最优解Before,并更新禁忌表,令Next对应的禁忌对象的禁忌长度为最长,即禁忌时间最长;若不满足特赦准则,进行(4)步骤;

(5)判断候选解中禁忌状态情况,找出候选解中处于“非禁忌”状态的禁忌对象,并把该禁忌对象对应的解赋给当前最优解,同时设置该禁忌对象的禁忌时间为最长;

(6)转(2);

2.仿真效果预览

matlab2022a仿真结果如下:

 

3.MATLAB核心程序

.......................
Tlist=zeros(CityNum);%禁忌表(tabu list)
cl=100;%保留前cl个最好候选解
bsf=Inf;
tl=50; %禁忌长度(tabu length)
l1=200;%候选解(candidate),不大于n*(n-1)/2(全部领域解个数)
S0=randperm(CityNum);
S=S0;
BSF=S0;
Si=zeros(l1,CityNum);
StopL=200; %终止步数
p=1;
clf;
figure(1);
 
while (p<StopL+1)
    if l1>CityNum*(CityNum)/2
        disp('候选解个数,不大于n*(n-1)/2(全部领域解个数)! 系统自动退出!');
        l1=(CityNum*(CityNum)/2)^.5;
        break;
    end
    ArrS(p)=CalDist(dislist,S);        
    i=1;
    A=zeros(l1,2);
    while i<=l1        
        M=CityNum*rand(1,2);
        M=ceil(M);
        if M(1)~=M(2)
            m1=max(M(1),M(2));m2=min(M(1),M(2));
            A(i,1)=m1;A(i,2)=m2;
            if i==1
                isdel=0;
            else
                for j=1:i-1
                    if A(i,1)==A(j,1)&&A(i,2)==A(j,2)
                        isdel=1;
                        break;
                    else
                        isdel=0;
                    end
                end
            end
            if ~isdel
                i=i+1;
            else
                i=i;
            end
        else 
            i=i;
        end
    end
    
    for i=1:l1
        Si(i,:)=S;
        Si(i,[A(i,1),A(i,2)])=S([A(i,2),A(i,1)]);
        CCL(i,1)=i;
        CCL(i,2)=CalDist(dislist,Si(i,:));
        CCL(i,3)=S(A(i,1));
        CCL(i,4)=S(A(i,2));   
    end
    [fs fin]=sort(CCL(:,2));
    for i=1:cl
        CL(i,:)=CCL(fin(i),:);
    end
    
    if CL(1,2)<bsf  %藐视准则(aspiration criterion)
        bsf=CL(1,2);
        S=Si(CL(1,1),:);        
        BSF=S;
        for m=1:CityNum
            for n=1:CityNum
                if Tlist(m,n)~=0
                    Tlist(m,n)=Tlist(m,n)-1;
                end
            end
        end
        Tlist(CL(1,3),CL(1,4))=tl;
    else  
        for i=1:cl
            if Tlist(CL(i,3),CL(i,4))==0
                S=Si(CL(i,1),:);
                for m=1:CityNum
                    for n=1:CityNum
                        if Tlist(m,n)~=0
                            Tlist(m,n)=Tlist(m,n)-1;
                        end
                    end
                end
                Tlist(CL(i,3),CL(i,4))=tl;
                break;
            end
        end
    end
    
    Arrbsf(p)=bsf;
    drawTSP(Clist,BSF,bsf,p,0);
    p=p+1;
end
BestShortcut=BSF
theMinDistance=bsf
...................................
A136

4.完整MATLAB

V

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/109138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

践行者访谈实录:你真的了解CMMI吗?

2022年12月21日晚8点&#xff0c;我参与了《践行者》访谈节目&#xff0c;历时2小时&#xff0c;就CMMI有关的话题和主持人徐东伟老师&#xff0c;和热心的听众进行了在线交流。节目结束后&#xff0c;禅道公司的小朋友们整理了文字记录如下。 相信大家对CMMI的认知或多或少地…

Android自定义ViewGroup的布局,往往都是从流式布局开始

前言 前面几篇我们简单的复习了一下自定义 View 的测量与绘制&#xff0c;并且回顾了常见的一些事件的处理方式。 那么如果我们想自定义 ViewGroup 的话&#xff0c;它和自定义View又有什么区别呢&#xff1f;其实我们把 ViewGroup 当做 View 来用的话也不是不可以。但是既然…

端到端网络全链路监控方案

结构日渐复杂&#xff0c;设备类型、设备数量逐渐增加&#xff0c;设备间的连接关系随之复杂化&#xff0c;同时随着无线网络的发展&#xff0c;网络中的连接关系逐渐去“线”化&#xff0c;如何可观、高效的对网络间复杂的连接关系进行监控和管理&#xff0c;成为用户不可忽视…

2022年最好用的五款设备管理软件

工厂是典型的设备密集型组织&#xff0c;设备固定资产具有数量多、种类多、使用周期长、使用地点分散等特征。如果依然在使用传统的手工记录数据、手工巡检、纸质维保、电话维修的方式&#xff0c;势必给企业带来损失。 设备是众多企业经营中支出的主要组成部分&#xff0c;在…

(二十)Vue之非单文件组件

文章目录基本使用一、如何定义一个组件&#xff1f;二、如何注册组件&#xff1f;三、如何使用组件&#xff1f;演示程序普通Vue程序单文件组件程序局部注册全局注册几个注意点1.关于组件名2.关于组件标签3.一个简写方式组件的嵌套使用关于VueComponent一个重要的内置关系&…

Shape详解

Spape详解 1.自定义背景shape 1.1gradient 1.简介 定义渐变色&#xff0c;可以定义两色渐变和三色渐变&#xff0c;及渐变样式&#xff0c;它的属性有下面几个2.属性 angle&#xff0c;只对线性渐变是有效的放射性渐变必须指定放射性的半径&#xff0c;gradientRadiouscentetX和…

Ubuntu安装redis服务器

官网下载redis服务器的压缩包redis-6.0.16.tar.gz 点击download 6.2.8或任意版本即可。 上传下载的压缩包到服务器或者本地虚拟机 解压压缩包&#xff0c;并安装gcc tar -zxvf redis-6.0.16.tar.gz解压之后可以看到redis的目录结构&#xff1a; 没有bin目录&#xff0c;而redi…

Meta CTO专访:2023年AR/VR、元宇宙的下一步怎么走

2022年对于Meta来说注定是不平凡的一年&#xff0c;它经历了股价大跌、万人大裁员、项目重组、季度营收首次下滑、Reality Labs季度亏损破纪录&#xff0c;甚至前不久Meta AR/VR业务的元老级人物、Reality Labs顾问CTO John Carck也宣布离职&#xff0c;这件事对于Meta甚至整个…

HEVC学习之CTU划分

一,CTU相关概念 H.265将图像划分为“树编码单元&#xff08;coding tree units, CTU&#xff09;”&#xff0c;而不是像H.264那样的1616的宏块。根据不同的编码设置&#xff0c;树编码块的尺寸可以被设置为6464或有限的3232或1616。 上图就是一个6464树编码块的分区示例&am…

数字ic验证|SoC的功能验证

随着设计的进行&#xff0c;越接近最后的产品&#xff0c;修正一个设计缺陷的成本就会越高。 1.功能验证概述 在IC设计与制造领域&#xff0c;通常所说的验证&#xff08;Verification&#xff09;和测试&#xff08;Test&#xff09;是两种不同的事 验证 在设计过程中确认…

PHP 实现PDF转图片

目录 1.环境配置&#xff1a; 2.实现原理&#xff1a; 3.安装php扩展imagick 4.安装ghostscript 5.pdf转图片 1.环境配置&#xff1a; 2.实现原理&#xff1a; Php使用扩展插件imagick进行图片处理&#xff0c;处理pdf时使用imagick去调用ghostscript 3.安装php扩展imag…

spring-boot如何自行写一个starter并且使用

这里说的starter是pom中引入的一系列starter包&#xff0c;比如spring-boot-starter-web、mybatis-plus-boot-starter等。本文先已mybatis-spring-boot-starter的使用进行说明&#xff0c;然后得到使用的流程&#xff08;套路&#xff09;&#xff0c;然后根据该流程&#xff0…

ddim原理及代码(Denoising diffusion implicit models)

前言 之前学习了 DDPM(DDPM原理与代码剖析)和 IDDPM(IDDPM原理和代码剖析)&#xff0c; 这次又来学习另一种重要的扩散模型。它的采样速度比DDPM快很多(respacing)&#xff0c;扩散过程不依赖马尔科夫链。 Denoising diffusion implicit models, ICLR 2021 理论 Astract和Int…

百果园通过港交所上市聆讯:八成营收来自加盟店,余惠勇为董事长

撰稿|汤汤 来源|贝多财经 近日&#xff0c;深圳百果园实业&#xff08;集团&#xff09;股份有限公司&#xff08;下称“百果园”&#xff09;通过港交所上市聆讯&#xff0c;并披露了聆讯后招股书。 根据招股书介绍&#xff0c;百果园是中国最大的水果零售经营商。根据弗若斯…

数据库实验6 存储过程实验

前言&#xff1a;游标的mysql代码不懂写&#xff0c;所以没有运行结果 实验6 存储过程实验 实验6.1 存储过程实验 1.实验目的 掌握数据库 PL/SQL 编程语言&#xff0c;以及数据库存储过程的设计和使用方法。 2.实验内容和要求 存储过程定义,存储过程运行,存储过程更名,存…

股票价、量走势图绘制

在证券投资分析领域中价、量走势分布图是投资者常用的一个参考方面。本案例主要介绍股票每日收盘价格、成交量的走势图以及月交易量分布饼图的绘制技能&#xff0c;并进一步介绍了子图的绘制方法。今有股票代码600000行情交易数据表&#xff08;trd.xlsx&#xff09;&#xff0…

SPDK线程模型

一、reactor线程 与传统的reactor线程模型相比&#xff0c;SPDK的reactor在功能实现上还是有很大区别的&#xff0c;线程不在基于流水线形式进行作业&#xff0c;而是采用Run-To-Complete来做运行处理。 如图所示&#xff0c;每个reactor线程会绑定一个cpu core&#xff0c;线…

力扣刷题笔记day7(数组中重复的数字+在排序数组中查找数字+0~n-1中缺失的数字)

文章目录数组中重复的数字题目思路代码在排序数组中查找数据题目思路代码0&#xff5e;n-1中缺失的数字题目思路代码数组中重复的数字 题目 思路 创建一个哈希表&#xff0c;将数组遍历&#xff0c;如果不存在则添加到哈希表中&#xff0c;如果存在则直接返回 代码 var fin…

电磁功率流和坡印廷矢量

回顾&#xff1a; 场源的影响周围的快慢取决于距离和传播速度 场源变化引起电磁波&#xff0c;电磁波传输能量 电磁能量的流动满足能量守恒定律 我们关心的是 体积V里面和体积外怎么交换能量&#xff0c;S是包围的闭合面 大家想一想&#xff0c;体积里面有场源 随着能量的…

Spring 中使用Nacos服务发现

引入依赖 <dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-spring-context</artifactId><version>${latest.version}</version> </dependency>本文使用的版本为&#xff1a;1.1.1&#xff08;与Spring 中…