TSP-禁忌搜索算法求解

1、禁忌搜索算法(1)概念禁忌搜索(Tabu Search或Taboo Search,简称TS)是对局部领域搜索的一种扩展,是一种全局寻优算法,其特点是采用禁忌技术,即用一个禁忌表记录下已经到达过的局部最优点,在下一次搜索中,利用禁忌表中的信息不再或有选择地搜索这些点,以此来跳出局部最优点。该算法可以克服爬山算法全局搜索能力不强的弱点。(2)思路(3)相关术语评价函数:评价函数是用来评...
摘要由CSDN通过智能技术生成

1、禁忌搜索算法
(1)概念
禁忌搜索(Tabu Search或Taboo Search,简称TS)是对局部搜索(LS)的一种扩展,是一种全局寻优算法,其特点是采用禁忌技术,即用一个禁忌表记录下已经到达过的局部最优点及求解过程,在下一次搜索中,利用禁忌表中的信息不再或有选择地搜索这些点,以此来跳出局部最优点。该算法可以克服爬山算法全局搜索能力不强的弱点。
(2)思路
在这里插入图片描述
在这里插入图片描述
(3)相关术语
评价函数:评价函数是用来评价邻域中的邻居、判断其优劣的衡量指标。大多数情况下,评价函数为目标函数(或目标函数的倒数)。但自定义的形式也可存在,算法也可使用多个评价函数,以提高解的分散性(区分度)。

邻域移动:邻域移动是进行解转移的关键,又称“算子”,邻域移动需要根据不同的问题特点来自定义

禁忌表:禁忌表记录被禁止的变化,以防出现搜索循环、陷入局部最优。对其的设计中最关键的因素是禁忌对象(禁忌表限定的对象)和禁忌步长(对象的禁忌在多少次迭代后失效)。

邻居选择策略:选择最佳邻域移动的规则。目前最广泛采用的是“最好解优先策略”及“第一个改进解优先策略”。前者需比较所有邻域,耗时较久,但解的收敛更有效;后者在发现第一个改进解就进行转移,耗时较少,但收敛效率弱于前者,对于邻域解空间较大的问题往往比较适合。

破禁准则:破禁准则是对于禁忌表的适度放松。防止了因为禁忌表的存在,而错过优异解的情况出现。(如设置禁忌步长)

停止规则:禁忌搜索中停止规则的设计多种多样,如最大迭代数、算法运行时间、给定数目的迭代内不能改进解或组合策略等等。
(4)图解
在这里插入图片描述
在这里插入图片描述
(5)流程图
在这里插入图片描述
2、求解TSP
同样是求解att48实例(最优解为10628)
代码结构:
在这里插入图片描述
其中Data类表示定义数据、变量初始化和读取数据的类

package com.chb.Tabu;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Random;
import java.util.Scanner;

public class Data {
   
	public static final int MAX_GEN=1000;//最大的迭代次数
	public static final int N=200;//每次搜索领域的个数
	public static final int ll=20;//禁忌长度
	public static int cityNum=48;//城市数量,手动设置
	public static int jinji[][]=new int[ll][cityNum];//禁忌表
	public static int[]Ghh=new int[cityNum];//初始路径编码
	public static int bestGh[]=new int[cityNum];//最好的路径编码
	public static int[]LocalGh=new int[cityNum];//当前最好路径编码
	public static int[]tempGh=new int[cityNum];//存放临时编码
	public static int bestT;//最佳的迭代次数
	public static int bestEvaluation;
	public static int LocalEvaluation;
	public static int tempEvaluation;
	public static int point[][]=new int[cityNum][2];//每个城市的坐标
	public static int dist[][]=new int[cityNum][cityNum];//距离矩阵
	public static int t
  • 12
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值