强化学习调度环境:析取图和离散事件仿真

在这里插入图片描述

获取更多资讯,赶快关注上面的公众号吧!

文章目录

  • 何为析取图和离散事件仿真模型
    • 析取图模型
    • 离散事件仿真模型
  • 强化学习环境
  • 调度环境
    • 基于析取图的调度环境
    • 基于离散事件仿真的调度环境
  • 总结

近日有小伙伴在复现强化学习求解作业车间调度的文章代码问题时遇到一些疑惑,对于如何将车间调度问题转化为强化学习可以求解的序列决策问题文章中描述的不是很具体,导致不是很清楚怎么通过强化学习一步一步的动作选择得到调度解的。今天就通过生动形象的方式给大家讲一下目前常用的调度环境建立方法(析取图和仿真模型)的区别。

何为析取图和离散事件仿真模型

析取图模型

  析取图模型其实之间已经介绍很多了,析取图模型可由三元组G(N,C,E)进行表示:其中N为所有工序节点集合(包括了虚拟的起始节点Start和终止节点End),C为同一零件下由工艺决定的相邻工序之间关系的有向连接弧集合,用实线表示;E表示在可在同一机床上加工的工序间的析取弧集,用虚线表示。

  下图为一个简单的析取图模型,其中圆圈表示工序节点,节点内容表示工序名称,数字代表第几个零件的第几道工序,例如O11表示第1个零件的第1道工序。具有相同颜色的工序节点说明该类工序需要相同的机床。弧上的权重表示工序的加工时间。

强化学习调度环境:析取图和离散事件仿真_第1张图片

  上图所示的析取图为尚未求解时候的状态,在进行求解时,需要确定同一机床上工序的先后顺序,即析取弧的方向,如果形成的图形是一个有向无环图,那么这个有向无环图将是一个具体可行的调度解。

  析取图进行一次实例化后所形成的可行解的有向无环图:

强化学习调度环境:析取图和离散事件仿真_第2张图片

  在得到了可行解的有向无环图之后,需要通过拓扑排序将有向无环图G中的所有顶点排成一个具有明确的先后顺序的线性序列。当然拓扑排序不是唯一的,但是对一个有向无环图的所有拓扑排序对应的最后调度结果将是唯一的。按照下图的方式就可以一道一道工序依次进行安排,如后面动画所展示的那样。

强化学习调度环境:析取图和离散事件仿真_第3张图片

离散事件仿真模型

  从广义上讲,析取图模型本质上也是一种仿真模型,但是这里所说的仿真模型特指狭义的,是按照时钟持续推进的方式,每到一个时刻,都会执行一些该时刻会发生的事件(event),即离散事件动态仿真(Discrete-Event Dynamic Simulation,DEDS),比如常见的仿真软件Plant Simulation、Arena等都是这种逻辑。后面的动画可以更加直观地展示。

强化学习环境

  强化学习的基本要素包括:环境、状态、动作、奖励、策略等,本文将着重介绍一下环境。环境是强化学习代理与之交互的部分,状态、动作、奖励其实都是基于环境的,所以环境建模的正确性决定了问题正确求解的前提。

  在游戏领域,环境就是整个游戏的建立机制,包括里面的场景、游戏规则、得分机制、支持的操作等。

  同理,围棋环境就是对棋子颜色、落子规则、输赢规则的描述。

调度环境

  求解调度问题,也应该相应的建立调度环境,调度环境可以理解为如何得到调度结果的过程,根据调度问题建模方法的不同,目前论文中主要有两种调度环境的建模方法:基于析取图基于离散事件仿真。调度环境的不同,也将决定状态、动作、奖励的设置方式不同。

基于析取图的调度环境

  目前很多论文其实都是采用的这种方法,但是没有具体描述交互过程。我之前的研究也是采用了这种方法(基于深度强化学习的自适应作业车间调度问题研究)。基于析取图得到调度结果的过程大致如下:首先从当前就绪工序集合中选择一道工序安排到机床,该工序的后置工序再加入到就绪工序集合中,从中选择下一个工序,依次进行直到所有的工序已调度完。可以看出,这种解码方式实际上是和强化学习与环境交互的思想是不谋而合的,所以析取图模型天然适合与强化学习进行结合。

  所以在这种情况下,强化学习中的t并不是指真实的时间,而应该是时间步(time step),即强化学习代理每执行一个action,time step就加1,就会安排一道工序,当所有工序安排完,一个epoch就结束,所以一个epoch的step长度就等于总工序数。这种调度环境下,工序在时间轴上的位置并不是依次向后的(见离散事件仿真动画)。
强化学习调度环境:析取图和离散事件仿真_第4张图片

基于离散事件仿真的调度环境

  离散事件仿真里多了一个时钟的概念,就是在该环境下会有一个计时器,用于记录当前时间,一旦到达事件触发时刻(即决策时刻),事件就会发生。对于调度问题,决策时刻就是工件到达的时间和机床完成加工变成空闲的时间。工件到达事件发生,则工件进入机床队列(对于静态问题,默认已经到达在机床队列中等待);机床加工完成事件发生,则从其队列选择下一个工件进行加工。

  t=0时,假设所有机床空闲,则均从各自的队列中选择工件进行加工,加工一旦开始就会产生未来某一时刻的加工完成事件,加入到事件列表中,比如未来最早t=2时有机床完成加工,则时钟跳至t=2,执行对应事件,依次类推,直到调度完所有的工序。

  这种环境下,对于action的定义不是很明确,既可以按照每个事件作为一个动作,也可以按照一个动作执行多个当前时间下所有的事件,比如动画中t=0时刻就安排了3道工序。

  所以,该种环境下,各工序是按照各自的开始时间依次向后安排的。

总结

  本质上,这两种环境搭建方式没有什么优劣,还是要看其他要素的配合定义,也取决于个人习惯。

比较内容 析取图 仿真
视角 工序 时钟
step 分派第几道工序 决策时刻
epoch长度 等于总工序数 小于等于总工序数
动作 对应一道工序 对应一个或多个事件

你可能感兴趣的:(强化学习,车间调度,析取图,车间调度,深度强化学习,调度环境)