域名申请哪个网站好,宾县建设局网站,网页制作工具中可进行网页内容定位,招标代理公司前言
SARAS#xff0c;假设环境状态和动作状态都是离散的。利用动作价值矩阵来进行行为的预测。其主要就是利用时序差分的思想#xff0c;对动作价值矩阵进行更新。
代码实现
import gymnasium as gym
import numpy as npclass sarsa():def __init__(self, states_n, acti…前言
SARAS假设环境状态和动作状态都是离散的。利用动作价值矩阵来进行行为的预测。其主要就是利用时序差分的思想对动作价值矩阵进行更新。
代码实现
import gymnasium as gym
import numpy as npclass sarsa():def __init__(self, states_n, action_n, greedy_e0.1):self.Q np.zeros((states_n, action_n)) #动作价值矩阵self.greedy_e greedy_e #随机探索的概率self.states_n states_n #环境状态个数self.action_n action_n #行动状态个数self.gamma0.9 #价值衰减值self.lr0.1 #学习率def predict(self, states):action_listself.Q[states]#先拿出对应的行#再取出对应价值最大的行为如果有重复则在重复项中随机选取返回索引actionnp.random.choice(np.flatnonzero(action_listaction_list.max()))return actiondef act(self, states):由对应环境产生对应的行动param states: 当前环境return: 行动动作if np.random.uniform() self.greedy_e:#是否采取随即探索action np.random.choice(np.arange(self.action_n))#随机探索else:action self.predict(states) # 根据行动价值矩阵进行预测return actiondef learning(self,state,action,reward,next_state,next_action,does):学习更新参数param state: 环境状态param action: 采取的行动param reward: 回报param next_state: 采取行动后的下一个环境状态param next_action: 下一个环境状态对应的行为param does: 游戏是否结束return:current_qself.Q[state,action] #取出对应的行动价值if does: #查看是否已经完成游戏完成则直接将当前回报作为下一个行动价值next_qrewardelse:# 计算当前回报和下一个环境状态和下一个行动对应的价值加和next_qrewardself.gamma*self.Q[next_state,next_action]self.Q[state,action]self.lr*(next_q-current_q) #时序差分更新行动价值矩阵def train():env gym.make(FrozenLake-v1, render_modehuman)#初始化游戏环境obs,infoenv.reset()#重置位置agentsarsa(env.observation_space.n,env.action_space.n)#初始化模型action agent.act(obs)#预测行为num0while True:num1# 由行为产生回报和下一个环境状态next_obs, reward, done, truncated, info env.step(action)#预测下一个动作next_actionagent.act(obs)# 更新参数agent.learning(obs,action,reward,next_obs,next_action,done)obsnext_obsactionnext_action# 判断游戏是否结束或者中断是则重置游戏if done or truncated:obs, info env.reset()if num % 100 0 :env.close()if __name__ __main__:train()