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

【车间调度】基于GA/PSO/SA/ACO/TS优化算法的车间调度比较(Matlab代码实现)

目录

1 概述

2 FJSP 描述

3 运行结果

3.1 main1运行结果

3.2 main2运行结果

4 Matlab代码

 5 参考文献

6 写在最后


1 概述

柔性作业车间调度问题(Flexible Job shop Sched-uling Problem , FJSP)是在离散制造业和流程工业中应用广泛的一类问题,已被证明是典型的 NP-上hard问题。

FJSP是作业车间调度问题(Job shop Scheduling Prob-lem,JSP)的扩展,FJSP中每个工件的每道工序均可以在可选择的有限台机器上加工,且在每台机器上的加工时间不一定相同,可灵活地进行资源选择,提高调度的敏捷性,更加贴近实际生产。目前元启发式算法是解决FJSP的常用方法,其主要可分为群体智能算法和局部搜索算法。陆家辉等人提出一种混合。
Jaya优化算法求解柔性作业车间调度问题,并设计一种离散化更新算子使Jaya 优化算法更适用于FJSP,混合2种新型邻域结构提高算法的同守儿→军等人[2将化学反应算法与禁忌搜索相结合,设计了4种操作来保证种群多样性,以实现最优的全局探索,加人禁忌搜索提高了混合算法的局部寻优能力。

2 FJSP 描述

FJSP可以按照以下形式进行描述:n个工件(记为J1,J2,…,Ji,…,Jn)在m台机器(记为M1,,M2. ,…,

Mm 上加工;第 i 个工件J_{i} 包含H_{i} 道工序 各工序依次为\left.O_{i, 1}, O_{i, 2}, \cdots, O_{i, h}, \cdots, O_{i, H_{i}}\right), h=1,2, \cdots, H_{i} ; 所有 工序按照预先确定的顺序加工;每道工序有可选机器集合M_{i,h}, 加工时间由分配的机器决定 由此, FJSP 实际上是由2 个子问题组成的 即机器选择和工序排序

此外,FJSP还需满足以下约束

1 同一台机器在同一时刻只能加工一道工序
2 同一工件在同一时刻只能在一台机器上加工
3 所有工件在 0 时刻均可以被加工
4 不同工件工序之间相互独立 同一工件工序之间有先后约束。
5 每个工件在加工过程中不能被中断
6 忽略机器准备时间以及工件转运时间
本文以最大完工时间久皿最小为优化目标C_{max} C_{i} 为工件J_{i} 的完工时间 则目标函数为(公式比较重要,得纯手打):
              \min C_{\max }=\min \left\{\max _{1 \leqslant i \leqslant n}\left(C_{i}\right)\right\}

3 运行结果

本文包括五种优化算法进行比较,分别是:遗传算法、粒子群优化算法、模拟退火算法、蚂蚁算法、禁忌搜索算法

3.1 main1运行结果

下面看看运行结果比较:

3.2 main2运行结果

 

4 Matlab代码

本文仅展现部分代码,全部代码及文章讲解见:

【车间调度】基于GA/PSO/SA/ACO/TS优化算法的车间调度比较(Matlab代码实现)

function [costs, bestSol] = PSO(jobs, m, n, particals, iterations, costFunc)
  c1 = 1.4944;
  c2 = 1.4944;
  w = 0.79;
  gbests = ones(1, n);
  gbest = costFunc(gbests, jobs, m, n);
  lbests = randi(m, particals, n);
  lbest = ones(1, particals);
  costs = ones(iterations, 1);
  costsEnd = 0;
  for i = 1:particals
      lbest(i) = costFunc(lbests(i, :), jobs, m, n);
      if lbest(i) < gbest
          gbest = lbest(i);
          gbests = lbests(i, :);
      end
  end
  x = lbests;
  v = zeros(particals, n);
  
  for i = 1:iterations
      ibest = costFunc(ones(particals, n), jobs, m, n);
      r1 = rand(particals, 1);
      r2 = rand(particals, 1);
      v = w*v + c1 * bsxfun(@times, r1, lbests - x) + ...
        c2 * bsxfun(@times, r2, (bsxfun(@minus, gbests, x)));
      x = round(x + v);
      %x = bsxfun(@mod, x, m) + 1;
      x(x < 1) = 1;
      x(x > m) = m;
      for j = 1:particals
          c = costFunc(x(j, :), jobs, m, n);
          if c < ibest
              ibest = c;
          end
          if c < lbest(j)
              lbest(j) = c;
              lbests(j, :) = x(j, :);
          end
      end
      costsEnd = costsEnd + 1;
      costs(costsEnd) = ibest;
      [ilbest, idx] = min(lbest);
      %ibest
      ilbests = lbests(idx, :);
      if ilbest < gbest
          gbest = ilbest;
          gbests = ilbests;
      end
  end
  bestSol = gbests;
end

 

 5 参考文献

[1]王玉芳,曾亚志,蒋亚飞.基于自适应灰狼优化算法的柔性作业车间调度问题[J].现代制造工程,2022(7):1-10

[2]张守京,杜昊天,侯天天.求解多目标双资源柔性车间调度问题的改进NSGA-Ⅱ算法[J].机械科学与技术,2022,41(5):771-778

[3]黄学文,陈绍芬,周阗玉,孙宇婷.求解柔性作业车间调度的遗传算法综述[J].计算机集成制造系统,2022,28(2):536-551

6 写在最后

部分理论引用网络文献,如有侵权请联系删除。

相关文章:

  • springBoot 的默认线程池-ThreadPoolTaskExecutor
  • 暑期结束为你的新学期立下Flag吧
  • 大数字符串加法
  • ROS1云课→28机器人代价地图配置
  • 设计新鲜事(News Feed)系统
  • 【气动学】基于matlab GUI弹道问题(含初始角度、速度、空气阻力、水平风)【含Matlab源码 2117期】
  • 力扣leetcode 1619. 删除某些元素后的数组均值
  • 嵌入式入门-交叉编译、bootloader、kernel、根文件系统关系
  • Google Earth Engine(GEE)——快速建立一个10km的格网
  • 关于微信学习的网站
  • 微服务项目:尚融宝(38)(核心业务流程:申请借款额度(1))
  • 八股文复习
  • quartz学习笔记
  • [项目管理-28]:四象限法与任务的时间优先级管理
  • [数据分析] 矩形树图(Treemap)
  • C# 免费离线人脸识别 2.0 Demo
  • ES6核心特性
  • express如何解决request entity too large问题
  • FineReport中如何实现自动滚屏效果
  • Java-详解HashMap
  • Linux中的硬链接与软链接
  • PHP 的 SAPI 是个什么东西
  • storm drpc实例
  • vuex 学习笔记 01
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 简单数学运算程序(不定期更新)
  • 强力优化Rancher k8s中国区的使用体验
  • 探索 JS 中的模块化
  • 硬币翻转问题,区间操作
  • 用 Swift 编写面向协议的视图
  • elasticsearch-head插件安装
  • MPAndroidChart 教程:Y轴 YAxis
  • 阿里云API、SDK和CLI应用实践方案
  • 容器镜像
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​第20课 在Android Native开发中加入新的C++类
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #每天一道面试题# 什么是MySQL的回表查询
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (ros//EnvironmentVariables)ros环境变量
  • (八)c52学习之旅-中断实验
  • (第一天)包装对象、作用域、创建对象
  • (二)JAVA使用POI操作excel
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (算法)Game
  • (一)Thymeleaf用法——Thymeleaf简介
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1