Policy Learning
首先 policy 是函数, 是函数就需要有输入和输出, 在 Policy 函数中输入 state 输出执行 action 的概率分布, 相同输入 state 而因为 Policy 输出不一定一直某一个 Action. 之前我们考虑的情况老路和新路是相对独立, 没有关系, 我们没有 action 也就是没有选择, 如果走小路就一定进入高速. 不过我们现在可以从老路切换到高速也是可能. 也就是事件不是相对独立, 在当前 state 做出 action 会影响下一个 state, 反过来下一个 state 还会影响当前的 state. 根据我们的行为策略, 来确定当前状态有多好.
image
最佳的行动策略是什么, 现在我们就进入控制论的领域, 我们现在变成了网格问题, 也就是 Agent 找出口问题, 类似密室逃脱问题. Agent 在 2D 平面密室中有上下左右移动来找到最快逃脱的路径. 通常将问题转换为强化学习问题, 首先确定目标也就是 Agent 需要学到什么, 然后区分客观条件和主观条件, 主观条件也就是我们能够学到东西.
目标: 用最少步数走到目的.
reward reward 是关于 state 函数, reward = R(s).reward 是可以有变化的但是不会依赖于学习者, 不要将 reward 与 Agent 的采用行为相关联. reward 应该是环境个东西而且直观. 这里我们将目标的 reward 定义为 1 其他都定义为 -1
state 每一个格式就是 state,
action 可以上下左右走
已知条件 state action episode
temporal discount
现在我们的 state 值不仅因为 state 位置, 即使我们 state 离出口很近而 Agent 采取 Action 而导致 Agent 没有走向出口. 所以现在 V 不仅因受到 state 影响, 还需要考虑到 policy 的影响. 这里我们先从简单 policy 入手也就是一个采用等概率随机 Action. 我们知道 policy 是 Action 的概率分布. 也就是每一个 state 的概率是等同. 所以我们在 V 暂时无需考虑 action, 所以我们依旧可以用 action 来评估方法来解决问题. 之前公式依旧适用该问题.
gsize = [4,4]
我们对密室进行抽象, 在左上角和右下角设置出口, 在矩阵中用 1 表示密室出口, Agent 每一次可以移动一个格子.
[[1. 0. 0. 0.]
代码没有什么特比的, gsize 就是为了控制 Agent 移动范围. 做个游戏开发对于这个算法应该不会陌生.
- def state_act(state,action,gsize):
- def reward(state, gw):
在 reward 当 Agent 到达出口 state 就会得到 0 reward 其他 state 都是 -1
A = .1
我们这里 gamma 表示未来对当下有多重要, 这里设置 1 表示未来和当下同样重要. 这里使用随机函数表示 policy 随机等概率输出一个 action
- episode = 10 if k %20 == 0:
- [[ 0. -0.1 -0.3 -0.3]
我们看一看强化学习结果, 我们随机找到一个位置 [1,2] 也就是矩阵中的 -12.600012 然后看其上下左右值, 选择最小 -10 向下移动 agent 然后在 [2,2] 位置看其上下左右的值
找出最小值 -8 来到了 [2,3] 然后向下移动一个就到到了出口, 也就是 [1,2][2,2][2,3][3,3]
来源: http://www.jianshu.com/p/f825e3bfa097