你好,我是郭震(zhenguo)
前几天我们学习强化学习策略迭代,今天,强化学习第8篇:强化学习值迭代
值迭代是强化学习另一种求解方法,用于找到马尔可夫决策过程(MDP)中的最优值函数。
值迭代可以总结为如下几点:
可以看到:值迭代是比策略迭代更为简单的一种迭代方法。
值迭代,求迷宫问题,完整代码。
只使用numpy
包
import numpy as np
定义迷宫地图,在迷宫地图中,不同的数字代表不同的含义:
其中,0代表可行走的路径,-1代表障碍物或墙壁,1代表迷宫的终点位置。这些数值用于描述迷宫的不同区域,以帮助算法进行路径搜索和价值计算。如下所示:
# 定义迷宫地图
maze = np.array([
[0, 0, 0, 0],
[0, -1, 0, -1],
[0, 0, 0, 0],
[-1, 0, -1, 1]
])
定义参数
# 定义参数
gamma = 0.9 # 折扣因子
epsilon = 1e-6 # 收敛阈值
初始值函数
# 初始化值函数
V = np.zeros(maze.shape)
进行值迭代
# 进行值迭代
while True:
delta = 0
for i in range(maze.shape[0]):
for j in range(maze.shape[1]):
if maze[i, j] == -1 or maze[i, j] == 1:
continue
# 计算当前状态的最大价值
max_value = float("-inf")
for action in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
ni, nj = i + action[0], j + action[1]
if ni >= 0 and ni < maze.shape[0] and nj >= 0 and nj < maze.shape[1] and maze[ni, nj] != -1:
max_value = max(max_value, gamma * V[ni, nj])
# 更新值函数
new_value = maze[i, j] + max_value
delta = max(delta, abs(new_value - V[i, j]))
V[i, j] = new_value
if delta < epsilon:
break
# 打印最优值函数
print("最优值函数:")
print(V)
这里面的核心代码就是求解贝尔曼方程:
其中,
表示状态
的值函数,即按照某个策略获得的预期回报。
表示选择能够使得值最大化的动作
。
表示对所有可能的下一个状态
和奖励
进行求和。
表示在状态
下执行动作
后转移到状态
且获得奖励
的概率。
是折扣因子,用于平衡当前和未来的奖励。
在上述代码中,首先定义了迷宫地图,并设置了折扣因子和收敛阈值。然后,通过值迭代算法逐步更新值函数,直到值函数的变化小于收敛阈值为止。最后,打印出最优的值函数。
本文分享自 程序员郭震zhenguo 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!