当前位置: 首页 > news >正文

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

        和声搜索算法(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.lryc.cn/news/502964.html

相关文章:

  • Redis - 实战之 全局 ID 生成器 RedisIdWorker
  • matlab 连接远程服务器
  • 在服务器自主选择GPU使用
  • 【设计模式】享元模式(Flyweight Pattern)
  • 题目 1688: 数据结构-字符串插入
  • 28.攻防世界PHP2
  • QML QT6 WebEngineView 、Echarts使用和数据交互
  • SpringBoot 整合 Mail 轻松实现邮件自动推送
  • MyBatis 核心知识与实践
  • 机器学习期末速成
  • Linux中的线程
  • AI大模型学习笔记|多目标算法梳理、举例
  • 蓝桥杯刷题——day3
  • 企业级日志分析系统ELK之ELK概述
  • 【开源项目】经典开源项目数字孪生体育馆—开源工程及源码
  • C++多线程实战:掌握图像处理高级技巧
  • 解决MAC装win系统投屏失败问题(AMD显卡)
  • 网易游戏分享游戏场景中MongoDB运行和分析实践
  • Android14 AOSP 允许system分区和vendor分区应用进行AIDL通信
  • R学习——因子
  • pytest入门三:setup、teardown
  • 前端面试准备问题2
  • web前端sse封装
  • 智能家居WTR096-16S录放音芯片方案,实现语音播报提示及录音留言功能
  • 【创建模式-蓝本模式(Prototype Pattern)】
  • Spring Boot应用开发深度解析与实战案例
  • 优化Go语言中的网络连接:设置代理超时参数
  • 《神经网络与深度学习》(邱锡鹏) 内容概要【不含数学推导】
  • 原创 传奇996_55——后端如何点击npc隐藏主界面
  • RabbitMQ中的Work Queues模式