DQN算法的时间复杂度分析

DQN算法的时间复杂度分析DQN 算法的算法流程如下 时间复杂度 设 Initializere mathcal D DtocapacityN 运行消耗 t0t 0t0 时间 Initializeac valuefunctio 运行消耗 t1t 1t1 时间 forepisode 1 Mepisode 1 Mepisode 1 Mdo 运行一次平均消耗 t2t 2 t2 时间 重复运行 MMM 次 uadIniti

Initialize replay memory D \mathcal{D} D to capacity N N N (运行消耗 t 0 t_0 t0时间)
Initialize action-value function Q Q Q with random weights (运行消耗 t 1 t_1 t1时间)
for e p i s o d e = 1 , M episode=1,M episode=1,M do (运行一次平均消耗 t 2 t_{2} t2时间,重复运行 M M M次)
\uad Initialise sequence s 1 = x 1 s_1={x_1} s1=x1 and preprocessed sequenced ϕ 1 = ϕ ( s 1 ) \phi_1=\phi(s_1) ϕ1=ϕ(s1) (运行一次平均消耗 t 2.1 t_{2.1} t2.1时间)
\uad for t = 1 , T t=1,T t=1,T do (运行一次平均消耗 t 2.2 t_{2.2} t2.2时间,重复运行 T T T次)
\uad\uad With probability ϵ \epsilon ϵ select a random action a t a_t at (运行一次平均消耗 t 2.2.1 t_{2.2.1} t2.2.1时间)
\uad\uad otherwise select a t = max ⁡ a Q ∗ ( ϕ ( s t ) , a ; θ ) a_t=\max_aQ^*(\phi(s_t),a;\theta) at=maxaQ(ϕ(st),a;θ) (运行一次平均消耗 t 2.2.1 t_{2.2.1} t2.2.1时间,因为是otherwise)
\uad\uad Execute action a t a_t at in emulator and observe reward r t r_t rt and image x t + 1 x_{t+1} xt+1 (运行一次平均消耗 t 2.2.2 t_{2.2.2} t2.2.2时间)
\uad\uad Set s t + 1 = s t , a t , x t + 1 s_{t+1}=s_t,a_t,x_{t+1} st+1=st,at,xt+1 and preprocess ϕ t + 1 = ϕ ( s t + 1 ) \phi_{t+1}=\phi(s_{t+1}) ϕt+1=ϕ(st+1) (运行一次平均消耗 t 2.2.3 t_{2.2.3} t2.2.3时间)
\uad\uad Store transition ( ϕ t , a t , r t , ϕ t + 1 ) (\phi_t,a_t,r_t,\phi_{t+1}) (ϕt,at,rt,ϕt+1) in D \mathcal{D} D (运行一次平均消耗 t 2.2.4 t_{2.2.4} t2.2.4时间)
\uad\uad Sample random minibatch of transitions ( ϕ j , a j , r j , ϕ j + 1 ) (\phi_j,a_j,r_j,\phi_{j+1}) (ϕj,aj,rj,ϕj+1) (运行一次平均消耗 t 2.2.5 t_{2.2.5} t2.2.5时间)
Set y j = { r j , for terminal  ϕ j + 1 r j + γ max ⁡ a ′ Q ( ϕ j + 1 , a ′ ; θ ) , for non-terminal  ϕ j + 1 (运行一次平均消耗 t 2.2.6 时间) \text{Set}\quad y_j=\begin{cases}r_j, & \text{for terminal $\phi_{j+1}$} \\ r_j+\gamma\max_{a’}Q(\phi_{j+1},a’;\theta), & \text{for non-terminal $\phi_{j+1}$}\end{cases}\text{(运行一次平均消耗$t_{2.2.6}$时间)} Setyj={
rj,rj+γmaxaQ(ϕj+1,a;θ),for terminal ϕj+1for non-terminal ϕj+1
(运行一次平均消耗t2.2.6时间)

\uad\uad Perform a gradient descent step on ( y j − Q ( ϕ j , a j ; θ ) ) 2 (y_j-Q(\phi_j,a_j;\theta))^2 (yjQ(ϕj,aj;θ))2 according to equation 3 (运行一次平均消耗 t 2.2.7 t_{2.2.7} t2.2.7时间)
\uad end for
end for













根据代码上执行的平均时间假设,计算出来执行DQN算法的时间为:

T ( e p i s o d e , t ) = t 0 + t 1 + ( t 2 + t 2.1 + ( t 2.2 + t 2.2.1 + t 2.2.2 + t 2.2.3 + t 2.2.4 + t 2.2.5 + t 2.2.6 + t 2.2.7 ) ∗ T ) ∗ M (合并常数项) = t c 1 + ( t c 2 + t c 3 ∗ T ) ∗ M = t c 1 + ( t c 2 ∗ M + t c 3 ∗ T ∗ M ) = t c 1 + t c 2 ∗ M + t c 3 ∗ T ∗ M = t c 3 ∗ T ∗ M = T ∗ M \begin{aligned} T(episode,t) &=t_0 + t_1 \\ & + (t_2+t_{2.1}+(t_{2.2}+t_{2.2.1}+t_{2.2.2}+t_{2.2.3}+t_{2.2.4}+t_{2.2.5}+t_{2.2.6}+t_{2.2.7})*T)*M \\ \text{(合并常数项)} & = t_{c_1}+(t_{c_2}+t_{c_3}*T)*M \\ & = t_{c_1}+(t_{c_2}*M+t_{c_3}*T*M) \\ & = t_{c_1}+t_{c_2}*M+t_{c_3}*T*M \\ & = t_{c_3}*T*M \\ & = T*M \\ \end{aligned} T(episode,t)(合并常数项)=t0+t1+(t2+t2.1+(t2.2+t2.2.1+t2.2.2+t2.2.3+t2.2.4+t2.2.5+t2.2.6+t2.2.7)T)M=tc1+(tc2+tc3T)M=tc1+(tc2M+tc3TM)=tc1+tc2M+tc3TM=tc3TM=TM

e p i s o d e episode episode t t t的值非常大的时候, T ( e p i s o d e , t ) T(episode,t) T(episode,t)函数中的常数项(例如步骤4中的 t c 1 t_{c_1} tc1)以及 T T T M M M的系数(例如步骤5中的 t c 3 t_{c_3} tc3)对 e p i s o d e episode episode t t t的影响也可以忽略不计了。同时我们要注意到 T ( e p i s o d e , t ) T(episode,t) T(episode,t)函数的主体影响因素是 T ∗ M T*M TM而不是 M M M,因为 T ∗ M T*M TM的增长速度远快于 M M M。也即,这里函数 T ( e p i s o d e , t ) T(episode,t) T(episode,t)的时间复杂度可以表示为 T ( e p i s o d e , t ) = O ( n t n m ) T(episode,t)=O(n_tn_m) T(episode,t)=O(ntnm)其中, n t n_t nt是指每个episode中的时间步数量, n m n_m nm是指episode的数量。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206595.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午3:23
下一篇 2026年3月19日 下午3:23


相关推荐

  • golang 激活码 2021[在线序列号][通俗易懂]

    golang 激活码 2021[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    84
  • MATLAB 矢量图(风场、电场等)标明矢量大小的方法——箭头比例尺及风矢杆图的绘制

    MATLAB 矢量图(风场、电场等)标明矢量大小的方法——箭头比例尺及风矢杆图的绘制作者:中国科学院大气物理研究所律成林MATLAB中标明矢量图中矢量大小的方法:绘制箭头比例尺,或绘制风矢杆图。m_vec函数绘制的箭头长度仅与矢量大小本身有关。本人基于m_vec绘制结果,开发了一个可以在Figure内任意位置为指定的矢量图绘制箭头比例尺的函数——m_arrow_scale2,本文已包含该函数的代码,该函数考虑了方方面面,如文本标注、位置、字体等参数,且预设了很多参数供使用者选择,选择余地非常多,使用起来非常方便,功能也较为强大。本着“授人以渔”的原则,倾注了本人对MATLAB深刻理解。

    2022年6月28日
    122
  • ssd格式化后无法识别,ssd格式化不了是不是被保护了

    ssd格式化后无法识别,ssd格式化不了是不是被保护了

    2026年3月14日
    2
  • Advanced System Care官方下载(附激活码)

    Advanced System Care官方下载(附激活码)iobit公司出品的一款系统辅助工具AdvancedSystemCare,它通过对系统全方位的诊断,找到系统性能的瓶颈所在,并将测试结果显示出来。针对系统的瓶颈对其优化,提高效率发挥最大的性能,通过优化后系统性能和网络速度都会有明显提升包含基本功能,注册表清理,垃圾文件清理等。现今系统清理,系统优化工具满天飞,可是很少有对系统全方位的诊断,找到系统性能的瓶颈所在,然后有针对性地进行修改、优化…

    2022年10月20日
    4
  • pip安装详解

    pip安装详解pip 是 python 的包管理工具 python2 7 python3 4 以上的版本都已经集成了该工具 我们可以用 pipversion 命令确认是否安装 如果未安装 pip 的 请往下看 下载进入 https pypi org project pip 选择红框中的文件下载图 windows 下安装下载完成后解压得到我们用 CMD 进入该目录下 输入 pythonsetup pyinstall 命令进行安装码字不易废话两句 有需要 python 学习资料的或者有技术问题交流 点击 即可如果是第

    2025年6月12日
    6
  • 如何修改redis的端口号_redis配置文件详解

    如何修改redis的端口号_redis配置文件详解redis修改默认端口的方法是:首先要先下载文件并解压编译及安装,安装好后全局启动并且设置密码,然后再修改端口号,最后指定运行配置即可【推荐课程:redis教程】(1)通过下面的链接进行下载,然后再用以下命令进行,解压,编译,安装下载地址:http://download.redis.io/redis-stable.tar.gztarxzfredis-4.0.9.tar.gzcdredis-4…

    2026年1月20日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号