Q-learning算法辅助求解柔性作业车间调度问题--附带源码测试集模型

摘要

论文:A Learning-based Memetic Algorithm for Energy-Efficient Flexible Job Shop Scheduling With Type-2 Fuzzy Processing Time
发表期刊:IEEE Transactions on Evolutionary Computation (中科院T1,IF=16.554)
论文链接:论文连接
论文测试集和代码链接:论文代码链接
MILP模型也可以在代码链接下载。
如有疑问请联系邮箱:[email protected]

论文简介

本文,采用Q学习算法驱动的模因算法求解第二类型模糊加工时间的柔性作业车间调度问题。采用了混合启发式初始化方法,MOEA/D多目标优化框架,最小化最大完工时间和总能耗。提出了四种知识驱动的邻域结构,并采用Q学习算法根据收敛性和分布性指标,自适应选择MOEAD的参数T,最后提出了贪心节能策略。

下面介绍一下Q学习算法的设计精髓。本人最近正在学习DQN,Double DQN和Dueling DQN, GAN,seqGAN等技术。

Q-learning 算法

Q学习算法

Q学习算法:
在这里插入图片描述
假设有N个状态和M个动作,设定Q表维度为Q(M,N)
在这里插入图片描述
Step1:获取智能体当前状态 S t S_t St
Step2:根据 ϵ \epsilon ϵ-greedy算法,生成随机数r, 如果小于 ϵ \epsilon ϵ则随机选取一个动作 A t A_t At, 否则选取Q表中当前状态下 Q ( S t , : ) Q(S_t,:) Q(St,:)这一行Q值最大 m a x Q ( S t , : ) maxQ(S_t,:) maxQ(St,:)的动作 A t ′ A_t' At
Step3:执行完当前动作 A t A_t At后,在环境中获取当前状态 S t + 1 S_{t+1} St+1,并根据动作 A t A_t At产生的效果决定是否给予奖励 R t R_t Rt。那么获取完一个元组 { S t , A t , R t , S t + 1 } \{S_t,A_t,R_t,S_{t+1}\} { St,At,Rt,St+1}中的所有元素。就根据以下公式来更新 Q ( S t , A t ) Q(S_t,A_t) Q(St,At)的值。
Q ( S t , A t ) ← Q ( S t , A t ) + α ∗ ( R t + γ ∗ m a x Q ( S t + 1 , : ) − Q ( S t , A t ) ) Q(S_t,A_t)\leftarrow Q(S_t,A_t)+\alpha*(R_t+\gamma*maxQ(S_{t+1},:)-Q(S_t,A_t)) Q(St,At)Q(St,At)+α(Rt+γmaxQ(St+1,:)Q(St,At))

α \alpha α是学习速率一般是0.01-0.02
γ \gamma γ是折扣因子,来衡量未来因素对当前状态的影响一般是0.8-0.9
Step4:循环到step1,直到训练结束

如何设计Q学习算法

Q-learning算法如何设计描述如下:

  1. 设定好全部状态集 { S 1 , S 2 , . . . S t , S t + 1 , . . . , S n } \{S_1,S_2,...S_t,S_{t+1},...,S_n\} { S1,S2,...St,St+1,...,Sn},使得状态转移的时候能够形成闭环,状态集要描述你所有可能出现的状态。
  2. 设定动作集 { A 1 , A 2 , . . . A m } \{A_1,A_2,...A_m\} { A1,A2,...Am}即智能体需要采取的动作
  3. 设定奖励R,可以有负奖励,也可以没有,一般R=10或者根据目标自适应设定。
  4. 状态对描述越精细,轨迹越长,那么性能就越好。

我是如何设计的

首先,MOEA/D的参数T很敏感,所以需要自适应选取。如何自适应,那么我希望,种群能够自动的根据自己的状态调整T以增加自己的分布性。那么结果一般由算法求得的PF衡量,那么我就直接将算法求得的PF作为一个智能体。根据PF的收敛性变化,分布性变化。设定四个状态。分别是:

状态1.收敛性和分布性都增加
状态2:收敛性增加,分布性减少
状态3:收敛性减少,分布性增加
状态4:收敛性和分布性同时减少

那么如何衡量PF的收敛性和分布性,我用了多目标优化的GD指标和Spread指标。但GD指标需要设定参考点。而实际组合优化问题的前沿面不可知,但点的值都很大,所以我在坐标系中0-1均匀的取一系列点。形状像一个斜率为-1的直线。这样便可以衡量GD和Spread的变化。

动作就是MOEA/D的参数T,设置了4个值分别是5,10,15,20

奖励设置为R=10,如果动作使得Spread增加则给予奖励。

第二类型模糊数的FJSP问题

和FJSP一样,也需要确定工序顺序和机器选择。不同的是使用第二类型模糊系统来对现实排产车间中,加工时间不确定性的约束进行预测。文献证明第二类型模糊系统比三角模糊数更好。
在这里插入图片描述
同样的模糊集合也有加减操作也有比较大小的操作。
在这里插入图片描述
这样就构建了一个fuzzy FJSP模型。目的是对加工时间不确定性进行预测,进而预测整个排产车间的最早完成时间,最晚完成时间。
甘特图就变成了这样
在这里插入图片描述

提出的算法

框架

基于学习和参考向量的模因算法LRVMA
在这里插入图片描述
第一步:混合启发式规则初始化,有五个启发式规则
第二步:计算当前PF前沿的收敛性CV和分布性DV。初始化变化量都是0
第三步:根据 Δ C V \Delta CV ΔCV Δ D V \Delta DV ΔDV获取当前PF的状态 S t S_t St,并选取一个动作 A t A_t At也就是MOEA/D的参数T
第四步:更新MOEA/D框架下的参考点
第五步:采用POX进行工序交叉,UX做机器交叉。突变用swap 2op和随机替换机器。获得两个子代
第六步:子代进行局部搜索提升收敛性,并进行贪心节能策略降低能耗
第七步:用子代去更新邻域。
第八步:获取新种群的PF,计算CV和DV,并计算 Δ C V \Delta CV ΔCV Δ D V \Delta DV ΔDV获取当前PF的状态 S t + 1 S_{t+1} St+1
第九步:用公式更新Q表

CV就是GD指标,DV是spead指标

初始化方法

将种群分为5份,ps=100
第一份大小ps/5,随机产生工序顺序,选择当前工序最小加工时间的机器。
第二份大小ps/5,随机产生工序顺序,选择当前工厂中,当前工序进入调度场景中,目前负载最小的机器。
第三份大小ps/5,随机产生工序顺序,选择当前工厂中,当前工序进入调度场景中,目前完工最小的机器。
第四份大小ps/5,首先将工序按照可选机器数量从小 到大排序生成工序顺序,选择当前工厂中,当前工序进入调度场景中,目前负载最小的机器。
第五份大小ps/5,用随机初始化补充完全。直到种群个数为100

局部搜索策略

1.将最后一个完成的工序,换一个加工时间最小的机器
2.将机器负载最大的机器,选一个该机器上工序,换一个机器
3.随机交换两个工序的位置
4.随机选两个工序,后一个插到前一个前。

贪心节能策略

取一个解,根据工序顺序,重构当前每个工序的机器选择。根据两条规则。
1.当前工序到来,尝试插入每个机器末尾,如果没有空闲时间,则当前工序会选择自己加工时间最小的机器
2.如果有空闲时间,则计算在每个机器末尾的能耗,能耗和加工时间还有空闲时间有关。选择能耗最小的机器。
重复以上过程,直到所有工序重构 完成。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36820823/article/details/124840154