强化学习FJSP静态关于奖励函数的尝试

本文探讨了在工序和机器调度中如何设计有效的动作规则,如加工最少/最多的剩余工件和均匀规则、SPT、LPT等。同时,通过分析不同奖励函数对收敛性和寻优能力的影响,提出了一种结合单步奖励和回合奖励的策略,并针对奖励函数进行了调整,以更好地反映makespan的趋势。尽管奖励函数已收敛,但发现它未能确保makespan的稳定性,因此提出了新的奖励函数形式以改善收敛趋势。
摘要由CSDN通过智能技术生成

动作设计:

在这里插入图片描述

工序层面的规则现在主要考虑的是:加工最少的剩余工件/加工最多的剩余工件,还有那些?
机器层面的规则:均匀规则,SPT, LPT,还有那些?
奖励

使用奖励函数为:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

减少动作空间的结果:

在这里插入图片描述

说明动作空间需要取一个适当的值,太大不能收敛,太小不能组合到最优的值(影响其寻优能力)

奖励函数为:math.exp(states_next[0] - U_ave)

MK08

在这里插入图片描述
在这里插入图片描述

单步奖励与回合奖励相结合的方法进行:

def reward3(self, U_t, U_t_1, done,  makspan_t, eposide):
1.	        global r
2.	        self.makesban_t1 = makspan_t  # 这里只是每次进行保存当前的makespan
3.	        if done == True:
4.	            if eposide == 0:
5.	                r = -1
6.	                self.makesban_t1 = self.makspan_t_1
7.	            if eposide > 0:
8.	                if self.makesban_t1 > self.makspan_t_1:  # 如果当前的完工时间没有上一步的完工时间小, 则给一个惩罚,
9.	                    # 判断基准为上一个阶段的完工时间,奖励值初始状态设置为一个较大的值
10.	                    r = -2
11.	                    self.makesban_t1 = self.makspan_t_1
12.	                elif self.makesban_t1 == self.makspan_t_1:
13.	                    r = 1
14.	                else:
15.	                    r = 2  # 如果当前完工时间比上一个回合的完工时间小,则给一个奖励值,这时的判断基准为当前状态的奖励值
16.	        else:
17.	            r = math.exp((U_t_1 - U_t))
18.	 return r

在这里插入图片描述

虽然奖励函数已经收敛,但是makespan不能稳定,说明奖励函数不能完全映射出makespan的趋势,所以会出现这种情况。

奖励函数变为:r = 1.1**(states_next[0] - U_ave)显然,可以减缓收敛趋势

在这里插入图片描述

奖励函数为:r = 1.1**(U_ave)

在这里插入图片描述
在这里插入图片描述

小结

收敛趋势不是很好其实,要看到逐渐变细,范围变窄才叫收敛

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

self.键盘上的钢琴师.LX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值