什么是 TABU 搜索?2024 年 8 月 29 日 | 阅读 6 分钟 禁忌搜索是一种用于解决优化问题的元启发式算法。它的名字来源于阿拉伯语“tabu”,意为任何被禁止的东西。通过维护搜索过程的短期记忆,并利用这些知识将搜索引向有希望的区域,禁忌搜索能够有效地探索解空间。 算法从一个解开始,通过进行某些调整或修改来迭代地检查周围的解。它根据当前问题的特定目标函数或评估标准来评估每个邻居的质量。目标是选择最优解或最大化特定的目标函数。 使用禁忌列表是禁忌搜索的一个显著特征。这个列表跟踪最近使用的移动或转换,从而阻止搜索回到已访问过的确切解或陷入循环。禁忌列表确保了多样化的搜索过程,从而能够探索更大的解空间。 除了禁忌列表,禁忌搜索还采用了其他几种方法来有效地指导搜索过程。这些方法包括利用潜在位置的强化方法、鼓励探索解空间其他区域的多样化策略,以及允许在某些情况下执行特定禁忌移动的雄心标准。 禁忌搜索方法可以用来解决各种优化问题,包括组合优化、调度问题和路由问题。其有效性在于它能够平衡探索和利用,使其能够在具有挑战性和复杂的搜索环境中提供高质量的结果。 在禁忌搜索中,明确的记忆有两个目的,如下所示:
禁忌搜索通过解决不同领域的优化问题来解决。它是一种灵活的方法,当需要确定最佳答案或优化特定目标函数时,可以将其用于解决各种问题。以下是一些禁忌搜索的常见用途: 最优组合设计
时间表和调度
路由和网络问题
图论和图着色
约束满足问题
使用禁忌搜索的好处
局限性和需要考虑的事项
禁忌搜索已被用于解决物流、制造、电信和调度等各个领域的众多实际优化问题。由于其在探索和利用解空间方面的有效性,它在优化领域的学者和从业者中是一个受欢迎的选择。 如何使用禁忌搜索来改进算法?使用有限的迭代次数和禁忌列表,通过禁忌搜索方法优化解,以发现最佳解,该解可最小化给定初始解的目标函数的适应度值。 通过用目标函数评估它们的适应度,并使用邻域函数创建附近的解,代码使用禁忌搜索来反复研究解。它避免返回到以前研究过的替代方案,而是使用禁忌列表在设定的迭代次数后找到具有最低适应度的最佳解。 代码输出 Best Solution: ['A', 'B', 'C', 'D', 'E'] Total Distance: 19 说明 上面代码中实现的禁忌搜索算法解决了旅行商问题 (TSP)。TSP 是一个著名的优化问题,其目标是确定一名推销员访问多个城市并返回起始位置的最快路线。 代码的第一行定义了 TSP 问题数据,包括城市列表及其各自的距离。禁忌期限(一个移动保持禁忌状态的迭代次数)和最大迭代次数被配置为禁忌搜索参数。 该方法开始时,将初始最佳解设置为当前解,并随机初始化当前解。由 evaluate() 函数确定特定解覆盖的总距离。 主要的禁忌搜索循环通过交换当前解中的两个城市来反复创建邻域解。它评估每个邻域解的适应度(总距离)。它选择不在禁忌列表上且适应度等级高于当前最佳解的最佳邻域解。 如果最佳邻域解比当前最佳解更优,则将当前解更新为最佳邻域解,并将最佳解更新。如果禁忌列表的长度超过禁忌期限,则将移动(邻域解)添加到禁忌列表中,并删除最旧的移动。 循环将继续运行,直到达到最大迭代次数。然后生成最佳解及其覆盖的距离。 下一个主题Python 中的算法特征 |
Fizz-Buzz 是用于解释 Fizz、Buzz 和 Fizz_Buzz 组中数字除法的编程任务。假设用户有一个数字“n”,并且他们需要显示从 1 到 n 的所有数字的字符串表示。但是有一些...
阅读 4 分钟
字典是 Python 中一种无序的数据值集合,用于存储数据值,如映射。字典存储键值对,而不是像其他数据类型那样存储单个值作为元素。字典中实现的键必须是唯一的……
阅读 4 分钟
在接下来的教程中,我们将学习如何使用 Python 编程语言在列表中以相等概率找到出现次数最多的元素的索引。那么,让我们开始吧。理解问题 给定一个包含重复元素的列表,我们需要找到...
5 分钟阅读
Python 是一种强大的多用途编程语言,被许多大型行业使用。它提供简单易用的语法,使其成为初次学习计算机编程的人的理想语言。Python 是一种高级编程语言。其核心设计理念是...
阅读 19 分钟
Python 是目前最流行的编程语言之一。学习 Python 并不像学习任何其他过程语言那么难,因为它具有简化的语法、动态类型和面向对象的特性。网络上有很多资源可以帮助初学者入门...
阅读 3 分钟
在本教程中,我们将讨论如何使用 Python 程序获取给定数字的质因数。我们都熟悉质数,如果不知道,质数是指只能被 1 或自身整除的数字。例如...
阅读 3 分钟
如果你是一名开发人员,你可能知道在进行任何 Python 项目或数据科学项目时,始终在一个能使你的项目可重用和可重复的环境中工作是至关重要的,而不会给任何接手你项目的人带来问题....
阅读 6 分钟
? NLP,即自然语言处理,已成为理解和分析人类交流的强大工具。由于机器学习和深度学习的发展,NLP 变得更加复杂,从而在各个领域实现了各种应用。NLP 可能会改变我们收集、检查和使用临床数据的方式……
21 分钟阅读
在这个问题中,我们将得到两个链表。这两个链表将在它们各自的一个节点上合并,形成一个 Y 形列表。我们必须找到链表合并的节点。让我们看一些例子来理解...
阅读 16 分钟
在接下来的教程中,我们将通过一些示例了解 Python 编程语言中 epoch 到 DateTime 的转换。我们将使用 Python epoch 来分别将 epoch 转换为日期和时间。我们还将涵盖以下主题:将 DateTime 转换为 epoch...
阅读 10 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India