什么是强化学习:一、环境与第一个笨笨的诞生
2023-05-01 本文已影响0人
圣_狒司机
一、玩多臂老虎机
你面前有四台摇臂老虎机,中奖概率是: ,中奖的话收益是1否则是0,如果希望收益最大化,那么就一直玩第三个老虎机。可是真实情况是你不知道这四台老虎机的中奖概率,手中的筹码又很有限,那么就要一台一台的试验它们的中奖概率,然后瞄准中奖概率最高的那台机器使劲摇它。
前一段盲试老虎机中奖概率的过程叫做学习、探索,后一段过程叫做利用,因为你在利用学习成果,这是很容易理解的。利用也叫做贪婪——理性的最大化收益就是贪婪。
如果你手中的筹码只够你玩1000次,这已经很不少了,那么就有这1000个码多少枚用来学习,多少枚用来利用的问题,学习过程可以是每台玩十几次:
做成一个数组,学习结果就是,
利用过程就是 .
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计数),笨笨成功了!