什么是强化学习:一、环境与第一个笨笨的诞生

2023-05-01  本文已影响0人  圣_狒司机

一、玩多臂老虎机

你面前有四台摇臂老虎机,中奖概率是: [0.3,0.5,0.8,0.2] ,中奖的话收益是1否则是0,如果希望收益最大化,那么就一直玩第三个老虎机。可是真实情况是你不知道这四台老虎机的中奖概率,手中的筹码又很有限,那么就要一台一台的试验它们的中奖概率,然后瞄准中奖概率最高的那台机器使劲摇它。

前一段盲试老虎机中奖概率的过程叫做学习、探索,后一段过程叫做利用,因为你在利用学习成果,这是很容易理解的。利用也叫做贪婪——理性的最大化收益就是贪婪。

如果你手中的筹码只够你玩1000次,这已经很不少了,那么就有这1000个码多少枚用来学习,多少枚用来利用的问题,学习过程可以是每台玩十几次:单台机器中奖率 = \frac{单台机器中奖次数}{单台机器玩的总次数}

做成一个数组,学习结果就是[p_1,p_2,p_3,p_4],
利用过程就是 argmax([p_1,p_2,p_3,p_4]).
argmax是个求最大值位置的函数,argmax([0.3,0.5,0.8,0.2]) = 2,因为数组是从0开始计数的,0.8在第2位置上。

综上所述,都是极其简单的事情,第一个强化学习的笨笨可以把它叫做agent,他就这样开始了摇臂机的学习与利用过程:1000次就每台学习10次,总共40次,取中奖率最大的那台老虎机一直玩。希望他成功!

二、关键代码

老虎机环境:
P = [0.3,0.5,0.8,0.2] 

def step(p):
    return 1 if random.random() < p else 0
笨笨:

学习:

result= [[step(p) for p in P] for _ in range(10)]

返回学习结果:

[[0, 1, 1, 0],
 [1, 0, 1, 1],
 [0, 0, 1, 0],
 [1, 1, 1, 0],
 [1, 1, 1, 0],
 [0, 0, 0, 1],
 [0, 0, 1, 0],
 [0, 0, 1, 0],
 [0, 1, 1, 0],
 [0, 1, 1, 1]]

对每列求和除以10就是

np.array(result).sum(axis=0)/10

返回

array([0.3, 0.4, 0.8, 0.5])

跟环境的p值比较: [0.3,0.5,0.8,0.2] 最大值还是在第2位(从0计数),笨笨成功了!

上一篇 下一篇

猜你喜欢

热点阅读