q-learning 代码 实现CliffWalking-v0

一些解释

  1. EPISILON 也就是控制探索还是开发的这个参数我是使用每个episode之后就乘以一个常数的方法来进行衰减,就是蛮无脑的。

代码

import gym
import numpy as np
import random
import os
env = gym.make("CliffWalking-v0")
N_STATE = env.observation_space.n
N_ACTION = env.action_space.n
q_table = np.zeros((N_STATE,N_ACTION))
LR = 0.9
GAMMA = 0.9
#episilon = 0.9
#episilon_end = 0.5
tmp= env.reset()
print(tmp)
def choose_action(state,episilon):
    #每次选择的话是根据EPISILON来进行选择动作
    if random.random() > episilon :
        a = np.argmax(q_table[state,:])
        #print(a)
    else:
        a = np.random.randint(0,N_ACTION)
    return a

def update(state,action,state_,reward):
    max_q = max(q_table[state_ , :])
    q_table[state][action] = q_table[state][action] + LR * (reward + GAMMA * max_q - q_table[state][action])  
def main():
    episilon = 0.9
    for episode in range(500):
        state = env.reset()
        episode_reward = 0
        while True:
            action = choose_action(state,episilon)
            state_,reward,done,info = env.step(action)
            env.render()
            update(state,action,state_,reward)
            state = state_
            episode_reward += reward
            if done : 
                print("the {}th episode 's total reward is ".format(episode,episode_reward))
                os.system("pause")
                episilon = 0.95 * episilon
                break 

if __name__ == "__main__" : 
	    main()
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值