什么是TABU搜索?

文章目录

  • 一、说明
  • 二、什么是TABU搜索?
  • 三、如何使用禁忌搜索优化算法?
  • 四、代码解释:
  • 五、复杂度分析:
  • 六、使用禁忌搜索解决问题的示例:

一、说明

在应用博弈论完成游戏开发中,存在博弈树或图数据结构,在搜索图数据结构的时候,需要深度优先、广度优先,或者禁忌搜索 (TS),禁忌搜索还有是为alpha-one总算法服务的。本文专门介绍这种搜索算法,做为入门级知识。

二、什么是TABU搜索?

禁忌搜索 (TS)是一种迭代邻域搜索算法,其中邻域动态变化。禁忌搜索通过避开搜索空间中已访问过的点来增强局部搜索。通过避开已访问过的点,可以避免搜索空间中的循环,并可以摆脱局部最优。

Tabu Search 的主要特点是利用外显记忆,有两个目标:

  • 防止搜索重新访问以前访问过的解决方案。
  • 探索解决方案空间中未被访问过的区域。

三、如何使用禁忌搜索优化算法?

使用禁忌搜索算法优化解决方案,在指定的迭代次数内并使用有限大小的禁忌列表,找到最小化给定初始解的目标函数适应度值的最佳解决方案。

代码使用禁忌搜索迭代地研究解决方案,方法是使用目标函数评估其适应度,并使用邻域函数生成附近的解决方案。利用禁忌列表,它尝试在预定的迭代次数内发现适应度最低的最优解决方案,避免返回到之前探索的解决方案。

#include <algorithm>
#include <iostream>
#include <numeric> // Added to include accumulate
#include <vector>// Define the objective function
int objective_function(const std::vector<int>& solution)
{ // Added const qualifier// TODO: Implement your objective function here// The objective function should evaluate// the quality of a given solution and// return a numerical value representing// the solution's fitness// Example: return std::accumulate(solution.begin(),// solution.end(), 0);return std::accumulate(solution.begin(), solution.end(),0);
}// Define the neighborhood function
std::vector<std::vector<int> >
get_neighbors(const std::vector<int>& solution)
{ // Added const qualifierstd::vector<std::vector<int> > neighbors;for (size_t i = 0; i < solution.size(); i++) {for (size_t j = i + 1; j < solution.size(); j++) {std::vector<int> neighbor = solution;std::swap(neighbor[i], neighbor[j]);neighbors.push_back(neighbor);}}return neighbors;
}// Define the Tabu Search algorithm
std::vector<int>
tabu_search(const std::vector<int>& initial_solution,int max_iterations, int tabu_list_size)
{ // Added const qualifierstd::vector<int> best_solution = initial_solution;std::vector<int> current_solution = initial_solution;std::vector<std::vector<int> > tabu_list;for (int iter = 0; iter < max_iterations; iter++) {std::vector<std::vector<int> > neighbors= get_neighbors(current_solution);std::vector<int> best_neighbor;int best_neighbor_fitness= std::numeric_limits<int>::max();for (const std::vector<int>& neighbor : neighbors) {if (std::find(tabu_list.begin(),tabu_list.end(), neighbor)== tabu_list.end()) {int neighbor_fitness= objective_function(neighbor);if (neighbor_fitness< best_neighbor_fitness) {best_neighbor = neighbor;best_neighbor_fitness= neighbor_fitness;}}}if (best_neighbor.empty()) {// No non-tabu neighbors found,// terminate the searchbreak;}current_solution = best_neighbor;tabu_list.push_back(best_neighbor);if (tabu_list.size() > tabu_list_size) {// Remove the oldest entry from the// tabu list if it exceeds the sizetabu_list.erase(tabu_list.begin());}if (objective_function(best_neighbor)< objective_function(best_solution)) {// Update the best solution if the// current neighbor is betterbest_solution = best_neighbor;}}return best_solution;
}int main()
{// Example usage// Provide an initial solutionstd::vector<int> initial_solution = { 1, 2, 3, 4, 5 };int max_iterations = 100;int tabu_list_size = 10;std::vector<int> best_solution = tabu_search(initial_solution, max_iterations, tabu_list_size);std::cout << "Best solution:";for (int val : best_solution) {std::cout << " " << val;}std::cout << std::endl;std::cout << "Best solution fitness: "<< objective_function(best_solution)<< std::endl;return 0;
}

输出
最佳解决方案:1 2 3 4 5
最佳解决方案适应度:15
注意: 我们可以用您的特定目标函数替换objective_function实现,并提供合适的 initial_solution 以确保代码按预期工作。

四、代码解释:

代码要求实现适合您情况的目标函数和邻域函数。
解决方案的适应度通过目标函数以数字方式量化,从而评估解决方案的质量。
邻域函数使用给定的解决方案作为起点,创建邻近的解决方案。
使用禁忌搜索算法迭代探索搜索空间,从而寻找最佳非禁忌邻居。
根据问题的具体情况,您应该调整起始解决方案、最大迭代次数和禁忌列表大小。
根据问题的难度,代码提供了实现禁忌搜索的基本框架,并且可能需要更多定制。
不要忘记用您针对特定问题的实际实现替换 TODO 占位符部分,描述目标函数中的解决方案表示和适应度计算。

五、复杂度分析:

由于禁忌搜索的时间复杂度随所要解决的具体问题和搜索区域的范围而变化,因此没有通用的方法来计算它。

禁忌搜索问题的最坏时间复杂度通常表示为O(2^n),其中 n 是搜索空间的大小,然而,其时间复杂度可能会随着问题规模而呈指数增长。
尽管这取决于搜索空间的大小,但禁忌搜索的空间复杂度通常远低于其最坏情况的时间复杂度。搜索空间的大小表示为O(k*n ),其中 n 是搜索空间的大小,k 是禁忌列表的大小或正在评估并存储在内存中的候选解决方案的数量。
重要的是要记住,禁忌搜索的实际时间和空间复杂度可能会因要解决的特定问题、所选的算法参数(例如禁忌列表的大小、期望标准、多样化策略等)以及实施的有效性而有很大差异。因此,为了发现特定任务的最佳性能,经常需要尝试各种参数值和实施方法。

六、使用禁忌搜索解决问题的示例:

N皇后问题
旅行商问题(TSP)
最小生成树 (MST)
分配问题
车辆路线
DNA 测序
禁忌搜索的优点:
可应用于离散和连续解决方案。
禁忌表可用于抵抗循环并恢复到旧的解决方案。
禁忌搜索的缺点:
高迭代次数
存在可调参数

准备好进入未来了吗?掌握生成式人工智能和 ChatGPT是通往人工智能前沿世界的大门。本课程非常适合技术爱好者,它将通过实践课程教您如何利用生成式人工智能和ChatGPT。转变您的技能并创建出众的创新人工智能应用程序。不要错过成为人工智能专家的机会——立即报名并开始塑造未来

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

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

相关文章

【Unity】ScreenToWorldPoint转换三维空间MousePosition

踩坑记录&#xff1a; 使用ScreenToWorldPoint一般会出现诸如如下代码 Camera.main.ScreenToWorldPoint&#xff08;Input.mousePosition&#xff09; 此时的转换&#xff0c;如果是2D模式下&#xff0c;那么直接使用即可&#xff0c;没有问题&#xff0c;因为2D中&#xff0…

ubuntu 如何查看某一个网卡的ip地址

在Ubuntu中&#xff0c;你可以使用多种方法来查看某一个网卡的IP地址。以下是一些常用的方法&#xff1a; 使用ip命令&#xff1a; ip命令是现代Linux系统中用于显示和操作路由、网络设备、策略路由和隧道的工具。要查看所有网络接口的IP地址&#xff0c;你可以使用&#xff1a…

中英双语介绍伦敦大学学院(University College London,UCL)

中文版 伦敦大学学院&#xff08;UCL&#xff09;简介 位置和周边环境 伦敦大学学院&#xff08;University College London&#xff0c;简称UCL&#xff09;位于英国伦敦市中心的布卢姆斯伯里&#xff08;Bloomsbury&#xff09;区。具体地址为&#xff1a; Gower Street, …

C语言 -- 扫雷游戏

C语言 – 扫雷游戏 游戏规则&#xff1a; 给定一个棋盘&#xff0c;玩家需要排查出所有隐藏的雷&#xff0c;也就是选择出所有不是雷的地方。 玩家选择位置&#xff0c;若此处有雷&#xff0c;玩家被炸死&#xff0c;游戏结束&#xff1b; 若此处无雷&#xff0c;此处提示周围一…

12.SQL注入-盲注基于时间(base on time)

SQL注入-盲注基于时间(base on time) boolian的盲注类型还有返回信息的状态&#xff0c;但是基于时间的盲注就什么都没有返回信息。 输入payload语句进行睡5秒中&#xff0c;通过开发这工具查看时间&#xff0c;如图所示&#xff0c;会在5秒钟后在执行&#xff0c;因此存在基于…

基于Java技术的篮球论坛系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言 Java 数据库 MySQL 技术 B/S模式、Java技术 工具 Visual Studio、MySQL数据库开发工具 系统展示 首页 用户注册界面 篮球论坛界面 个人中心界面 摘要 本…

Vite: 近几个版本的更新

概述 在 2021 年 2 月&#xff0c;尤大正式推出了 Vite 2.0 版本&#xff0c;可以说是 Vite 的一个重要转折点&#xff0c;自此之后 Vite 的用户量发生了非常迅速的增长&#xff0c;很快达到了每周 100 万的 npm 下载量。同时&#xff0c;Vite 的社区也越来越活跃&#xff0c;…

机器学习原理之 -- XGboost原理详解

XGBoost&#xff08;eXtreme Gradient Boosting&#xff09;是近年来在数据科学和机器学习领域中广受欢迎的集成学习算法。它在多个数据科学竞赛中表现出色&#xff0c;被广泛应用于各种机器学习任务。本文将详细介绍XGBoost的由来、基本原理、算法细节、优缺点及应用场景。 X…

14-38 剑和诗人12 - RAG+ 思维链 ⇒ 检索增强思维(RAT)

在快速发展的 NLP 和 LLM 领域&#xff0c;研究人员不断探索新技术来增强这些模型的功能。其中一种备受关注的技术是检索增强生成 (RAG) 方法&#xff0c;它将 LLM 的生成能力与从外部来源检索相关信息的能力相结合。然而&#xff0c;最近一项名为检索增强思维 (RAT) 的创新通过…

Go基础知识

目标 简单介绍一下 GO 语言的诞生背景&#xff0c;使用场景&#xff0c;目前使用方案简单介绍一下 GO的使用&#xff0c;GO的基础语法&#xff0c;简单过一下一些GO的语言例子着重介绍一下GO的特性&#xff0c;为什么大家都使用GO语言&#xff0c;GO的内存结构、为什么都说GO快…

极速目标检测:算法加速的策略与实践

标题&#xff1a;极速目标检测&#xff1a;算法加速的策略与实践 目标检测算法在计算机视觉任务中扮演着重要角色&#xff0c;但其计算成本往往较高。优化目标检测算法的速度&#xff0c;不仅可以提升效率&#xff0c;还能使算法适用于实时系统。本文将深入探讨如何优化目标检…

【笔记】记一次在linux上通过在线安装mysql报错 CentOS 7 的官方镜像已经不再可用的解决方法+mysql配置

报错&#xff08;恨恨恨恨恨恨恨&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff09;&#xff1a; [rootlocalhost ~]# sudo yum install mysql-server 已加载插件&#xff1a;fastestmirror, langpacks Determining fastest mirrors Could not retrie…

Conda Channels全掌握:Linux中添加与移除的艺术

标题&#xff1a;Conda Channels全掌握&#xff1a;Linux中添加与移除的艺术 Conda是一个流行的跨平台包管理系统&#xff0c;广泛用于安装和管理科学计算和数据分析软件。Conda的channels是软件包的存储库&#xff0c;用户可以通过添加或移除这些channels来获取所需的包。本文…

Unity中使用VectorGraphics插件时,VectorUtils.RenderSpriteToTexture2D方法返回结果错误的解决方法

Unity中使用VectorGraphics插件时&#xff0c;如果使用VectorUtils.BuildSprite方法创建Sprite&#xff0c;那么得到的Sprite往往是一个三角网格数比较多的Sprite&#xff0c;如果想要得到使用贴图只有两个三角面的方形Sprite&#xff0c;可以使用该插件提供的VectorUtils.Rend…

数据库概念题总结

1、 2、简述数据库设计过程中&#xff0c;每个设计阶段的任务 需求分析阶段&#xff1a;从现实业务中获取数据表单&#xff0c;报表等分析系统的数据特征&#xff0c;数据类型&#xff0c;数据约束描述系统的数据关系&#xff0c;数据处理要求建立系统的数据字典数据库设计…

ctfshow-web入门-文件包含(web82-web86)条件竞争实现session会话文件包含

目录 1、web82 2、web83 3、web84 4、web85 5、web86 1、web82 新增过滤点 . &#xff0c;查看提示&#xff1a;利用 session 对话进行文件包含&#xff0c;通过条件竞争实现。 条件竞争这个知识点在文件上传、不死马利用与查杀这些里面也会涉及&#xff0c;如果大家不熟悉…

第一百四十八节 Java数据类型教程 - Java字符串搜索和Java子字符串

Java数据类型教程 - Java字符串搜索 我们可以使用indexOf()和lastIndexOf()方法获取另一个字符串中的字符或字符串的索引。例如 public class Main {public static void main(String[] args) {String str new String("Apple");int index str.indexOf("p"…

三界-欢迎来到Web3D+GIS学习天地!

三界-欢迎来到Web3DGIS学习天地&#xff01; 地址&#xff1a;threelab.cn ** 坚持封装自己的引擎已经有三年了&#xff0c;每天都是加班熬夜开发功能&#xff0c;做东西。 虽然这段时间内&#xff0c;我一直在业余时间坚持开发&#xff0c;但实际投入的开发时间并不长&#…

Linux 系统管理4——账号管理

一、用户账号管理 1、用户账号概述 &#xff08;1&#xff09;用户账号的常见分类&#xff1a; 1>超级用户&#xff1a;root uid0 gid0 权限最大。 2>普通用户&#xff1a;uid>500 做一般权限的系统管理&#xff0c;权限有限。 3>程序用户&#xff1a;1<uid&l…

im即时通讯软件有哪些?WorkPlus安全专属移动数字化平台

IM即时通讯软件是为满足快速、即时沟通需求而设计的工具。在众多IM即时通讯软件中&#xff0c;WorkPlus作为一种安全专属移动数字化平台&#xff0c;为企业提供了全方位的移动办公解决方案&#xff0c;并注重信息安全和数据隐私保护。本文将介绍几种常见的IM即时通讯软件以及Wo…