33、Q_learning

import copy

def update(Q, R, yn):
    Q1 = copy.deepcopy(Q)
    for i in range(len(Q1)):
        for j in range(len(Q1[i])):
            if R[i][j] == -1:
                continue
            Q1[i][j] = R[i][j] + yn*max([Q[j][l] for l in range(len(Q[j]))])
    LL_print(Q1)
    return Q1

def LL_print(LL):
    for i in range(len(LL)):
        print(LL[i])

def dis(Q,Q1):
    dis = 0
    for i in range(len(Q)):
        for j in range(len(Q[i])):
            dis += abs(Q[i][j]-Q1[i][j])
    return dis

def Q_find(yn, R):

    #初始化
    Q = [[0 for j in range(len(R))] for i in range(len(R))]

    #迭代
    flag = 0
    while True:
        Q1 = update(Q, R, yn)
        if dis(Q, Q1) < 1e-5:
            Q = Q1
            break
        Q = Q1
        flag += 1
        print("\n第", flag, "次更新")
    print()
    num_max = max([max(Q[i]) for i in range(len(Q))])
    Q = [[round(Q[i][j]/num_max*100) for j in range(len(Q[i]))] for i in range(len(Q))]

    LL_print(Q)

    return Q

if __name__ == "__main__":

    #奖励衰减程度和奖励矩阵
    yn = 0.8
    R = [[-1,-1,-1,-1,0,-1],
         [-1,-1,-1,0,-1,100],
         [-1,-1,-1,0,-1,-1],
         [-1,0,0,-1,0,-1],
         [0,-1,-1,0,-1,100],
         [-1,0,-1,-1,0,100]]

    Q = Q_find(yn, R)


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值