基于多动作深度强化学习的柔性车间调度研究(Python代码实现)

 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 文献来源

🌈4 Python代码实现


💥1 概述

灵活作业车间调度问题(FJSP)在现代制造业中起着至关重要的作用,广泛用于各种制造工艺,例如半导体制造,汽车和纺织品制造(Brucker和Schlie,1990,Garey等人,1976,Jain和Meeran,1999,Kacem等人,2002)。它是一个广义作业车间调度问题(JSP),是计算机科学和运筹学中经典的NP-hard组合优化问题。在 FJSP 中,作业由一系列特定的连续操作组成,其中每个操作都分配给一组兼容机器中的合格机器,以优化一个或多个目标,例如 makespan、平均完成时间、最大流量时间、总延迟等(Chaudhry and Khan,2016,Xie et al.,2019)。与 JSP 问题相比,FJSP 更加复杂和灵活,因为属于作业的操作可以分配给一台或多台具有不同处理时间的兼容机器。

目前,解决NP-hard组合优化问题的现有方法可以归纳为两类:精确方法和近似方法。精确的方法,如数学规划,在整个解空间中寻找最优解,但由于它们的NP硬度,这些方法很难在合理的时间内解决大规模的调度问题(Li,Pan,&Liang,2010)。由于 FJSP 实例的棘手性,越来越多的近似方法(包括启发式、启发式和机器学习技术)被开发出来来解决现实世界问题的实例。通常,近似方法可以在计算工作量和结果计划的质量之间实现良好的权衡。特别是群体智能(SI)和进化算法(EA),如遗传算法(GA),粒子群优化(PSO),蚁群优化(ACO),人工蜂群等,在解决FJSP实例方面显示出优势。

尽管与精确的数学优化方法相比,SI和EA可以在合理的时间内解决FJSP,但这些方法在实时调度环境中并不适用,因为当底层算法需要大量迭代时,它们仍然可能遭受不可预测的极长计算时间以获得满意的解决方案。调度规则作为启发式方法的委托,广泛应用于实时调度系统,如考虑动态事件的中断。调度规则通常具有较低的计算复杂性,并且比数学规划和启发式更容易实现。通常,用于解决FJSP的调度规则可以分为两个基本类别:作业选择规则和机器选择规则。这些规则的设计和组合旨在最大限度地减少调度目标,例如平均流时间、平均迟到和最大迟到。然而,有效的调度规则通常需要大量的领域专业知识和试错(Zhang等人,2020),并且无法保证局部最优(Luo,2020)。

最近,深度强化学习(DRL)算法为解决具有共同特征的调度问题提供了一种可扩展的方法。一些基于学习的工作(Bengio, Lodi, & Prouvost, 2021)专注于其他类型的组合优化问题,例如旅行推销员问题(TSP)和车辆路线问题(VRP),但尚不清楚DRL已被用于研究复杂的调度问题,例如FJSP。这种知识差距促使我们为FJSP开发基于学习的方法。

通常,RL 代理根据以下行为与环境交互:代理首先接收状态st并选择一个操作一个t根据每个时间步的状态,然后获得奖励rt并转移到下一个州st+1.在 RL 的设置中,操作一个t从操作空间中选择一个.然而,本文用作业操作动作空间和机器动作空间构造了FJSP的分层多动作空间,这意味着RL的一般设置不能应用于FJSP。为了求解 FJSP,此 RL 设置涉及作业操作操作空间和机器操作空间。特别是,两个操作空间具有层次结构而不是平行结构。在每个时间步长,RL 代理从其符合条件的操作操作空间中选择一个操作操作,然后从其兼容的计算机操作空间中为所选操作选择计算机操作。兼容的机器操作空间与选定的操作操作相关。图1显示了FJSP的分层结构动作空间的示例。它包含四个以绿色显示的作业操作操作,每个作业操作操作都有一个紫色的兼容计算机操作空间

本文提出了一个端到端的深度强化框架,用于自动学习使用图神经网络解决灵活的作业车间调度问题 (FJSP) 的策略。在 FJSP 环境中,强化代理需要在每个时间步中安排属于一组兼容计算机中合格计算机上作业的操作。这意味着代理需要同时控制多个操作。这种多作用问题被表述为多重马尔可夫决策过程(MMDP)。为了求解MMDP,我们提出了一种多指针图网络(MPGN)架构和一种称为多近端策略优化(multi-PPO)的训练算法,以学习两个子策略,包括作业操作操作策略和机器操作策略,用于将作业操作分配给机器。MPGN 体系结构由两个编码器-解码器组件组成,它们分别定义作业操作操作策略和机器操作策略,用于预测不同操作和机器上的概率分布。我们引入了FJSP的析取图表示,并使用图神经网络嵌入调度过程中遇到的局部状态。计算实验结果表明,该智能体能够学习高质量的调度策略,在求解质量和启发式算法的运行时间上优于手工启发式调度规则。此外,在随机实例和基准实例上获得的结果表明,学习的策略在实际实例和具有多达 2000 个操作的更大规模实例上具有良好的泛化性能。

📚2 运行结果

 

 

🎉3 文献来源

部分理论来源于网络,如有侵权请联系删除。

🌈4 Python代码实现

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过location实现几秒后页面跳转

location对象属性 location对象属性 返回值location.href获取或者设置整个URLlocation.host返回主机(域名)www.baidu.comlocation.port 返回端口号,如果未写返回空字符串location.pathname返回路径location.search返回参数location.hash返回…

Apache网页与安全优化

一、Apache网页优化 在企业中,部署Apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配置已经不适用当今互联网时代。为了适应企业需求,就需要考虑如何提升Apache…

遗传算法(Genetic Algorithm)

本文为阅读《遗传算法原理及应用》的笔记和心得 ISBN:7-118-02062-1 遗传算法简介 遗传算法是模拟生物在自然环境中的遗传和进化过程中而形成的一种自适应全局优化概率搜索算法 总的来说,求最优解解或近似最优解的方法主要有三种:枚举法、启…

数据库系统的结构

数据库模式基本概念 1.型与值 型:对某一类数据的结构和属性的说明。值:型的具体赋值。 2.模式和实例 模式: 数据库中全体数据的逻辑结构和特征的描述。简单来说就是数据的定义和描述。模式是元数据,数据是变化的,模…

Linux:/dev/tty、/dev/tty0 和 /dev/console 之间的区别

在Linux操作系统中,/dev/tty、/dev/tty0和/dev/console是三个特殊的设备文件,它们在终端控制和输入/输出过程中扮演着重要的角色。尽管它们看起来很相似,但实际上它们之间存在一些重要的区别。本文将详细介绍这三个设备文件之间的区别以及它们…

【C++系列P3】‘类与对象‘-三部曲——[基础知识](1/3)

前言 大家好吖,欢迎来到 YY 滴 C系列 ,热烈欢迎! 【 类与对象-三部曲】的大纲主要内容如下: 如标题所示,本章是【 类与对象-三部曲】三章中的第一章节——基础知识章节,主要内容如下: 目录 一.…

如何用Python写个网页爬取程序

如何用Python写个网页爬取程序 准备开发工具安装PythonPython安装pipPip安装爬取插件准备好网页地址代码实现 准备开发工具 额,作者用的是vscode。具体怎么安装自行百度哈,这个都不会建议就不要学爬取了。 不忍心藏着也,给你个方法吧 vsc…

计算机系统漫游

重点理解部分: 系统硬件:对硬件如处理器、存储器、I/O设备有一个基本的认识,理解它们的基本工作原理以及它们是如何协同工作的。Hello,World程序运行的过程:了解一个C程序如何从源代码到最终在计算机上运行的全过程。…

模仿抖音直播商城带货打赏功能做一个app系统

随着人们生活和互联网的高度整合,越来越多的人开始转变自身消费模式,从实体店购物逐渐转向足不出户即可享受购物快感的网上购物。许多企业看到了电子商务背后隐藏的巨大价值,想要寻找合适的开发商建立属于自己的电商直播系统,那么…

2021-06-10 51单片机,键控流水灯——中断方式

缘由https://ask.csdn.net/questions/7444779?spm1005.2025.3001.5141 #include "reg52.h" sbit K1 P1^5; sbit K2 P1^6; sbit K3 P1^7; bit kk0; void zdsz() {EAEX0IT01; } void main() {unsigned char Xd0;unsigned int ys4747,d10;zdsz();while(1){if(!ys)…

CodeForces..学习读书吧.[简单].[条件判断].[找最小值]

题目描述: 题目解读: 给定一组数,分别是 “时间 内容”,内容分为00,01,10,11四种,求能够得到11的最小时间。 解题思路: 看似00,01,10&#xff0…

C语言中的类型转换

C语言中的类型转换 隐式类型转换 整型提升 概念: C语言的整型算术运算总是至少以缺省(默认)整型类型的精度来进行的为了获得这个精度,表达式中字符和短整型操作数在使用之前被转换为普通整型,这种转换成为整型提升 如…

自学大语言模型之BERT

BERT 模型由 Jacob Devlin、Ming-Wei Chang、Kenton Lee 和 Kristina Toutanova在BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding中提出。它是一种双向变换器,使用掩码语言建模目标和对包含多伦多图书语料库和维基百科的大型语…

C语言---初始C语言

1、初始C语言 1、编译器主要有:Clang、GCC、WIN-TC、MSVC、Turbo C等 什么是编译? test.c----------------------------->test.exe 这个过程需要经过编译、链接等过程,而众多编译器实现的功能就是把我们写的test.c进行编译。 2、VS20…

利用栈和队列共同解决迷宫问题

文章目录 什么是迷宫问题?如何解决迷宫问题?DFS(深度优先搜索)BFS(广度优先搜索) 总结 什么是迷宫问题? 迷宫问题是一道经典的算法问题,旨在寻找一条从起点到终点的最短路径。通常迷…

桶排序 — 计数排序和基数排序

计数排序 int类型数组,其中存的是员工的年龄。比如说16 - 150。对于这样的数据来讲,数据状况是受限的。此时如果将数组从小到大进行排序,该如果实现? 这个实现很简单,实现一个统计数组范围从 0 ~ 150,新数组…

Flume的安装和使用

安装Flume 1.1访问Flume的官网(http://flume.apache.org/download.html),下载Flume安装apache-flume-1.9.0-bin.tar.gz。或者下载我的百度网盘资源。把安装文件解压缩到windows操作“D:\”目录下,然后执行如下命令测试是否安装成…

【JavaSE】Java基础语法(十六):抽象类

文章目录 1. 抽象类的概述2. 抽象类的特点3. 抽象类的实用价值4. 抽象类的案例 1. 抽象类的概述 当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了! 在Java中,一个没有方法体的方法应该定义…

在Linux设备上让程序在任意目录都能执行

目录 0. 前言1. 编写代码2. 创建软链接3. 其他Linux文章 0. 前言 在Ubuntu上使用espidf中往往需要先设置环境变量,再执行export.sh,对环境装的乱七八糟的我造成了很大的不便我希望无论我在哪个目录,都能快速执行某个命令 我先是使用了编写b…

微信小程序开发实战 ⑨(TabBar)

作者 : SYFStrive 博客首页 : HomePage 📜: 微信小程序 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f4…