Q学习(Q-learning)入门小例子及python实现

一、从马尔科夫过程到Q学习

# 有一定基础的读者可以直接看第二部分

Q学习(Q-learning)算法是一种与模型无关的强化学习算法,以马尔科夫决策过程(Markov Decision Processes, MDPs)为理论基础。

标准的马尔科夫决策过程可以用一个五元组<S,A,P,R,γ> 表示,其中:

  • S是一个离散有界的状态空间;
  • A是一个离散的动作空间; 
  • P为状态转移概率函数,表示agent在状态s下选取动作a后转移到a'的概率;
  • R为回报函数,用于计算agent由当前状态 选取动作 后转移到下一状态 得到的立即回报值,由当前状态和选取的动作决定,体现了马尔科夫性的特点;
  • γ是折扣因子,用于确定延迟回报与立即回报的相对比例, 越大表明延迟回报的重要程度越高。

马尔科夫决策问题的目标是找到一个策略 ,使其回报函数 的长期累积值的数学期望

 

最大。其中,策略π只和状态相关,与时间无关(静态的)。  是t时刻的环境状态, t时刻选择的动作。

根据Bellman最优准则,得到最优策略 对应的最优指标为:

其中, R(s,a)为r(st,at)的数学期望, 为在状态s下选取动作a后转移到下一状态状态s'的概率。由于某些环境中状态之间的转移概率P不容易获得,直接学习 是很困难的,而Q学习不需要获取转移概率P,因而可用来解决此类具有马尔科夫性的问题。

Q学习是一种与环境无关的算法,是一种基于数值迭代的动态规划方法。定义一个Q函数作为评估函数:

Q-learning是一种基于值的强化学习算法,它可以学习到一个最优的策略,使得在某个环境下,智能体可以最大化累计的奖励。下面是一个简单的Python实现示例: ```python import numpy as np # 定义环境 env = np.array([[0, 0, 0, 0, 0], [0, 0, -1, 0, 0], [0, 0, 0, -1, 0], [0, -1, 0, 1, 0], [0, 0, 0, 0, 0]]) # 定义参数 gamma = 0.8 # 折扣因子 alpha = 0.5 # 学习率 epsilon = 0.1 # 探索率 num_episodes = 1000 # 训练轮数 # 初始化Q表 Q = np.zeros((env.shape[0], env.shape[1], 4)) # 定义动作 actions = ['up', 'down', 'left', 'right'] # Q-learning算法主循环 for episode in range(num_episodes): # 初始化状态 state = (0, 0) # 循环直到到达目标状态 while True: # 选择动作 if np.random.uniform(0, 1) < epsilon: action = np.random.choice(actions) else: action = actions[np.argmax(Q[state[0], state[1]])] # 执行动作 if action == 'up': next_state = (max(state[0]-1, 0), state[1]) elif action == 'down': next_state = (min(state[0]+1, env.shape[0]-1), state[1]) elif action == 'left': next_state = (state[0], max(state[1]-1, 0)) elif action == 'right': next_state = (state[0], min(state[1]+1, env.shape[1]-1)) # 计算奖励 reward = env[next_state[0], next_state[1]] # 更新Q表 Q[state[0], state[1], actions.index(action)] += alpha * (reward + gamma * np.max(Q[next_state[0], next_state[1]]) - Q[state[0], state[1], actions.index(action)]) # 更新状态 state = next_state # 判断是否到达目标状态 if env[state[0], state[1]] == 1: break # 输出最优策略 state = (0, 0) while True: action = actions[np.argmax(Q[state[0], state[1]])] print(action) if action == 'up': state = (max(state[0]-1, 0), state[1]) elif action == 'down': state = (min(state[0]+1, env.shape[0]-1), state[1]) elif action == 'left': state = (state[0], max(state[1]-1, 0)) elif action == 'right': state = (state[0], min(state[1]+1, env.shape[1]-1)) if env[state[0], state[1]] == 1: break ``` 在这个例子中,我们使用了一个简单的5x5环境,其中0表示空格,-1表示障碍物,1表示目标状态。我们使用Q表来存储智能体对每个状态和动作的估计值,通过不断与环境交互,智能体可以学习到一个最优的Q表,从而得到最优的策略。 在主循环中,我们按照Q-learning算法的步骤循环执行,直到到达目标状态。在每个时间步,我们首先根据当前状态和Q表选择一个动作,然后执行该动作并观察下一个状态和奖励,最后更新Q表。在每个时间步中,我们使用贪心策略或epsilon-greedy策略来选择动作。 最后,我们使用已经学习到的Q表输出最优的策略。在这个例子中,我们从初始状态开始,按照Q表中估计值最大的动作依次执行,直到到达目标状态。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值