DRL代码学习打卡-1

DRL代码学习打卡-1

1. 强化学习方法汇总 (Reinforcement Learning)

1.1

  • 不理解环境(model-free)从环境得到反馈来学习,按部就班,一步步学习

    • Q-learning
    • Sarsa
    • policy gradients
  • 理解环境(model-based)可以对环境建模,通过想象预判断,根据想象情况选择最好的

    • Q-learning
    • Sarsa
    • policy gradients

1.2

  • 基于概率(policy-based)

    • 输出各个动作的概率,概率最高未必会选择
    • 可以对连续动作用分布表示
    • policy gradients
  • 基于价值(value-based)

    • 输出实数值,选择最大值
    • 对于连续动作无能为力
    • Q-learning
    • Sarsa
  • 可以结合以上两种方法的优势

    • Actor-Critic
    • Actor根据概率做出动作
    • Critic根据动作给出价值

1.3

  • 回合更新(Monte-Carlo update)

    • 游戏开始后等待结束以总结,更新准则
    • 基础版 policy gradients
    • Monte-Carlo learning
  • 单步更新(Temporal-Difference update)

    • 在游戏进行中的每一步都在更新,边玩边学习
    • Q-learning
    • Sarsa
    • 升级版 policy gradients

1.4

  • 在线学习(on-policy)

    • Sarsa
    • Sarsa( λ \lambda )
  • 离线学习(off-policy)

    • Q-learning
    • Deep Q network

2. 代码条件

1

3. Q-learning

  • 状态
  • 动作
  • 奖励
  • 建立 Q 表

plz see details in https://blog.csdn.net/qq_23947237/article/details/79153916 and https://blog.csdn.net/qq_23947237/article/details/79628098.

3.1 一个例子

-----o–T
----o—T
—o----T
----o—T
—o----T
----o—T
-----o–T
------o-T
-------oT

  • 游戏介绍:小人一开始在中间,可以往左走,或者右走。目标是最右边的 T。

  • 我们要实现的内容是:创建游戏环境,让小人学会往右走到达目的地 T。

思路:

  • 创建 Q 表,记录存储动作状态对应的奖励值。
  • 让小人选择动作,在某状态下选择某动作(贪婪选择最大奖励对应的动作)
    • action_name = state_actions.idxmax() # 贪婪模式
    • pandas: df.idxmax
  • 根据选择的动作求环境反馈:获得奖励,转到新的状态
  • 环境变化更新,实际上就是小人的状态在环境的变化
  • Q-learning 的主循环

2

def rl():
    # main part of RL loop
    q_table = build_q_table(N_STATES, ACTIONS)
    for episode in range(MAX_EPISODES):
        step_counter = 0
        S = 0
        is_terminated = False
        update_env(S, episode, step_counter)
        while not is_terminated:

            A = choose_action(S, q_table)
            S_, R = get_env_feedback(S, A)  # take action & get next state and reward
            q_predict = q_table.loc[S, A]
            if S_ != 'terminal':
                q_target = R + GAMMA * q_table.iloc[S_, :].max()   # next state is not terminal
            else:
                q_target = R     # next state is terminal
                is_terminated = True    # terminate this episode

            q_table.loc[S, A] += ALPHA * (q_target - q_predict)  # update
            S = S_  # move to next state

            update_env(S, episode, step_counter+1)
            step_counter += 1
    return q_table

需要大概了解 pandas 的一些用法:
pandas中的索引:loc、iloc、ix的区别(ix 已经不再使用)https://blog.csdn.net/YE1215172385/article/details/79556388

  • loc 只能通过标签名来取数据;不能通过索引(第0行,第1行等)来取数据
  • iloc 只能通过索引(第0行,第1行等)来取数据;使用标签名则发生错误

猜你喜欢

转载自blog.csdn.net/qq_23947237/article/details/104700621
drl
今日推荐