DQN算法
DQN算法:
基础入门看看
- # -*- coding: utf-8 -*-
- import random
- import gym
- import numpy as np
- from collections import deque
- from keras.models import Sequential
- from keras.layers import Dense
- from keras.optimizers import Adam
- EPISODES = 1000
- class DQNAgent:
- def __init__(self, state_size, action_size):
- self.state_size = state_size
- self.action_size = action_size
- self.memory = deque(maxlen=2000)
- self.gamma = 0.95 # discount rate
- self.epsilon = 1.0 # exploration rate
- self.epsilon_min = 0.01
- self.epsilon_decay = 0.995
- self.learning_rate = 0.001
- self.model = self._build_model()
- def _build_model(self):
- # Neural Net for Deep-Q learning Model
- model = Sequential()
- model.add(Dense(24, input_dim=self.state_size, activation='relu'))
- model.add(Dense(24, activation='relu'))
- model.add(Dense(self.action_size, activation='linear'))
- model.compile(loss='mse',
- optimizer=Adam(lr=self.learning_rate))
- return model
- def remember(self, state, action, reward, next_state, done):
- self.memory.append((state, action, reward, next_state, done))
- def act(self, state):
- if np.random.rand() <= self.epsilon:
- return random.randrange(self.action_size)
- act_values = self.model.predict(state)
- return np.argmax(act_values[0]) # returns action
- def replay(self, batch_size):
- minibatch = random.sample(self.memory, batch_size)
- for state, action, reward, next_state, done in minibatch:
- target = reward
- if not done:
- target = (reward + self.gamma *
- np.amax(self.model.predict(next_state)[0]))
- target_f = self.model.predict(state)
- print target_f
- print target
- target_f[0][action] = target
- self.model.fit(state, target_f, epochs=1, verbose=0)
- if self.epsilon > self.epsilon_min:
- self.epsilon *= self.epsilon_decay
- def load(self, name):
- self.model.load_weights(name)
- def save(self, name):
- self.model.save_weights(name)
- if __name__ == "__main__":
- env = gym.make('CartPole-v1')
- state_size = env.observation_space.shape[0]
- action_size = env.action_space.n
- agent = DQNAgent(state_size, action_size)
- # agent.load("./save/cartpole-dqn.h5")
- done = False
- batch_size = 32
- for e in range(EPISODES):
- state = env.reset()
- state = np.reshape(state, [1, state_size])
- for time in range(500):
- # env.render()
- action = agent.act(state)
- next_state, reward, done, _ = env.step(action)
- reward = reward if not done else -10
- print 'reward:',reward
- next_state = np.reshape(next_state, [1, state_size])
- agent.remember(state, action, reward, next_state, done)
- state = next_state
- if done:
- print("episode: {}/{}, score: {}, e: {:.2}"
- .format(e, EPISODES, time, agent.epsilon))
- break
- if len(agent.memory) > batch_size:
- agent.replay(batch_size)
- # if e % 10 == 0:
- # agent.save("./save/cartpole-dqn.h5")
DQN算法的更多相关文章
- 【强化学习】DQN 算法改进
DQN 算法改进 (一)Dueling DQN Dueling DQN 是一种基于 DQN 的改进算法.主要突破点:利用模型结构将值函数表示成更加细致的形式,这使得模型能够拥有更好的表现.下面给出公式 ...
- DQN算法原理详解
一. 概述 强化学习算法可以分为三大类:value based, policy based 和 actor critic. 常见的是以DQN为代表的value based算法,这种算法中只有一个值函数 ...
- 【转】【强化学习】Deep Q Network(DQN)算法详解
原文地址:https://blog.csdn.net/qq_30615903/article/details/80744083 DQN(Deep Q-Learning)是将深度学习deeplearni ...
- 实现DQN算法玩CartPole
先安装tensorflow 1.2版本和python 3.6, 接着安装: numpy-1.13.1+mkl-cp36-cp36m-win_amd64.whl 的版本,这个是windows下的,如果l ...
- 强化学习算法DQN
1 DQN的引入 由于q_learning算法是一直更新一张q_table,在场景复杂的情况下,q_table就会大到内存处理的极限,而且在当时深度学习的火热,有人就会想到能不能将从深度学习中借鉴方法 ...
- 强化学习(十二) Dueling DQN
在强化学习(十一) Prioritized Replay DQN中,我们讨论了对DQN的经验回放池按权重采样来优化DQN算法的方法,本文讨论另一种优化方法,Dueling DQN.本章内容主要参考了I ...
- 强化学习(十)Double DQN (DDQN)
在强化学习(九)Deep Q-Learning进阶之Nature DQN中,我们讨论了Nature DQN的算法流程,它通过使用两个相同的神经网络,以解决数据样本和网络训练之前的相关性.但是还是有其他 ...
- 强化学习(十一) Prioritized Replay DQN
在强化学习(十)Double DQN (DDQN)中,我们讲到了DDQN使用两个Q网络,用当前Q网络计算最大Q值对应的动作,用目标Q网络计算这个最大动作对应的目标Q值,进而消除贪婪法带来的偏差.今天我 ...
- 强化学习(九)Deep Q-Learning进阶之Nature DQN
在强化学习(八)价值函数的近似表示与Deep Q-Learning中,我们讲到了Deep Q-Learning(NIPS 2013)的算法和代码,在这个算法基础上,有很多Deep Q-Learning ...
随机推荐
- SLAM入门之视觉里程计(2):相机模型(内参数,外参数)
相机成像的过程实际是将真实的三维空间中的三维点映射到成像平面(二维空间)过程,可以简单的使用小孔成像模型来描述该过程,以了解成像过程中三维空间到二位图像空间的变换过程. 本文包含两部分内容,首先介绍小 ...
- C 真正理解二级指针
本文转载自CSDN博主liaoxinmeng,做数据结构时遇到指针方面的问题,想了许久,因此我觉得很有必要复习一下二级指针及其使用 正文如下: 指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也 ...
- 引言关于本博客的ES6
本博客ES6全部取自于阮一峰的<ES6标准入门>里面掺杂着一些node.js,写这些东西是为了让大家更好的去理解这本书,其实更像是一个教材参考,里面有一些是阮一峰先生可能没有考虑到新手的某 ...
- VMware的一些总结
一.虚拟主机联网的三种方式: 1.仅主机(Host Only),虚拟主机只能与宿主机联网通信,无法访问外网和宿主机所在局域网的其它主机. 2.桥接(Bridge),在桥接模式下,虚拟主机就像是宿主机所 ...
- qt关键字高亮
qt的高亮显示主要是使用qsyntaxhighlighter类,由于qsyntaxhighlighter是抽象基类,所以需要继承并自己实现 //头文件 #ifndef MARKDOWN_HIGHLIG ...
- 童话故事 --- 什么是SQL Server Browser
高飞狗这几天特别郁闷,不知该如何通过TCP/IP协议连接SQL Server数据库.好在功夫不负有心人,经过几天的刻苦研究,终于得到了答案. 高飞狗呼叫UDP1434端口,"叮铃铃,叮铃铃- ...
- php date函数
PHP星期几获取代码: 1 date("l"); 2 //data就可以获取英文的星期比如Sunday 3 date("w"); 4 //这个可以获取数字星期比 ...
- 源码中的哲学——通过构建者模式创建SparkSession
spark2.2在使用的时候使用的是SparkSession,这个SparkSession创建的时候很明显的使用了创建者模式.通过观察源代码,简单的模拟了下,可以当作以后编码风格的参考: 官方使用 i ...
- 完美解决浮动IE6 7中的兼容性BUG问题
想要创建出漂亮的网页设计,除了要认真学习每一个html和CSS代码之外,不可能不去了解一下臭名昭著的IE6和更早的那些IE浏览器的坏脾气,因为你本来写出的规规矩矩的代码,漂亮的设计就此就要完成了,却发 ...
- SqlServer Lock_Escalation
在今天的文章里,我想谈下SQL Server里锁升级(Lock Escalations).锁升级是SQL Server使用的优化技术,用来控制在SQL Server锁管理里把持锁的数量.我们首先用SQ ...