路径规划之启发式算法之十六:和声搜索算法(Harmony Search, HS)

news2025/4/26 21:31:08

        和声搜索算法(Harmony Search, HS)是一种新兴的启发式全局搜索算法,是一种模拟音乐家即兴演奏过程的群体智能优化算法。这种算法由Zong Woo Geem等人在2001年提出,灵感来源于音乐家在寻找和声时的创造性思维过程。HS算法通过模拟音乐家演奏音乐时的选择过程来寻找问题的最优解。

一、基本原理

        和声搜索算法受音乐创作过程中乐师们凭记忆反复调整乐器音调以达到和谐状态的启发。在音乐中,每个乐器代表一个设计变量,乐器的和声对应一个解向量,而和声的评价则相当于目标函数。和声搜索算法通过不断调整和改进一组解(和声)来找到问题的最优解。

        在路径规划问题中,和声搜索算法可以将每个可能的路径看作一个和声,通过迭代搜索找到最优路径。

二、核心组件

        (1)和声记忆库(Harmony Memory, HM):这是算法的核心数据结构,用于存储当前最优解集合。它类似于遗传算法中的种群,存储多个解向量,每个解向量代表一个可能的解决方案。

        (2)和声记忆库的大小(Harmony Memory Size, HMS)是一个预定义的参数,指HM中和声的数量。

        (3)和声记忆考虑率(Harmony Memory Considering Rate, HMCR):这个参数决定了在生成新的和弦(即新的解)时,从和声记忆库中选取值的概率。如果生成的随机数小于HMCR,则从HM中选取一个值;否则,随机生成一个新的值。HMCR的取值通常介于0和1之间,即HMCR∈[0,1]

        (4)音调调整率(Pitch Adjusting Rate, PAR):这个参数决定了从和声记忆库中选择的值是否需要进行微调。如果从和声记忆库中选择了某个值,并且生成的随机数小于PAR,则该值会进行微调。微调通常是通过添加一个小的随机扰动来实现的。PAR的取值也通常介于0和1之间,即PAR∈[0,1]。

        (5)音调微调带宽(Bandwidth, bw):用于连续变量的微调,表示最大变化量。

        (6)新解的生成:通过结合HMCR和PAR,HS算法生成新的和声,这些和声可能是对现有和声的复制、修改或完全随机生成的。

三、算法流程

        1. 初始化:

        算法开始时,HMS会被随机填充一组初始解。这些初始解通常是在问题的搜索空间内随机生成的。设置和声记忆库大小(HMS)、和声记忆库取值概率(HMCR)、音调微调概率(PAR)、音调微调带宽(bw)和最大迭代次数(Tmax)。

        2. 迭代过程:

        (1)以概率HMCR在HM内搜索新解,以概率1-HMCR在HM外变量可能值域中搜索。

        (2)如果选择了HM中的和声,以概率PAR对新解产生局部扰动调整。如果没有选择HM中的和声,则随机生成一个新的和声。

        对于每个决策变量x_{i}的新值x_{new,i},可以通过以下方式生成:

  • 以 HMCR的概率从和声记忆库中选择。
  • 以 1−HMCR 的概率在变量的可行解空间中随机选择。
  • 以 PAR的概率对选定的值进行微调: ,其中,rand 是一个在[0, 1]范围内的随机数。

        (3)更新HM:判断新解目标函数值(新生成的和声)是否优于HM内的最差解,若是,则用新和声替换HM中最差的和声。

        3.终止条件:

        重复上述过程直到达到最大迭代次数或其他终止条件。

        停止准则:算法迭代过程会一直持续,直到满足一定的停止条件。常用的停止条件包括达到预设的最大迭代次数、找到满意的解、适应度改进不再明显等。

图1 和声搜索算法流程图

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

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

相关文章

【Vulkan入门】14-ShowBySDL

文章目录 先叨叨关键代码Git信息main.cpp 运行结果接下来我会做什么重构代码在b站出一套视频 先叨叨 上篇我们让Vulkan渲染了一个三角形,但还没有把它显示出来。本篇介绍一下,如何使用SDL将这个图形显示出来。 原理其实很简单,就是将渲染的内…

uni-app多环境配置动态修改

前言 这篇文章主要介绍uniapp在Hbuilderx 中,通过工程化,区分不同环境、动态修改小程序appid以及自定义条件编译,解决代码发布和运行时手动切换问题。 背景 当我们使用uniapp开发同一个项目发布不同的环境二级路径不同时,这时候…

.NET平台使用C#设置Excel单元格数值格式

设置Excel单元格的数字格式是创建、修改和格式化Excel文档的关键步骤之一,它不仅确保了数据的正确表示,还能够增强数据的可读性和专业性。正确的数字格式可以帮助用户更直观地理解数值的意义,减少误解,并且对于自动化报告生成、财…

单目深度估计模型 lite-mono 测试

lite-mono 使用工业数据集kitti 进行训练,目的使用单目摄像头实现物体深度预测,关于kitti数据集的介绍和下载参考 (二)一文带你了解KITTI数据集-CSDN博客文章浏览阅读2.7w次,点赞64次,收藏294次。文章介绍…

单片机锂电池电量电压检测

一、引言 (一)锂电池电量检测的重要性简述 在如今这个科技飞速发展的时代,众多电子设备都依赖锂电池来供电,像我们日常使用的智能手机、平板电脑、笔记本电脑,还有出行必备的电动自行车、电动汽车等等,锂…

Android通过okhttp下载文件(本文案例 下载mp4到本地,并更新到相册)

使用步骤分为两步 第一步导入 okhttp3 依赖 第二步调用本文提供的 utils 第一步这里不做说明了,直接提供第二步复制即用 DownloadUtil 中 download 为下载文件 参数说明 这里主要看你把 destFileName 下载文件名称定义为什么后缀,比如我定义为 .mp4 下…

华为eNSP:VRRP

一、VRRP背景概述 在现代网络环境中,主机通常通过默认网关进行网络通信。当默认网关出现故障时,网络通信会中断,影响业务连续性和稳定性。为了提高网络的可靠性和冗余性,采用虚拟路由冗余协议(VRRP)是一种…

2.生成Transformation

目录 前言 Source FlatMap KeyBy sum print 总结 前言 以下面的WordCount为例 package com.wlh.p1;import org.apache.flink.api.common.functions.FlatMapFunction; import org.apache.flink.api.java.functions.KeySelector; import org.apache.flink.api.java.tuple…

PCL点云库入门——PCL库可视化之CloudViewer类简单点云信息显示

1、前言 可视化(visualization)涉及运用计算机图形学和图像处理技术,将数据转换成图像并在屏幕上展示,同时支持交互式处理。在PCL库中,一系列强大的可视化工具可供使用,其中较为流行的包括CloudViewer和PCL…

AI大模型学习笔记|多目标算法梳理、举例

多目标算法学习内容推荐: 1.通俗易懂讲算法-多目标优化-NSGA-II(附代码讲解)_哔哩哔哩_bilibili 2.多目标优化 (python pyomo pareto 最优)_哔哩哔哩_bilibili 学习笔记: 通过网盘分享的文件:多目标算法学习笔记 链接: https://pan.baidu.com…

印闪网络:阿里云数据库MongoDB版助力金融科技出海企业降本增效

客户背景 上海印闪网络科技有限公司,于2017年1月成立,投资方包括红杉资本等多家国际知名风投公司。公司业务聚焦东南亚普惠金融,常年稳居行业头部。创始团队来自腾讯,中国团队主要由运营、风控及产研人员组成,核心成员…

路由引入问题(双点双向路由回馈问题)

简介 总所周知,路由引入import又称路由重分发redistribute,为了解决不同路由协议进程间路由信息不互通而使用的技术,由于不同路由协议的算法、机制、开销等因素的差异,它们之间无法直接交换路由信息。因此,路由引入技…

windows安装gradle

目录 1. gradle的简介2. 安装操作2.1 下载2.2 配置环境变量2.3 测试验证 3. 总结 1. gradle的简介 Gradle 是一个开源的项目自动化构建工具,专注于灵活性和性能。它基于 Apache Ant 和 Apache Maven 的概念,但采用了 Groovy 或 Kotlin 作为领域特定语言…

数据库中的代数运算

这些代数基本运算通常被封装在数据库查询语言中,如SQL中的SELECT、FROM、WHERE等子句,使得用户可以更方便地对数据库进行查询和处理。 下面的介绍基于以下两个关系来说明: 传统的集合运算 并(∪) 合并两个关系中的元组…

Linux驱动开发(12):中断子系统–按键中断实验

本章我们以按键为例讲解在驱动程序中如何使用中断, 在学习本章之前建议先回顾一下关于中断相关的裸机部分相关章节, 这里主要介绍在驱动中如何使用中断,对于中断的概念及GIC中断控制器相关内容不再进行讲解。 本章配套源码和设备树插件位于“…

智能家居WTR096-16S录放音芯片方案,实现语音播报提示及录音留言功能

前言: 在当今社会的高速运转之下,夜幕低垂之时,许多辛勤工作的父母尚未归家。对于肩负家庭责任的他们而言,确保孩童按时用餐与居家安全成为心头大事。此时,家居留言录音提示功能应运而生,恰似家中的一位无形…

【Qt】信号、槽

目录 一、信号和槽的基本概念 二、connect函数:关联信号和槽 三、自定义信号和槽 1.自定义槽函数 2.自定义信号函数 例子: 四、带参的信号和槽 例子: 五、Q_OBJECT宏 六、断开信号和槽的连接 例子: 一、信号和槽的基本…

Zemax 中的 LED 阵列模型

LED 阵列的光学特性 LED 阵列由多个发光二极管 (LED) 组成,这些二极管以特定模式或配置排列,以实现均匀照明、更高强度或特定照明特性。这些阵列广泛用于显示器、照明系统、光通信和传感等应用。 LED 阵列的光学特性对于了解它如…

Qt编写区位码gb2312、机内码、国标码————附带详细介绍和编码实现

文章目录 0 背景1 了解编码1.1 ASCII码1.2 机内码、国标码、区位码1.2.1 区位码1.2.2 国标码(GB 2312-80)1.2.3 汉字机内码(GB 2312) 1.3 GBK和GB2312的区别2 编码实现2.1 QString数据转QByteArray类型2.1.1 使用QTextCodec2.1.2 …

【Linux系统】—— 权限的概念

【Linux系统】—— 权限的概念 1 权限1.1 什么是权限1.2 为什么要有权限1.3 理解权限 2 文件的权限2.1 文件角色2.2 文件权限2.3 修改文件权限2.3.1 修改目标属性2.3.1.1 字符修改法2.3.1.2 8进制修改法 2.3.2 修改角色 3 文件权限补充知识点3.1 只能修改自己的文件权限3.2 没有…