smart_cab 项目小归纳

归纳一下这个project里遇到的问题:

  1. random.random()

choose action函数里有一个要求:

When not learning, choose a random actionWhen learning, choose a random action with ‘epsilon’ probabilityOtherwise, choose an action with the highest Q-value for the current state

即在学习过程中,choose action以epsilon的概率随机选择一个随机action,以1-epsilon的概率选择相应state下Q-value最高的action;

那么怎样以epsilon的概率随机选择一个随机action呢?给出的方法是:

if random.random() < self.epsilon:   
    action = random.choice(self.valid_actions)

这里要理解为什么 random.random() < self.epsilon 就代表了以epsilon的概率进行选择;简单来说,random.random()返回的随机数是在[0,1)范围内符合均匀分布的,因此返回的值x既是随机数,也是x落在范围[0,x)的概率值,即 x01(10)dx=x

按照概率论中的理论:

1.连续型随机变量X的概率密度函数为

这里写图片描述
所以 f(x) = 1。

2.累积分布函数F(x)=P(x < X),表示x < X的概率,为:

这里写图片描述

所以在(0,1)均匀分布的变量的累计函数为,其中a=0,b=1,可以得到F(X)=X,也就是F(epsilon) = epsilon, 也就是 P(x< epsilon) = epsilon. 也就是 P(random.random() < epsilon) = epsilon

这里写图片描述

还要注意的一点是,这种写法其实是不对的:

import numpy as np

random_action=random.choice(valid_actions)

action = np.random.choice([random_action, best_action],[epsilon, 1-epsilon])

因为在Q学习里,对模拟退火算法的定义是:以小于epsilon的概率随机选择动作,以大于等于1-epsilon的概率选择最优动作。注意是要小于epsilon,而不是等于epsilon,上面的写法实际上是概率等于epsilon,所以是不对的。

你可能感兴趣的:(random,函数,机器学习)