python随机种子seed的作用(强化学习常用到)
先上代码
import math
import gym
from gym import spaces, logger
from gym.utils import seeding
import numpy as np
class CartPoleEnv(gym.Env):
def __init__(self):
super().__init__()
self.seed()
def seed(self, seed=None): #seed设置为任意整数后,随机值固定,如果设置随机值固定
self.np_random, seed = seeding.np_random(seed)
return [seed]
def reset(self):
self.state = self.np_random.uniform(low=-0.05, high=0.05, size=(4,))
self.steps_beyond_done = None
return np.array(self.state)
env=CartPoleEnv()
print(env.reset())
输出结果:【每次都会不一样】
[ 0.0322836 -0.04638474 0.01553654 0.04217918]
[-0.04618838 0.04793247 0.01464823 -0.02379606]
#seed设置为任意整数后,随机值固定,如果设置随机值固定
如果随便设置seed=常数
seed=1 结果都是一样
[ 0.03073904 0.00145001 -0.03088818 -0.03131252]
[ 0.03073904 0.00145001 -0.03088818 -0.03131252]
[ 0.03073904 0.00145001 -0.03088818 -0.03131252]
作用也就显而易见了:
使每次初始化结果一致,比如有些时候环境是随机的,强化学习得到的每次仿真都会有差异,设置了seed值就可以记录某次环境的参数,确保跑出程序在下次可以更好复现。
当然深度强化学习里面随机变量随机因素太多不一定能完美一致复现,不过结果也能差强人意的。