【强化学习】Q学习算法_表格形式_python实现

强化学习

1 Q表

1.1 什么是Q表?Q表有啥用?

通过之前对DNQ的学习,了解到DNQ是通过一个神经网络去进行决策,而在神经网络没有运用在强化学习前,是通过创建一个表格来进行决策

首先是创建一个全0的表格,然后在每个事件中利用这个表格及贪婪技巧进行学习,使得表格最后找(收敛)到最好的决策策略【1】。

1.2 Q表的具体形态

2 本文的强化学习目标

本文的强化学习目标问题来源是【2】.
问题就是一个宝藏在右边走6步的地方,一个人去寻找宝藏,但他不知道在哪里,唯一的只知道往右走会有奖励。

3 伪代码及Python代码

3.1 伪代码
在这里插入图片描述)

3.2 python代码

import pandas as pd
import numpy as np
import time

MAX_EPISODE = 10 # ? 多少个事件
actions = ["left", "right"] # 可选的行为
states = 6 # 状态总数
endflag = "end"
GAMMA = 0.9
ALPHA = 0.1

def init_q_table(states, actions):
    q_table = pd.DataFrame(np.zeros((states, len(actions))), columns=actions)
    return q_table


def choose_action_fun(state, q_table):
    optional_actions = q_table.iloc[state, :]
    random = np.random.uniform()
    if (random > 0.9) or ((optional_actions == 0).all()):
        choose_action = np.random.choice(actions) # 随机选择一个动作
    else:
        choose_action = optional_actions.idxmax()
    return choose_action


def get_env_feedback(now_state, choose_action, ):
    if choose_action == "right":
        if(now_state == states - 2):
            new_state, reward = endflag, 1
        else:
            new_state, reward = now_state + 1, 0
    else:
        new_state, reward = max(0, now_state - 1), 0
    return new_state, reward


def update_env(state, ):
    env_list = ['-'] * (states - 1) + ['T']
    env_list[state] = '0'
    interaction = ''.join(env_list)
    print(interaction)
    time.sleep(0.3)


if __name__ == '__main__':  # with the pseudocode
    q_table = init_q_table(states, actions, )
    for episode in range(MAX_EPISODE):
        step_count = 0 # 计数器
        S = 0 # 状态
        is_end = False
        update_env(S, )
        while(is_end == False):
            A = choose_action_fun(S, q_table) # greedy algorithm choose action
            S_, R = get_env_feedback(S, A) # return new state and reward
            q_predict = q_table.loc[S, A]

            if S_ != "end":
                q_target = R + GAMMA * q_table.iloc[S_, :].max()
            else:
                q_target = R
                is_end = True
            q_table.loc[S, A] += ALPHA * (q_target - q_predict)
            S = S_
            if S != "end":
                update_env(S, )
            step_count += 1
        print('Episode %s: total_step = %s' % (episode + 1, step_count))
        time.sleep(2)
    print(q_table)

4 参考文献来源

【1】王树森-强化学习
【2】莫烦-强化学习

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: MATLAB Q学习代码可以用来模拟强化学习中的Q学习算法,这是一种基于价值函数来描述动作效果的学习方法。这种算法的核心思想是通过学习最优策略,来指导智能体在特定环境下做出最优决策。MATLAB Q学习代码主要包含以下几个步骤: 1. 初始化Q表:该步骤涉及到初始化状态空间和动作空间,在状态空间内选择了目标位置和当前位置,动作空间内设定了上下左右四个方向。 2. 选择动作:在每一步中,智能体需要选择一个动作,这个动作基于一个随机数和Q表内的数据进行选择。 3. 模拟环境:在执行动作后,模拟环境更新状态并计算奖励。因为我们的目标是在特定环境下求最优策略,所以需要对环境进行建模和控制。 4. 更新Q值:利用更新公式,可以对Q值进行更新。其中,Q值是根据奖励和上一个状态的Q值来进行更新的。 5. 重复执行:重复以上步骤,直到满足设定的条件,如达到训练轮数或某个状态达到了期望值等。 MATLAB Q学习代码的主要作用是训练智能体,让它不断地进行尝试和重复反馈,从而逐渐学习出最优策略。这一学习过程可以应用到很多领域,如机器人控制、智能游戏、自然语言处理等。最后,需要注意的是,代码的具体实现可能会有很大差异,因此需要根据具体的场景和应用进行调整和修改。 ### 回答2: MATLAB Q学习代码是一种可以在MATLAB环境中使用的强化学习算法。该代码可以帮助用户使用Q学习算法来解决复杂的决策问题。该代码基于Q学习算法,其中包括了许多强化学习的基本概念,如状态、动作、奖励和Q值函数等。 使用该代码,用户可以基于环境中提供的奖励信号来学习最优的决策策略。算法通过遍历状态空间,使用贪婪策略和探索策略来在给定的状态下选择最佳的动作。用户需要根据应用场景进行配置,以便进行更精确的控制和优化。代码可以进行自学习,并且可以自适应的调节参数。 在使用MATLAB Q学习代码时,用户需要注意一些重要的问题,比如如何进行初始参数的设置,如何处理不同类型的状态和动作空间等。同时,用户还需要确定合适的探索策略和时间衰减因子来平衡探索和利用的权衡问题。 总的来说,MATLAB Q学习代码是一种功能强大的算法,可以帮助用户解决各种复杂的决策问题。用户可以通过自定义参数和策略来控制算法的行为,以实现最优化的结果。该代码的使用具有一定的难度,但是一旦掌握了基本原理,它将成为您的强力助手。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值