强化学习-双臂老虎机

        本篇文章模拟AI玩两个老虎机,AI需要判断出哪个老虎机收益更大,然后根据反馈调整对于不同老虎机的价值判断,如果把这个看作一个简单的强化学习的话,那么AI就是agent,两个老虎机就是environment,AI首先会对两台老虎机有一个预测值Q,预测哪一个的价值高,然后AI通过策略函数判断应该选择哪个老虎机,进行Action后根据Reward更新每个老虎机的价值Value,然后再进行下一次判断,直到最后能够稳定的选择出获得奖励较高的那一台老虎机。

        我们使用两个服从正态分布的随机值来模拟老虎机,使AI最后选择出那个均值较高的老虎机,选用的策略函数就是选择价值最大的那个老虎机,更新函数就是将获得的奖励和预测的奖励相加求均值。最后,在前50000次更新,会有0.1的概率选择预测价值较小的那个老虎机,目的是为了使预测价值更好的收敛。

代码如下:

import random
import numpy as np


def random_unit(p: float):
    if p == 0:
        return False
    if p == 1:
        return True

    R = random.random()
    if R < p:
        return True
    else:
        return False

tiger1 = 500
tiger2 = 600


num_epoch = 100000

Q1,Q2 = 1000,1000
num1 = 0
num2 = 0
count1 = 0
count2 = 0
select = None
for i in range(num_epoch):
    if random_unit(0.2):
        Q = min(Q1,Q2)
    else:
        Q = max(Q1,Q2)
    if Q==Q1:
        select = 'tiger1'
        q = np.random.normal(loc=tiger1,scale=100)
        count1 += 1
        num1 += q
        Q1 = num1/count1
    elif Q==Q2:
        select = 'tiger2'
        q = np.random.normal(loc=tiger2, scale=100)
        count2 += 1
        num2 += q
        Q2 = num2/count2
    print('select:',select,'Q1:',Q1,'Q2:',Q2)

可以看到,在训练100000次后,AI可以准确的选择那个Q值较高的那个老虎机

[ 99993 ] select: tiger2 Q1: 500.2190042717334 Q2: 600.4460736649329
[ 99994 ] select: tiger2 Q1: 500.2190042717334 Q2: 600.4460736649329
[ 99995 ] select: tiger2 Q1: 500.2190042717334 Q2: 600.4460736649329
[ 99996 ] select: tiger2 Q1: 500.2190042717334 Q2: 600.4460736649329
[ 99997 ] select: tiger2 Q1: 500.2190042717334 Q2: 600.4460736649329
[ 99998 ] select: tiger2 Q1: 500.2190042717334 Q2: 600.4460736649329
[ 99999 ] select: tiger2 Q1: 500.2190042717334 Q2: 600.4460736649329
[ 100000 ] select: tiger2 Q1: 500.2190042717334 Q2: 600.4460736649329

你可能感兴趣的:(强化学习,人工智能)