基于和声搜索算法(Harmony Search,HS)的机器设备工作最优调度方案求解matlab仿真

news/2025/3/17 9:53:55/文章来源:https://www.cnblogs.com/softcodes/p/18342434

1.程序功能描述

        通过和声搜索算法(Harmony Search,HS)实现机器设备工作时间调度,使得多个机器进行并行工作,使得最终完成任务的时间达到最小。仿真结果输出工作调度甘特图以及和声搜索算法的适应度值收敛曲线。

 

2.测试软件版本以及运行结果展示

MATLAB2022a版本运行

 

 

3.核心程序

 

% 对于每一次迭代  
for it = 1:Iteration% 初始化新的和声数组  X_HW = repmat(HW_struct, Num_HM, 1);% 创建新的和声 for k = 1:Num_HM% 创建新的和声位置X_HW(k).Position = unifrnd(Xmin, Xmax, VarSize);for j = 1:Xnumif rand <= CR_HM% 如果随机数小于HMCR  
i = randi([1 Size_HM]);% 使用和声记忆  X_HW(k).Position(j) = Harmony(i).Position(j);end% 音高调整  if rand <= PAR_HM% 如果随机数小于PAR  DELTA = FW*randn();        % 高斯分布 X_HW(k).Position(j) = X_HW(k).Position(j)+DELTA;endend% 应用变量限制  X_HW(k).Position = max(X_HW(k).Position, Xmin);X_HW(k).Position = min(X_HW(k).Position, Xmax);% 评估  [X_HW(k).Cost X_HW(k).Sol] = fits(X_HW(k).Position);end% 合并和声记忆和新的和声  Harmony = [HarmonyX_HW]; % 对和声记忆进行排序 [~, II] = sort([Harmony.Cost]);Harmony = Harmony(II);% 截断多余的和声Harmony = Harmony(1:Size_HM);% 更新找到的最佳解 
BestX = Harmony(1);% 存储找到的最佳代价值  
BestY(it) = BestX.Cost;figure(1);
func_draw(BestX.Sol,JSPm);
endfigure;
plot(1:5:Iteration,BestY(1:5:end),'-bs',...'LineWidth',1,...'MarkerSize',6,...'MarkerEdgeColor','k',...'MarkerFaceColor',[0.9,0.0,0.0]);xlabel('迭代次数');
ylabel('适应度值');
0007 

  

 

4.本算法原理

       随着工业4.0时代的到来,机器设备的工作调度问题变得越来越重要。合理的调度方案能够提高设备利用率,降低成本,提升企业效益。然而,由于设备数量、任务数量以及约束条件的复杂性,求解最优调度方案成为了一个NP难问题。为此,本文提出使用和声搜索算法求解该问题。

 

4.1、和声搜索算法

       和声搜索算法是一种启发式优化算法,模拟了音乐演奏中和声调整的过程。算法将问题的解看作是和声,通过不断地调整和声中的音符(变量),来达到优化目标函数的目的。算法主要包括以下几个步骤:

 

1.初始化和声库:随机生成一组初始解,构成初始和声库。

 

 

 

2.生成新和声:根据某种策略(如随机选择、记忆考虑等)从和声库中选择一个或多个和声,对其进行微调,生成新的和声。

 

 

 

3.更新和声库:如果新和声优于和声库中的最差和声,则替换之,否则保留原和声库。

 

 

 

4.判断是否达到终止条件:如果达到预设的迭代次数或解的优度达到预设阈值,则算法终止,否则返回步骤2。

 

主要涉及到的参数如下所示:

和声库大小(HMS):表示和声库中和声的数量;

记忆考虑率(HMCR):表示从和声库中选择和声的概率;

音调微调率(PAR):表示对新和声进行微调的概率;

音调微调带宽(BW):表示微调的幅度。

 

 

4.2、基于HS的机器设备工作最优调度方案求解

       在求解机器设备工作最优调度方案时,我们首先需要定义问题的编码方式、目标函数以及约束条件。接着,根据HS算法的原理,设计合适的和声表示、生成策略、更新策略以及终止条件。具体流程如下:

 

编码方式:每个和声代表一个调度方案,其中的音符对应任务的调度顺序、设备的分配等。

目标函数:根据调度方案计算总成本(如时间、能耗等),作为目标函数。我们的目标是最小化该函数。

约束条件:包括设备的工作时间、任务的时间限制等。不满足约束条件的和声将被视为无效。

和声生成策略:结合设备的工作特性和任务需求,设计合适的策略从已有和声中生成新的和声。例如,可以选择部分任务进行顺序调整,或者重新分配某个任务到不同的设备等。

和声更新策略:当新生成的和声满足约束条件且优于库中最差和声时,用其替换库中最差和声。同时,为了保持解的多样性,也可以引入一定的随机性。

终止条件:设定最大迭代次数或者目标函数值改进小于某个阈值作为终止条件。

 

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

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

相关文章

从零体检一个魔塔社区模型(modelscope)最简单demo

从社区拿一个模型,比如以下这个链接 https://www.modelscope.cn/models/iic/cv_mobilenet-v2_bad-image-detecting 它的代码样例如下 from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks from modelscope.outputs import OutputKeysimg …

P2831 [NOIP2016 提高组] 愤怒的小鸟

讲解 P2831 [NOIP2016 提高组] 愤怒的小鸟。考虑状态压缩动态规划,需要根据两个点推出抛物线的解析式。思路: 考虑先求出经过 \((x_1,y_1),(x_2,y_2)\) 的抛物线解析式 我们有: \[\begin{cases} ax_1^2 + bx_1 = y_1 \\ ax_2^2 + bx_2 = y_2\end{cases} \]考虑将 \(b\) 消掉…

【EF Core】自动生成的字段值

自动生成字段值,咱们首先想到的是主键列(带 IDENTITY 的主键)。EF Core 默认的主键配置也是启用 Identity 自增长的,而且可以自动标识主键。前提是代表主键的实体属性名要符合以下规则: 1、名字叫 ID、id、或 Id,就是不分大小写; 2、名字由实体类名 + Id 构成。比如,Ca…

PowerBI_一分钟学会计算门店开业前3天销售金额_计算列及度量值方法

在某些特殊场景,我们往往需要去计算一些特定的组别的聚合数据 今天,就以计算门店开业前3天的销售情况,来学习一下,利用计算列和DAX度量值,两种快捷计算此类问题的方案。 一:XMIND二:示例数据 2.1 示例数据列说明为了方便验证和更清晰的检查结果,数据源只用了三列,分别…

雷达气象学(6)——径向速度图分析

目录6.1 速度场分析基础6.1.1 速度图分析的基本方法6.1.2 练习:整层为均匀西风6.1.3 练习:风向随高度顺转6.2 水平均匀风场的典型图像6.3 典型天气系统的判别6.3.1 锋面(切变线)系统6.3.1.1 冷锋(冷式切变线)6.3.1.2 暖锋(暖式切变线)6.3.2 逆风区6.3.3 中 \(\gamma\) …

wsl docker里运行ollama并使用nvidia gpu的一些记录

1、安装wsl2 具体过程网上一搜一把,这里就先略过了,只有wsl2能用哈 2、wsl里装docker,及相关配置 装dockerwget https://download.docker.com/linux/static/stable/aarch64/docker-23.0.6.tgz cd /mydata/tmp/ tar -zxvf docker-23.0.6.tgz mv docker/* /usr/bin/ mv dock…

程序员副业探索之电商

在腾讯广告工作期间,我主要负责小程序电商与广告业务,见证了互联网电商行业的剧变,特别是众多电商公司纷纷拥抱私域流量,直播带货成为新风尚,广告投入也在持续增加。通过这些经历,我积累了不少关于互联网电商的经验,并萌生了尝试电商副业的想法。 在小红书上,女装博主们…

mysql 为什么很多互联网公司选择了读可提交

前言 在默认环境下,mysql 是可重复读,为什么默认可重复读呢? 一般情况下感觉读可提交就行,可重复读解决幻读的问题,但是大多情况下没有幻读的问题,所以也没有必要可重复读。 那么为什么mysql 要把默认配置设置为可重复读呢? 正文 历史原因:这种图,如果是在可提交读的情…

day2-admin管理后台

admin管理后台 1.基于django初始化一个项目 1.conda activate 虚拟名字#进入虚拟环境 2.django-admin startproject blog#创建一个项目blog 3.cd blog #进入blog项目文件夹中 4.python manage.py startapp app的名字#创建一个app初始化数据库(django自带的sqlite)1.python ma…

1-初始前端基本标签

目录初始html –超文本标记语言1.超文本:2.标记语言:3.标签4.html基本框架5.拓展插件6.文字标签7.转义字符8.语义化与SEO 初始html –超文本标记语言 1.超文本:比普通的文本更厉害。可以插入图片/音乐/视频/超链接,对立面的内容进行排版,样式设计2.标记语言:可以吧html当做…

WIN10使用记录

一、win10任务栏任务缩略图变列表 运行中输入regedit,打开注册表编辑器。HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband在右侧窗口中找到NumThumbnails,如果没有的话也要手工新建一个Dword(32位)值,把其命名为NumThumbnails, 双击NumT…

「Day 1—递归问题」

递归问题 定义 简洁来说就是一个函数不断调用自身的一个过程。 习题 汉诺塔问题 思路 对于这个经典的问题,我们考虑了使用递归的做法,由于盘子是在三个底座上来回辗转的,所以我们要确定起始座,辅助座,和目标座。我们专注于最下面的最大的那个盘子,先将盘子都放到辅助座上…