动作设计:
工序层面的规则现在主要考虑的是:加工最少的剩余工件/加工最多的剩余工件,还有那些?
机器层面的规则:均匀规则,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)
小结
收敛趋势不是很好其实,要看到逐渐变细,范围变窄才叫收敛