本篇请结合课本Reinforcement Learning: An Introduction学习

Jack's Car Rental是一个经典的应用马尔可夫决策过程的问题,翻译过来,我们就直接叫它“租车问题”吧。租车问题的描述如下:

Jack’s Car Rental Jack manages two locations for a nationwide car rental company. Each day, some number of customers arrive at each location to rent cars. If Jack has a car available, he rents it out and is credited $10 by the national company. If he is out of cars at that location, then the business is lost.

Cars become available for renting the day after they are returned. To help ensure that cars are available where they are needed, Jack can move them between the two locations overnight, at a cost of $2 per car moved.

We assume that the number of cars requested and returned at each location are Poisson random variables, where λ is the expected number.

Suppose λ is 3 and 4 for rental requests at the first and second locations and 3 and 2 for returns.

To simplify the problem slightly, we assume that there can be no more than 20 cars at each location (any additional cars are returned to the nationwide company, and thus disappear from the problem) and a maximum of five cars can be moved from one location to the other in one night. We take the discount rate to be γ = 0.9 and formulate this as a continuing finite MDP, where the time steps are days, the state is the number of cars at each location at the end of the day, and the actions are the net numbers of cars moved between the two locations overnight.

简单描述一下:

Jack有两个租车点,1号租车点和2号租车点,每个租车点最多可以停放20辆车。Jack每租车去一辆车可以获利10美金,每天租出去的车与收回的车的数量服从泊松分布。每天夜里,Jack可以在两个租车点间进行车辆调配,每晚最多调配5辆车,且每辆车花费2美金。1号租车点租车数量服从$ \lambda = 3 $的泊松分布,回收数量的$ \lambda = 3 $。二号租车点的租车数量和回收数量的$ \lambda $分别为4和2,试问使用什么样的调配策略可以使得盈利最优化(注意:这里的租车行为与回收行为是强制性的,是不可选择的)。

简单分析一下,每个租车点最多20辆车,那么状态数量就是21*21 = 441个。最多调配5辆车,那么动作集合A = {(-5, 5), (-4, 4),...,(0, 0), (1, -1),...,(5, -5)},动作集合A中的元素表示方法为(1号租车点出入车辆,2号租车点出入车辆),正负号分别表示“入”和“出”。


奖励期望的计算

首先来看一下动作奖励期望如何计算, 我们以动作后状态,1号租车点有10辆车为例:

可以肯定的是当前状态S1经过Action选择后的状态是唯一的,也就说对所有的未来可能状态来说$ P(s'|a, s) = 1 $。我们先不考虑由动作影响而造成的负收益(调配车辆的花费),而是着重计算,不论任何一个动作,只要到达状态“1号租车点有10辆车”所获得的收益期望,这样再减去每个动作引起的调配车辆的费用,就是该动作的奖励期望。

考虑状态“1号租车点有10辆车”的未来可能获得收益需要分析在保有10辆车的情况下的租(Rent)与回收(Return)的行为。计算该状态收益的过程实际上是另外一个动作策略符合泊松分布的马尔可夫决策过程。我们将1天内可能发生的Rent与Return行为记录为[#Return #Rent],其中“#Return”表示一天内回收的车辆数,“#Rent”表示租出的的车辆数,设定这两个指标皆不能超过20(理论上来说,进出车辆并不发生在同一时间,这两个指标实际为流量指标,状态每刻不超过20辆即可,但这样有违该题的初衷,且在$ \lambda = 3 $的情况下并没有太大意义,所以直接这样规定了)。假设当天早上,1号租车点里有10辆车,那么在傍晚清点的时候,可能保有的车辆数为0~20辆。如果傍晚关门歇业时还剩0辆车,那么这一天的租收行为$ A_{rt, rn} $可以是:

$$ A_{rt,rn} = \left[\begin{matrix}10 & 0\\ 11 & 1\\12& 2\\...&...\\20 & 10 \end{matrix} \right] $$

可以确定的是,Rent与Return是相互独立的行为或事件且皆服从泊松分布,所以要计算某个行为出现的概率直接将$ P(A_{rt}) $与$ P_(A_{rn}) $相乘就行了,但这里要计算的是条件概率,即为$ P(A_{rt,rn}|S'' = 0) $,所以还需要再与$ P(S'' = 0) $相除,这里的$ P(S'' = 0) $指的是傍晚清点时还剩0辆车的概率。各个租收行为所获得的收益是以租出去的车辆数为准,所以当傍晚还剩0辆车时,这一天的收益期望可以写为:

$$ R(S' = 10|S'' = 0) = 10\left[\begin{matrix} \frac{P(A_{rt} = 10)P(A_{rn} = 0)}{P(S'' = 0)} \\...\\ \frac{P(A_{rt} = 20)P(A_{rn} = 10)}{P(S'' = 0)} \end{matrix} \right]^T \left[\begin{matrix} 10\\11\\...\\20 \end{matrix} \right] $$

其中$ P(S'' = 0) $可以写为:

$$ P(S'' = 0) = \sum P(A_{rt})P(A_{rn}) $$

在计算出矩阵$ R(S' = 10|S'' = {0, 1,...,20}) $后,在进行加权平均,即可得到状态“1号租车点有10辆车”的奖励期望$ R(S' = 10) $

$$ R(S' = 10) = P(S'' = {0, 1,..., 20}) R^T(S' = 10|S'' = 0)$$

两个租车点,所有的状态按上述方法计算后,即可得出两个租车点的奖励矩阵$\begin{matrix} [R_1(S') & R_2(S')] \end{matrix}$。在计算出奖励矩阵后,这个问题就变成了bandit问题的变种,bandit问题是一个动作固定对应一个未来的状态,而这里虽然也是这样,不过所对应的状态却要以当前状态为基础进行计算得出,还是有些不同,所以称为bandit问题的一个变种。


基本算法——Policy-Evaluation & Policy-Improvement

这里所用到的主要解决方法为动态编程(DP)里的Policy-Evaluation和Policy-Improvement,我会先用Policy-Evaluation + Softmax求解一次,再用Policy-Evaluation + Policy-Improvement求解一次。这里先给出Policy-Evaluation + Softmax的算法流程:

  1. 计算奖励矩阵,初始化Q矩阵和V矩阵
  2. 进入迭代循环
  3. 将当前状态转变为1号与2号租车点的保有车辆数[#Car1 #Car2]
  4. 带入动作集合计算找出可能的未来状态S’与可执行的动作PossibleAction
  5. 用式子$ Q(S, \mathrm{Possible\ Action}) = R_1(S') + R_2(S') - 2\mathrm{Cost}(Possible\ Action) + \gamma V(S')$计算Q矩阵
  6. 用式子$ V(S) = \pi(S, A)Q^T(S) $更新V矩阵
  7. Softmax优化$ \pi(S, A) $: $$ \pi(S) = \frac{\exp{Q(S)}}{\sum \exp(Q(S, A))} $$
  8. 计算收敛程度,如果已收敛,退出循环;未收敛,继续迭代循环

Policy-Evaluation + Softmax的特点是将Softmax优化动作选择策略嵌入到迭代过程中去,这样好处是可以迅速的计算出较优的动作选择策略(在V值收敛之前),但不能保证是最优的。这中方法实际上叫Value-Iteration,是一种有策略的自更新policy的算法,大的框架还是policy-evaluation的,这一点并没有太大改变。

Policy-Improvement是将已有的动作选择策略$\pi(S, A)$和V矩阵带入与最优值进行比较,从而将$\pi(S, A)$跟新为最优。下面我们来看Policy-Improvement的算法流程,再将其与Policy-Evaluation结合起来:

  1. 初始化Q矩阵,将计算好的V矩阵与策略$ \pi(S, A) $带入状态循环中(每一个状态计算一遍)
  2. 将当前状态转变为1号与2号租车点的保有车辆数[#Car1 #Car2]
  3. 带入动作集合计算找出可能的未来状态S’与可执行的动作PossibleAction
  4. 用式子$ Q(S, \mathrm{Possible\ Action}) = R_1(S') + R_2(S') - 2\mathrm{Cost}(Possible\ Action) + \gamma V(S')$计算Q矩阵
  5. 用策略$\pi(S, A)$与$ Q_{max} $所在的动作进行比较,若是不符则令一个flag:Policy_Stable = False

Policy-Evaluation + Policy-Improvement算法:

  1. 计算奖励矩阵,初始化Q矩阵与V矩阵
  2. 判断Policy_Stable是否为False,如为True则输出结果$\pi(S,A)$,如为False则进入迭代循环过程。
  3. 令Policy_Stable = True
  4. 执行Policy-Evaluation算法
  5. 执行Policy-Improvement算法,得到Policy_Stable的结果,返回第2步

结果与评价

下面这幅图表示出了Policy-Improvement策略进化的过程,直到第5次迭代,动作策略最终稳定为最优策略。在这幅图中,横轴表示2号租车点的车辆保有量,纵轴表示1号租车点的车辆保有量,图上的颜色由蓝到绿到黄表示了车辆调配的策略,正负号分别表示从1号调出车辆到2号,从2号调出车辆到1号。

从第1次迭代的策略到第5次迭代的策略分别去测试Jack平均每日的实际收益,测试以10000日为基准(我并不是很清楚这里的第三次迭代的结果为何比第四次还要好,但最终的稳定后的策略是最优的):

迭代次数 实际每日收益
0(无策略) $38
1 $42.5
2 $43.7
3 $44.9
4 $44.3
5 $45.2

【RL系列】马尔可夫决策过程——Jack‘s Car Rental的更多相关文章

  1. 【RL系列】马尔可夫决策过程——状态价值评价与动作价值评价

    请先阅读上两篇文章: [RL系列]马尔可夫决策过程中状态价值函数的一般形式 [RL系列]马尔可夫决策过程与动态编程 状态价值函数,顾名思义,就是用于状态价值评价(SVE)的.典型的问题有“格子世界(G ...

  2. 【RL系列】马尔可夫决策过程中状态价值函数的一般形式

    请先阅读上一篇文章:[RL系列]马尔可夫决策过程与动态编程 在上一篇文章里,主要讨论了马尔可夫决策过程模型的来源和基本思想,并以MAB问题为例简单的介绍了动态编程的基本方法.虽然上一篇文章中的马尔可夫 ...

  3. [Reinforcement Learning] 马尔可夫决策过程

    在介绍马尔可夫决策过程之前,我们先介绍下情节性任务和连续性任务以及马尔可夫性. 情节性任务 vs. 连续任务 情节性任务(Episodic Tasks),所有的任务可以被可以分解成一系列情节,可以看作 ...

  4. 增强学习(二)----- 马尔可夫决策过程MDP

    1. 马尔可夫模型的几类子模型 大家应该还记得马尔科夫链(Markov Chain),了解机器学习的也都知道隐马尔可夫模型(Hidden Markov Model,HMM).它们具有的一个共同性质就是 ...

  5. 【cs229-Lecture16】马尔可夫决策过程

    之前讲了监督学习和无监督学习,今天主要讲“强化学习”. 马尔科夫决策过程:Markov Decision Process(MDP) 价值函数:value function 值迭代:value iter ...

  6. 强化学习-MDP(马尔可夫决策过程)算法原理

    1. 前言 前面的强化学习基础知识介绍了强化学习中的一些基本元素和整体概念.今天讲解强化学习里面最最基础的MDP(马尔可夫决策过程). 2. MDP定义 MDP是当前强化学习理论推导的基石,通过这套框 ...

  7. David Silver强化学习Lecture2:马尔可夫决策过程

    课件:Lecture 2: Markov Decision Processes 视频:David Silver深度强化学习第2课 - 简介 (中文字幕) 马尔可夫过程 马尔可夫决策过程简介 马尔可夫决 ...

  8. 马尔可夫决策过程MDP

    1. 马尔可夫模型的几类子模型 马尔科夫链(Markov Chain),了解机器学习的也都知道隐马尔可夫模型(Hidden Markov Model,HMM).它们具有的一个共同性质就是马尔可夫性(无 ...

  9. 转:增强学习(二)----- 马尔可夫决策过程MDP

    1. 马尔可夫模型的几类子模型 大家应该还记得马尔科夫链(Markov Chain),了解机器学习的也都知道隐马尔可夫模型(Hidden Markov Model,HMM).它们具有的一个共同性质就是 ...

随机推荐

  1. Powerdesigner设置表字段注释与name相同

    Powerdesigner设置当表字段注释为空时与name相同 1.在Database-->edit Current DBMS-->script-->objects-->col ...

  2. Linq 和 SQL的左连接、右连接、内链接

    在我们工作中表连接是很常用的,但常用的有这三种连接方式:左连接.右连接.内链接 在本章节中讲的是1.如何在Linq中使用左连接,右连接,内连接. 2.三种连接之间的特点在哪? 3.Linq的三种连接语 ...

  3. OO 第三次博客总结

    调研规格化设计 1950年代,第一次分离,主程序和子程序的分离程序结构模型是树状模型,子程序可先于主程序编写.通过使用库函数来简化编程,实现最初的代码重用.产生基本的软件开发过程:分析—设计—编码—测 ...

  4. django 登录注册注销

    一.设计数据模型 1.数据库模型设计 作为一个用户登录和注册项目,需要保存的都是各种用户的相关信息.很显然,我们至少需要一张用户表User,在用户表里需要保存下面的信息: 用户名 密码 邮箱地址 性别 ...

  5. PHP程序员的技术成长规划 第二阶段:提高阶段

    第二阶段:提高阶段 (中级PHP程序员) 重点:提高针对LNMP的技能,能够更全面的对LNMP有熟练的应用.目标:能够随时随地搭建好LNMP环境,快速完成常规配置:能够追查解决大部分遇到的开发和线上环 ...

  6. BFC与浮动

    一.BFC的含义 BFC(block formatting contexts) 块级元素格式化上下文,它决定了块级元素如何对它的内容进行布局,以及与其它元素的关系和相互作用. 块级元素:父级(是一个块 ...

  7. sqlserver之group by 与over函数

    group by 函数主要用来对数据进行分组,over()函数则是一个“开窗函数”,它更多的是与聚合函数如:sum().max().min().avg().count()等函数以及排名函数如:row_ ...

  8. Java第五次实验报告

    Java第五次实验报告 实验一 实验内容 两人一组结对编程: 参考 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC. ...

  9. # 20155224 实验四 Android程序设计

    20155224 实验四 Android程序设计 任务一 Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for And ...

  10. 20145209 2016-2017-2 《Java程序设计》课程总结

    20145209 2016-2017-2 <Java程序设计>课程总结 每周作业链接汇总 预备作业01 http://www.cnblogs.com/liuyiyang/p/6194319 ...