第一次深度强化学习代码入门

nature-DQN

首先是主程序:
1、通过对游戏截图,得到当前状态,DQN思想是通过一定维数数据输入到神经网络中,输出当前状态下的动作(该神经网络的参数在分程序Agent中进行不断学习调整)
2、学习循环:用while接一个循环,得到一盘游戏中的所有state reward信息,并输入到网络的learn模块进行学习
3、跳出循环后,将贪婪概率epsion随着学习次数降低(前期贪婪有利于寻找到全局最优解)
4、给定运行次数后进行测试,记录其中获得的奖励(其中有while循环,同2一样,直到游戏结束,从实际env获得奖励)

分程序Agent解读:
1、def init:这部分生成了主网络和目标网络,设置经验池、优化器(Adam)、损失函数(MSE);
2、def action:主要分成两部分,if语句用于贪心概率做出动作;另一部分是通过网络输入状态输出动作;
3、def learn:前面三个if都是用来调整经验池的数据;第4个if用来将主网络的权重参数到目标网络中同步更新;最后一部分是随即取样,并用贝尔曼方程得到目标价值函数,并用梯度下降法对参数修正。

分程序net.py util.py见注释

import torch
import torch.nn as nn
from collections import deque
import numpy as np
import gym
import random
from net import AtariNet
from util import preprocess
import matplotlib.pyplot as plt #  plt 用于显示图片

BATCH_SIZE = 32
LR = 0.001
START_EPSILON = 1.0             #  贪婪程度随时间变化,前期尽可能贪婪,后期弱化
FINAL_EPSILON = 0.1
EPSILON = START_EPSILON
EXPLORE = 1000000
GAMMA = 0.99                    # 折扣比例
TOTAL_EPISODES = 10000000
MEMORY_SIZE = 1000000
MEMORY_THRESHOLD = 100000
UPDATE_TIME = 10000
TEST_FREQUENCY = 1
env = gym.make('Pong-v0')
env = env.unwrapped             # 打开包装
ACTIONS_SIZE = env.action_space.n      # action的个数
class Agent(object):
    def __init__(self):
        self.network, self.target_network = AtariNet(ACTIONS_SIZE), AtariNet(ACTIONS_SIZE)
        #  设计了两个策略,主网络(Action-Value)和目标网络(Target Action-Value)
        self.memory = deque()       # 啥都没有
        self.learning_count = 0
        self.optimizer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值