【李宏毅】HW12

本文介绍了如何使用PolicyGradient和Actor-Critic方法进行深度强化学习,特别是针对OpenAIGym的LunarLander-v2环境。这两种算法在处理强化学习问题时,通过神经网络模型预测动作并根据奖励调整策略。实验部分展示了从简单到更复杂的实现,包括累积衰减奖励和Actor-Critic的结合,以提高学习效果。


一、作业描述

在这个HW中,你可以自己实现一些深度强化学习方法:
1、策略梯度Policy Gradient
2、Actor-Critic
这个HW的环境是OpenAI gym的月球着陆器。希望这个月球着陆器落在两个旗子中间。
什么是月球着陆器?
“LunarLander-v2”是模拟飞行器在月球表面着陆时的情况。
这项任务是使飞机能够“安全地”降落在两个黄色旗帜之间的停机坪上。着陆平台始终位于坐标(0,0)处。坐标是状态向量中的前两个数字。“LunarLander-v2”实际上包括“代理”和“环境”。在本作业中,我们将利用函数“step()”来控制“代理”的动作。
那么‘step()’将返回由“环境”给出的观察/状态和奖励…
在这里插入图片描述
Box(8,)意味着观察是一个8维向量

在这里插入图片描述

‘Discrete(4)’意味着代理可以采取四种行动。

  • 0表示代理不会采取任何操作
  • 2意味着代理将向下加速
  • 1,3意味着代理将向左和向右加速

接下来,我们将尝试让代理与环境进行交互。
在采取任何行动之前,我们建议调用’ reset()'函数来重置环境。此外,该函数将返回环境的初始状态。
在这里插入图片描述

1、Policy Gradient

直接根据状态输出动作或者动作的概率。那么怎么输出呢,最简单的就是使用神经网络。网络应该如何训练来实现最终的收敛呢?反向传播算法,我们需要一个误差函数,通过梯度下降来使我们的损失最小。但对于强化学习来说,我们不知道动作的正确与否,只能通过奖励值来判断这个动作的相对好坏。如果一个动作得到的reward多,那么我们就使其出现的概率增加,如果一个动作得到的reward少,我们就使其出现的概率减小。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

每次循环都要收集很多数据才进行一次参数更新。

2、Actor-Critic

在这里插入图片描述
在这里插入图片描述
增加基准判断这个动作是否是真的好!
在这里插入图片描述
分配不同的权重

在这里插入图片描述
组合衰减因子。

二、实验

1、simple

#torch.set_deterministic(True)
torch.use_deterministic_algorithms(True)

training result:在这里插入图片描述
testing:在这里插入图片描述
test reward:在这里插入图片描述
server:
在这里插入图片描述
score:在这里插入图片描述

2、medium

……
NUM_BATCH = 500        # totally update the agent for 400 time
rate = 0.99
……
        while True:

            action, log_prob = agent.sample(state) # at, log(at|st)
            next_state, reward, done, _ = env.step(action)

            log_probs.append(log_prob) # [log(a1|s1), log(a2|s2), ...., log(at|st)]
            seq_rewards.append(reward)
            state = next_state
            total_reward += reward
            total_step += 1
            
            if done:
                final_rewards.append(reward)
                total_rewards.append(total_reward)
                # calculate accumulative rewards
                for i in range(2, len(seq_rewards)+1):
                    seq_rewards[-i] += rate * (seq_rewards[-i+1])
                rewards += seq_rewards
                
                break

training result:
在这里插入图片描述
在这里插入图片描述

testing:
在这里插入图片描述

test reward:
在这里插入图片描述
在这里插入图片描述

server:
在这里插入图片描述

score:

在这里插入图片描述

3、strong

from torch.optim.lr_scheduler import StepLR
class ActorCritic(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc = nn.Sequential(
            nn.Linear(8, 16),
            nn.Tanh(),
            nn.Linear(16, 16),
            nn.Tanh()
        )
        
        self.actor = nn.Linear(16, 4)
        self.critic = nn.Linear(
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值