【智能算法】正切搜索算法(TSA)原理及实现

目录

    • 1.背景
    • 2.算法原理
      • 2.1算法思想
      • 2.2算法过程
    • 3.结果展示
    • 4.参考文献
    • 5.代码获取


1.背景

2022年,A Layeb受到正切函数启发,提出了正切搜索算法(Tangent Search Algorithm, TSA)。

在这里插入图片描述

在这里插入图片描述

2.算法原理

2.1算法思想

TSAT基于正切函数的数学模型将给定的解决方案移动到更好的解决方案,提出了切线飞线函数,其具有平衡开发与勘探搜索的优点。

在TSA中,所有的运动方程都由一个全局阶跃控制,其形式为 s t e p ∗ t a n ( θ ) step*tan(\theta) steptan(θ),类似于levy飞行函数,称为正切飞行

无论是基于导数还是无导数的最优算法都是基于如下的下降方程:
X t + 1 = X t + step ∗ d (1) X^{t+1}=X^t+\text{ step}*d\tag{1} Xt+1=Xt+ stepd(1)
其中step是移动的大小,d是移动的方向。
切线飞行乘以一个递减对数函数的行为。探索搜索在早期迭代中很大,在最后迭代中减少。TSA由三个主要部分组成:强化搜索、探索搜索和逃离局部最小。探索阶段的目的是很好地探索搜索空间并找到最有希望的候选对象。而强化分量则用于将搜索过程导向种群中当前的最佳解。最后,在随机搜索代理(解)的每次迭代中应用逃离局部最小值过程,以避免陷入局部最小值。
在这里插入图片描述

2.2算法过程

强化搜索

在强化搜索中,TSA首先进行随机局部行走,然后将得到的解中的一些变量替换为当前最优解中对应变量的值。对于大于4的问题,替换变量的比例等于20%,对于小于或等于4个变量的问题,替换变量的比例等于50%。
X i t + 1 = X i t + s t e p ∗ tan ⁡ ( θ ) ∗ ( X i t − o p t S i t ) X i t + 1 = o p t S i t if variable i is selected (2) X_i^{t+1}=X_i^t+step*\tan(\theta)*\left(X_i^t-optS_i^t\right)\\X_i^{t+1}=optS_i^t\text{ if variable i is selected}\tag{2} Xit+1=Xit+steptan(θ)(XitoptSit)Xit+1=optSit if variable i is selected(2)

探索搜索

TSA使用变步长与切线飞行的乘积来进行全局随机游动。正切函数有助于有效地探索搜索空间。h接近于/2会使正切值变大,得到的解会远离当前解,而h接近于0会使正切函数的值变小,得到的解会接近当前解。因此,探索搜索方程在全局随机漫步和局部随机漫步之间合并。将探索搜索方程应用于每个变量,其概率为1/D,其中D为问题的维度。
X i t + 1 = X i t + s t e p ∗ tan ⁡ ( θ ) (3) X_i^{t+1}=X_i^t+\mathrm{step}*\tan(\theta)\tag{3} Xit+1=Xit+steptan(θ)(3)
强化搜索和探索搜索是根据给定的概率进行的,称为Pswitch。

在这里插入图片描述

逃离局部最小

为了避免局部最小停滞问题,TSA采用了一种机制通过使用如图所示的特定程序来处理这个问题,这个过程有两个部分以一定的概率执行。
X = X + R . ∗ ( o p t S − r a n d ∗ ( o p t S − X ) ) X = X + tan ⁡ ( tan ⁡ ) ∗ ( u b − l b ) (4) \begin{aligned}&X =X + R.*(\mathrm{opt}S- \mathrm{rand}*(\mathrm{opt}S-X))\\&X = X+ \tan(\tan)*(\mathrm{ub}-\mathrm{lb})\end{aligned}\tag{4} X=X+R.(optSrand(optSX))X=X+tan(tan)(ublb)(4)

在这里插入图片描述
与许多优化算法相比,TSA使用的参数较少,Pswitch, Pesc和step, h是强调开发和探索搜索的主要参数。TSA在早期采用较大的步长,随着搜索过程的进行,步长在迭代过程中呈非线性减小。切线飞行除了对步长有很大的影响外,还使其具有振荡性和周期性。为了适应挖掘和强化搜索过程,TSA采用了基于对数函数的自适应步长非线性递减格式。TSA使用两种步长变量,在强化搜索中使用第一个步长变量:
s t e p 1 = 10 ∗ s i g n ( r a n d − 0.5 ) ∗ n o r m ( o p t S ) ∗ l o g ( 1 + 10 ∗ dim ⁡ / t ) (5) \begin{array}{c}\mathrm{step}1=10*\mathrm{sign}(\mathrm{rand}-0.5)*\mathrm{norm}(\mathrm{opt}S)*\mathrm{log}(1+10*\dim/t)\end{array}\tag{5} step1=10sign(rand0.5)norm(optS)log(1+10dim/t)(5)
在探索搜索中,步长为:
s t e p 2 = 1 ∗ s i g n ( r a n d − 0.5 ) ∗ n o r m ( o p t S − X ) / l o g ( 20 + t ) (6) \begin{aligned}\mathrm{step}2=1*\mathrm{sign}(\mathrm{rand}-0.5)*\mathrm{norm}(\mathrm{opt}S-X)/\mathrm{log}(20+t)\end{aligned}\tag{6} step2=1sign(rand0.5)norm(optSX)/log(20+t)(6)
norm()是欧几里得范数,X是当前解,optS是当前最佳解,用于引导搜索过程走向最佳解。

流程图

在这里插入图片描述

3.结果展示

使用测试框架,测试TSA性能 一键run.m

  • 【智能算法】省时方便,智能算法统计指标——一键运行~

CEC2017-F20
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.参考文献

[1] Layeb A. Tangent search algorithm for solving optimization problems[J]. Neural Computing and Applications, 2022, 34(11): 8853-8884.

5.代码获取

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

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

相关文章

(Mac)RocketMQ的本地安装测试(详细图示)

目录 部署服务 namesrv / broker下载解压缩运行 namesrvnohup ./bin/mqnamesrv & 启动命令详解运行 broker 测试收发消息运行自带的生产者测试类运行自带的消费者测试类 部署 Dashboard 可视化下载打包运行访问 部署服务 namesrv / broker 下载解压缩 官网下载 https://r…

uniapp、web网页跨站数据交互及通讯

来来来,说说你的创作灵感!这就跟吃饭睡觉一样,饿了就找吃的,渴了就倒水张口灌。 最近一个多月实在是忙的没再更新日志,好多粉丝私信说之前的创作于他们而言非常有用!受益菲浅,这里非常感谢粉丝…

无人直播新模式——视频挂机自动播,一小时收益上千元,思路分享!

无人直播新模式——视频挂机自动播,一小时收益上千元,思路分享! 无人直播新模式——视频挂机自动直播是一种创新的直播方式,能够实现自动化的收益。下面将分享一些思路、玩法和流程,帮助您了解这个模式并进行实施。 1、…

内容安全(DPI和DFI解析)

内容安全前言: 防火墙的本质其实就是包过滤,我们通常所说的安全设备(如:IPS、IDS、AV、WAF)的检测重心是应用层。下一代防火墙基于传统防火墙的拓展能力,就是可以将以上的安全设备模块集成在一起&#xff0…

uniapp的app端软件更新弹框

1:使用html PLUS实现:地址HTML5 API Reference (html5plus.org),效果图 2:在app.vue的onLaunch生命周期中,代码如下: onLaunch: function() {let a 0let view new plus.nativeObj.View(maskView, {backg…

IO流-其他流:数据流,序列化流

import java.io.DataOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream;public class DataOutputStream1 {public static void main(String[] args) {//创建一个数据输出流包装一个低级的字节输出流try (DataOutputStream dosnew DataOutp…

Elasticsearch:RBAC 和 RAG - 最好的朋友

作者:来自 Elastic Jeff Vestal 检索增强生成 (RAG) 通过提供额外的上下文或信息来增强大型语言模型 (LLM) 的知识,从而提高响应质量。 尽管 LLMs 拥有令人印象深刻的能力,但也有其局限性,例如无法在培训后保留新信息以及对不熟悉…

软考网络工程师 第六章 第三部分 第三节 流量控制和拥塞控制

TCP流量控制 流量控制:为了防止发送方防止发送速度过快,导致接受方处理不过来,造成丢包重传,浪费网络资源 TCP流量控制机制:可变大小的滑动窗口 TCP滑动窗口机制 TCP拥塞控制 例题: TCP采用拥塞窗口&am…

Ubuntu意外断电vmdk损坏--打不开磁盘“***.vmdk”或它所依赖的某个快照磁盘。

背景:电脑资源管理器崩溃卡死,强行断电重启,结果虚拟机打不开了,提示打不开磁盘“***.vmdk”或它所依赖的某个快照磁盘。 删除lck文件:失败vmware-vdiskmanager修复 :提示无法修复最终用 VMFS Recovery挂载…

ipv4手动设置网络的相关知识

基本知识 1.IP地址 IP地址 网络地址 主机地址(又称:主机号和网络号组成) 192.168.100.168(IP地址) 192.168.1.0 (网络地址) 0.0.0.168(主机地址) 2.家庭网络基础组成 3.子网掩码 作用:告诉计算机哪…

开源相机管理库Aravis例程学习(七)——chunk-parser

开源相机管理库Aravis例程学习(七)——chunk-parser 简介例程代码函数说明arv_camera_create_chunk_parserarv_camera_set_chunksarv_chunk_parser_get_integer_value 简介 本文针对官方例程中的:05-chunk-parser做简单的讲解。并介绍其中调…

【JavaScript】内置对象 - 数组对象 ① ( 数组简介 | 数组创建 | 数组类型检测 )

文章目录 一、数组对象1、数组简介2、数组创建3、数组检测 - Array.isArray() 方法4、数组检测 - instanceof 运算符 Array 数组对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array 一、数组对象 1、数组简介 在 JavaScr…

3d gaussian-splatting源码运行及结果展示

笔者是在windows下配置的环境 源码地址及官方教程 github gaussian-splatting 官网给出了详细的配置教程和视频解说 记录一下个人的部署过程 环境需求 硬件需求 具有计算能力 7.0 的带有CUDA的GPU 24G显存 软件需求 python版本我没注意到明确说明,3.7以上应…

c++高级篇(一) —— 初识Linux下的进程控制

linux的信号 信号的概念 在Linux中,信号是一种用于进程间通信和处理异步事件的机制,用于进程之间相互传递消息和通知进程发生了事件,但是,它不能给进程传递任何数据。 信号产生的原因有很多种,在shell中&#xff0c…

三、配置带HybridCLR的ARCore开发环境

预告 本专栏将介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用。 专栏: Unity开发AR系列 插件简介 通过热更技术实现动态地加载AR场景,简化了AR开发流程,让用户可更多地关注Unity场景内容的制作。 “EnvInstaller…”支…

代码覆盖率:度量软件质量的关键指标

一、引言 代码覆盖率是衡量软件测试质量的一个重要指标,它描述了测试用例覆盖了多少代码。高的代码覆盖率可以帮助我们增加对软件质量的信心,并发现潜在的问题。在本文中,我们将深入探讨代码覆盖率,并通过实例来演示如何计算和提…

多目标跟踪入门介绍

多目标跟踪算法 我们也可以称之为 Multi-Target-Tracking (MTT)。 那么多目标跟踪是什么? 不难看出,跟踪算法同时会为每个目标分配一个特定的 id 。 由此得出了目标跟踪与目标检测的区别(似乎都是用方框来框出目标捏…

番外篇 | 利用PyQt5+YOLOv5来搭建目标检测系统(附可视化界面+功能介绍+源代码)

前言:Hello大家好,我是小哥谈。PyQt5是一个Python绑定的Qt库,是用于创建图形用户界面(GUI)和其他应用程序组件的工具包。PyQt5提供了许多GUI元素,如按钮、文本框、标签等,也提供了许多Qt的功能,如网络、数据库、XML等。通过PyQt5可以在Python中使用Qt的丰富功能和强大的工…

jenkins使用gitLab(极狐)认证登陆

jenkins安装 GitLab Authentication插件 我因为java版本和最新GitLab Authentication 1.19版本不兼容,选择了本地安装 找个历史版本1.13版本,然后下载到电脑上 - 本地上传插件并安装 在极狐上创建一个应用 - 配置应用信息 应用名:jenkinsLo…

OC foudation框架(下)的学习

OCfoudation框架(下) 前面学习了有关OCfoudation框架的部分内容,我们现在对于后面的内容继续学习。 文章目录 OCfoudation框架(下)数组(NSArray和NSMutableArray)对集合元素整体调用方法排序使用…