<jupyter_start><jupyter_text>问题设定 在小车倒立杆（CartPole）游戏中，我们希望通过强化学习训练一个智能体（agent），尽可能不断地左右移动小车，使得小车上的杆不倒，我们首先定义CartPole游戏： CartPole游戏即是强化学习模型的enviorment，它与agent交互，实时更新state，内部定义了reward function，其中state有以下定义： state每一个维度分别代表了：- 小车位置，它的取值范围是-2.4到2.4- 小车速度，它的取值范围是负无穷到正无穷- 杆的角度，它的取值范围是-41.8°到41.8°- 杆的角速，它的取值范围是负无穷到正无穷 action是一个2维向量，每一个维度分别代表向左和向右移动。 $$action \in \mathbb{R}^2$$  DQN 我们将设计一个网络，作为状态-动作值函数（state-action value function），其输入是state，输出是对应各个action的value，并TD（Temporal Difference）进行迭代训练直至收敛。我们将定义两个这样的网络，分别记作$\theta$和$\theta^-$，分别代表估计网络与目标网络。 我们希望最小化： $$\left( y_j - Q \left( \phi_j, a_j; \theta \right) \right)^2$$ 其中，$a_j$具有以下形式： $$a_j = \mathrm{argmax}_{a} Q \left( \phi(s_j), a; \theta\right)$$ 其中，$y_j$具有以下形式： $$f(x)=\begin{cases}r_j & \text{if episode ends at j + 1}\\r_j + \gamma \max_{a^{\prime}} \hat{Q} \left( \phi_{j+1}, a^{\prime}; \theta^{-} \right)& \text{otherwise}\end{cases}$$ 在最小化TD-Error时，我们将固定目标网络，只对估计网络做梯度反向传播，每次到达一定迭代次数后，将估计网络的权重复制到目标网络。在这个过程中，需要用到经验回放（Experience Replay）技术，即将每一次迭代观测到的$s_t, r_t, a_t, s_{t+1}$作为一个元组缓存，然后在这些缓存中随机抽取元组做批次梯度下降。  代码实现<jupyter_code># coding=utf-8

import tensorflow as tf
import numpy as np
import gym<jupyter_output>/Users/shuyu/anaconda3/envs/quant/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: compiletime version 3.6 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.5
  return f(*args, **kwds)
{'fraction_non_alphanumeric': 0.15965787598004277, 'fraction_numerical': 0.01924447612259444, 'mean_word_length': 7.830188679245283, 'pattern_counts': {'":': 0, '<': 4, '<?xml version=': 0, '>': 4, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '602313', 'license': 'MIT', 'n_tokens_mistral': 858, 'n_tokens_neox': 953, 'n_words': 86, 'path': 'note/.ipynb_checkpoints/DQN-checkpoint.ipynb', 'repo_name': 'Ceruleanacg/Learning-Notes', 'size': '1403'}