问题描述:
杰克管理一个全国性汽车出租公司的两个地点。每天,都有一些顾客到这两个地点租车。如果有车可租,杰克就将车租出并从公司得到10美元的回扣。如果这个地点没车,杰克就失去了这笔生意。还回的车第二天就可以出租。为了使需要车的地点有车可租,杰克可以在两个地点间移动车辆,移动每辆车的费用是2美元。我们假设每个地点的车的需求量和归还量都是泊松分布变量。假设租车的期望值是3和4,还车的期望值是3和2。
为了简化问题,我们假设每个地点的车不多于20辆(多于的车被还回公司,因此就从此问题中消失了)并且一晚上最多移动5辆车。折扣率为0.9,并描述为一个有限MDP问题,时间步为天,状态是每天结束时两个地点的车辆数,动作是晚上在两个地点间移动的车辆数。
代码过程如下所示:
from matplotlib import pyplot as plt
import numpy as np
from matplotlib import animation
from scipy.stats import poisson # 统计学的包,用于生成泊松分布
plt.rcParams['font.sans-serif'] = ['SimHei'] # 正确显示中文
plt.rcParams['axes.unicode_minus'] = False # 正确显示正负号
#初始化
poisson_cache = dict()
x = np.arange(0, 21)
y = np.arange(0, 21)
x, y = np.meshgrid(x, y)
value = np.zeros((21, 21))
policy = np.zeros(value.shape, dtype=np.int) # 存储策略【0,1,2……20】
fig = plt.figure(figsize=(20, 10))
ax1 = fig.add_subplot(1, 2, 1, projection='3d')
ax2 = fig.add_subplot(1, 2, 2, projection='3d')
def init(): # 画布坐标轴范围初始化
ax1.set_xlim