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

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

时间:2023-01-09 12:35:40浏览次数:38  
标签:车间 FJSP particals 调度 算法 end 工件 PSO


目录

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

个工件

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

包含

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

比 道工序 ( 各工序依次为

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

; 所有 工序按照预先确定的顺序加工;每道工序有可选机器集合

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

,

加工时间由分配的机器决定 。 由此, FJSP 实际上是由2 个子问题组成的 , 即机器选择和工序排序 。

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

1 ) 同一台机器在同一时刻只能加工一道工序 。

2 ) 同一工件在同一时刻只能在一台机器上加工 。

3 ) 所有工件在 0 时刻均可以被加工 。

4 ) 不同工件工序之间相互独立 , 同一工件工序之间有先后约束。

5 ) 每个工件在加工过程中不能被中断 。

6 ) 忽略机器准备时间以及工件转运时间 。

本文以最大完工时间久皿最小为优化目标

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

, 设

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

为工件

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

的完工时间 , 则目标函数为(公式比较重要,得纯手打):

              

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

3 运行结果

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

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

3.1 main1运行结果

下面看看运行结果比较:

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

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

3.2 main2运行结果

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

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

 

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

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

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

 

 5 参考文献

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

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

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

6 写在最后

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

标签:车间,FJSP,particals,调度,算法,end,工件,PSO
From: https://blog.51cto.com/u_15739983/5997074

相关文章

  • 不懂任务调度系统,快来看这篇
    摘要:本文讲解如何实现一个任务调度系统的核心逻辑。本文分享自华为云社区《实现一个任务调度系统,看这篇文章就够了》,作者:勇哥java实战分享。1QuartzQuartz是一款Java......
  • 任务调度器
    题目给你一个用字符数组tasks表示的CPU需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在1个单位时间内执行......
  • 数据可视化大屏应急管理综合指挥调度系统完整案例详解(PHP-API、Echarts、百度地图)
    文章目录​​项目说明​​​​一、项目说明​​​​单位信息数据库字段:​​​​资源数据库字段​​​​项目需求​​​​二、项目开发​​​​1.项目分析​​​​2.引入库​......
  • 定时调度插件------FluentScheduler
    定时调度插件------FluentScheduler源码地址官网文档地址使用说明dll引用文章使用的版本为5.5.1版本使用GuGet搜索FluentScheduler即可找到如果框架为.NETFramew......
  • Simpson - 辛普森法 学习笔记
    Simpson-辛普森法学习笔记目录Simpson-辛普森法学习笔记更好的阅读体验戳此进入目的拟合广义积分(反常积分)定义收敛性判断写在前面Simpson公式自适应积分例题#1题面S......
  • Python调度库(schedule)——定时任务
    Python调度库(schedule库)——定时任务官网:https://schedule.readthedocs.io/en/stable/examples.html可用与线程池结合使用,进行多线程定时执行任务,也可以当做任务执行队列......
  • dart HttpSocket&HttpClient
    HttpSocketvarserver=awaitHttpServer.bind(InternetAddress.loopbackIPv4,4040,);print('Listeningonlocalhost:${server.port}');awaitfor(HttpReq......
  • 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第五章 Petalinux的安装
    Petalinux的安装​本章将带大家来安装Petalinux开发工具,需要注意的是与Vivado工具不同的是我们不是将petalinux工具安装在Windows系统下,而是安装在Ubuntu操作系统中,所以在此......
  • 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第六章 Petalinux设计流程实战​
    Petalinux设计流程实战​PetaLinux工具提供了在Xilinx处理系统上自定义、构建和部署嵌入式Linux解决方案所需的一切。该解决方案旨在提高设计生产力,可与Xilinx硬件设计工具......
  • 火山引擎DataLeap数据调度实例的 DAG 优化方案
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群实例DAG介绍DataLeap是火山引擎自研的一站式大数据中台解决方案,集数据集成、开发、运......