Q-表格学习

参考博客

import numpy as np
import random
 
# 初始化矩阵
Q = np.zeros((6, 6))
Q = np.matrix(Q)#评估函数Q(s,a)的函数值是从状态s开始选择第一个动作a执行后获得的最大累积回报的折算值
 
# 回报矩阵R
R = np.matrix([[-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]])
 #,把状态图和即时奖励值放到下面的奖励值表“回报矩阵R"中:(-1表示不可选择的动作,两个状态间没有连接),由当前状态和选取的回报函数决定,理解是不考虑就近选下一个哪一个状态
# 设立学习参数
γ = 0.8
 
# 训练
for i in range(2000):
    # 对每一个训练,随机选择一种状态
    state = random.randint(0, 5)
    while True:
        # 选择当前状态下的所有可能动作
        r_pos_action = []
        for action in range(6):
            if R[state, action] >= 0:
                r_pos_action.append(action)
        next_state = r_pos_action[random.randint(0, len(r_pos_action) - 1)]
        Q[state, next_state] = R[state, next_state] + γ *(Q[next_state]).max()  #更新  ;相当于是跳的,不是说每行依次的执行
  #比较神奇,R相当于一个及时回报,首先在R矩阵中找到一些列大于0的动作,随机选取一个作为下一个状态
  #感觉Q矩阵就是一个累计的奖励,他等于在当前转态下执行那个动作到达下一个转态的及时奖励R[state, next_state]再加上折扣因子γ乘以转换到下一个状态后最大的Q值
        state = next_state  
        # 状态4位最优库存状态
        if state==5:     #如果到达了状态5开始了新的一轮循环
            break
print(Q)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值