From 7eb884c5b2861bc75d5a5f8845e93fde5e75d722 Mon Sep 17 00:00:00 2001 From: Gal Leibovich Date: Sun, 16 Jun 2019 11:11:21 +0300 Subject: [PATCH] TD3 (#338) --- README.md | 2 +- benchmarks/td3/README.md | 48 ++ benchmarks/td3/ant.png | Bin 0 -> 90510 bytes benchmarks/td3/half_cheetah.png | Bin 0 -> 73171 bytes benchmarks/td3/hopper.png | Bin 0 -> 115524 bytes benchmarks/td3/reacher.png | Bin 0 -> 98594 bytes benchmarks/td3/walker2d.png | Bin 0 -> 94672 bytes docs/_images/algorithms.png | Bin 60448 -> 60878 bytes docs/_images/td3.png | Bin 0 -> 49185 bytes docs/_modules/index.html | 1 + docs/_modules/rl_coach/agents/agent.html | 62 ++- .../agents/categorical_dqn_agent.html | 14 +- docs/_modules/rl_coach/agents/ddpg_agent.html | 13 +- docs/_modules/rl_coach/agents/dfp_agent.html | 2 +- docs/_modules/rl_coach/agents/dqn_agent.html | 1 + docs/_modules/rl_coach/agents/nec_agent.html | 25 +- .../rl_coach/agents/qr_dqn_agent.html | 13 +- docs/_modules/rl_coach/agents/td3_agent.html | 448 ++++++++++++++++++ .../agents/value_optimization_agent.html | 44 +- docs/_modules/rl_coach/base_parameters.html | 9 +- .../exploration_policies/additive_noise.html | 51 +- .../exploration_policies/boltzmann.html | 10 +- .../exploration_policies/categorical.html | 15 +- .../exploration_policies/e_greedy.html | 35 +- .../exploration_policy.html | 51 +- .../rl_coach/exploration_policies/greedy.html | 9 +- .../exploration_policies/ou_process.html | 9 +- .../exploration_policies/parameter_noise.html | 8 +- .../truncated_normal.html | 46 +- .../observation_stacking_filter.html | 19 +- .../episodic/episodic_experience_replay.html | 22 +- docs/_sources/components/agents/index.rst.txt | 1 + .../agents/policy_optimization/td3.rst.txt | 55 +++ docs/_sources/selecting_an_algorithm.rst.txt | 10 + docs/_static/basic.css | 15 + docs/_static/searchtools.js | 7 +- docs/components/additional_parameters.html | 9 +- docs/components/agents/imitation/bc.html | 3 +- docs/components/agents/imitation/cil.html | 3 +- docs/components/agents/index.html | 103 ++-- docs/components/agents/other/dfp.html | 3 +- .../agents/policy_optimization/ac.html | 3 +- .../agents/policy_optimization/acer.html | 3 +- .../agents/policy_optimization/cppo.html | 3 +- .../agents/policy_optimization/ddpg.html | 7 +- .../agents/policy_optimization/pg.html | 3 +- .../agents/policy_optimization/ppo.html | 3 +- .../agents/policy_optimization/sac.html | 7 +- .../agents/policy_optimization/td3.html | 347 ++++++++++++++ .../agents/value_optimization/bs_dqn.html | 1 + .../value_optimization/categorical_dqn.html | 3 +- .../agents/value_optimization/double_dqn.html | 1 + .../agents/value_optimization/dqn.html | 3 +- .../value_optimization/dueling_dqn.html | 1 + .../agents/value_optimization/mmc.html | 3 +- .../agents/value_optimization/n_step.html | 3 +- .../agents/value_optimization/naf.html | 3 +- .../agents/value_optimization/nec.html | 3 +- .../agents/value_optimization/pal.html | 3 +- .../agents/value_optimization/qr_dqn.html | 3 +- .../agents/value_optimization/rainbow.html | 3 +- docs/components/architectures/index.html | 56 +-- docs/components/core_types.html | 52 +- docs/components/data_stores/index.html | 4 +- docs/components/environments/index.html | 54 +-- .../exploration_policies/index.html | 60 +-- docs/components/filters/input_filters.html | 28 +- docs/components/filters/output_filters.html | 12 +- docs/components/memories/index.html | 18 +- docs/components/memory_backends/index.html | 2 +- docs/components/orchestrators/index.html | 2 +- docs/components/spaces.html | 64 +-- docs/genindex.html | 50 +- docs/objects.inv | Bin 3610 -> 3676 bytes docs/searchindex.js | 2 +- docs/selecting_an_algorithm.html | 10 + docs/test.html | 101 ++-- docs_raw/source/_static/img/algorithms.png | Bin 60448 -> 60878 bytes .../source/_static/img/design_imgs/td3.png | Bin 0 -> 49185 bytes docs_raw/source/algorithms.xml | 1 + docs_raw/source/components/agents/index.rst | 1 + .../agents/policy_optimization/td3.rst | 55 +++ docs_raw/source/diagrams.xml | 2 +- docs_raw/source/selecting_an_algorithm.rst | 10 + img/algorithms.png | Bin 60448 -> 0 bytes rl_coach/agents/ddpg_agent.py | 9 +- rl_coach/agents/ddqn_bcq_agent.py | 4 +- rl_coach/agents/nec_agent.py | 2 +- rl_coach/agents/td3_agent.py | 223 +++++++++ rl_coach/architectures/head_parameters.py | 11 + .../architectures/middleware_parameters.py | 3 +- .../tensorflow_components/architecture.py | 1 - .../tensorflow_components/heads/__init__.py | 2 + .../tensorflow_components/heads/head.py | 6 +- .../tensorflow_components/heads/td3_v_head.py | 67 +++ .../middlewares/fc_middleware.py | 35 +- .../tensorflow_components/utils.py | 7 + .../exploration_policies/additive_noise.py | 46 +- rl_coach/exploration_policies/e_greedy.py | 2 +- .../exploration_policies/truncated_normal.py | 42 +- rl_coach/presets/CARLA_CIL.py | 4 +- rl_coach/presets/CartPole_Dueling_DDQN.py | 2 +- rl_coach/presets/Fetch_DDPG_HER_baselines.py | 6 +- rl_coach/presets/Mujoco_DDPG.py | 4 +- rl_coach/presets/Mujoco_TD3.py | 49 ++ .../presets/Starcraft_CollectMinerals_A3C.py | 6 +- rl_coach/run_multiple_seeds.py | 8 +- 107 files changed, 2200 insertions(+), 495 deletions(-) create mode 100644 benchmarks/td3/README.md create mode 100644 benchmarks/td3/ant.png create mode 100644 benchmarks/td3/half_cheetah.png create mode 100644 benchmarks/td3/hopper.png create mode 100644 benchmarks/td3/reacher.png create mode 100644 benchmarks/td3/walker2d.png create mode 100644 docs/_images/td3.png create mode 100644 docs/_modules/rl_coach/agents/td3_agent.html create mode 100644 docs/_sources/components/agents/policy_optimization/td3.rst.txt create mode 100644 docs/components/agents/policy_optimization/td3.html create mode 100644 docs_raw/source/_static/img/design_imgs/td3.png create mode 100644 docs_raw/source/algorithms.xml create mode 100644 docs_raw/source/components/agents/policy_optimization/td3.rst delete mode 100644 img/algorithms.png create mode 100644 rl_coach/agents/td3_agent.py create mode 100644 rl_coach/architectures/tensorflow_components/heads/td3_v_head.py create mode 100644 rl_coach/presets/Mujoco_TD3.py diff --git a/README.md b/README.md index 12b1e18..1750d02 100644 --- a/README.md +++ b/README.md @@ -253,7 +253,7 @@ dashboard ## Supported Algorithms -Coach Design +Coach Design diff --git a/benchmarks/td3/README.md b/benchmarks/td3/README.md new file mode 100644 index 0000000..aba43e3 --- /dev/null +++ b/benchmarks/td3/README.md @@ -0,0 +1,48 @@ +# Twin Delayed DDPG + +Each experiment uses 5 seeds and is trained for 1M environment steps. +The parameters used for TD3 are the same parameters as described in the [original paper](https://arxiv.org/pdf/1802.09477.pdf), and [repository](https://github.com/sfujim/TD3). + +### Ant TD3 - single worker + +```bash +coach -p Mujoco_TD3 -lvl ant +``` + +Ant TD3 + + +### Hopper TD3 - single worker + +```bash +coach -p Mujoco_TD3 -lvl hopper +``` + +Hopper TD3 + + +### Half Cheetah TD3 - single worker + +```bash +coach -p Mujoco_TD3 -lvl half_cheetah +``` + +Half Cheetah TD3 + + +### Reacher TD3 - single worker + +```bash +coach -p Mujoco_TD3 -lvl reacher +``` + +Reacher TD3 + + +### Walker2D TD3 - single worker + +```bash +coach -p Mujoco_TD3 -lvl walker2d +``` + +Walker2D TD3 diff --git a/benchmarks/td3/ant.png b/benchmarks/td3/ant.png new file mode 100644 index 0000000000000000000000000000000000000000..159aeff4c111538086aaf57d67f64282e3e69651 GIT binary patch literal 90510 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
0kvDN^OQ*n(k1W@2wxo2kBt
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
rTeTIOZ7TOH#oOXRz}poosxJ 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 literal 0 HcmV?d00001 diff --git a/benchmarks/td3/half_cheetah.png b/benchmarks/td3/half_cheetah.png new file mode 100644 index 0000000000000000000000000000000000000000..c951d0b4b7829bfe087cd859b741570cb6868580 GIT binary patch literal 73171 zcmZ^KbzD^2`aUI~(g=ujgLF%S3@s%{H`1L$Hv%H1bb}%w-7$2_(9#UuH3JNtzww-N z@BQ9$?vKy@gV}qpdiPrI`#jIPR+O5G9QKnJPmqw1uodJ1Z;_Bt$B~dwsxZ+JcQk7_ zvyhOU^x8;Et0_oJQ>(c;S=!iJAR);|C8c0!ewiZ(f;|)pVxrMfGn_KEh9=_aAu&uy zX}%_qXXa)^!xO1)46&1vK?8r}c>B!YDYYFkpo%>N`vzTCbJC;AM0)eCgYKXWxa7O7 zJd$~1!2`5}iUCK`kR&_Z7(TyAeIl9sO8*7v!Dyta{QDJjq!&fVC|s!S9IA|_uCG>+ z5{l1YC-(wDeKTYN>s9x67Y{FO{enMXAoWPS3g=w6pz$Lg*A|W9BSV@*?s3e_U?<&< z#T2S+8Whv$#P%MA8~veY7H>ENm4AM*O2hLDl4tz6!Eq;1u^yJJU)5?-Q9t##h*Il-`~3oLLym+kC|?nbeM6Y(#*0yCB5qPbCgVVb=ra) zv8WI|s!DRHo*UO-i+?1mT;=ZajYs=OVsEBdxw~+MD4nbg$&=Z^%d4)PMwSu$-jOUb zU0Kc9T3jWYltH?rv!^|s_rJVD6Rk!+-)*+g*1I~@a|r{yJ)!P*DBNzs-`R|G$&B&v zUL6vCJxzIk!|JBMBcvE8Wm!4F0gieL9hRlsI5mnr!THscm&t;TOpO;tM}@wEB)5V_ z9>gp8W0-g&rd_>5k4^U_QNiOH(l_70Xjt{BRwB`>*02@i4zE!a@u&tMqYr-mdZ9yz zInt{II@!Hi<$*`JM5su0@8>PYgKO6)msDH|lSj8Glv2pg9?Qs)=G&`5nTcPbBt8T*rqp#6b zeO_j>sa|hhFp_A5v2<&itC)V-HDC}ZAx<8l@R_@MP%wo?j&dS=8)su(> zQFN|4&%d(E6y!kZ@3mO}=q%zA;cVqH;}Y5!=S8rD1dGJ&Vp{9HMDZhS!wEzWq~s201XGb)04Fm(?ySZSIx6wnWrS%aBo>@K#Ak&Kq!5 z^jf3pooUI@JFQ~PAAH3I+TI0_Pal$n*umg(!|)RE2y&y&vU*JjjF?d5uux^L}n>>Z2?Rlr@p_r0k| zYf0nxe7diYq7%j9T1>u%&DWA-=G1@TvGCHZp#U1z8ARTy_QDjL#0AZ z=oAR8K_4Ye$6}=WqCT?o9*b=6#fRsE*cYUpWU(*O$aJ?DQR#>e;qL{|91i5JR6 zDZtH@W?l{XwzQGW(mA=PY2Dmi3qB1^Ytqe}6RxqWvD(txvWNS@ec%|x&z>4bGZ4Qc z7G$qVh9;9HgV=pbO;|}-^WGIq@!QSLPwBmHU1$apTPF9j9hd&l^%rF2;s80FbDXE0V;sOlibTSMpS`LTZgHt~-4N0eUUJWW^+>49 z)z-!5(EgCkd1>9RKYWX)-y%yX0<5hqs9kIqx*wkrrC+_k(I5`Q2FBi?Uqn+r#|?~o zM_DK;?%nKT=}UQb`wQI1+FdfTKW7i03z@^P#PuTcc5A)xX7zh6{!?7yn%NKAzp3qA zTio5JyUT#70M)eQA@?nsE!IHaz~YC;54dcq(@(VYkzP{2%6*k9q9(@0SV?=N9a0x3cQ_9prad*$CU7RRM_dXLf0JeSb;32fQaAdJg^swjb)UVzA13 zRuawIlNEhNvds=n(oy9o*`^NIm8#h1Kmu})) zeOr`Z4KU%hp`mS^``tw0mDH64yENxI`@W82qu=n!J<$-+jn->c4K2@79;0`Sw$2_$ zd+Gc={G@gP?3J9%>|PB5jt+KtMyq>W!LX3_63(|QpNY@P;Cc-gzNZ)YFwl%h*>cmp zK6m@2Ym~o&?#~qL7VMNj=gYj?h^m-kGLT@C<9rP%NVnzcoOqd?zreQOssL4g+umWm zZ&s`2aPeGbfip=c<#167LbII5jLYdXXH)G4AK@hG`lz3DpA-Xf2bL|LnF>VZNwa^5mU;X9B3(=C;x)H|kH*$2 z%p27g*5SId?KK8++(U*(yt5X!yGM*$@Z47oNNV;EWMI*S9NtF4-g9@ZaH1JjWo^Uq z?8~Xm8N$W#MdcYtdEKekY3=z4RLpJh!sjL?h>XOs+R3Pi|3V9Pn7RPG{(SumcnQp2 z9B#R}HX3OizbT)z+7r!tzms*$WnQw~Ty<>=HCxIv4N z>2z;ov~cpr1CTsj-|k7sB=2p!B8{H>^oh~J+}tVQ3g7B+$4pyQ)%aFbRmGHi)diBZ zuY?dd?&%pGQh*4>EA@M^6y4($;|(hRPxwshA3?MTbc<%AspGDr{6^T^$$`W4y_1;* zhnIsh0`MXsiFyem{&lc$H>LJ+uy=G5_7bE0;|*cN|G#f@(o+BNio2Z{t&Xx9wX~C~ z1vNhh9|sq$_!DYsYEjqsmcnlVvVRpv{1T(Jc6WCc=HvtdfgC_y4kuSDPHrI~AxNx+X60N=WpNX8!TyKOOx)C3XH&Qb+v)$mPkU#*dGj z21=p<{&Bsfr^e5sWu{>KAH5?OzsC7T+nAA(9}%6_Kr86}XKesUTD|3engAJJJ|PI; z{xR1*^`C>mln3mK{L?bjC@ci=kt+C!IE4SB!YFHhjQ`O*wG4`fhN#Lvj3!w?@Cpdc z)NgaG13BNfknuSOm1tL-x^6`kJ{&kUT2^NWxFv)4=X*V@mq%KKtgJZnn~LG}6| z$JPZ~M#f8~2#n$h4~wa{o& zGes>?5lzN#)<~j#ru6P>0a&}S(q-sM1w+Dm>0b+5bS zryR>Kxv{ShG0d^_E>Clk#xRyWr2qP&fT~%cuwGc}?+ZXt0m-!P{hT6aZiCnQ9s}75 zBj>aIDZ3R}94fQqb@v($QA4je7P(kT{-^Hy5CcJ%u2(a;QmCvIz73Ah@RWyDtuo#1 z`38sm`35`Rxuz%q6CvXk`|yQIn=c}P&=9*8za%ozqW1mig6OZMyS!GQFGiBM2fzAD z%av}c7JvuN+A&o6FY^YFImUl!inYC~&d^KutK>_%)AqlwU`<+NNC`d|)_!B$;#_XUDIP~D zRH})R{@s4IWwV-?#>X4`#n>nsAI6Fzq*Rws(0eVZ9yXTOosyMe-(7zw0!gpiH!O^$ zSd7dIZB-NBCuTEPQ^^uPY;fYD@gGhiGoo2_9SP#Csh{3#W0=66E?Rl zU=P_SZ+6YxpR0+m8_#cQ7@UDSp2irYjATKE1r4_K8U{V=rX8HO?>ZEPcTb!A9hZ*< z7fGGM+nkR}?G~ArryN!s2E{Xc;T4{XwsAnY7hBDA9=1*Xg(^+jz(Y^pTi<+o{H(~2 z^?!5Sn!?C{?X?21QfYseO!Q(Jua%N0hYwOdo4D!b*3$Z(a{cDIJTxN`8lfMREu z!F~>6VwgP6=JHGg-KQ%oDK7BX*I(2-%s09$`S|V}(KMKELuqdYuT^i(9UN4I93iGq z_iE9m?5O#^V=SYgOtBe{-N~PI_DiD4kKFP?Z$v{`q+1x;b4}VsJWst2QZ>ahnMGG) zGexa9=IiXHfWt35JP%u~0}cj9oA&1+YXX;@;ak}IAjYM|wqRhegztSm>nZdo>NBK? zP<>qBze7{7B7^fl=*ox7mG?SfapXdl-dPfXBUxu_Rc#IB zUq-wH4{D5tXo!C)V2%+osWgpbmCJi^prRt2bj$OyZPeo7Q{r3v@^|3ma%DhAiY6sI zG{eWzZn`XPD#Z=6dn(_XmvaQ@4Zg;osZa%du2yUeoPmm2GQegUfC+cf=tQmOk!P&J z^+1t}gY)FQXNJG-ZjUkz;f7hE*pP%|5`zrcGe}YvQ**-w6ei3+;!!9HZ?6MQ4=?*q z4$lYlI7qm55s^!5rup#thS1XIM;p-I(fxNYR+~e^3s2d?fboHklqy;%O9*b{#~mU8 zY^7&=WzObu*s3gCBM{bAn9tL1yb_11ebjGpAr!sp7?B!^J8T`Pu{oU<*+Q}KGC40B8B3G^&$~qm| zSD zA1Xl2D$;`OcV*DYaG`SFXrpq|R;8KhyasW)5sb}gk9K39J_`0y7zST@bH6sZo1vb7 zC%fB6^v|q%B{~Y%{{Rt5(kmg_KK*f2@DSK%5%%)YW0nB2epj62CCv%Y@>MKt1Puo+ zh3H0#jj)}W+t&t4r#Vj>M;@up7M!#49#s2m#{@#9%fh1r(gvS9A2%sWBf*fI$p#=U za7@3j;reP+1bE$v(jH?yFXrnG^fnY;;4Z$^Z7}^Bb*~|=HlKdBKSb1;5obV|Gk+y% ze&>7PvfybCT$hVG$>;Wn_8DMhDhvinIT79u?}&hPS2+TYRtki+7f){M;xtMyZqI14 zL_LJJ)(p)UMsi%ONFF+x2t^F&I7ceP`Gy?GF5^qIw_OR{X12~CR^@vuZMSRV1q9t$tkiB`oMM)4|I^Hs@x6!De zZMd7x?{8;QXjUD2xCTLQV{i43FFkkA^L2srD#IOU@vkx%>OH*#Em5qF_qM@@2VY+o zez`u~+nuj>Jk)L7b!>sAhryeE#z_T<8#P|QQbNuIvYx!(nKghJwfT-33EFNPf!W6L zB98;GohI@blmi;#l=ZBj?Py3(a9c%3lk2c=2_BHDbbLLzGKqqx)?uV10 z_1WG~7+LHke^-{i|H_FgVwK62xBd-5CrRdJ87m@M$=fw5hZQ|oQkY+Pmk zVtRe8-9jHg2)cUK0)C}lZ8em(pK9*k&99wdk;YxPMpf?2iGo z)D8sR_gDiR51##D6E!D}r`wjLF1}U{M>xwKkdc}C=8^Wm5q}3YLct%>U%?;a z8LoNg=l|wE;@Qy}JZx=B~Q)*KVUr{>1X7<+yADS3e#TOYTpQ&Yh7! z{aY4pxFsqj(T-Q8Bl_|q=(2ICgw}}JjLh7=SC9*Smk&GA)N>u@wDVYvC)xIG@iM9# zBx<|=4AR-px4Zr6)D+E{0qTN@9X@fSTo*&*XcVs7Yx3OQ2jQF%`l2Hk=WB!hzfnHT z7sx&PxyW~K;@6VjydI*J+`sfMP}oqQjn_uNcE)m5wnkvzm`cw(z+$ug&&R}%B>8>RwWzV2x{BSieb`)T*gifDEZ<*TVN!l> zRero%|JCygak&-+=eNR*`^wP4Fo4QS80q-`oIg{34o8v{xHYLALADQLNO_giSHv$VYA}baaNGv#AhcMlHoUJTzH*7OG$bS1ygku-` z#fI0#X^+;_=fQw;r_q8IdmTQ`Wa?=2uxKdjF0X;g^)>8>_-vg?W%k4X3y05Xp6{#( z;u3Cfsy?B5e-#L6vT$mC%Jg(GeDTcSaB8W}7c36LU4iUohC2G>+l=+!QvjMO1(!^9fKCIQQ$d$)WQ#I^4*PsX>*@72Yqk$=%CJiTc|bqm z_`}~VNR2X;5tMUda5?w{c;XfZ67Gf@{K|ps+txLTM(WUF5{yR`S!eur=l+DcSaTSMpC?V=%bG0t(qwlP#`>)FP;*&uQxZM1j)5 zt=l$Ys(bAB-p@qr$*dgA@s=C4UQd;%+bVzRxPosRW(j+kJ?u-L(c~^Wo;4*$>3xpc z2l?N4Ui1*EHgfv!Dn)%9t5>AOGg}QS_FJfTa6_<4kE^SzBuzRZ*5Cbq7b-dZ(VDXH zn^qZmzdZ4?XN}41`i;&taff3Owo)eB2sCX7@|?xKipfm5;r)_9{l4$Ptolr)X>1!)%6i!(yVXc$)ye)$J6}+%-xUvV zW56_ON3r$gO9M1O?n}IQ5#YN<#UEe)F&`ubwu_+j4vINI2K5d;KA;8J9*V<@QvA?tVcQ0t;8IePrh=_^xOnSaBsS2+F4;Dc)uB5{5MF=J; zlPlu-L7i? z$rQ$aR@eX|3K~Gvbt6*5>nOJsZ;bw0z_cLvY<~tM6^fn~Or5b;-u$PL6FGyw(Kh?v zoI^vYZgYJ%66DPI8;|?Q*m(rNsvi5(!}V~aPTH)D47&-}+X+UqKvY`<3lw~aS@+Usc|BL}4*{X~r-L&-5 zs!ppmE(+V%3B&^28-HGxkBJ-rchAibaL{`Xx-X_gJ2IGXYVa`t1IlJweSvA^PS26# z?6tzJUiqgcv1;oXe^>u18x`MEPxIQwxJ0Xr{4V21@>)t`*HHp{RP)_BRmHPiX-lO= zO%blgB;iH&mVUHLSy*%zjCtOr9WVKQiyogO6%3z+t7hO8Sr#L>K*iJ zgx%mJ`VHmgr)dr%o(Ehc%=dA|ti-eQMVjZL7r}AuG)#_zv0^mq< z4Nf_6;@$%YO>~OVhu3n*S-;-?9G>5=f5c_boc46sz^2Cq8HH4f1(=xZRFxkW3+ps#f@pj)Er38YB!Y6uccc5X!5xe%`{deePEDy$wcj}I0rC+mWcMR$`H@>@Kgb)trF#^E8+h5h zHLtu<)#SE4FCFQiQz92jzMHDFSZ7D_R3&*>O;hk+3odwqP?FlryHA?^<&JYw--{UQ zAu!ktn@oVspXNdIOG_%$<6xG1A%uh+k%?;^cT(Wb5+4@bQ6>hky+c-7s!gi4(XTCI zNQyp7mqK6bI!XihyRh^u#IX=CY(`-A|B53CeP%k+6y~mQT4(&*(GAM}b|$NRtm&V1 zcpu3ks2{VAy&PGOB?t+XSXg%VxdP zG9@eeYE-2qj=R~Ts`_gh)*__}Sd{UcU74eLihS9r_aulg7(9euDl@iL^?~|LGF~iZZ>#SGg9v@Wp^i&vB)zIpq!NHdOYeIEyJ7PrnqxIqm1Kn> zXr#xk+FWs71r$ou_|1GybrEkViok)oijqG&pws|m)T9h&d(0D^t}-a1r|DMJgs=2h zB5Dr8@Xv%e$SZ(OjiZ@l`KkRF zs><$0sf^kNX~8t`TKulsuYnKuTPT66T?H2X&x_;}F}7)2bj_aayJMnf6miV|nU#qb zN91)*({{1`nnKJ#l*k=})w_p_fVwN@zz2L9S&?#Hv$4LyV;401>HM z8zF{f-dsJx{zofP86p(MoB(TDniqiv3J={#VBm6_|8SXzu6|=Vn*LXn-9)8H=M$z8 zEaI(|C)uS&jqYE53<8;TMQROy+oJk+3P-?*XiDMF=-Efmu@`nf?DblJL3)@BX$cE*ouXc0W98AO22UsM8Jk&p!XH2P5}?OFPZVmi_PhD@Yb;}W zgA}HT(UB?vg}!1!+1@jeyY7#?@~>_GM2C{QkF8bQcjtEB{5A3cX5_6VGl!nRNR!vj ztDiGQ{1!fGF^3OT{#ffXoDX}oK~!4v^F)fzybfo)^$Ue|+JX(n>-2(_BB%Twg8bfL z5>{ng?=4gr8Ukzt?UiU3g=CSP`eBq9H5sy{$Ih zG)&pcmRQD4ejn~2{8$yaMKtj@w#(&1AU!2%h^O_#7k<~C--pqtJD2nd6=gZ87*?9Hj) zLm^G|xagR+f22r@9MRrKl{;!{9^(HA?Rn7fqI7gz?vxpJh(g!|1sfpjz6{9k?_FK; z+rPoT97dpqK02JQtC7ZgU)%Ij&#{=di&WdMbkqxPtp3Mr^5s6i@45ZOQ8(@aftgN0 zlcN`2yfYZ~t1wQ6Wjm`gVK4P}Mhn_{u`~-y-v3xQfbeXPj$l+n*i!2+M}g%OiH9pr z$F8vBE!#GePLzv6iMyXr{L0(02yyp0R|Ll|b$+<)mw*(CpRx3NkP0HUn+iCj?@tzg zK_n5jEj&!9p=8UKAASQOj)fE``u7~XQ!XZ^e*b%T&V>d?y>~_Qyw=4H6g2wkTLu&N zqqdWzipJYpzl$hUKibV-fk&ZKjpJYCK$K!Wjj91BU$*W#34qcOI384219EI;0YB2X z7|$P=ZF5_nEy4n3 z{2y+XfrkqX4Tq3GldJQF_Qgf-?W`*EZj6AMO!)G{-Lk2M?DE5=@qI6Pp!d>o=DLyB z!`;Qgv#c2--^FD*4jq%9z?O9i=(N5QKO@_|oWB=37Aa4U*ii@S*4*duk4fCTQ9C>+ zle>R~Vl_P!cgMFxQSK8}w-ZeWjuPzw-D&wwJNSB=K~J?lq4MRrqrvCM{!MZ)Ed_`0 ztIed;8w8`#Ak6jqo?Tp9)v~9N>{l#kkDs>s;=P?drOysc1Rl+!3perg*t^U1xPIC~ zIK}%wJQC~|e3f>+RrF{Bds8LK1IG^-;zz;YFsg+TMKio0fz|904{{OD(sx;hw>a$= zt*~C5%JrRbb0bZG%H@|cmp0mfW(oIN}bg4P|d3j*Hy;}A~o(KO!va*Q>rqm@p^ z#P-Wx&h*PoAQj5Y+1?b`V`r=r?PoM+n|1kFuwlqff!b8ima{w;N1QlJ?8+IzdR`>o&hY z<_MCrZ|pQq=vlHcFE)+5Rv+C!E5#_A=!jZ<`ABRV(h+p-8kZpg%*Mu|aqbS-8}!C}*JFraXJ!5d;3NHQowu(9 zCdH06{9?Dy(nkII(8a9b4Q*%aoR<-=2FKGuT*yfZej-*g-bA_K>r`hz;-Iky;VxTBPl_PK{)h$ zVVOuokW5@2VAcIjjpDbHM7Sn$WZ{BHfUv+%VXCOyvCgm3uQ4j$m1s>T6l#279xq0S zv+W*Fbd6JSo>Nc?TiF-Z0Iu8zQbFJV;j+9hJudEvI$gH?u@s(cS>MO5-e_9tHjH-~ zw|G@~&`M)8m3nKPU*&}w&Ydxr-$t}VA~0n&1&_;G&$oyPV&U1A%ON2BwZ9435&_li z3I;{;q*bf;%3Wd)OrM2O82bV<$TD$~*sEKR}m2pa;n!6|MGUCB|r z?{BXJERexY@*AQ2**#*=jOE+!QA}t|Y^1Nq#r+y@rYi1dX7-C7EhET&-ou0Td6wA| zv>PFk=<684r5z*xvv-7DlTkOs(-v(de(m@77ws9nMEJxxjX9>uI4GyZh1u1<9R1u} z!Cu|@L;Q~+%kb?}q8{CDraa)U|Ge1UE2*fL3b8gMMOzh=rUOq2)TU#?U##`WrLI1JrEl*8q8m3H!ON)U<-52A}h6N zNZcRCISf9|ybL%I^IN`IvRcksez?Cl7hAhF@|b$pclMJhr*{4F?u#+)Xap@0>lT%$ z?q!+Z>QiH9m{eNZqOHlIh@%v=5W>{;peN z*(A8^$IBQr!4fSzu`5U4Gef9;bqgN_?fxp%Cr4?Ej%vHWVxu9r8aa9062|9!Lcf1$ zUfib#-VY}+;ww3nlekuQ8^7Pve&`lE9SijwOldo1xEY~S!Eg2QHSpd{q7m_>67l@> zm@1$G(Nay+LV;3>-W-C|H@H1-k#zrz=Ub-Vz#Yx>OE!e)i~nssUhRhT4Zahm;`~o> zgMJqxIRmkcUQa*U$)YNtG1ZF9IeRR!aOp1{;wD@gVp3}BiEj$GHs=yr=OH2fP=p@S z%)Z+2{wKkL3MiIJ!Zg`qB!V3!PPhuz3iGd69JMA9#s8dhe_E(KwyHu&u>5ol*Ew)g z*lj3ZCi+kWEQxfXYB2BO|A6q92N*m)>CV1)XEW@hasCJ9jzg(cjMX^-*Q9nB$qw_F ztY{o;q(Q-Ri@@bWiH6#h_!&cB%%QYNAAIBH1Z;di0pJ@A?xzauLYGW^!TWwd%?@ZS zeJVEiG{wIS-pjD}x>5qt+aE&)3;Z%H7BSgn!cC3pHe!{I6w2dQLF%5mf#LpqW232? zzr#GJlSZfgeBO>@6xX$*p!RVbI=WjLW02q@R0Jws2?s9UWlvb@J8mlgQpofy*#2Tf zPWY0VW8B}nrL5T8wU&ix?^NAAcZ*EVI7nt-~cBr)~$V70REKD{@#q!3j5oJ`3vas{o(S^SL99|qhf?`=r~(x zszqt^beA3tkK)|=brDSf-dJQf*X%Pf#%t1jQa2HNTl#G4mNb?4qGVB2PhBT&G zI2uf^KHQ*2d8$(lnmDs30gNIIpwf}O#t+vsme{K9&^G@^#1}z4l^y7-;ewrsETePL z*Bw++GWi@_!Rn117&r!cvN)rpCy#A51`;ei3dH~ka^!T^RhP6U-U%eApCDg^vcoLW z9=<-d<1kB+ie;^68DtwDzca{jX2(luzghgMB>_FIWO|fMu9QZ<=hsiskb&15euW6u zh7;6&>PDE#jY)~A#zQUEEtuD5`{uuby3W|42H8w`Vg^b9PZ1lsYDf;Q+PEaBzPuV%|Xw#`NJ}J7;ZD4d+M}Gc` zZfIhlxXY&9$jZ^VH}j5j2n#fZo6qHHNH1aTurCqC$6DLGwHakq))g+?!hAuTy$3`_>nphLmNi{AFuD zLsDi*>(6)_$2aTyWcRrJX83Y^3CwZu?iG}Vj;gD7@k>TjAWnf$N1h8 zl`H26rcjbMQ9_;v6Pie926*woMBb3V2Y=`ytgV}yi_difla;YK2Rrehk4%HT;|0Ve z3a1|}yH>(BOKwO*)yT_(x{LGJht=rOGNBhjR_gUqm#a@oyo}+g?4<7crtsy!ThgDy zuwTjQ3$DjU#?&we%z*hW7;SB^os8I(5!%+#w^G0ib2?BVC#_HV=E~tD!&FZ)0_V^n zRz%AtYR3$dz&nN{${X)rxuW<(wAXUQjW}po1OWCdY~jagDv8Sd=wRNg^P)PIUluG9 z_(kPtmlWJ`&$ZufWtk00^*mBfPyt=Fu6rs?+CwsL&JXRNqnz!xpPLGKiar#iUX>%* z5)Ugq$|F@GC<_AXrRWkooE9>**0rbT*V%^adbv0#C*qk!8ih26hv{=Hp@{joH{3>G zlR?X1PP+EpF2^vP&n{K610ASfCNo0yA%8|J6xwpFGChl~cwaJjT2+Tx5(HGyfhOV5 zvzd7p`5ql3(kwRI?dRuS0i@?BnlzV{2N8)WDOMb_SmN}GI@eV^bo1RN$o-wk!9;t* ziNt7p@Z>ZJWiCFpB^~#)&{+M;(_P*-rTBO;QcvcAJ7ZEHD-9-ermDd;h9DgP<}a-LlH_4~B*FlLz%6q(c2w1Rnq&n`opOG&L}WFC?JEv7f#oJ_GN0Kxz`?p+Oay96 zsw_S_#nMZWV8rG+5u9XNJexDgk)@c;5;rH)E##slu|4| z=`@te9Wb_ny&zkuB>J}Nf;Qb)At#D>^dbbt0bRdXen2KmTmyZGv@+tGN%cOOOSZj= z_WcR$p7|8l>w)sJ`a}vK7plKv7PPNiKUqcVJsDQr$lV|JWG2jWCQQJ!d%JTGRjK$I zzvD9jN|0vzG=mfV=o^3?rZp<6aQbnS3LeF`6CHw=ZKWrdRCcJ-k=68VbO4-K&v@|X zoDtg2YGg&f+d?Wg#U=Sodf)YX@Z)N7c~a4XC+0M-dxbf`@^8HhMBi6J6V!J>Co_M$n(A8Mg{jyT={ zsVK&9C=8e+G}-_Q%!chpV19Vyv7N3?a;`x&Xcg3xV}_-Y`O5J?DEXY-pmBf-^mDW+ zAR@|mB#$HUu^hqSCMEbHbU(DwlI$>F#lUV)GN8q|fRS1!A0Xm2E`I53hzGy9&HbS5 zf&suMP_2!4lC)8|_G|{dM6`_^AXWOT zuDUt3V>PuhR-}Bi^G;}k=mZlM>4*m8bCK}d$&0YpEo2XfM{$WWiK&oSSo2mFL?enq zj<{@@6Sp3tUgA)Sv^N?DEZ~P9v-miygL5H>y!;#sruFC1zL^qhajYL4dbO`;ROgA7 z1x{A40boo0L=x2M1V>>|e$GmBiYBfTasb_lyC&&M#~PP^i{*(_!A1N6NpCN)F~IsS`)9tHJGP!t z5KS1+YQTR$Su{k~y;re2ZV#&&OQ+e8lcRc0OgEE`226CT?G;llkgAJ4e?>4~$Y?Iky6iawi6y@a8mLIp zUb`~R)Bb5*3p7lQkmu|im6%$~Tn*9QTH{Slje6$leZA2^%*FJBJt#3jIMdsjBhmwO z*$TUvDT+(NvVTnF-%8{O;*f#%J--_EpOjk^dFusTV%3T);j~F9h=xnyHXv4pp781m z@Pzs$i_{xTX!k91ejRN!{x_JJS5~! zoLVcEz2@@|kQ<|#ciG+y>7x1Tv|GFp%oVP}w1-fxKG#n=mN81xtym#cPX+9fWC?Gq zNz784hG^QIvGTJ#gt{lVOntrjZ7B>#80}|3|7tGiKgSgKQ<2<&Go`xgmFQpaDofQ# zOY4!9@oIX96>$2$!vn5QSsH+_Y}!IlmiQ)k2{#n`ttp9(FqhHw zwjoKn3)SyY-#(|NcXhmfxk*15w~chM^nOVSQqe?Gm@aYQ9m2&UuQ%^&o9`praBScC zG%_fTD4~(VOFP_)6tZw^@-psRop?FRayWgihTls=T??V0J5bqCV8C9MQ;c$YgPdw z30F9bl9N)6LfE}hsI}M=(`z82CzLSS&iNP4LbnL6&w0XYrWn`R4;_xbzQ=fA%{Bx+ zAlGQQu~9@qAO^m#B1TZQ$MSOhPI93wuRAK8$+rvB2bkK{6ZV?M*9RhExw5E)GjA&p z=`S_6$F~Tb_6#+=6|ot8S(6P7nuicHmLZ6orgG0MVpoBid4H_O#gea6)pmGRoajj; znXr2*X!XN>_xIW*-GI1RZ1cWP3SLV!qvHGF@5+7qMV7Li1KsIDKGwHfZDl}xmv4*) zyF}9EUgk7ya~d>`E&A-2F_g!~D+Vx7)R^@?x#)Vz>80*F8$F|BmRt=sH*^U*AXF7y zg|5(oU=EDUY#vJ_k(d^9H%3WC*FueyWT8+y*Ih7Z2_qB3kAm~7wsuqZ`m4H2N-bKw5&5fnq>G8p>*<7&=V%Lj zM8puW1Lkn)0l_dA*?KV(5!wGg?6O7C)9Sx7mX|CsZIyiPyDhS8b44ZQ({r~YC&3fF zeKuq4w8q%xcsmNuRZ8J-M4UW|^6al~JsD(O`Ushgp^_MpP^~A610pyr@$7LgiLv_^ zMrBux?{Bz?TYb3kTx!|q~lny?HHR(tv>61bmQk2e=^JFkt~q~>XX|m`0vz=GT_&iT}7(^xh?GB zBJja#dK1CoCyciV?|o1FFLqS}=c}?{_@ivI$BS6Ii1BApB{p@U&jy~A7?V1!1&H3A z{_?~@NpVAvWN5bc7OAh6+wki(ALrJAj81eEulrTpz@s-WuB`4=A{g%4ZlJ6u5X+;q zPULw>+5x8gY&+m;mp5xfTOT4*ROa|_X8f=zj!+C2fE&mCInGq~M-iXqCX1b3wee~c zwmEvMO(VoiaXYF|f{m0fzd8)vhWYcFlkSZ`6Lz^zeg`edWW1Hmp6*8^%SXA&1-9x> zonH1Ax?DqiH6m8YDsogstbdzqz_m`ezKO*cSv2(zcxw|ZTpn93v9 z&nQ5OS%hKoY3HZ^N7Y*ZRn`69!*Hn!1|=Yklt_2SMG2MePU)8JMnEJ~x?8%t5fG%i zyBldq-+g_a=lB1wp|4BQJE)Gh|K7_5_RK8TNC-vu!q;;dD`ewcBDQg*8zbKGhd1V#5oXen6ed6N1Co z8v^nPzEL0{5bUaM#7+ZJ_EI%d}2-@l(!wv?y-9ox}eCkg-mzBt2HH zxqx{`m9M16Q--1&a4Vg9WqF zUJ>G*>n0ehDHE$ifGbW=v)atNCYAVyZ0h!N;xT#%lGja11|iRtrJtm3YasfeJiw1f zFlpiZ9`vq!K7x>AvM2`n9vO8AH4V7Ew#(&wssf#lD^<|6`^>F`7rEI@J|MkboC!ir=5dQ*sdE z8qsc@QgfPYj6hKSA@4_TL>)PpK?r5pJ7^`ui$fL384uS{O2MRc+7}W3eA`ni^|L6i zz18bFyI{BP&}BH{PfK5Zahh=ZK1edUlH5{wQcjFJ72(;SWDm==u>CrnKq=r^v>b#j zgkV$cUw*O`r!;xiM=~$Gfu5o)4D$) z_rvt2NB?>5pCClvhQOnjXAQw845vbcVw_nt2;bI%rP`yOy`ujb-U~|Xyl2RD=4gmA zUjwAbc*_~BSAPuNg`%Ng;>_ps#jUxqp2|Zpvn$fqp7q_a(x->@MY6j^jbJZ7 zlQsRRHl`)_c;*!YbbIw=Soj~}ixjf|)3rtSmG9zOX=GDM^GZAWR3u|>1fRP~M7c%; zZi#Vj6Kn)}h%ir6qe{F%*6%DJNEHp?JiMe%#f2)&ht^MlCh9SX(ap>I=x&aTB6Nk1 zd8;!aTln}gfoz#%ejh>}Td&no*d%dT5;3^n-=e6>rDjo!;bb}uCi7j0uyK9oc%UGa z1TPLec$V@H!3;iB!$ahkA7=dW1~Mv{o%I&)e8{Wa>GA+JKTQ9JY<;K1d%{Q5se7KA z?)Ji=*QZyvSGA~RGh~A+4gsj=Zl^=D?zHx=$OJv!jI($KW96K&JXNMpATJtI2tNgb z_gi)so0bPxR}0O|vsQPAf&5b>awsS1g9I%2#aVd2hD1nSeN27jLp#G4;&hEk{d)`_ zRc{%4wyVXJc^^Jj8b~2l^G21m>wYd$VjW*NV5&Vy$l7k4yf^I zO4_Eqril-5ZlDuI=2$GeNIAY$=vhn3dM(3IQ+inF_6X~pDMwwc8Msx`{)|mzbpz^(-TS+xKMOiu1J#?T z{ii!;J4&(7ZCWqq9U|)mEARGa&cwVug+AV-xq;Dj>mSRPq1VD!>t9Vm#iLG|RuX=4 zVDAZhzg9fS9rK}`&%thlGIxsjKPcQ&YdOKQVni}~Ei)qN_bW^xqeX)+&9|6Wor1O48tRWZ>o?+%5d)_LN(ae?4wHr5(sq(dq$-LnHW{ zl(tTkqcqtZ(G&AcG$9UUd;|M%#}k(KcOUov^8&a43waZ`T&hx76KXz-H45^3QDguE zzs-vF5Nil-#EYFfYg><`l*^l?KZ{MPSU;@RW)~gDWG=k)DL%L>KAwuOYf^iR3se|Il3MAcFh#38(r}v2~wM%h0oSNeF~ehXjkT z%Ijo5gRVgOsX}cy`n}y_8zn)k_g$MS1AlVfj3YhZqpC9<8vWVGiCNF-wnOsY0WE{H z+@ACuf_YZcfQ&>omOi~JQ%q-Qx`D{;3g$wv@YyqmXA)I3Zy6s2#t`-~#F}gSzeoCk z0;cQt5tp9))`v9#O>+!>i7n^FwljBR<=1I{uF`5)kWY6vk?gQj1Y*SI$~Fy!JmJ%# zRnoXEG5Boda7*M*J-YjB`@F8UbGbWJAaCRr4P^+0+Q`+~x>~EZki$C@+2bQm3Pw~~ zJB{ub0?{r{yVR6t&o+CG;ACVW7ee_qE?(+X4+San=?M8(+DfPnA@!>2KIn>gj3q1T zoiqU?4|VlLO@syKa%DU^04rUu;@Y0{<;!73^4Z9?jjKpwJjAfqovUy4*=9ur%0F^2 z`QD=+dG1vY$+8(QMQ7@+kAH2n`-=-K1gmi_eZ2o< z7CG2evVEeWdxg`6^W*>)o6CtB7LW8cSTTPUec0utS=W-8yC=jh+d-AhRz zO1XkZan}ue8{hZXKMQADaVG@x@BZb_vA^+EFzB?Q#X<4}G}&@&+fAHj5pH&)Zs8F{ zO8A#rjDsW{Zv6@GC_-gzJSBN>os`JnutO9EqTy&@AVpNLe!9Y~z@;POxGT3fE>bpY z|A!m?!!CnmYE8+az>(__{9Hb^VPctwKUk*=m7@`2wHS}2&%cZFEwV@Sn2^UBp>JpI z7o7NLYz*qeh!z}zi>pK;kfL-lQ}Qd3F^3rFu6GAK>0^(b{T+c8>(*qMxgjCIrV^QJ z0gx7XQYb~{u`tERN?eHSLBWZjK?(Ew7n$fRkDCN5SMCS3r^JrAv0O&3kEM-dSppy< zou?l|Mn|?(9eree_qz|(33os5I8NL}70x(i;qY-XJF zPDbxKbvb-Qkb4`43ln?(w!c22!BsNSph2v{Yh>-L-U3_R@vy+DSy>Atl7~2LD&cBw z4>Tn1vzQ${f4nUIKO!w0Jvs-_m0Gi9E)jsrj6x8Y!*-ZezSxXF9U(yn3ynj)loppj z#PN=KX=n4>+P^sWU$mP(&Ue0^A+Gf;py}pOL)r)U>(t{+x#BUay>7T|y@buA^vac0 z-LzW!DusHr{sR>ObB7)9RTDkWC!DeK+L59AUD_MJ^JX@Jke|u;vVB2zbW>1m`9JW9 zQvM#$A^XzG-vXGh=OqM;#tQA&7><*J^pI8lp_=}^nNjL=z7ccC*b4Z|jaLX#Ob*eZ zu`*}7C(``^xkVrCHkgN;>1_Xo%6}k8zmL!5J$`%$DDiA8#9N|^p#w`%4P_MpgzW*F zozWbdGg0BopJQ=0wJ?ht@<141MjpZ2&j`B+$nWEUz;ON%gQM9011cb%7k z?0h)C)AHx;XwE*cShL!mN;0A-gL>QweEn7E_<~cNU!S>RYu&r5zd|f_S%mUNAobbH zqwXb9vtmR5jhJkezzX-te6?lVT!pbz|LCVE6XIC&*vju-|6nZOYv5qJ?w5DZ!xbzC zwM&O&US|qI95|w*aEAc3#t|kx2cbFcCm4V4NFJh|h+PX^`W^U7T+Bf_^X|C&RK%aS z_7~_vb!v!@`?dGP9I{yi)QREi12!O|A5fz-9E_ey!c=+ncqA`&IUgwfy`|kd#c6D zV=7bpfeV1TlucBWYe4tKhYjN`)oWb@cp_cC?_+U}v@1}9tmt`k+j*U=zp3PB(W>bm zNa7hP8cGP+)XAoRI|9hBp)a?8PuFuj_W5P8qWi-%XIDI3uhsi-BTlczl?cEGUjVCjSA^>gP0J_ zfyn;_8L6Y0DZ#0(j(&Kh6C%@TrClWTmLwp|88rUdl_mp4RE+??#vM>k55Q~m_Udw? z3(bK$(qzjbNKsq<$VKgyqaDXEI;*Lc{_ zcL(RK!J)ndJT+~DMfnvCCBk!s1h9HDZ`#7PB@Sohgttr1&!wCW4V<~fs{yV-CkN^0 zGf_^Z$;7I?yScn1?WHxxdlMX;u9pwpj$%uh0Vqjg$R-(H>^H@4v{<76vxntEwd-JZ z-&1U^PBu(JjeJYMPH`T3sm#%p?R+rH%)>Lac>KYD%NKa^zep6wkAKH!$;A&3K)6LK)?l20yD5DS|ju+7BuBLZ5_)lYVcjszLr6w?> z$;8%V)o$$tR}%(lUo4y+P~X9s&3;dyjJi!dxk>s?WT2zno2@QfaQN;;_mmiGH2cFN zV*Wr*G7caedvkT)nZCZ-6$Xzg`}eA)xdqXRa@R{fa%{VRKy`8(j+T_UmuX*E?8$eArzc?$UV+NY$T2D^8^f zvi`LydLjqr3a-Ml3=pnV1X86*^-ZDKXKNt*CNY89^>C)n4?fQsXM~9EKU1s^M$U+P zfwA75yisjAl}NYIG7dbJrm`gErt-(|HeVci(D`MbD zWCTgxVTP)ⅈ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
    Z6{>xvkwd!(P}N$QpDI%yKAb^#(@x_}ovG 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

    RTUMR`5R+xd~BU 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­=Cem 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

    U)4 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 diff --git a/docs/_images/td3.png b/docs/_images/td3.png new file mode 100644 index 0000000000000000000000000000000000000000..fc28eb40494138e5663d46e30d8e373d9709413f GIT binary patch literal 49185 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.agents.qr_dqn_agent

  1. rl_coach.agents.rainbow_dqn_agent
  2. rl_coach.agents.soft_actor_critic_agent
  3. +
  4. rl_coach.agents.td3_agent
  5. rl_coach.agents.value_optimization_agent
  6. rl_coach.architectures.architecture
  7. rl_coach.architectures.network_wrapper
  8. diff --git a/docs/_modules/rl_coach/agents/agent.html b/docs/_modules/rl_coach/agents/agent.html index a7c44f7..49d4a8a 100644 --- a/docs/_modules/rl_coach/agents/agent.html +++ b/docs/_modules/rl_coach/agents/agent.html @@ -278,19 +278,6 @@ if self.ap.memory.memory_backend_params.run_type != 'trainer': self.memory.set_memory_backend(self.memory_backend) - if agent_parameters.memory.load_memory_from_file_path: - if isinstance(agent_parameters.memory.load_memory_from_file_path, PickledReplayBuffer): - screen.log_title("Loading a pickled replay buffer. Pickled file path: {}" - .format(agent_parameters.memory.load_memory_from_file_path.filepath)) - self.memory.load_pickled(agent_parameters.memory.load_memory_from_file_path.filepath) - elif isinstance(agent_parameters.memory.load_memory_from_file_path, CsvDataset): - screen.log_title("Loading a replay buffer from a CSV file. CSV file path: {}" - .format(agent_parameters.memory.load_memory_from_file_path.filepath)) - self.memory.load_csv(agent_parameters.memory.load_memory_from_file_path) - else: - raise ValueError('Trying to load a replay buffer using an unsupported method - {}. ' - .format(agent_parameters.memory.load_memory_from_file_path)) - if self.shared_memory and self.is_chief: self.shared_memory_scratchpad.add(self.memory_lookup_name, self.memory) @@ -444,7 +431,39 @@ self.input_filter.set_session(sess) self.output_filter.set_session(sess) self.pre_network_filter.set_session(sess) - [network.set_session(sess) for network in self.networks.values()] + [network.set_session(sess) for network in self.networks.values()] + self.initialize_session_dependent_components() + +
    [docs] def initialize_session_dependent_components(self): + """ + Initialize components which require a session as part of their initialization. + + :return: None + """ + + # Loading a memory from a CSV file, requires an input filter to filter through the data. + # The filter needs a session before it can be used. + if self.ap.memory.load_memory_from_file_path: + self.load_memory_from_file()
    + +
    [docs] def load_memory_from_file(self): + """ + Load memory transitions from a file. + + :return: None + """ + + if isinstance(self.ap.memory.load_memory_from_file_path, PickledReplayBuffer): + screen.log_title("Loading a pickled replay buffer. Pickled file path: {}" + .format(self.ap.memory.load_memory_from_file_path.filepath)) + self.memory.load_pickled(self.ap.memory.load_memory_from_file_path.filepath) + elif isinstance(self.ap.memory.load_memory_from_file_path, CsvDataset): + screen.log_title("Loading a replay buffer from a CSV file. CSV file path: {}" + .format(self.ap.memory.load_memory_from_file_path.filepath)) + self.memory.load_csv(self.ap.memory.load_memory_from_file_path, self.input_filter) + else: + raise ValueError('Trying to load a replay buffer using an unsupported method - {}. ' + .format(self.ap.memory.load_memory_from_file_path))
    [docs] def register_signal(self, signal_name: str, dump_one_value_per_episode: bool=True, dump_one_value_per_step: bool=False) -> Signal: @@ -868,7 +887,10 @@ """ loss = 0 if self._should_train(): - self.training_epoch += 1 + if self.ap.is_batch_rl_training: + # when training an agent for generating a dataset in batch-rl, we don't want it to be counted as part of + # the training epochs. we only care for training epochs in batch-rl anyway. + self.training_epoch += 1 for network in self.networks.values(): network.set_is_training(True) @@ -1229,7 +1251,15 @@ TimeTypes.TrainingIteration: self.training_iteration, TimeTypes.EnvironmentSteps: self.total_steps_counter, TimeTypes.WallClockTime: self.agent_logger.get_current_wall_clock_time(), - TimeTypes.Epoch: self.training_epoch}[self.parent_level_manager.parent_graph_manager.time_metric]
    + TimeTypes.Epoch: self.training_epoch}[self.parent_level_manager.parent_graph_manager.time_metric] + +
    [docs] def freeze_memory(self): + """ + Shuffle episodes in the memory and freeze it to make sure that no extra data is being pushed anymore. + :return: None + """ + self.call_memory('shuffle_episodes') + self.call_memory('freeze')

    $ZxD%r=XNmvc?QgnXj6KO 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 literal 0 HcmV?d00001 diff --git a/benchmarks/td3/reacher.png b/benchmarks/td3/reacher.png new file mode 100644 index 0000000000000000000000000000000000000000..65a23c37962c42f961ccc899c6c182b2f68dbdf5 GIT binary patch literal 98594 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 literal 0 HcmV?d00001 diff --git a/benchmarks/td3/walker2d.png b/benchmarks/td3/walker2d.png new file mode 100644 index 0000000000000000000000000000000000000000..117d8fabc36ccff6317e906f976614ae8719d2ef GIT binary patch literal 94672 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

diff --git a/docs/_modules/rl_coach/agents/categorical_dqn_agent.html b/docs/_modules/rl_coach/agents/categorical_dqn_agent.html index 371b630..6262571 100644 --- a/docs/_modules/rl_coach/agents/categorical_dqn_agent.html +++ b/docs/_modules/rl_coach/agents/categorical_dqn_agent.html @@ -196,7 +196,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - from typing import Union import numpy as np @@ -266,13 +265,22 @@ # prediction's format is (batch,actions,atoms) def get_all_q_values_for_states(self, states: StateType): + q_values = None if self.exploration_policy.requires_action_values(): q_values = self.get_prediction(states, outputs=[self.networks['main'].online_network.output_heads[0].q_values]) - else: - q_values = None + return q_values + def get_all_q_values_for_states_and_softmax_probabilities(self, states: StateType): + actions_q_values, softmax_probabilities = None, None + if self.exploration_policy.requires_action_values(): + outputs = [self.networks['main'].online_network.output_heads[0].q_values, + self.networks['main'].online_network.output_heads[0].softmax] + actions_q_values, softmax_probabilities = self.get_prediction(states, outputs=outputs) + + return actions_q_values, softmax_probabilities + def learn_from_batch(self, batch): network_keys = self.ap.network_wrappers['main'].input_embedders_parameters.keys() diff --git a/docs/_modules/rl_coach/agents/ddpg_agent.html b/docs/_modules/rl_coach/agents/ddpg_agent.html index c4f194e..cbed0ab 100644 --- a/docs/_modules/rl_coach/agents/ddpg_agent.html +++ b/docs/_modules/rl_coach/agents/ddpg_agent.html @@ -206,7 +206,7 @@ from rl_coach.agents.actor_critic_agent import ActorCriticAgent from rl_coach.agents.agent import Agent from rl_coach.architectures.embedder_parameters import InputEmbedderParameters -from rl_coach.architectures.head_parameters import DDPGActorHeadParameters, VHeadParameters +from rl_coach.architectures.head_parameters import DDPGActorHeadParameters, DDPGVHeadParameters from rl_coach.architectures.middleware_parameters import FCMiddlewareParameters from rl_coach.base_parameters import NetworkParameters, AlgorithmParameters, \ AgentParameters, EmbedderScheme @@ -222,14 +222,17 @@ self.input_embedders_parameters = {'observation': InputEmbedderParameters(batchnorm=True), 'action': InputEmbedderParameters(scheme=EmbedderScheme.Shallow)} self.middleware_parameters = FCMiddlewareParameters() - self.heads_parameters = [VHeadParameters()] + self.heads_parameters = [DDPGVHeadParameters()] self.optimizer_type = 'Adam' self.batch_size = 64 self.async_training = False self.learning_rate = 0.001 + self.adam_optimizer_beta2 = 0.999 + self.optimizer_epsilon = 1e-8 self.create_target_network = True self.shared_optimizer = True self.scale_down_gradients_by_number_of_workers_for_sync_training = False + # self.l2_regularization = 1e-2 class DDPGActorNetworkParameters(NetworkParameters): @@ -240,6 +243,8 @@ self.heads_parameters = [DDPGActorHeadParameters()] self.optimizer_type = 'Adam' self.batch_size = 64 + self.adam_optimizer_beta2 = 0.999 + self.optimizer_epsilon = 1e-8 self.async_training = False self.learning_rate = 0.0001 self.create_target_network = True @@ -323,7 +328,7 @@ critic_inputs = copy.copy(batch.next_states(critic_keys)) critic_inputs['action'] = next_actions - q_st_plus_1 = critic.target_network.predict(critic_inputs) + q_st_plus_1 = critic.target_network.predict(critic_inputs)[0] # calculate the bootstrapped TD targets while discounting terminal states according to # use_non_zero_discount_for_terminal_states @@ -343,7 +348,7 @@ critic_inputs = copy.copy(batch.states(critic_keys)) critic_inputs['action'] = actions_mean action_gradients = critic.online_network.predict(critic_inputs, - outputs=critic.online_network.gradients_wrt_inputs[0]['action']) + outputs=critic.online_network.gradients_wrt_inputs[1]['action']) # train the critic critic_inputs = copy.copy(batch.states(critic_keys)) diff --git a/docs/_modules/rl_coach/agents/dfp_agent.html b/docs/_modules/rl_coach/agents/dfp_agent.html index 2bcb686..2056a75 100644 --- a/docs/_modules/rl_coach/agents/dfp_agent.html +++ b/docs/_modules/rl_coach/agents/dfp_agent.html @@ -365,7 +365,7 @@ action_values = None # choose action according to the exploration policy and the current phase (evaluating or training the agent) - action = self.exploration_policy.get_action(action_values) + action, _ = self.exploration_policy.get_action(action_values) if action_values is not None: action_values = action_values.squeeze() diff --git a/docs/_modules/rl_coach/agents/dqn_agent.html b/docs/_modules/rl_coach/agents/dqn_agent.html index 7b7eb82..c823c0f 100644 --- a/docs/_modules/rl_coach/agents/dqn_agent.html +++ b/docs/_modules/rl_coach/agents/dqn_agent.html @@ -232,6 +232,7 @@ self.batch_size = 32 self.replace_mse_with_huber_loss = True self.create_target_network = True + self.should_get_softmax_probabilities = False class DQNAgentParameters(AgentParameters): diff --git a/docs/_modules/rl_coach/agents/nec_agent.html b/docs/_modules/rl_coach/agents/nec_agent.html index ef658b1..d1a877c 100644 --- a/docs/_modules/rl_coach/agents/nec_agent.html +++ b/docs/_modules/rl_coach/agents/nec_agent.html @@ -199,7 +199,7 @@ import os import pickle -from typing import Union +from typing import Union, List import numpy as np @@ -223,6 +223,7 @@ self.middleware_parameters = FCMiddlewareParameters() self.heads_parameters = [DNDQHeadParameters()] self.optimizer_type = 'Adam' + self.should_get_softmax_probabilities = False
[docs]class NECAlgorithmParameters(AlgorithmParameters): @@ -349,11 +350,25 @@ return super().act() - def get_all_q_values_for_states(self, states: StateType): + def get_all_q_values_for_states(self, states: StateType, additional_outputs: List = None): # we need to store the state embeddings regardless if the action is random or not - return self.get_prediction(states) + return self.get_prediction_and_update_embeddings(states) - def get_prediction(self, states): + def get_all_q_values_for_states_and_softmax_probabilities(self, states: StateType): + # get the actions q values and the state embedding + embedding, actions_q_values, softmax_probabilities = self.networks['main'].online_network.predict( + self.prepare_batch_for_inference(states, 'main'), + outputs=[self.networks['main'].online_network.state_embedding, + self.networks['main'].online_network.output_heads[0].output, + self.networks['main'].online_network.output_heads[0].softmax] + ) + if self.phase != RunPhase.TEST: + # store the state embedding for inserting it to the DND later + self.current_episode_state_embeddings.append(embedding.squeeze()) + actions_q_values = actions_q_values[0][0] + return actions_q_values, softmax_probabilities + + def get_prediction_and_update_embeddings(self, states): # get the actions q values and the state embedding embedding, actions_q_values = self.networks['main'].online_network.predict( self.prepare_batch_for_inference(states, 'main'), @@ -362,7 +377,7 @@ ) if self.phase != RunPhase.TEST: # store the state embedding for inserting it to the DND later - self.current_episode_state_embeddings.append(embedding.squeeze()) + self.current_episode_state_embeddings.append(embedding[0].squeeze()) actions_q_values = actions_q_values[0][0] return actions_q_values diff --git a/docs/_modules/rl_coach/agents/qr_dqn_agent.html b/docs/_modules/rl_coach/agents/qr_dqn_agent.html index b08cb4c..d77af62 100644 --- a/docs/_modules/rl_coach/agents/qr_dqn_agent.html +++ b/docs/_modules/rl_coach/agents/qr_dqn_agent.html @@ -196,7 +196,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # - +from copy import copy from typing import Union import numpy as np @@ -262,6 +262,17 @@ actions_q_values = None return actions_q_values + # prediction's format is (batch,actions,atoms) + def get_all_q_values_for_states_and_softmax_probabilities(self, states: StateType): + actions_q_values, softmax_probabilities = None, None + if self.exploration_policy.requires_action_values(): + outputs = copy(self.networks['main'].online_network.outputs) + outputs.append(self.networks['main'].online_network.output_heads[0].softmax) + quantile_values, softmax_probabilities = self.get_prediction(states, outputs) + actions_q_values = self.get_q_values(quantile_values) + + return actions_q_values, softmax_probabilities + def learn_from_batch(self, batch): network_keys = self.ap.network_wrappers['main'].input_embedders_parameters.keys() diff --git a/docs/_modules/rl_coach/agents/td3_agent.html b/docs/_modules/rl_coach/agents/td3_agent.html new file mode 100644 index 0000000..9b68178 --- /dev/null +++ b/docs/_modules/rl_coach/agents/td3_agent.html @@ -0,0 +1,448 @@ + + + + + + + + + + + rl_coach.agents.td3_agent — Reinforcement Learning Coach 0.12.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • Module code »
  • + +
  • rl_coach.agents.td3_agent
  • + + +
  • + +
  • + +
+ + +
+
+
+
+ +

Source code for rl_coach.agents.td3_agent

+#
+# Copyright (c) 2019 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+import copy
+from typing import Union
+from collections import OrderedDict
+
+import numpy as np
+
+from rl_coach.agents.agent import Agent
+from rl_coach.agents.ddpg_agent import DDPGAgent
+from rl_coach.architectures.embedder_parameters import InputEmbedderParameters
+from rl_coach.architectures.head_parameters import DDPGActorHeadParameters, TD3VHeadParameters
+from rl_coach.architectures.middleware_parameters import FCMiddlewareParameters
+from rl_coach.base_parameters import NetworkParameters, AlgorithmParameters, \
+    AgentParameters, EmbedderScheme
+from rl_coach.core_types import ActionInfo, TrainingSteps, Transition
+from rl_coach.exploration_policies.additive_noise import AdditiveNoiseParameters
+from rl_coach.memories.episodic.episodic_experience_replay import EpisodicExperienceReplayParameters
+from rl_coach.spaces import BoxActionSpace, GoalsSpace
+
+
+class TD3CriticNetworkParameters(NetworkParameters):
+    def __init__(self, num_q_networks):
+        super().__init__()
+        self.input_embedders_parameters = {'observation': InputEmbedderParameters(),
+                                            'action': InputEmbedderParameters(scheme=EmbedderScheme.Shallow)}
+        self.middleware_parameters = FCMiddlewareParameters(num_streams=num_q_networks)
+        self.heads_parameters = [TD3VHeadParameters()]
+        self.optimizer_type = 'Adam'
+        self.adam_optimizer_beta2 = 0.999
+        self.optimizer_epsilon = 1e-8
+        self.batch_size = 100
+        self.async_training = False
+        self.learning_rate = 0.001
+        self.create_target_network = True
+        self.shared_optimizer = True
+        self.scale_down_gradients_by_number_of_workers_for_sync_training = False
+
+
+class TD3ActorNetworkParameters(NetworkParameters):
+    def __init__(self):
+        super().__init__()
+        self.input_embedders_parameters = {'observation': InputEmbedderParameters()}
+        self.middleware_parameters = FCMiddlewareParameters()
+        self.heads_parameters = [DDPGActorHeadParameters(batchnorm=False)]
+        self.optimizer_type = 'Adam'
+        self.adam_optimizer_beta2 = 0.999
+        self.optimizer_epsilon = 1e-8
+        self.batch_size = 100
+        self.async_training = False
+        self.learning_rate = 0.001
+        self.create_target_network = True
+        self.shared_optimizer = True
+        self.scale_down_gradients_by_number_of_workers_for_sync_training = False
+
+
+
[docs]class TD3AlgorithmParameters(AlgorithmParameters): + """ + :param num_steps_between_copying_online_weights_to_target: (StepMethod) + The number of steps between copying the online network weights to the target network weights. + + :param rate_for_copying_weights_to_target: (float) + When copying the online network weights to the target network weights, a soft update will be used, which + weight the new online network weights by rate_for_copying_weights_to_target + + :param num_consecutive_playing_steps: (StepMethod) + The number of consecutive steps to act between every two training iterations + + :param use_target_network_for_evaluation: (bool) + If set to True, the target network will be used for predicting the actions when choosing actions to act. + Since the target network weights change more slowly, the predicted actions will be more consistent. + + :param action_penalty: (float) + The amount by which to penalize the network on high action feature (pre-activation) values. + This can prevent the actions features from saturating the TanH activation function, and therefore prevent the + gradients from becoming very low. + + :param clip_critic_targets: (Tuple[float, float] or None) + The range to clip the critic target to in order to prevent overestimation of the action values. + + :param use_non_zero_discount_for_terminal_states: (bool) + If set to True, the discount factor will be used for terminal states to bootstrap the next predicted state + values. If set to False, the terminal states reward will be taken as the target return for the network. + """ + def __init__(self): + super().__init__() + self.rate_for_copying_weights_to_target = 0.005 + self.use_target_network_for_evaluation = False + self.action_penalty = 0 + self.clip_critic_targets = None # expected to be a tuple of the form (min_clip_value, max_clip_value) or None + self.use_non_zero_discount_for_terminal_states = False + self.act_for_full_episodes = True + self.update_policy_every_x_episode_steps = 2 + self.num_steps_between_copying_online_weights_to_target = TrainingSteps(self.update_policy_every_x_episode_steps) + self.policy_noise = 0.2 + self.noise_clipping = 0.5 + self.num_q_networks = 2
+ + +class TD3AgentExplorationParameters(AdditiveNoiseParameters): + def __init__(self): + super().__init__() + self.noise_as_percentage_from_action_space = False + + +class TD3AgentParameters(AgentParameters): + def __init__(self): + td3_algorithm_params = TD3AlgorithmParameters() + super().__init__(algorithm=td3_algorithm_params, + exploration=TD3AgentExplorationParameters(), + memory=EpisodicExperienceReplayParameters(), + networks=OrderedDict([("actor", TD3ActorNetworkParameters()), + ("critic", + TD3CriticNetworkParameters(td3_algorithm_params.num_q_networks))])) + + @property + def path(self): + return 'rl_coach.agents.td3_agent:TD3Agent' + + +# Twin Delayed DDPG - https://arxiv.org/pdf/1802.09477.pdf +class TD3Agent(DDPGAgent): + def __init__(self, agent_parameters, parent: Union['LevelManager', 'CompositeAgent']=None): + super().__init__(agent_parameters, parent) + + self.q_values = self.register_signal("Q") + self.TD_targets_signal = self.register_signal("TD targets") + self.action_signal = self.register_signal("actions") + + def learn_from_batch(self, batch): + actor = self.networks['actor'] + critic = self.networks['critic'] + + actor_keys = self.ap.network_wrappers['actor'].input_embedders_parameters.keys() + critic_keys = self.ap.network_wrappers['critic'].input_embedders_parameters.keys() + + # TD error = r + discount*max(q_st_plus_1) - q_st + next_actions, actions_mean = actor.parallel_prediction([ + (actor.target_network, batch.next_states(actor_keys)), + (actor.online_network, batch.states(actor_keys)) + ]) + + # add noise to the next_actions + noise = np.random.normal(0, self.ap.algorithm.policy_noise, next_actions.shape).clip( + -self.ap.algorithm.noise_clipping, self.ap.algorithm.noise_clipping) + next_actions = self.spaces.action.clip_action_to_space(next_actions + noise) + + critic_inputs = copy.copy(batch.next_states(critic_keys)) + critic_inputs['action'] = next_actions + q_st_plus_1 = critic.target_network.predict(critic_inputs)[2] # output #2 is the min (Q1, Q2) + + # calculate the bootstrapped TD targets while discounting terminal states according to + # use_non_zero_discount_for_terminal_states + if self.ap.algorithm.use_non_zero_discount_for_terminal_states: + TD_targets = batch.rewards(expand_dims=True) + self.ap.algorithm.discount * q_st_plus_1 + else: + TD_targets = batch.rewards(expand_dims=True) + \ + (1.0 - batch.game_overs(expand_dims=True)) * self.ap.algorithm.discount * q_st_plus_1 + + # clip the TD targets to prevent overestimation errors + if self.ap.algorithm.clip_critic_targets: + TD_targets = np.clip(TD_targets, *self.ap.algorithm.clip_critic_targets) + + self.TD_targets_signal.add_sample(TD_targets) + + # train the critic + critic_inputs = copy.copy(batch.states(critic_keys)) + critic_inputs['action'] = batch.actions(len(batch.actions().shape) == 1) + result = critic.train_and_sync_networks(critic_inputs, TD_targets) + total_loss, losses, unclipped_grads = result[:3] + + if self.training_iteration % self.ap.algorithm.update_policy_every_x_episode_steps == 0: + # get the gradients of output #3 (=mean of Q1 network) w.r.t the action + critic_inputs = copy.copy(batch.states(critic_keys)) + critic_inputs['action'] = actions_mean + action_gradients = critic.online_network.predict(critic_inputs, + outputs=critic.online_network.gradients_wrt_inputs[3]['action']) + + # apply the gradients from the critic to the actor + initial_feed_dict = {actor.online_network.gradients_weights_ph[0]: -action_gradients} + gradients = actor.online_network.predict(batch.states(actor_keys), + outputs=actor.online_network.weighted_gradients[0], + initial_feed_dict=initial_feed_dict) + + if actor.has_global: + actor.apply_gradients_to_global_network(gradients) + actor.update_online_network() + else: + actor.apply_gradients_to_online_network(gradients) + + return total_loss, losses, unclipped_grads + + def train(self): + self.ap.algorithm.num_consecutive_training_steps = self.current_episode_steps_counter + return Agent.train(self) + + def update_transition_before_adding_to_replay_buffer(self, transition: Transition) -> Transition: + """ + Allows agents to update the transition just before adding it to the replay buffer. + Can be useful for agents that want to tweak the reward, termination signal, etc. + + :param transition: the transition to update + :return: the updated transition + """ + transition.game_over = False if self.current_episode_steps_counter ==\ + self.parent_level_manager.environment.env._max_episode_steps\ + else transition.game_over + + return transition +
+ +
+ +
+
+ + +
+ +
+

+ © Copyright 2018-2019, Intel AI Lab + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_modules/rl_coach/agents/value_optimization_agent.html b/docs/_modules/rl_coach/agents/value_optimization_agent.html index cc33a18..4ce7e7c 100644 --- a/docs/_modules/rl_coach/agents/value_optimization_agent.html +++ b/docs/_modules/rl_coach/agents/value_optimization_agent.html @@ -197,7 +197,7 @@ # limitations under the License. # from collections import OrderedDict -from typing import Union +from typing import Union, List import numpy as np @@ -207,7 +207,8 @@ from rl_coach.logger import screen from rl_coach.memories.non_episodic.prioritized_experience_replay import PrioritizedExperienceReplay from rl_coach.spaces import DiscreteActionSpace -from copy import deepcopy +from copy import deepcopy, copy + ## This is an abstract agent - there is no learn_from_batch method ## @@ -218,6 +219,12 @@ self.q_values = self.register_signal("Q") self.q_value_for_action = {} + # currently we use softmax action probabilities only in batch-rl, + # but we might want to extend this later at some point. + self.should_get_softmax_probabilities = \ + hasattr(self.ap.network_wrappers['main'], 'should_get_softmax_probabilities') and \ + self.ap.network_wrappers['main'].should_get_softmax_probabilities + def init_environment_dependent_modules(self): super().init_environment_dependent_modules() if isinstance(self.spaces.action, DiscreteActionSpace): @@ -228,12 +235,21 @@ # Algorithms for which q_values are calculated from predictions will override this function def get_all_q_values_for_states(self, states: StateType): + actions_q_values = None if self.exploration_policy.requires_action_values(): actions_q_values = self.get_prediction(states) - else: - actions_q_values = None + return actions_q_values + def get_all_q_values_for_states_and_softmax_probabilities(self, states: StateType): + actions_q_values, softmax_probabilities = None, None + if self.exploration_policy.requires_action_values(): + outputs = copy(self.networks['main'].online_network.outputs) + outputs.append(self.networks['main'].online_network.output_heads[0].softmax) + + actions_q_values, softmax_probabilities = self.get_prediction(states, outputs=outputs) + return actions_q_values, softmax_probabilities + def get_prediction(self, states, outputs=None): return self.networks['main'].online_network.predict(self.prepare_batch_for_inference(states, 'main'), outputs=outputs) @@ -255,10 +271,19 @@ ).format(policy.__class__.__name__)) def choose_action(self, curr_state): - actions_q_values = self.get_all_q_values_for_states(curr_state) + if self.should_get_softmax_probabilities: + actions_q_values, softmax_probabilities = \ + self.get_all_q_values_for_states_and_softmax_probabilities(curr_state) + else: + actions_q_values = self.get_all_q_values_for_states(curr_state) # choose action according to the exploration policy and the current phase (evaluating or training the agent) - action = self.exploration_policy.get_action(actions_q_values) + action, action_probabilities = self.exploration_policy.get_action(actions_q_values) + if self.should_get_softmax_probabilities and softmax_probabilities is not None: + # override the exploration policy's generated probabilities when an action was taken + # with the agent's actual policy + action_probabilities = softmax_probabilities + self._validate_action(self.exploration_policy, action) if actions_q_values is not None: @@ -270,15 +295,18 @@ self.q_values.add_sample(actions_q_values) actions_q_values = actions_q_values.squeeze() + action_probabilities = action_probabilities.squeeze() for i, q_value in enumerate(actions_q_values): self.q_value_for_action[i].add_sample(q_value) action_info = ActionInfo(action=action, action_value=actions_q_values[action], - max_action_value=np.max(actions_q_values)) + max_action_value=np.max(actions_q_values), + all_action_probabilities=action_probabilities) + else: - action_info = ActionInfo(action=action) + action_info = ActionInfo(action=action, all_action_probabilities=action_probabilities) return action_info diff --git a/docs/_modules/rl_coach/base_parameters.html b/docs/_modules/rl_coach/base_parameters.html index 62144ed..60aac7f 100644 --- a/docs/_modules/rl_coach/base_parameters.html +++ b/docs/_modules/rl_coach/base_parameters.html @@ -182,6 +182,7 @@

Source code for rl_coach.base_parameters

 #
+#
 # Copyright (c) 2017 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -405,7 +406,8 @@
                  reward_test_level=None,
                  test_using_a_trace_test=True,
                  trace_test_levels=None,
-                 trace_max_env_steps=5000):
+                 trace_max_env_steps=5000,
+                 read_csv_tries=200):
         """
         :param test:
             A flag which specifies if the preset should be tested as part of the validation process.
@@ -428,6 +430,8 @@
         :param trace_max_env_steps:
             An integer representing the maximum number of environment steps to run when running this preset as part
             of the trace tests suite.
+        :param read_csv_tries:
+            The number of retries to attempt for reading the experiment csv file, before declaring failure.
         """
         super().__init__()
 
@@ -443,7 +447,8 @@
         self.reward_test_level = reward_test_level
         self.test_using_a_trace_test = test_using_a_trace_test
         self.trace_test_levels = trace_test_levels
-        self.trace_max_env_steps = trace_max_env_steps
+ self.trace_max_env_steps = trace_max_env_steps + self.read_csv_tries = read_csv_tries
[docs]class NetworkParameters(Parameters): diff --git a/docs/_modules/rl_coach/exploration_policies/additive_noise.html b/docs/_modules/rl_coach/exploration_policies/additive_noise.html index 1cc0bd0..44e2dc3 100644 --- a/docs/_modules/rl_coach/exploration_policies/additive_noise.html +++ b/docs/_modules/rl_coach/exploration_policies/additive_noise.html @@ -202,24 +202,27 @@ import numpy as np from rl_coach.core_types import RunPhase, ActionType -from rl_coach.exploration_policies.exploration_policy import ExplorationPolicy, ExplorationParameters +from rl_coach.exploration_policies.exploration_policy import ContinuousActionExplorationPolicy, ExplorationParameters from rl_coach.schedules import Schedule, LinearSchedule from rl_coach.spaces import ActionSpace, BoxActionSpace # TODO: consider renaming to gaussian sampling + + class AdditiveNoiseParameters(ExplorationParameters): def __init__(self): super().__init__() - self.noise_percentage_schedule = LinearSchedule(0.1, 0.1, 50000) - self.evaluation_noise_percentage = 0.05 + self.noise_schedule = LinearSchedule(0.1, 0.1, 50000) + self.evaluation_noise = 0.05 + self.noise_as_percentage_from_action_space = True @property def path(self): return 'rl_coach.exploration_policies.additive_noise:AdditiveNoise' -
[docs]class AdditiveNoise(ExplorationPolicy): +
[docs]class AdditiveNoise(ContinuousActionExplorationPolicy): """ AdditiveNoise is an exploration policy intended for continuous action spaces. It takes the action from the agent and adds a Gaussian distributed noise to it. The amount of noise added to the action follows the noise amount that @@ -228,17 +231,19 @@ 2. Specified by the agents action. In case the agents action is a list with 2 values, the 1st one is assumed to be the mean of the action, and 2nd is assumed to be its standard deviation. """ - def __init__(self, action_space: ActionSpace, noise_percentage_schedule: Schedule, - evaluation_noise_percentage: float): + def __init__(self, action_space: ActionSpace, noise_schedule: Schedule, + evaluation_noise: float, noise_as_percentage_from_action_space: bool = True): """ :param action_space: the action space used by the environment - :param noise_percentage_schedule: the schedule for the noise variance percentage relative to the absolute range - of the action space - :param evaluation_noise_percentage: the noise variance percentage that will be used during evaluation phases + :param noise_schedule: the schedule for the noise + :param evaluation_noise: the noise variance that will be used during evaluation phases + :param noise_as_percentage_from_action_space: a bool deciding whether the noise is absolute or as a percentage + from the action space """ super().__init__(action_space) - self.noise_percentage_schedule = noise_percentage_schedule - self.evaluation_noise_percentage = evaluation_noise_percentage + self.noise_schedule = noise_schedule + self.evaluation_noise = evaluation_noise + self.noise_as_percentage_from_action_space = noise_as_percentage_from_action_space if not isinstance(action_space, BoxActionSpace): raise ValueError("Additive noise exploration works only for continuous controls." @@ -248,19 +253,20 @@ or not np.all(-np.inf < action_space.low) or not np.all(action_space.low < np.inf): raise ValueError("Additive noise exploration requires bounded actions") - # TODO: allow working with unbounded actions by defining the noise in terms of range and not percentage - def get_action(self, action_values: List[ActionType]) -> ActionType: # TODO-potential-bug consider separating internally defined stdev and externally defined stdev into 2 policies - # set the current noise percentage + # set the current noise if self.phase == RunPhase.TEST: - current_noise_precentage = self.evaluation_noise_percentage + current_noise = self.evaluation_noise else: - current_noise_precentage = self.noise_percentage_schedule.current_value + current_noise = self.noise_schedule.current_value # scale the noise to the action space range - action_values_std = current_noise_precentage * (self.action_space.high - self.action_space.low) + if self.noise_as_percentage_from_action_space: + action_values_std = current_noise * (self.action_space.high - self.action_space.low) + else: + action_values_std = current_noise # extract the mean values if isinstance(action_values, list): @@ -272,18 +278,21 @@ # step the noise schedule if self.phase is not RunPhase.TEST: - self.noise_percentage_schedule.step() + self.noise_schedule.step() # the second element of the list is assumed to be the standard deviation if isinstance(action_values, list) and len(action_values) > 1: action_values_std = action_values[1].squeeze() # add noise to the action means - action = np.random.normal(action_values_mean, action_values_std) + if self.phase is not RunPhase.TEST: + action = np.random.normal(action_values_mean, action_values_std) + else: + action = action_values_mean - return action + return np.atleast_1d(action) def get_control_param(self): - return np.ones(self.action_space.shape)*self.noise_percentage_schedule.current_value
+ return np.ones(self.action_space.shape)*self.noise_schedule.current_value
diff --git a/docs/_modules/rl_coach/exploration_policies/boltzmann.html b/docs/_modules/rl_coach/exploration_policies/boltzmann.html index 9a5620b..09b228b 100644 --- a/docs/_modules/rl_coach/exploration_policies/boltzmann.html +++ b/docs/_modules/rl_coach/exploration_policies/boltzmann.html @@ -202,7 +202,7 @@ import numpy as np from rl_coach.core_types import RunPhase, ActionType -from rl_coach.exploration_policies.exploration_policy import ExplorationPolicy, ExplorationParameters +from rl_coach.exploration_policies.exploration_policy import DiscreteActionExplorationPolicy, ExplorationParameters from rl_coach.schedules import Schedule from rl_coach.spaces import ActionSpace @@ -217,8 +217,7 @@ return 'rl_coach.exploration_policies.boltzmann:Boltzmann' - -
[docs]class Boltzmann(ExplorationPolicy): +
[docs]class Boltzmann(DiscreteActionExplorationPolicy): """ The Boltzmann exploration policy is intended for discrete action spaces. It assumes that each of the possible actions has some value assigned to it (such as the Q value), and uses a softmax function to convert these values @@ -233,7 +232,7 @@ super().__init__(action_space) self.temperature_schedule = temperature_schedule - def get_action(self, action_values: List[ActionType]) -> ActionType: + def get_action(self, action_values: List[ActionType]) -> (ActionType, List[float]): if self.phase == RunPhase.TRAIN: self.temperature_schedule.step() # softmax calculation @@ -242,7 +241,8 @@ # make sure probs sum to 1 probabilities[-1] = 1 - np.sum(probabilities[:-1]) # choose actions according to the probabilities - return np.random.choice(range(self.action_space.shape), p=probabilities) + action = np.random.choice(range(self.action_space.shape), p=probabilities) + return action, probabilities def get_control_param(self): return self.temperature_schedule.current_value
diff --git a/docs/_modules/rl_coach/exploration_policies/categorical.html b/docs/_modules/rl_coach/exploration_policies/categorical.html index 3ba4e81..2dabd88 100644 --- a/docs/_modules/rl_coach/exploration_policies/categorical.html +++ b/docs/_modules/rl_coach/exploration_policies/categorical.html @@ -202,7 +202,7 @@ import numpy as np from rl_coach.core_types import RunPhase, ActionType -from rl_coach.exploration_policies.exploration_policy import ExplorationPolicy, ExplorationParameters +from rl_coach.exploration_policies.exploration_policy import DiscreteActionExplorationPolicy, ExplorationParameters from rl_coach.spaces import ActionSpace @@ -212,7 +212,7 @@ return 'rl_coach.exploration_policies.categorical:Categorical' -
[docs]class Categorical(ExplorationPolicy): +
[docs]class Categorical(DiscreteActionExplorationPolicy): """ Categorical exploration policy is intended for discrete action spaces. It expects the action values to represent a probability distribution over the action, from which a single action will be sampled. @@ -225,13 +225,18 @@ """ super().__init__(action_space) - def get_action(self, action_values: List[ActionType]) -> ActionType: + def get_action(self, action_values: List[ActionType]) -> (ActionType, List[float]): if self.phase == RunPhase.TRAIN: # choose actions according to the probabilities - return np.random.choice(self.action_space.actions, p=action_values) + action = np.random.choice(self.action_space.actions, p=action_values) + return action, action_values else: # take the action with the highest probability - return np.argmax(action_values) + action = np.argmax(action_values) + one_hot_action_probabilities = np.zeros(len(self.action_space.actions)) + one_hot_action_probabilities[action] = 1 + + return action, one_hot_action_probabilities def get_control_param(self): return 0
diff --git a/docs/_modules/rl_coach/exploration_policies/e_greedy.html b/docs/_modules/rl_coach/exploration_policies/e_greedy.html index f6ee4c1..e476897 100644 --- a/docs/_modules/rl_coach/exploration_policies/e_greedy.html +++ b/docs/_modules/rl_coach/exploration_policies/e_greedy.html @@ -203,8 +203,7 @@ from rl_coach.core_types import RunPhase, ActionType from rl_coach.exploration_policies.additive_noise import AdditiveNoiseParameters -from rl_coach.exploration_policies.exploration_policy import ExplorationParameters -from rl_coach.exploration_policies.exploration_policy import ExplorationPolicy +from rl_coach.exploration_policies.exploration_policy import ExplorationParameters, ExplorationPolicy from rl_coach.schedules import Schedule, LinearSchedule from rl_coach.spaces import ActionSpace, DiscreteActionSpace, BoxActionSpace from rl_coach.utils import dynamic_import_and_instantiate_module_from_params @@ -216,7 +215,7 @@ self.epsilon_schedule = LinearSchedule(0.5, 0.01, 50000) self.evaluation_epsilon = 0.05 self.continuous_exploration_policy_parameters = AdditiveNoiseParameters() - self.continuous_exploration_policy_parameters.noise_percentage_schedule = LinearSchedule(0.1, 0.1, 50000) + self.continuous_exploration_policy_parameters.noise_schedule = LinearSchedule(0.1, 0.1, 50000) # for continuous control - # (see http://www.cs.ubc.ca/~van/papers/2017-TOG-deepLoco/2017-TOG-deepLoco.pdf) @@ -265,26 +264,32 @@ epsilon = self.evaluation_epsilon if self.phase == RunPhase.TEST else self.epsilon_schedule.current_value return self.current_random_value >= epsilon - def get_action(self, action_values: List[ActionType]) -> ActionType: + def get_action(self, action_values: List[ActionType]) -> (ActionType, List[float]): epsilon = self.evaluation_epsilon if self.phase == RunPhase.TEST else self.epsilon_schedule.current_value if isinstance(self.action_space, DiscreteActionSpace): - top_action = np.argmax(action_values) if self.current_random_value < epsilon: chosen_action = self.action_space.sample() + probabilities = np.full(len(self.action_space.actions), + 1. / (self.action_space.high[0] - self.action_space.low[0] + 1)) else: - chosen_action = top_action + chosen_action = np.argmax(action_values) + + # one-hot probabilities vector + probabilities = np.zeros(len(self.action_space.actions)) + probabilities[chosen_action] = 1 + + self.step_epsilon() + return chosen_action, probabilities + else: if self.current_random_value < epsilon and self.phase == RunPhase.TRAIN: chosen_action = self.action_space.sample() else: chosen_action = self.continuous_exploration_policy.get_action(action_values) - # step the epsilon schedule and generate a new random value for next time - if self.phase == RunPhase.TRAIN: - self.epsilon_schedule.step() - self.current_random_value = np.random.rand() - return chosen_action + self.step_epsilon() + return chosen_action def get_control_param(self): if isinstance(self.action_space, DiscreteActionSpace): @@ -295,7 +300,13 @@ def change_phase(self, phase): super().change_phase(phase) if isinstance(self.action_space, BoxActionSpace): - self.continuous_exploration_policy.change_phase(phase)
+ self.continuous_exploration_policy.change_phase(phase) + + def step_epsilon(self): + # step the epsilon schedule and generate a new random value for next time + if self.phase == RunPhase.TRAIN: + self.epsilon_schedule.step() + self.current_random_value = np.random.rand()
diff --git a/docs/_modules/rl_coach/exploration_policies/exploration_policy.html b/docs/_modules/rl_coach/exploration_policies/exploration_policy.html index 912355e..f5ffd7d 100644 --- a/docs/_modules/rl_coach/exploration_policies/exploration_policy.html +++ b/docs/_modules/rl_coach/exploration_policies/exploration_policy.html @@ -201,7 +201,7 @@ from rl_coach.base_parameters import Parameters from rl_coach.core_types import RunPhase, ActionType -from rl_coach.spaces import ActionSpace +from rl_coach.spaces import ActionSpace, DiscreteActionSpace, BoxActionSpace, GoalsSpace class ExplorationParameters(Parameters): @@ -237,14 +237,10 @@ Given a list of values corresponding to each action, choose one actions according to the exploration policy :param action_values: A list of action values - :return: The chosen action + :return: The chosen action, + The probability of the action (if available, otherwise 1 for absolute certainty in the action) """ - if self.__class__ == ExplorationPolicy: - raise ValueError("The ExplorationPolicy class is an abstract class and should not be used directly. " - "Please set the exploration parameters to point to an inheriting class like EGreedy or " - "AdditiveNoise") - else: - raise ValueError("The get_action function should be overridden in the inheriting exploration class") + raise NotImplementedError()
[docs] def change_phase(self, phase): """ @@ -265,6 +261,45 @@ def get_control_param(self): return 0
+ + +class DiscreteActionExplorationPolicy(ExplorationPolicy): + """ + A discrete action exploration policy. + """ + def __init__(self, action_space: ActionSpace): + """ + :param action_space: the action space used by the environment + """ + assert isinstance(action_space, DiscreteActionSpace) + super().__init__(action_space) + + def get_action(self, action_values: List[ActionType]) -> (ActionType, List): + """ + Given a list of values corresponding to each action, + choose one actions according to the exploration policy + :param action_values: A list of action values + :return: The chosen action, + The probabilities of actions to select from (if not available a one-hot vector) + """ + if self.__class__ == ExplorationPolicy: + raise ValueError("The ExplorationPolicy class is an abstract class and should not be used directly. " + "Please set the exploration parameters to point to an inheriting class like EGreedy or " + "AdditiveNoise") + else: + raise ValueError("The get_action function should be overridden in the inheriting exploration class") + + +class ContinuousActionExplorationPolicy(ExplorationPolicy): + """ + A continuous action exploration policy. + """ + def __init__(self, action_space: ActionSpace): + """ + :param action_space: the action space used by the environment + """ + assert isinstance(action_space, BoxActionSpace) or isinstance(action_space, GoalsSpace) + super().__init__(action_space) diff --git a/docs/_modules/rl_coach/exploration_policies/greedy.html b/docs/_modules/rl_coach/exploration_policies/greedy.html index 6756ad6..cf0ab20 100644 --- a/docs/_modules/rl_coach/exploration_policies/greedy.html +++ b/docs/_modules/rl_coach/exploration_policies/greedy.html @@ -202,7 +202,7 @@ import numpy as np from rl_coach.core_types import ActionType -from rl_coach.exploration_policies.exploration_policy import ExplorationPolicy, ExplorationParameters +from rl_coach.exploration_policies.exploration_policy import ExplorationParameters, ExplorationPolicy from rl_coach.spaces import ActionSpace, DiscreteActionSpace, BoxActionSpace @@ -224,9 +224,12 @@ """ super().__init__(action_space) - def get_action(self, action_values: List[ActionType]) -> ActionType: + def get_action(self, action_values: List[ActionType]): if type(self.action_space) == DiscreteActionSpace: - return np.argmax(action_values) + action = np.argmax(action_values) + one_hot_action_probabilities = np.zeros(len(self.action_space.actions)) + one_hot_action_probabilities[action] = 1 + return action, one_hot_action_probabilities if type(self.action_space) == BoxActionSpace: return action_values diff --git a/docs/_modules/rl_coach/exploration_policies/ou_process.html b/docs/_modules/rl_coach/exploration_policies/ou_process.html index 54010b2..52dd9d6 100644 --- a/docs/_modules/rl_coach/exploration_policies/ou_process.html +++ b/docs/_modules/rl_coach/exploration_policies/ou_process.html @@ -202,12 +202,13 @@ import numpy as np from rl_coach.core_types import RunPhase, ActionType -from rl_coach.exploration_policies.exploration_policy import ExplorationPolicy, ExplorationParameters +from rl_coach.exploration_policies.exploration_policy import ContinuousActionExplorationPolicy, ExplorationParameters from rl_coach.spaces import ActionSpace, BoxActionSpace, GoalsSpace # Based on on the description in: # https://math.stackexchange.com/questions/1287634/implementing-ornstein-uhlenbeck-in-matlab + class OUProcessParameters(ExplorationParameters): def __init__(self): super().__init__() @@ -222,7 +223,7 @@ # Ornstein-Uhlenbeck process -
[docs]class OUProcess(ExplorationPolicy): +
[docs]class OUProcess(ContinuousActionExplorationPolicy): """ OUProcess exploration policy is intended for continuous action spaces, and selects the action according to an Ornstein-Uhlenbeck process. The Ornstein-Uhlenbeck process implements the action as a Gaussian process, where @@ -239,10 +240,6 @@ self.state = np.zeros(self.action_space.shape) self.dt = dt - if not (isinstance(action_space, BoxActionSpace) or isinstance(action_space, GoalsSpace)): - raise ValueError("OU process exploration works only for continuous controls." - "The given action space is of type: {}".format(action_space.__class__.__name__)) - def reset(self): self.state = np.zeros(self.action_space.shape) diff --git a/docs/_modules/rl_coach/exploration_policies/parameter_noise.html b/docs/_modules/rl_coach/exploration_policies/parameter_noise.html index d381dd2..3d9a10f 100644 --- a/docs/_modules/rl_coach/exploration_policies/parameter_noise.html +++ b/docs/_modules/rl_coach/exploration_policies/parameter_noise.html @@ -242,9 +242,13 @@ self.network_params = network_params self._replace_network_dense_layers() - def get_action(self, action_values: List[ActionType]) -> ActionType: + def get_action(self, action_values: List[ActionType]): if type(self.action_space) == DiscreteActionSpace: - return np.argmax(action_values) + action = np.argmax(action_values) + one_hot_action_probabilities = np.zeros(len(self.action_space.actions)) + one_hot_action_probabilities[action] = 1 + + return action, one_hot_action_probabilities elif type(self.action_space) == BoxActionSpace: action_values_mean = action_values[0].squeeze() action_values_std = action_values[1].squeeze() diff --git a/docs/_modules/rl_coach/exploration_policies/truncated_normal.html b/docs/_modules/rl_coach/exploration_policies/truncated_normal.html index a8a0acc..7d33198 100644 --- a/docs/_modules/rl_coach/exploration_policies/truncated_normal.html +++ b/docs/_modules/rl_coach/exploration_policies/truncated_normal.html @@ -203,7 +203,7 @@ from scipy.stats import truncnorm from rl_coach.core_types import RunPhase, ActionType -from rl_coach.exploration_policies.exploration_policy import ExplorationPolicy, ExplorationParameters +from rl_coach.exploration_policies.exploration_policy import ExplorationParameters, ContinuousActionExplorationPolicy from rl_coach.schedules import Schedule, LinearSchedule from rl_coach.spaces import ActionSpace, BoxActionSpace @@ -211,17 +211,18 @@ class TruncatedNormalParameters(ExplorationParameters): def __init__(self): super().__init__() - self.noise_percentage_schedule = LinearSchedule(0.1, 0.1, 50000) - self.evaluation_noise_percentage = 0.05 + self.noise_schedule = LinearSchedule(0.1, 0.1, 50000) + self.evaluation_noise = 0.05 self.clip_low = 0 self.clip_high = 1 + self.noise_as_percentage_from_action_space = True @property def path(self): return 'rl_coach.exploration_policies.truncated_normal:TruncatedNormal' -
[docs]class TruncatedNormal(ExplorationPolicy): +
[docs]class TruncatedNormal(ContinuousActionExplorationPolicy): """ The TruncatedNormal exploration policy is intended for continuous action spaces. It samples the action from a normal distribution, where the mean action is given by the agent, and the standard deviation can be given in t @@ -232,17 +233,20 @@ When the sampled action is outside of the action bounds given by the user, it is sampled again and again, until it is within the bounds. """ - def __init__(self, action_space: ActionSpace, noise_percentage_schedule: Schedule, - evaluation_noise_percentage: float, clip_low: float, clip_high: float): + def __init__(self, action_space: ActionSpace, noise_schedule: Schedule, + evaluation_noise: float, clip_low: float, clip_high: float, + noise_as_percentage_from_action_space: bool = True): """ :param action_space: the action space used by the environment - :param noise_percentage_schedule: the schedule for the noise variance percentage relative to the absolute range - of the action space - :param evaluation_noise_percentage: the noise variance percentage that will be used during evaluation phases + :param noise_schedule: the schedule for the noise variance + :param evaluation_noise: the noise variance that will be used during evaluation phases + :param noise_as_percentage_from_action_space: whether to consider the noise as a percentage of the action space + or absolute value """ super().__init__(action_space) - self.noise_percentage_schedule = noise_percentage_schedule - self.evaluation_noise_percentage = evaluation_noise_percentage + self.noise_schedule = noise_schedule + self.evaluation_noise = evaluation_noise + self.noise_as_percentage_from_action_space = noise_as_percentage_from_action_space self.clip_low = clip_low self.clip_high = clip_high @@ -254,17 +258,21 @@ or not np.all(-np.inf < action_space.low) or not np.all(action_space.low < np.inf): raise ValueError("Additive noise exploration requires bounded actions") - # TODO: allow working with unbounded actions by defining the noise in terms of range and not percentage - def get_action(self, action_values: List[ActionType]) -> ActionType: - # set the current noise percentage + # set the current noise if self.phase == RunPhase.TEST: - current_noise_precentage = self.evaluation_noise_percentage + current_noise = self.evaluation_noise else: - current_noise_precentage = self.noise_percentage_schedule.current_value + current_noise = self.noise_schedule.current_value # scale the noise to the action space range - action_values_std = current_noise_precentage * (self.action_space.high - self.action_space.low) + if self.noise_as_percentage_from_action_space: + action_values_std = current_noise * (self.action_space.high - self.action_space.low) + else: + action_values_std = current_noise + + # scale the noise to the action space range + action_values_std = current_noise * (self.action_space.high - self.action_space.low) # extract the mean values if isinstance(action_values, list): @@ -276,7 +284,7 @@ # step the noise schedule if self.phase is not RunPhase.TEST: - self.noise_percentage_schedule.step() + self.noise_schedule.step() # the second element of the list is assumed to be the standard deviation if isinstance(action_values, list) and len(action_values) > 1: action_values_std = action_values[1].squeeze() @@ -290,7 +298,7 @@ return action def get_control_param(self): - return np.ones(self.action_space.shape)*self.noise_percentage_schedule.current_value
+ return np.ones(self.action_space.shape)*self.noise_schedule.current_value
diff --git a/docs/_modules/rl_coach/filters/observation/observation_stacking_filter.html b/docs/_modules/rl_coach/filters/observation/observation_stacking_filter.html index 25c22f4..7e60af4 100644 --- a/docs/_modules/rl_coach/filters/observation/observation_stacking_filter.html +++ b/docs/_modules/rl_coach/filters/observation/observation_stacking_filter.html @@ -204,7 +204,7 @@ from rl_coach.core_types import ObservationType from rl_coach.filters.observation.observation_filter import ObservationFilter -from rl_coach.spaces import ObservationSpace +from rl_coach.spaces import ObservationSpace, VectorObservationSpace class LazyStack(object): @@ -246,6 +246,7 @@ self.stack_size = stack_size self.stacking_axis = stacking_axis self.stack = [] + self.input_observation_space = None if stack_size <= 0: raise ValueError("The stack shape must be a positive number") @@ -269,7 +270,6 @@ raise ValueError("The stacking axis is larger than the number of dimensions in the observation space") def filter(self, observation: ObservationType, update_internal_state: bool=True) -> ObservationType: - if len(self.stack) == 0: self.stack = deque([observation] * self.stack_size, maxlen=self.stack_size) else: @@ -277,14 +277,21 @@ self.stack.append(observation) observation = LazyStack(self.stack, self.stacking_axis) + if isinstance(self.input_observation_space, VectorObservationSpace): + # when stacking vectors, we cannot avoid copying the memory as we're flattening it all + observation = np.array(observation).flatten() + return observation def get_filtered_observation_space(self, input_observation_space: ObservationSpace) -> ObservationSpace: - if self.stacking_axis == -1: - input_observation_space.shape = np.append(input_observation_space.shape, values=[self.stack_size], axis=0) + if isinstance(input_observation_space, VectorObservationSpace): + self.input_observation_space = input_observation_space = VectorObservationSpace(input_observation_space.shape * self.stack_size) else: - input_observation_space.shape = np.insert(input_observation_space.shape, obj=self.stacking_axis, - values=[self.stack_size], axis=0) + if self.stacking_axis == -1: + input_observation_space.shape = np.append(input_observation_space.shape, values=[self.stack_size], axis=0) + else: + input_observation_space.shape = np.insert(input_observation_space.shape, obj=self.stacking_axis, + values=[self.stack_size], axis=0) return input_observation_space def reset(self) -> None: diff --git a/docs/_modules/rl_coach/memories/episodic/episodic_experience_replay.html b/docs/_modules/rl_coach/memories/episodic/episodic_experience_replay.html index 02a7056..2070f69 100644 --- a/docs/_modules/rl_coach/memories/episodic/episodic_experience_replay.html +++ b/docs/_modules/rl_coach/memories/episodic/episodic_experience_replay.html @@ -208,6 +208,7 @@ import random from rl_coach.core_types import Transition, Episode +from rl_coach.filters.filter import InputFilter from rl_coach.logger import screen from rl_coach.memories.memory import Memory, MemoryGranularity, MemoryParameters from rl_coach.utils import ReaderWriterLock, ProgressBar @@ -591,11 +592,12 @@ self.reader_writer_lock.release_writing() return mean - def load_csv(self, csv_dataset: CsvDataset) -> None: + def load_csv(self, csv_dataset: CsvDataset, input_filter: InputFilter) -> None: """ Restore the replay buffer contents from a csv file. The csv file is assumed to include a list of transitions. :param csv_dataset: A construct which holds the dataset parameters + :param input_filter: A filter used to filter the CSV data before feeding it to the memory. """ self.assert_not_frozen() @@ -612,18 +614,30 @@ for e_id in episode_ids: progress_bar.update(e_id) df_episode_transitions = df[df['episode_id'] == e_id] + input_filter.reset() + + if len(df_episode_transitions) < 2: + # we have to have at least 2 rows in each episode for creating a transition + continue + episode = Episode() + transitions = [] for (_, current_transition), (_, next_transition) in zip(df_episode_transitions[:-1].iterrows(), df_episode_transitions[1:].iterrows()): state = np.array([current_transition[col] for col in state_columns]) next_state = np.array([next_transition[col] for col in state_columns]) - episode.insert( + transitions.append( Transition(state={'observation': state}, action=current_transition['action'], reward=current_transition['reward'], next_state={'observation': next_state}, game_over=False, info={'all_action_probabilities': - ast.literal_eval(current_transition['all_action_probabilities'])})) + ast.literal_eval(current_transition['all_action_probabilities'])}), + ) + + transitions = input_filter.filter(transitions, deep_copy=False) + for t in transitions: + episode.insert(t) # Set the last transition to end the episode if csv_dataset.is_episodic: @@ -635,8 +649,6 @@ progress_bar.update(len(episode_ids)) progress_bar.close() - self.shuffle_episodes() - def freeze(self): """ Freezing the replay buffer does not allow any new transitions to be added to the memory. diff --git a/docs/_sources/components/agents/index.rst.txt b/docs/_sources/components/agents/index.rst.txt index 476bc7a..ca21713 100644 --- a/docs/_sources/components/agents/index.rst.txt +++ b/docs/_sources/components/agents/index.rst.txt @@ -21,6 +21,7 @@ A detailed description of those algorithms can be found by navigating to each of imitation/cil policy_optimization/cppo policy_optimization/ddpg + policy_optimization/td3 policy_optimization/sac other/dfp value_optimization/double_dqn diff --git a/docs/_sources/components/agents/policy_optimization/td3.rst.txt b/docs/_sources/components/agents/policy_optimization/td3.rst.txt new file mode 100644 index 0000000..f7b9a78 --- /dev/null +++ b/docs/_sources/components/agents/policy_optimization/td3.rst.txt @@ -0,0 +1,55 @@ +Twin Delayed Deep Deterministic Policy Gradient +================================== + +**Actions space:** Continuous + +**References:** `Addressing Function Approximation Error in Actor-Critic Methods `_ + +Network Structure +----------------- + +.. image:: /_static/img/design_imgs/td3.png + :align: center + +Algorithm Description +--------------------- +Choosing an action +++++++++++++++++++ + +Pass the current states through the actor network, and get an action mean vector :math:`\mu`. +While in training phase, use a continuous exploration policy, such as a small zero-meaned gaussian noise, +to add exploration noise to the action. When testing, use the mean vector :math:`\mu` as-is. + +Training the network +++++++++++++++++++++ + +Start by sampling a batch of transitions from the experience replay. + +* To train the two **critic networks**, use the following targets: + + :math:`y_t=r(s_t,a_t )+\gamma \cdot \min_{i=1,2} Q_{i}(s_{t+1},\mu(s_{t+1} )+[\mathcal{N}(0,\,\sigma^{2})]^{MAX\_NOISE}_{MIN\_NOISE})` + + First run the actor target network, using the next states as the inputs, and get :math:`\mu (s_{t+1} )`. Then, add a + clipped gaussian noise to these actions, and clip the resulting actions to the actions space. + Next, run the critic target networks using the next states and :math:`\mu (s_{t+1} )+[\mathcal{N}(0,\,\sigma^{2})]^{MAX\_NOISE}_{MIN\_NOISE}`, + and use the minimum between the two critic networks predictions in order to calculate :math:`y_t` according to the + equation above. To train the networks, use the current states and actions as the inputs, and :math:`y_t` + as the targets. + +* To train the **actor network**, use the following equation: + + :math:`\nabla_{\theta^\mu } J \approx E_{s_t \tilde{} \rho^\beta } [\nabla_a Q_{1}(s,a)|_{s=s_t,a=\mu (s_t ) } \cdot \nabla_{\theta^\mu} \mu(s)|_{s=s_t} ]` + + Use the actor's online network to get the action mean values using the current states as the inputs. + Then, use the first critic's online network in order to get the gradients of the critic output with respect to the + action mean values :math:`\nabla _a Q_{1}(s,a)|_{s=s_t,a=\mu(s_t ) }`. + Using the chain rule, calculate the gradients of the actor's output, with respect to the actor weights, + given :math:`\nabla_a Q(s,a)`. Finally, apply those gradients to the actor network. + + The actor's training is done at a slower frequency than the critic's training, in order to allow the critic to better fit the + current policy, before exercising the critic in order to train the actor. + Following the same, delayed, actor's training cadence, do a soft update of the critic and actor target networks' weights + from the online networks. + + +.. autoclass:: rl_coach.agents.td3_agent.TD3AlgorithmParameters \ No newline at end of file diff --git a/docs/_sources/selecting_an_algorithm.rst.txt b/docs/_sources/selecting_an_algorithm.rst.txt index e4027de..d039cc4 100644 --- a/docs/_sources/selecting_an_algorithm.rst.txt +++ b/docs/_sources/selecting_an_algorithm.rst.txt @@ -214,6 +214,16 @@ The algorithms are ordered by their release date in descending order. and therefore it is able to use a replay buffer in order to improve sample efficiency. +
+ + TD3 +
+ Very similar to DDPG, i.e. an actor-critic for continuous action spaces, that uses a replay buffer in + order to improve sample efficiency. TD3 uses two critic networks in order to mitigate the overestimation + in the Q state-action value prediction, slows down the actor updates in order to increase stability and + adds noise to actions while training the critic in order to smooth out the critic's predictions. +
+
PPO diff --git a/docs/_static/basic.css b/docs/_static/basic.css index 53acd09..c41d718 100644 --- a/docs/_static/basic.css +++ b/docs/_static/basic.css @@ -289,6 +289,12 @@ img.align-center, .figure.align-center, object.align-center { margin-right: auto; } +img.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + .align-left { text-align: left; } @@ -297,6 +303,10 @@ img.align-center, .figure.align-center, object.align-center { text-align: center; } +.align-default { + text-align: center; +} + .align-right { text-align: right; } @@ -368,6 +378,11 @@ table.align-center { margin-right: auto; } +table.align-default { + margin-left: auto; + margin-right: auto; +} + table caption span.caption-number { font-style: italic; } diff --git a/docs/_static/searchtools.js b/docs/_static/searchtools.js index bdc2706..6031f99 100644 --- a/docs/_static/searchtools.js +++ b/docs/_static/searchtools.js @@ -319,12 +319,13 @@ var Search = { for (var prefix in objects) { for (var name in objects[prefix]) { var fullname = (prefix ? prefix + '.' : '') + name; - if (fullname.toLowerCase().indexOf(object) > -1) { + var fullnameLower = fullname.toLowerCase() + if (fullnameLower.indexOf(object) > -1) { var score = 0; - var parts = fullname.split('.'); + var parts = fullnameLower.split('.'); // check for different match types: exact matches of full name or // "last name" (i.e. last dotted part) - if (fullname == object || parts[parts.length - 1] == object) { + if (fullnameLower == object || parts[parts.length - 1] == object) { score += Scorer.objNameMatch; // matches in last name } else if (parts[parts.length - 1].indexOf(object) > -1) { diff --git a/docs/components/additional_parameters.html b/docs/components/additional_parameters.html index 7e51f31..3070a91 100644 --- a/docs/components/additional_parameters.html +++ b/docs/components/additional_parameters.html @@ -195,7 +195,7 @@

VisualizationParameters

-class rl_coach.base_parameters.VisualizationParameters(print_networks_summary=False, dump_csv=True, dump_signals_to_csv_every_x_episodes=5, dump_gifs=False, dump_mp4=False, video_dump_methods=None, dump_in_episode_signals=False, dump_parameters_documentation=True, render=False, native_rendering=False, max_fps_for_human_control=10, tensorboard=False, add_rendered_image_to_env_response=False)[source]
+class rl_coach.base_parameters.VisualizationParameters(print_networks_summary=False, dump_csv=True, dump_signals_to_csv_every_x_episodes=5, dump_gifs=False, dump_mp4=False, video_dump_methods=None, dump_in_episode_signals=False, dump_parameters_documentation=True, render=False, native_rendering=False, max_fps_for_human_control=10, tensorboard=False, add_rendered_image_to_env_response=False)[source]
Parameters
    @@ -244,7 +244,7 @@ which will be passed to the agent and allow using those images.

    PresetValidationParameters

    -class rl_coach.base_parameters.PresetValidationParameters(test=False, min_reward_threshold=0, max_episodes_to_achieve_reward=1, num_workers=1, reward_test_level=None, test_using_a_trace_test=True, trace_test_levels=None, trace_max_env_steps=5000)[source]
    +class rl_coach.base_parameters.PresetValidationParameters(test=False, min_reward_threshold=0, max_episodes_to_achieve_reward=1, num_workers=1, reward_test_level=None, test_using_a_trace_test=True, trace_test_levels=None, trace_max_env_steps=5000, read_csv_tries=200)[source]
    Parameters
      @@ -261,6 +261,7 @@ reward tests suite.

      trace tests suite.

    • trace_max_env_steps – An integer representing the maximum number of environment steps to run when running this preset as part of the trace tests suite.

    • +
    • read_csv_tries – The number of retries to attempt for reading the experiment csv file, before declaring failure.

    @@ -271,7 +272,7 @@ of the trace tests suite.

    TaskParameters

    -class rl_coach.base_parameters.TaskParameters(framework_type: rl_coach.base_parameters.Frameworks = <Frameworks.tensorflow: 'TensorFlow'>, evaluate_only: int = None, use_cpu: bool = False, experiment_path='/tmp', seed=None, checkpoint_save_secs=None, checkpoint_restore_dir=None, checkpoint_restore_path=None, checkpoint_save_dir=None, export_onnx_graph: bool = False, apply_stop_condition: bool = False, num_gpu: int = 1)[source]
    +class rl_coach.base_parameters.TaskParameters(framework_type: rl_coach.base_parameters.Frameworks = <Frameworks.tensorflow: 'TensorFlow'>, evaluate_only: int = None, use_cpu: bool = False, experiment_path='/tmp', seed=None, checkpoint_save_secs=None, checkpoint_restore_dir=None, checkpoint_restore_path=None, checkpoint_save_dir=None, export_onnx_graph: bool = False, apply_stop_condition: bool = False, num_gpu: int = 1)[source]
    Parameters
      @@ -299,7 +300,7 @@ the dir to restore the checkpoints from

      DistributedTaskParameters

      -class rl_coach.base_parameters.DistributedTaskParameters(framework_type: rl_coach.base_parameters.Frameworks, parameters_server_hosts: str, worker_hosts: str, job_type: str, task_index: int, evaluate_only: int = None, num_tasks: int = None, num_training_tasks: int = None, use_cpu: bool = False, experiment_path=None, dnd=None, shared_memory_scratchpad=None, seed=None, checkpoint_save_secs=None, checkpoint_restore_path=None, checkpoint_save_dir=None, export_onnx_graph: bool = False, apply_stop_condition: bool = False)[source]
      +class rl_coach.base_parameters.DistributedTaskParameters(framework_type: rl_coach.base_parameters.Frameworks, parameters_server_hosts: str, worker_hosts: str, job_type: str, task_index: int, evaluate_only: int = None, num_tasks: int = None, num_training_tasks: int = None, use_cpu: bool = False, experiment_path=None, dnd=None, shared_memory_scratchpad=None, seed=None, checkpoint_save_secs=None, checkpoint_restore_path=None, checkpoint_save_dir=None, export_onnx_graph: bool = False, apply_stop_condition: bool = False)[source]
      Parameters
diff --git a/docs/components/agents/imitation/cil.html b/docs/components/agents/imitation/cil.html index cc5ca21..2b5fedf 100644 --- a/docs/components/agents/imitation/cil.html +++ b/docs/components/agents/imitation/cil.html @@ -124,6 +124,7 @@
  • Clipped Proximal Policy Optimization
  • Deep Deterministic Policy Gradient
  • +
  • Twin Delayed Deep Deterministic Policy Gradient
  • Soft Actor-Critic
  • Direct Future Prediction
  • Double DQN
  • @@ -245,7 +246,7 @@ so that the loss for the other heads will be zeroed out.

    -class rl_coach.agents.cil_agent.CILAlgorithmParameters[source]
    +class rl_coach.agents.cil_agent.CILAlgorithmParameters[source]
    Parameters

    state_key_with_the_class_index – (str) diff --git a/docs/components/agents/index.html b/docs/components/agents/index.html index 136475d..62b3bbd 100644 --- a/docs/components/agents/index.html +++ b/docs/components/agents/index.html @@ -117,6 +117,7 @@

  • Conditional Imitation Learning
  • Clipped Proximal Policy Optimization
  • Deep Deterministic Policy Gradient
  • +
  • Twin Delayed Deep Deterministic Policy Gradient
  • Soft Actor-Critic
  • Direct Future Prediction
  • Double DQN
  • @@ -225,6 +226,7 @@ A detailed description of those algorithms can be found by navigating to each of
  • Conditional Imitation Learning
  • Clipped Proximal Policy Optimization
  • Deep Deterministic Policy Gradient
  • +
  • Twin Delayed Deep Deterministic Policy Gradient
  • Soft Actor-Critic
  • Direct Future Prediction
  • Double DQN
  • @@ -243,7 +245,7 @@ A detailed description of those algorithms can be found by navigating to each of
    -class rl_coach.base_parameters.AgentParameters(algorithm: rl_coach.base_parameters.AlgorithmParameters, exploration: ExplorationParameters, memory: MemoryParameters, networks: Dict[str, rl_coach.base_parameters.NetworkParameters], visualization: rl_coach.base_parameters.VisualizationParameters = <rl_coach.base_parameters.VisualizationParameters object>)[source]
    +class rl_coach.base_parameters.AgentParameters(algorithm: rl_coach.base_parameters.AlgorithmParameters, exploration: ExplorationParameters, memory: MemoryParameters, networks: Dict[str, rl_coach.base_parameters.NetworkParameters], visualization: rl_coach.base_parameters.VisualizationParameters = <rl_coach.base_parameters.VisualizationParameters object>)[source]
    Parameters
      @@ -270,7 +272,7 @@ used for visualization purposes, such as printing to the screen, rendering, and
      -class rl_coach.agents.agent.Agent(agent_parameters: rl_coach.base_parameters.AgentParameters, parent: Union[LevelManager, CompositeAgent] = None)[source]
      +class rl_coach.agents.agent.Agent(agent_parameters: rl_coach.base_parameters.AgentParameters, parent: Union[LevelManager, CompositeAgent] = None)[source]
      Parameters

      agent_parameters – A AgentParameters class instance with all the agent parameters

      @@ -278,7 +280,7 @@ used for visualization purposes, such as printing to the screen, rendering, and
      -act(action: Union[None, int, float, numpy.ndarray, List] = None) → rl_coach.core_types.ActionInfo[source]
      +act(action: Union[None, int, float, numpy.ndarray, List] = None) → rl_coach.core_types.ActionInfo[source]

      Given the agents current knowledge, decide on the next action to apply to the environment

      Parameters
      @@ -292,7 +294,7 @@ used for visualization purposes, such as printing to the screen, rendering, and
      -call_memory(func, args=())[source]
      +call_memory(func, args=())[source]

      This function is a wrapper to allow having the same calls for shared or unshared memories. It should be used instead of calling the memory directly in order to allow different algorithms to work both with a shared and a local memory.

      @@ -311,7 +313,7 @@ both with a shared and a local memory.

      -choose_action(curr_state)[source]
      +choose_action(curr_state)[source]

      choose an action to act with in the current episode being played. Different behavior might be exhibited when training or testing.

      @@ -326,7 +328,7 @@ training or testing.

      -collect_savers(parent_path_suffix: str) → rl_coach.saver.SaverCollection[source]
      +collect_savers(parent_path_suffix: str) → rl_coach.saver.SaverCollection[source]

      Collect all of agent’s network savers :param parent_path_suffix: path suffix of the parent of the agent (could be name of level manager or composite agent) @@ -335,7 +337,7 @@ training or testing.

      -create_networks() → Dict[str, rl_coach.architectures.network_wrapper.NetworkWrapper][source]
      +create_networks() → Dict[str, rl_coach.architectures.network_wrapper.NetworkWrapper][source]

      Create all the networks of the agent. The network creation will be done after setting the environment parameters for the agent, since they are needed for creating the network.

      @@ -346,9 +348,16 @@ for creating the network.

      +
      +
      +freeze_memory()[source]
      +

      Shuffle episodes in the memory and freeze it to make sure that no extra data is being pushed anymore. +:return: None

      +
      +
      -get_predictions(states: List[Dict[str, numpy.ndarray]], prediction_type: rl_coach.core_types.PredictionType)[source]
      +get_predictions(states: List[Dict[str, numpy.ndarray]], prediction_type: rl_coach.core_types.PredictionType)[source]

      Get a prediction from the agent with regard to the requested prediction_type. If the agent cannot predict this type of prediction_type, or if there is more than possible way to do so, raise a ValueException.

      @@ -367,7 +376,7 @@ raise a ValueException.

      -get_state_embedding(state: dict) → numpy.ndarray[source]
      +get_state_embedding(state: dict) → numpy.ndarray[source]

      Given a state, get the corresponding state embedding from the main network

      Parameters
      @@ -381,7 +390,7 @@ raise a ValueException.

      -handle_episode_ended() → None[source]
      +handle_episode_ended() → None[source]

      Make any changes needed when each episode is ended. This includes incrementing counters, updating full episode dependent values, updating logs, etc. This function is called right after each episode is ended.

      @@ -394,7 +403,7 @@ This function is called right after each episode is ended.

      -init_environment_dependent_modules() → None[source]
      +init_environment_dependent_modules() → None[source]

      Initialize any modules that depend on knowing information about the environment such as the action space or the observation space

      @@ -404,9 +413,20 @@ the observation space

      +
      +
      +initialize_session_dependent_components()[source]
      +

      Initialize components which require a session as part of their initialization.

      +
      +
      Returns
      +

      None

      +
      +
      +
      +
      -learn_from_batch(batch) → Tuple[float, List, List][source]
      +learn_from_batch(batch) → Tuple[float, List, List][source]

      Given a batch of transitions, calculates their target values and updates the network.

      Parameters
      @@ -418,9 +438,20 @@ the observation space

      +
      +
      +load_memory_from_file()[source]
      +

      Load memory transitions from a file.

      +
      +
      Returns
      +

      None

      +
      +
      +
      +
      -log_to_screen() → None[source]
      +log_to_screen() → None[source]

      Write an episode summary line to the terminal

      Returns
      @@ -431,7 +462,7 @@ the observation space

      -observe(env_response: rl_coach.core_types.EnvResponse) → bool[source]
      +observe(env_response: rl_coach.core_types.EnvResponse) → bool[source]

      Given a response from the environment, distill the observation from it and store it for later use. The response should be a dictionary containing the performed action, the new observation and measurements, the reward, a game over flag and any additional information necessary.

      @@ -446,9 +477,9 @@ given observation

      -
      +
      -parent
      +property parent

      Get the parent class of the agent

      Returns
      @@ -457,9 +488,9 @@ given observation

      -
      +
      -phase
      +property phase

      The current running phase of the agent

      Returns
      @@ -470,7 +501,7 @@ given observation

      -post_training_commands() → None[source]
      +post_training_commands() → None[source]

      A function which allows adding any functionality that is required to run right after the training phase ends.

      Returns
      @@ -481,7 +512,7 @@ given observation

      -prepare_batch_for_inference(states: Union[Dict[str, numpy.ndarray], List[Dict[str, numpy.ndarray]]], network_name: str) → Dict[str, numpy.array][source]
      +prepare_batch_for_inference(states: Union[Dict[str, numpy.ndarray], List[Dict[str, numpy.ndarray]]], network_name: str) → Dict[str, numpy.core.multiarray.array][source]

      Convert curr_state into input tensors tensorflow is expecting. i.e. if we have several inputs states, stack all observations together, measurements together, etc.

      @@ -501,7 +532,7 @@ the observation relevant for the network from the states.

      -register_signal(signal_name: str, dump_one_value_per_episode: bool = True, dump_one_value_per_step: bool = False) → rl_coach.utils.Signal[source]
      +register_signal(signal_name: str, dump_one_value_per_episode: bool = True, dump_one_value_per_step: bool = False) → rl_coach.utils.Signal[source]

      Register a signal such that its statistics will be dumped and be viewable through dashboard

      Parameters
      @@ -519,7 +550,7 @@ the observation relevant for the network from the states.

      -reset_evaluation_state(val: rl_coach.core_types.RunPhase) → None[source]
      +reset_evaluation_state(val: rl_coach.core_types.RunPhase) → None[source]

      Perform accumulators initialization when entering an evaluation phase, and signal dumping when exiting an evaluation phase. Entering or exiting the evaluation phase is determined according to the new phase given by val, and by the current phase set in self.phase.

      @@ -535,7 +566,7 @@ by val, and by the current phase set in self.phase.

      -reset_internal_state() → None[source]
      +reset_internal_state() → None[source]

      Reset all the episodic parameters. This function is called right before each episode starts.

      Returns
      @@ -546,7 +577,7 @@ by val, and by the current phase set in self.phase.

      -restore_checkpoint(checkpoint_dir: str) → None[source]
      +restore_checkpoint(checkpoint_dir: str) → None[source]

      Allows agents to store additional information when saving checkpoints.

      Parameters
      @@ -560,7 +591,7 @@ by val, and by the current phase set in self.phase.

      -run_off_policy_evaluation() → None
      +run_off_policy_evaluation() → None

      Run off-policy evaluation estimators to evaluate the trained policy performance against a dataset. Should only be implemented for off-policy RL algorithms.

      @@ -572,7 +603,7 @@ Should only be implemented for off-policy RL algorithms.

      -run_pre_network_filter_for_inference(state: Dict[str, numpy.ndarray], update_filter_internal_state: bool = True) → Dict[str, numpy.ndarray][source]
      +run_pre_network_filter_for_inference(state: Dict[str, numpy.ndarray], update_filter_internal_state: bool = True) → Dict[str, numpy.ndarray][source]

      Run filters which where defined for being applied right before using the state for inference.

      Parameters
      @@ -589,7 +620,7 @@ Should only be implemented for off-policy RL algorithms.

      -save_checkpoint(checkpoint_prefix: str) → None[source]
      +save_checkpoint(checkpoint_prefix: str) → None[source]

      Allows agents to store additional information when saving checkpoints.

      Parameters
      @@ -603,7 +634,7 @@ Should only be implemented for off-policy RL algorithms.

      -set_environment_parameters(spaces: rl_coach.spaces.SpacesDefinition)[source]
      +set_environment_parameters(spaces: rl_coach.spaces.SpacesDefinition)[source]

      Sets the parameters that are environment dependent. As a side effect, initializes all the components that are dependent on those values, by calling init_environment_dependent_modules

      @@ -618,7 +649,7 @@ dependent on those values, by calling init_environment_dependent_modules

      -set_incoming_directive(action: Union[int, float, numpy.ndarray, List]) → None[source]
      +set_incoming_directive(action: Union[int, float, numpy.ndarray, List]) → None[source]

      Allows setting a directive for the agent to follow. This is useful in hierarchy structures, where the agent has another master agent that is controlling it. In such cases, the master agent can define the goals for the slave agent, define it’s observation, possible actions, etc. The directive type is defined by the agent @@ -635,7 +666,7 @@ in-action-space.

      -set_session(sess) → None[source]
      +set_session(sess) → None[source]

      Set the deep learning framework session for all the agents in the composite agent

      Returns
      @@ -646,7 +677,7 @@ in-action-space.

      -setup_logger() → None[source]
      +setup_logger() → None[source]

      Setup the logger for the agent

      Returns
      @@ -657,7 +688,7 @@ in-action-space.

      -sync() → None[source]
      +sync() → None[source]

      Sync the global network parameters to local networks

      Returns
      @@ -668,7 +699,7 @@ in-action-space.

      -train() → float[source]
      +train() → float[source]

      Check if a training phase should be done as configured by num_consecutive_playing_steps. If it should, then do several training steps as configured by num_consecutive_training_steps. A single training iteration: Sample a batch, train on it and update target networks.

      @@ -681,7 +712,7 @@ A single training iteration: Sample a batch, train on it and update target netwo
      -update_log() → None[source]
      +update_log() → None[source]

      Updates the episodic log file with all the signal values from the most recent episode. Additional signals for logging can be set by the creating a new signal using self.register_signal, and then updating it with some internal agent values.

      @@ -694,7 +725,7 @@ and then updating it with some internal agent values.

      -update_step_in_episode_log() → None[source]
      +update_step_in_episode_log() → None[source]

      Updates the in-episode log file with all the signal values from the most recent step.

      Returns
      @@ -705,7 +736,7 @@ and then updating it with some internal agent values.

      -update_transition_before_adding_to_replay_buffer(transition: rl_coach.core_types.Transition) → rl_coach.core_types.Transition[source]
      +update_transition_before_adding_to_replay_buffer(transition: rl_coach.core_types.Transition) → rl_coach.core_types.Transition[source]

      Allows agents to update the transition just before adding it to the replay buffer. Can be useful for agents that want to tweak the reward, termination signal, etc.

      diff --git a/docs/components/agents/other/dfp.html b/docs/components/agents/other/dfp.html index 4d0c6ce..564ed83 100644 --- a/docs/components/agents/other/dfp.html +++ b/docs/components/agents/other/dfp.html @@ -117,6 +117,7 @@
    • Conditional Imitation Learning
    • Clipped Proximal Policy Optimization
    • Deep Deterministic Policy Gradient
    • +
    • Twin Delayed Deep Deterministic Policy Gradient
    • Soft Actor-Critic
    • Direct Future Prediction
      • Network Structure
      • @@ -249,7 +250,7 @@ measurements that were seen in time-steps
        -class rl_coach.agents.dfp_agent.DFPAlgorithmParameters[source]
        +class rl_coach.agents.dfp_agent.DFPAlgorithmParameters[source]
        Parameters
          diff --git a/docs/components/agents/policy_optimization/ac.html b/docs/components/agents/policy_optimization/ac.html index 88bf2fd..c567ecf 100644 --- a/docs/components/agents/policy_optimization/ac.html +++ b/docs/components/agents/policy_optimization/ac.html @@ -125,6 +125,7 @@
        • Conditional Imitation Learning
        • Clipped Proximal Policy Optimization
        • Deep Deterministic Policy Gradient
        • +
        • Twin Delayed Deep Deterministic Policy Gradient
        • Soft Actor-Critic
        • Direct Future Prediction
        • Double DQN
        • @@ -247,7 +248,7 @@ where \(k\) is \(L = -\mathop{\mathbb{E}} [log (\pi) \cdot A]\)

          -class rl_coach.agents.actor_critic_agent.ActorCriticAlgorithmParameters[source]
          +class rl_coach.agents.actor_critic_agent.ActorCriticAlgorithmParameters[source]
          Parameters
            diff --git a/docs/components/agents/policy_optimization/acer.html b/docs/components/agents/policy_optimization/acer.html index fcd65e4..3d39ebf 100644 --- a/docs/components/agents/policy_optimization/acer.html +++ b/docs/components/agents/policy_optimization/acer.html @@ -125,6 +125,7 @@
          • Conditional Imitation Learning
          • Clipped Proximal Policy Optimization
          • Deep Deterministic Policy Gradient
          • +
          • Twin Delayed Deep Deterministic Policy Gradient
          • Soft Actor-Critic
          • Direct Future Prediction
          • Double DQN
          • @@ -279,7 +280,7 @@ The goal of the trust region update is to the difference between the updated pol
            -class rl_coach.agents.acer_agent.ACERAlgorithmParameters[source]
            +class rl_coach.agents.acer_agent.ACERAlgorithmParameters[source]
            Parameters
              diff --git a/docs/components/agents/policy_optimization/cppo.html b/docs/components/agents/policy_optimization/cppo.html index ef8df6c..5996cf1 100644 --- a/docs/components/agents/policy_optimization/cppo.html +++ b/docs/components/agents/policy_optimization/cppo.html @@ -125,6 +125,7 @@
          • Deep Deterministic Policy Gradient
          • +
          • Twin Delayed Deep Deterministic Policy Gradient
          • Soft Actor-Critic
          • Direct Future Prediction
          • Double DQN
          • @@ -252,7 +253,7 @@ clipped surrogate loss:

            -class rl_coach.agents.clipped_ppo_agent.ClippedPPOAlgorithmParameters[source]
            +class rl_coach.agents.clipped_ppo_agent.ClippedPPOAlgorithmParameters[source]
            Parameters
              diff --git a/docs/components/agents/policy_optimization/ddpg.html b/docs/components/agents/policy_optimization/ddpg.html index 6841c0f..b0f9afc 100644 --- a/docs/components/agents/policy_optimization/ddpg.html +++ b/docs/components/agents/policy_optimization/ddpg.html @@ -37,7 +37,7 @@ - + @@ -125,6 +125,7 @@
            +
          • Twin Delayed Deep Deterministic Policy Gradient
          • Soft Actor-Critic
          • Direct Future Prediction
          • Double DQN
          • @@ -257,7 +258,7 @@ given \(\nabla_a Q(s,a)\). Fin

            After every training step, do a soft update of the critic and actor target networks’ weights from the online networks.

            -class rl_coach.agents.ddpg_agent.DDPGAlgorithmParameters[source]
            +class rl_coach.agents.ddpg_agent.DDPGAlgorithmParameters[source]
            Parameters
              @@ -297,7 +298,7 @@ values. If set to False, the terminal states reward will be taken as the target diff --git a/docs/components/agents/policy_optimization/td3.html b/docs/components/agents/policy_optimization/td3.html new file mode 100644 index 0000000..536265d --- /dev/null +++ b/docs/components/agents/policy_optimization/td3.html @@ -0,0 +1,347 @@ + + + + + + + + + + + Twin Delayed Deep Deterministic Policy Gradient — Reinforcement Learning Coach 0.12.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              + + + +
              + + + + + +
              + +
              + + + + + + + + + + + + + + + + + +
              + + + + +
              +
              +
              +
              + +
              +

              Twin Delayed Deep Deterministic Policy Gradient

              +

              Actions space: Continuous

              +

              References: Addressing Function Approximation Error in Actor-Critic Methods

              +
              +

              Network Structure

              +../../../_images/td3.png +
              +
              +

              Algorithm Description

              +
              +

              Choosing an action

              +

              Pass the current states through the actor network, and get an action mean vector \(\mu\). +While in training phase, use a continuous exploration policy, such as a small zero-meaned gaussian noise, +to add exploration noise to the action. When testing, use the mean vector \(\mu\) as-is.

              +
              +
              +

              Training the network

              +

              Start by sampling a batch of transitions from the experience replay.

              +
                +
              • To train the two critic networks, use the following targets:

                +

                \(y_t=r(s_t,a_t )+\gamma \cdot \min_{i=1,2} Q_{i}(s_{t+1},\mu(s_{t+1} )+[\mathcal{N}(0,\,\sigma^{2})]^{MAX\_NOISE}_{MIN\_NOISE})\)

                +

                First run the actor target network, using the next states as the inputs, and get \(\mu (s_{t+1} )\). Then, add a +clipped gaussian noise to these actions, and clip the resulting actions to the actions space. +Next, run the critic target networks using the next states and \(\mu (s_{t+1} )+[\mathcal{N}(0,\,\sigma^{2})]^{MAX\_NOISE}_{MIN\_NOISE}\), +and use the minimum between the two critic networks predictions in order to calculate \(y_t\) according to the +equation above. To train the networks, use the current states and actions as the inputs, and \(y_t\) +as the targets.

                +
              • +
              • To train the actor network, use the following equation:

                +

                \(\nabla_{\theta^\mu } J \approx E_{s_t \tilde{} \rho^\beta } [\nabla_a Q_{1}(s,a)|_{s=s_t,a=\mu (s_t ) } \cdot \nabla_{\theta^\mu} \mu(s)|_{s=s_t} ]\)

                +

                Use the actor’s online network to get the action mean values using the current states as the inputs. +Then, use the first critic’s online network in order to get the gradients of the critic output with respect to the +action mean values \(\nabla _a Q_{1}(s,a)|_{s=s_t,a=\mu(s_t ) }\). +Using the chain rule, calculate the gradients of the actor’s output, with respect to the actor weights, +given \(\nabla_a Q(s,a)\). Finally, apply those gradients to the actor network.

                +

                The actor’s training is done at a slower frequency than the critic’s training, in order to allow the critic to better fit the +current policy, before exercising the critic in order to train the actor. +Following the same, delayed, actor’s training cadence, do a soft update of the critic and actor target networks’ weights +from the online networks.

                +
              • +
              +
              +
              +class rl_coach.agents.td3_agent.TD3AlgorithmParameters[source]
              +
              +
              Parameters
              +
                +
              • num_steps_between_copying_online_weights_to_target – (StepMethod) +The number of steps between copying the online network weights to the target network weights.

              • +
              • rate_for_copying_weights_to_target – (float) +When copying the online network weights to the target network weights, a soft update will be used, which +weight the new online network weights by rate_for_copying_weights_to_target

              • +
              • num_consecutive_playing_steps – (StepMethod) +The number of consecutive steps to act between every two training iterations

              • +
              • use_target_network_for_evaluation – (bool) +If set to True, the target network will be used for predicting the actions when choosing actions to act. +Since the target network weights change more slowly, the predicted actions will be more consistent.

              • +
              • action_penalty – (float) +The amount by which to penalize the network on high action feature (pre-activation) values. +This can prevent the actions features from saturating the TanH activation function, and therefore prevent the +gradients from becoming very low.

              • +
              • clip_critic_targets – (Tuple[float, float] or None) +The range to clip the critic target to in order to prevent overestimation of the action values.

              • +
              • use_non_zero_discount_for_terminal_states – (bool) +If set to True, the discount factor will be used for terminal states to bootstrap the next predicted state +values. If set to False, the terminal states reward will be taken as the target return for the network.

              • +
              +
              +
              +
              + +
              +
              +
              + + +
              + +
              + + +
              +
              + +
              + +
              + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/components/agents/value_optimization/bs_dqn.html b/docs/components/agents/value_optimization/bs_dqn.html index 64d53e8..a9bb895 100644 --- a/docs/components/agents/value_optimization/bs_dqn.html +++ b/docs/components/agents/value_optimization/bs_dqn.html @@ -126,6 +126,7 @@
            • Conditional Imitation Learning
            • Clipped Proximal Policy Optimization
            • Deep Deterministic Policy Gradient
            • +
            • Twin Delayed Deep Deterministic Policy Gradient
            • Soft Actor-Critic
            • Direct Future Prediction
            • Double DQN
            • diff --git a/docs/components/agents/value_optimization/categorical_dqn.html b/docs/components/agents/value_optimization/categorical_dqn.html index 1a599c3..d276df6 100644 --- a/docs/components/agents/value_optimization/categorical_dqn.html +++ b/docs/components/agents/value_optimization/categorical_dqn.html @@ -124,6 +124,7 @@
            • Conditional Imitation Learning
            • Clipped Proximal Policy Optimization
            • Deep Deterministic Policy Gradient
            • +
            • Twin Delayed Deep Deterministic Policy Gradient
            • Soft Actor-Critic
            • Direct Future Prediction
            • Double DQN
            • @@ -244,7 +245,7 @@ probability distribution. Only the target of the actions that were actually ta
              -class rl_coach.agents.categorical_dqn_agent.CategoricalDQNAlgorithmParameters[source]
              +class rl_coach.agents.categorical_dqn_agent.CategoricalDQNAlgorithmParameters[source]
              Parameters
                diff --git a/docs/components/agents/value_optimization/double_dqn.html b/docs/components/agents/value_optimization/double_dqn.html index 9ba7c6c..1aac16d 100644 --- a/docs/components/agents/value_optimization/double_dqn.html +++ b/docs/components/agents/value_optimization/double_dqn.html @@ -117,6 +117,7 @@
              • Conditional Imitation Learning
              • Clipped Proximal Policy Optimization
              • Deep Deterministic Policy Gradient
              • +
              • Twin Delayed Deep Deterministic Policy Gradient
              • Soft Actor-Critic
              • Direct Future Prediction
              • Double DQN
                  diff --git a/docs/components/agents/value_optimization/dqn.html b/docs/components/agents/value_optimization/dqn.html index 52c866a..9d10883 100644 --- a/docs/components/agents/value_optimization/dqn.html +++ b/docs/components/agents/value_optimization/dqn.html @@ -117,6 +117,7 @@
                • Conditional Imitation Learning
                • Clipped Proximal Policy Optimization
                • Deep Deterministic Policy Gradient
                • +
                • Twin Delayed Deep Deterministic Policy Gradient
                • Soft Actor-Critic
                • Direct Future Prediction
                • Double DQN
                • @@ -243,7 +244,7 @@ Set those values as the targets for the actions that were not actually played.
                  -class rl_coach.agents.dqn_agent.DQNAlgorithmParameters[source]
                  +class rl_coach.agents.dqn_agent.DQNAlgorithmParameters[source]
                  diff --git a/docs/components/agents/value_optimization/dueling_dqn.html b/docs/components/agents/value_optimization/dueling_dqn.html index ded46ae..c25e608 100644 --- a/docs/components/agents/value_optimization/dueling_dqn.html +++ b/docs/components/agents/value_optimization/dueling_dqn.html @@ -117,6 +117,7 @@
                • Conditional Imitation Learning
                • Clipped Proximal Policy Optimization
                • Deep Deterministic Policy Gradient
                • +
                • Twin Delayed Deep Deterministic Policy Gradient
                • Soft Actor-Critic
                • Direct Future Prediction
                • Double DQN
                • diff --git a/docs/components/agents/value_optimization/mmc.html b/docs/components/agents/value_optimization/mmc.html index 58e1f24..f8afdbc 100644 --- a/docs/components/agents/value_optimization/mmc.html +++ b/docs/components/agents/value_optimization/mmc.html @@ -117,6 +117,7 @@
                • Conditional Imitation Learning
                • Clipped Proximal Policy Optimization
                • Deep Deterministic Policy Gradient
                • +
                • Twin Delayed Deep Deterministic Policy Gradient
                • Soft Actor-Critic
                • Direct Future Prediction
                • Double DQN
                • @@ -240,7 +241,7 @@ Once in every few thousand steps, copy the weights from the online network to the target network.

                  -class rl_coach.agents.mmc_agent.MixedMonteCarloAlgorithmParameters[source]
                  +class rl_coach.agents.mmc_agent.MixedMonteCarloAlgorithmParameters[source]
                  Parameters

                  monte_carlo_mixing_rate – (float) diff --git a/docs/components/agents/value_optimization/n_step.html b/docs/components/agents/value_optimization/n_step.html index 3154abf..abf03cf 100644 --- a/docs/components/agents/value_optimization/n_step.html +++ b/docs/components/agents/value_optimization/n_step.html @@ -117,6 +117,7 @@

                • Conditional Imitation Learning
                • Clipped Proximal Policy Optimization
                • Deep Deterministic Policy Gradient
                • +
                • Twin Delayed Deep Deterministic Policy Gradient
                • Soft Actor-Critic
                • Direct Future Prediction
                • Double DQN
                • @@ -242,7 +243,7 @@ where \(k\) is
                  -class rl_coach.agents.n_step_q_agent.NStepQAlgorithmParameters[source]
                  +class rl_coach.agents.n_step_q_agent.NStepQAlgorithmParameters[source]
                  Parameters
                    diff --git a/docs/components/agents/value_optimization/naf.html b/docs/components/agents/value_optimization/naf.html index 07190c1..a5f3ddf 100644 --- a/docs/components/agents/value_optimization/naf.html +++ b/docs/components/agents/value_optimization/naf.html @@ -117,6 +117,7 @@
                  • Conditional Imitation Learning
                  • Clipped Proximal Policy Optimization
                  • Deep Deterministic Policy Gradient
                  • +
                  • Twin Delayed Deep Deterministic Policy Gradient
                  • Soft Actor-Critic
                  • Direct Future Prediction
                  • Double DQN
                  • @@ -243,7 +244,7 @@ and \(y_t\) as the targets. After every training step, use a soft update in order to copy the weights from the online network to the target network.

                    -class rl_coach.agents.naf_agent.NAFAlgorithmParameters[source]
                    +class rl_coach.agents.naf_agent.NAFAlgorithmParameters[source]
                    diff --git a/docs/components/agents/value_optimization/nec.html b/docs/components/agents/value_optimization/nec.html index bbcfbea..4e953d5 100644 --- a/docs/components/agents/value_optimization/nec.html +++ b/docs/components/agents/value_optimization/nec.html @@ -117,6 +117,7 @@
                  • Conditional Imitation Learning
                  • Clipped Proximal Policy Optimization
                  • Deep Deterministic Policy Gradient
                  • +
                  • Twin Delayed Deep Deterministic Policy Gradient
                  • Soft Actor-Critic
                  • Direct Future Prediction
                  • Double DQN
                  • @@ -258,7 +259,7 @@ the network if necessary: \(y_t=\sum_{j=0}^{N-1}\gamma^j r(s_{t+j},a_{t+j} ) +\gamma^N max_a Q(s_{t+N},a)\)

                    -class rl_coach.agents.nec_agent.NECAlgorithmParameters[source]
                    +class rl_coach.agents.nec_agent.NECAlgorithmParameters[source]
                    Parameters
                      diff --git a/docs/components/agents/value_optimization/pal.html b/docs/components/agents/value_optimization/pal.html index b5d53f3..372d244 100644 --- a/docs/components/agents/value_optimization/pal.html +++ b/docs/components/agents/value_optimization/pal.html @@ -117,6 +117,7 @@
                    • Conditional Imitation Learning
                    • Clipped Proximal Policy Optimization
                    • Deep Deterministic Policy Gradient
                    • +
                    • Twin Delayed Deep Deterministic Policy Gradient
                    • Soft Actor-Critic
                    • Direct Future Prediction
                    • Double DQN
                    • @@ -251,7 +252,7 @@ has the highest predicted \(Q\)
                      -class rl_coach.agents.pal_agent.PALAlgorithmParameters[source]
                      +class rl_coach.agents.pal_agent.PALAlgorithmParameters[source]
                      Parameters
                        diff --git a/docs/components/agents/value_optimization/qr_dqn.html b/docs/components/agents/value_optimization/qr_dqn.html index 92064a1..e5d5121 100644 --- a/docs/components/agents/value_optimization/qr_dqn.html +++ b/docs/components/agents/value_optimization/qr_dqn.html @@ -117,6 +117,7 @@
                      • Conditional Imitation Learning
                      • Clipped Proximal Policy Optimization
                      • Deep Deterministic Policy Gradient
                      • +
                      • Twin Delayed Deep Deterministic Policy Gradient
                      • Soft Actor-Critic
                      • Direct Future Prediction
                      • Double DQN
                      • @@ -241,7 +242,7 @@ quantile locations. Only the targets of the actions that were actually taken are
                        -class rl_coach.agents.qr_dqn_agent.QuantileRegressionDQNAlgorithmParameters[source]
                        +class rl_coach.agents.qr_dqn_agent.QuantileRegressionDQNAlgorithmParameters[source]
                        Parameters
                          diff --git a/docs/components/agents/value_optimization/rainbow.html b/docs/components/agents/value_optimization/rainbow.html index bc6182c..2969064 100644 --- a/docs/components/agents/value_optimization/rainbow.html +++ b/docs/components/agents/value_optimization/rainbow.html @@ -117,6 +117,7 @@
                        • Conditional Imitation Learning
                        • Clipped Proximal Policy Optimization
                        • Deep Deterministic Policy Gradient
                        • +
                        • Twin Delayed Deep Deterministic Policy Gradient
                        • Soft Actor-Critic
                        • Direct Future Prediction
                        • Double DQN
                        • @@ -256,7 +257,7 @@ using the KL divergence loss that is returned from the network.

                          -class rl_coach.agents.rainbow_dqn_agent.RainbowDQNAlgorithmParameters[source]
                          +class rl_coach.agents.rainbow_dqn_agent.RainbowDQNAlgorithmParameters[source]
                          Parameters
                            diff --git a/docs/components/architectures/index.html b/docs/components/architectures/index.html index d6e8ebb..6a4c5b2 100644 --- a/docs/components/architectures/index.html +++ b/docs/components/architectures/index.html @@ -196,7 +196,7 @@ own components under a dedicated directory. For example, tensorflow components w parts that are implemented using TensorFlow.

                            -class rl_coach.base_parameters.NetworkParameters(force_cpu=False, async_training=False, shared_optimizer=True, scale_down_gradients_by_number_of_workers_for_sync_training=True, clip_gradients=None, gradients_clipping_method=<GradientClippingMethod.ClipByGlobalNorm: 0>, l2_regularization=0, learning_rate=0.00025, learning_rate_decay_rate=0, learning_rate_decay_steps=0, input_embedders_parameters={}, embedding_merger_type=<EmbeddingMergerType.Concat: 0>, middleware_parameters=None, heads_parameters=[], use_separate_networks_per_head=False, optimizer_type='Adam', optimizer_epsilon=0.0001, adam_optimizer_beta1=0.9, adam_optimizer_beta2=0.99, rms_prop_optimizer_decay=0.9, batch_size=32, replace_mse_with_huber_loss=False, create_target_network=False, tensorflow_support=True, softmax_temperature=1)[source]
                            +class rl_coach.base_parameters.NetworkParameters(force_cpu=False, async_training=False, shared_optimizer=True, scale_down_gradients_by_number_of_workers_for_sync_training=True, clip_gradients=None, gradients_clipping_method=<GradientClippingMethod.ClipByGlobalNorm: 0>, l2_regularization=0, learning_rate=0.00025, learning_rate_decay_rate=0, learning_rate_decay_steps=0, input_embedders_parameters={}, embedding_merger_type=<EmbeddingMergerType.Concat: 0>, middleware_parameters=None, heads_parameters=[], use_separate_networks_per_head=False, optimizer_type='Adam', optimizer_epsilon=0.0001, adam_optimizer_beta1=0.9, adam_optimizer_beta2=0.99, rms_prop_optimizer_decay=0.9, batch_size=32, replace_mse_with_huber_loss=False, create_target_network=False, tensorflow_support=True, softmax_temperature=1)[source]
                            Parameters
                              @@ -268,7 +268,7 @@ online network at will.

                              Architecture

                              -class rl_coach.architectures.architecture.Architecture(agent_parameters: rl_coach.base_parameters.AgentParameters, spaces: rl_coach.spaces.SpacesDefinition, name: str = '')[source]
                              +class rl_coach.architectures.architecture.Architecture(agent_parameters: rl_coach.base_parameters.AgentParameters, spaces: rl_coach.spaces.SpacesDefinition, name: str = '')[source]

                              Creates a neural network ‘architecture’, that can be trained and used for inference.

                              Parameters
                              @@ -281,7 +281,7 @@ online network at will.

                              -accumulate_gradients(inputs: Dict[str, numpy.ndarray], targets: List[numpy.ndarray], additional_fetches: list = None, importance_weights: numpy.ndarray = None, no_accumulation: bool = False) → Tuple[float, List[float], float, list][source]
                              +accumulate_gradients(inputs: Dict[str, numpy.ndarray], targets: List[numpy.ndarray], additional_fetches: list = None, importance_weights: numpy.ndarray = None, no_accumulation: bool = False) → Tuple[float, List[float], float, list][source]

                              Given a batch of inputs (i.e. states) and targets (e.g. discounted rewards), computes and accumulates the gradients for model parameters. Will run forward and backward pass to compute gradients, clip the gradient values if required and then accumulate gradients from all learners. It does not update the model weights, @@ -324,7 +324,7 @@ fetched_tensors: all values for additional_fetches

                              -apply_and_reset_gradients(gradients: List[numpy.ndarray], scaler: float = 1.0) → None[source]
                              +apply_and_reset_gradients(gradients: List[numpy.ndarray], scaler: float = 1.0) → None[source]

                              Applies the given gradients to the network weights and resets the gradient accumulations. Has the same impact as calling apply_gradients, then reset_accumulated_gradients.

                              @@ -340,7 +340,7 @@ of an identical network (either self or another identical network)

                              -apply_gradients(gradients: List[numpy.ndarray], scaler: float = 1.0) → None[source]
                              +apply_gradients(gradients: List[numpy.ndarray], scaler: float = 1.0) → None[source]

                              Applies the given gradients to the network weights. Will be performed sync or async depending on network_parameters.async_training

                              @@ -356,7 +356,7 @@ of an identical network (either self or another identical network)

                              -collect_savers(parent_path_suffix: str) → rl_coach.saver.SaverCollection[source]
                              +collect_savers(parent_path_suffix: str) → rl_coach.saver.SaverCollection[source]

                              Collection of all savers for the network (typically only one saver for network and one for ONNX export) :param parent_path_suffix: path suffix of the parent of the network

                              @@ -369,9 +369,9 @@ of an identical network (either self or another identical network)

                              -
                              +
                              -static construct(variable_scope: str, devices: List[str], *args, **kwargs) → rl_coach.architectures.architecture.Architecture[source]
                              +static construct(variable_scope: str, devices: List[str], *args, **kwargs) → rl_coach.architectures.architecture.Architecture[source]

                              Construct a network class using the provided variable scope and on requested devices :param variable_scope: string specifying variable scope under which to create network variables :param devices: list of devices (can be list of Device objects, or string for TF distributed) @@ -382,7 +382,7 @@ of an identical network (either self or another identical network)

                              -get_variable_value(variable: Any) → numpy.ndarray[source]
                              +get_variable_value(variable: Any) → numpy.ndarray[source]

                              Gets value of a specified variable. Type of variable is dependant on the framework. Example of a variable is head.kl_coefficient, which could be a symbol for evaluation or could be a string representing the value.

                              @@ -398,7 +398,7 @@ or could be a string representing the value.

                              -get_weights() → List[numpy.ndarray][source]
                              +get_weights() → List[numpy.ndarray][source]

                              Gets model weights as a list of ndarrays. It is used for synchronizing weight between two identical networks.

                              Returns
                              @@ -407,9 +407,9 @@ or could be a string representing the value.

                              -
                              +
                              -static parallel_predict(sess: Any, network_input_tuples: List[Tuple[Architecture, Dict[str, numpy.ndarray]]]) → Tuple[numpy.ndarray, ...][source]
                              +static parallel_predict(sess: Any, network_input_tuples: List[Tuple[Architecture, Dict[str, numpy.ndarray]]]) → Tuple[numpy.ndarray, ...][source]
                              Parameters
                                @@ -425,7 +425,7 @@ or could be a string representing the value.

                                -predict(inputs: Dict[str, numpy.ndarray], outputs: List[Any] = None, squeeze_output: bool = True, initial_feed_dict: Dict[Any, numpy.ndarray] = None) → Tuple[numpy.ndarray, ...][source]
                                +predict(inputs: Dict[str, numpy.ndarray], outputs: List[Any] = None, squeeze_output: bool = True, initial_feed_dict: Dict[Any, numpy.ndarray] = None) → Tuple[numpy.ndarray, ...][source]

                                Given input observations, use the model to make predictions (e.g. action or value).

                                Parameters
                                @@ -446,7 +446,7 @@ depends on the framework backend.

                                -reset_accumulated_gradients() → None[source]
                                +reset_accumulated_gradients() → None[source]

                                Sets gradient of all parameters to 0.

                                Once gradients are reset, they must be accessible by accumulated_gradients property of this class, which must return a list of numpy ndarrays. Child class must ensure that accumulated_gradients is set.

                                @@ -454,7 +454,7 @@ which must return a list of numpy ndarrays. Child class must ensure that a
                                -set_variable_value(assign_op: Any, value: numpy.ndarray, placeholder: Any)[source]
                                +set_variable_value(assign_op: Any, value: numpy.ndarray, placeholder: Any)[source]

                                Updates the value of a specified variable. Type of assign_op is dependant on the framework and is a unique identifier for assigning value to a variable. For example an agent may use head.assign_kl_coefficient. There is a one to one mapping between assign_op and placeholder @@ -472,7 +472,7 @@ head.assign_kl_coefficient. There is a one to one mapping between assign_op and

                                -set_weights(weights: List[numpy.ndarray], rate: float = 1.0) → None[source]
                                +set_weights(weights: List[numpy.ndarray], rate: float = 1.0) → None[source]

                                Sets model weights for provided layer parameters.

                                Parameters
                                @@ -490,7 +490,7 @@ i.e. new_weight = rate * given_weight + (1 - rate) * old_weight

                                -train_on_batch(inputs: Dict[str, numpy.ndarray], targets: List[numpy.ndarray], scaler: float = 1.0, additional_fetches: list = None, importance_weights: numpy.ndarray = None) → Tuple[float, List[float], float, list][source]
                                +train_on_batch(inputs: Dict[str, numpy.ndarray], targets: List[numpy.ndarray], scaler: float = 1.0, additional_fetches: list = None, importance_weights: numpy.ndarray = None) → Tuple[float, List[float], float, list][source]

                                Given a batch of inputs (e.g. states) and targets (e.g. discounted rewards), takes a training step: i.e. runs a forward pass and backward pass of the network, accumulates the gradients and applies an optimization step to update the weights. @@ -535,7 +535,7 @@ fetched_tensors: all values for additional_fetches

                                ../../_images/distributed.png
                                -class rl_coach.architectures.network_wrapper.NetworkWrapper(agent_parameters: rl_coach.base_parameters.AgentParameters, has_target: bool, has_global: bool, name: str, spaces: rl_coach.spaces.SpacesDefinition, replicated_device=None, worker_device=None)[source]
                                +class rl_coach.architectures.network_wrapper.NetworkWrapper(agent_parameters: rl_coach.base_parameters.AgentParameters, has_target: bool, has_global: bool, name: str, spaces: rl_coach.spaces.SpacesDefinition, replicated_device=None, worker_device=None)[source]

                                The network wrapper contains multiple copies of the same network, each one with a different set of weights which is updating in a different time scale. The network wrapper will always contain an online network. It will contain an additional slow updating target network if it was requested by the user, @@ -544,7 +544,7 @@ multi-process distributed mode. The network wrapper contains functionality for m between them.

                                -apply_gradients_and_sync_networks(reset_gradients=True)[source]
                                +apply_gradients_and_sync_networks(reset_gradients=True)[source]

                                Applies the gradients accumulated in the online network to the global network or to itself and syncs the networks if necessary

                                @@ -559,7 +559,7 @@ complexity for this function by around 10%

                                -apply_gradients_to_global_network(gradients=None)[source]
                                +apply_gradients_to_global_network(gradients=None)[source]

                                Apply gradients from the online network on the global network

                                Parameters
                                @@ -573,7 +573,7 @@ complexity for this function by around 10%

                                -apply_gradients_to_online_network(gradients=None)[source]
                                +apply_gradients_to_online_network(gradients=None)[source]

                                Apply gradients from the online network on itself

                                Returns
                                @@ -584,7 +584,7 @@ complexity for this function by around 10%

                                -collect_savers(parent_path_suffix: str) → rl_coach.saver.SaverCollection[source]
                                +collect_savers(parent_path_suffix: str) → rl_coach.saver.SaverCollection[source]

                                Collect all of network’s savers for global or online network Note: global, online, and target network are all copies fo the same network which parameters that are

                                @@ -610,7 +610,7 @@ for saving.

                                -parallel_prediction(network_input_tuples: List[Tuple])[source]
                                +parallel_prediction(network_input_tuples: List[Tuple])[source]

                                Run several network prediction in parallel. Currently this only supports running each of the network once.

                                Parameters
                                @@ -625,7 +625,7 @@ target_network or global_network) and the second element is the inputs

                                -set_is_training(state: bool)[source]
                                +set_is_training(state: bool)[source]

                                Set the phase of the network between training and testing

                                Parameters
                                @@ -639,7 +639,7 @@ target_network or global_network) and the second element is the inputs

                                -sync()[source]
                                +sync()[source]

                                Initializes the weights of the networks to match each other

                                Returns
                                @@ -650,7 +650,7 @@ target_network or global_network) and the second element is the inputs

                                -train_and_sync_networks(inputs, targets, additional_fetches=[], importance_weights=None)[source]
                                +train_and_sync_networks(inputs, targets, additional_fetches=[], importance_weights=None)[source]

                                A generic training function that enables multi-threading training using a global network if necessary.

                                Parameters
                                @@ -670,7 +670,7 @@ error of this sample. If it is not given, the samples losses won’t be scaled
                                -update_online_network(rate=1.0)[source]
                                +update_online_network(rate=1.0)[source]

                                Copy weights: global network >>> online network

                                Parameters
                                @@ -681,7 +681,7 @@ error of this sample. If it is not given, the samples losses won’t be scaled
                                -update_target_network(rate=1.0)[source]
                                +update_target_network(rate=1.0)[source]

                                Copy weights: online network >>> target network

                                Parameters
                                diff --git a/docs/components/core_types.html b/docs/components/core_types.html index d23a959..0d957af 100644 --- a/docs/components/core_types.html +++ b/docs/components/core_types.html @@ -197,7 +197,7 @@

                                ActionInfo

                                -class rl_coach.core_types.ActionInfo(action: Union[int, float, numpy.ndarray, List], all_action_probabilities: float = 0, action_value: float = 0.0, state_value: float = 0.0, max_action_value: float = None)[source]
                                +class rl_coach.core_types.ActionInfo(action: Union[int, float, numpy.ndarray, List], all_action_probabilities: float = 0, action_value: float = 0.0, state_value: float = 0.0, max_action_value: float = None)[source]

                                Action info is a class that holds an action and various additional information details about it

                                Parameters
                                @@ -219,7 +219,7 @@ action with the maximum value

                                Batch

                                -class rl_coach.core_types.Batch(transitions: List[rl_coach.core_types.Transition])[source]
                                +class rl_coach.core_types.Batch(transitions: List[rl_coach.core_types.Transition])[source]

                                A wrapper around a list of transitions that helps extracting batches of parameters from it. For example, one can extract a list of states corresponding to the list of transitions. The class uses lazy evaluation in order to return each of the available parameters.

                                @@ -230,7 +230,7 @@ The class uses lazy evaluation in order to return each of the available paramete
                                -actions(expand_dims=False) → numpy.ndarray[source]
                                +actions(expand_dims=False) → numpy.ndarray[source]

                                if the actions were not converted to a batch before, extract them to a batch and then return the batch

                                Parameters
                                @@ -244,7 +244,7 @@ The class uses lazy evaluation in order to return each of the available paramete
                                -game_overs(expand_dims=False) → numpy.ndarray[source]
                                +game_overs(expand_dims=False) → numpy.ndarray[source]

                                if the game_overs were not converted to a batch before, extract them to a batch and then return the batch

                                Parameters
                                @@ -258,7 +258,7 @@ The class uses lazy evaluation in order to return each of the available paramete
                                -goals(expand_dims=False) → numpy.ndarray[source]
                                +goals(expand_dims=False) → numpy.ndarray[source]

                                if the goals were not converted to a batch before, extract them to a batch and then return the batch if the goal was not filled, this will raise an exception

                                @@ -273,7 +273,7 @@ if the goal was not filled, this will raise an exception

                                -info(key, expand_dims=False) → numpy.ndarray[source]
                                +info(key, expand_dims=False) → numpy.ndarray[source]

                                if the given info dictionary key was not converted to a batch before, extract it to a batch and then return the batch. if the key is not part of the keys in the info dictionary, this will raise an exception

                                @@ -288,7 +288,7 @@ batch. if the key is not part of the keys in the info dictionary, this will rais
                                -info_as_list(key) → list[source]
                                +info_as_list(key) → list[source]

                                get the info and store it internally as a list, if wasn’t stored before. return it as a list :param expand_dims: add an extra dimension to the info batch :return: a list containing all the info values of the batch corresponding to the given key

                                @@ -296,7 +296,7 @@ batch. if the key is not part of the keys in the info dictionary, this will rais
                                -n_step_discounted_rewards(expand_dims=False) → numpy.ndarray[source]
                                +n_step_discounted_rewards(expand_dims=False) → numpy.ndarray[source]
                                if the n_step_discounted_rewards were not converted to a batch before, extract them to a batch and then return

                                the batch

                                @@ -308,7 +308,7 @@ batch. if the key is not part of the keys in the info dictionary, this will rais
                                -next_states(fetches: List[str], expand_dims=False) → Dict[str, numpy.ndarray][source]
                                +next_states(fetches: List[str], expand_dims=False) → Dict[str, numpy.ndarray][source]

                                follow the keys in fetches to extract the corresponding items from the next states in the batch if these keys were not already extracted before. return only the values corresponding to those keys

                                @@ -326,7 +326,7 @@ if these keys were not already extracted before. return only the values correspo
                                -rewards(expand_dims=False) → numpy.ndarray[source]
                                +rewards(expand_dims=False) → numpy.ndarray[source]

                                if the rewards were not converted to a batch before, extract them to a batch and then return the batch

                                Parameters
                                @@ -340,7 +340,7 @@ if these keys were not already extracted before. return only the values correspo
                                -shuffle() → None[source]
                                +shuffle() → None[source]

                                Shuffle all the transitions in the batch

                                Returns
                                @@ -349,9 +349,9 @@ if these keys were not already extracted before. return only the values correspo
                                -
                                +
                                -size
                                +property size
                                Returns

                                the size of the batch

                                @@ -361,7 +361,7 @@ if these keys were not already extracted before. return only the values correspo
                                -slice(start, end) → None[source]
                                +slice(start, end) → None[source]

                                Keep a slice from the batch and discard the rest of the batch

                                Parameters
                                @@ -378,7 +378,7 @@ if these keys were not already extracted before. return only the values correspo
                                -states(fetches: List[str], expand_dims=False) → Dict[str, numpy.ndarray][source]
                                +states(fetches: List[str], expand_dims=False) → Dict[str, numpy.ndarray][source]

                                follow the keys in fetches to extract the corresponding items from the states in the batch if these keys were not already extracted before. return only the values corresponding to those keys

                                @@ -401,7 +401,7 @@ if these keys were not already extracted before. return only the values correspo

                                EnvResponse

                                -class rl_coach.core_types.EnvResponse(next_state: Dict[str, numpy.ndarray], reward: Union[int, float, numpy.ndarray], game_over: bool, info: Dict = None, goal: numpy.ndarray = None)[source]
                                +class rl_coach.core_types.EnvResponse(next_state: Dict[str, numpy.ndarray], reward: Union[int, float, numpy.ndarray], game_over: bool, info: Dict = None, goal: numpy.ndarray = None)[source]

                                An env response is a collection containing the information returning from the environment after a single action has been performed on it.

                                @@ -424,7 +424,7 @@ the execution of the action.

                                Episode

                                -class rl_coach.core_types.Episode(discount: float = 0.99, bootstrap_total_return_from_old_policy: bool = False, n_step: int = -1)[source]
                                +class rl_coach.core_types.Episode(discount: float = 0.99, bootstrap_total_return_from_old_policy: bool = False, n_step: int = -1)[source]

                                An Episode represents a set of sequential transitions, that end with a terminal state.

                                Parameters
                                @@ -438,7 +438,7 @@ memory

                                -get_first_transition() → rl_coach.core_types.Transition[source]
                                +get_first_transition() → rl_coach.core_types.Transition[source]

                                Get the first transition in the episode, or None if there are no transitions available

                                Returns
                                @@ -449,7 +449,7 @@ memory

                                -get_last_transition() → rl_coach.core_types.Transition[source]
                                +get_last_transition() → rl_coach.core_types.Transition[source]

                                Get the last transition in the episode, or None if there are no transition available

                                Returns
                                @@ -460,7 +460,7 @@ memory

                                -get_transition(transition_idx: int) → rl_coach.core_types.Transition[source]
                                +get_transition(transition_idx: int) → rl_coach.core_types.Transition[source]

                                Get a specific transition by its index.

                                Parameters
                                @@ -474,7 +474,7 @@ memory

                                -get_transitions_attribute(attribute_name: str) → List[Any][source]
                                +get_transitions_attribute(attribute_name: str) → List[Any][source]

                                Get the values for some transition attribute from all the transitions in the episode. For example, this allows getting the rewards for all the transitions as a list by calling get_transitions_attribute(‘reward’)

                                @@ -490,7 +490,7 @@ get_transitions_attribute(‘reward’)

                                -insert(transition: rl_coach.core_types.Transition) → None[source]
                                +insert(transition: rl_coach.core_types.Transition) → None[source]

                                Insert a new transition to the episode. If the game_over flag in the transition is set to True, the episode will be marked as complete.

                                @@ -505,7 +505,7 @@ the episode will be marked as complete.

                                -is_empty() → bool[source]
                                +is_empty() → bool[source]

                                Check if the episode is empty

                                Returns
                                @@ -516,7 +516,7 @@ the episode will be marked as complete.

                                -length() → int[source]
                                +length() → int[source]

                                Return the length of the episode, which is the number of transitions it holds.

                                Returns
                                @@ -527,7 +527,7 @@ the episode will be marked as complete.

                                -update_discounted_rewards()[source]
                                +update_discounted_rewards()[source]

                                Update the discounted returns for all the transitions in the episode. The returns will be calculated according to the rewards of each transition, together with the number of steps to bootstrap from and the discount factor, as defined by n_step and discount respectively when initializing @@ -546,7 +546,7 @@ the episode.

                                Transition

                                -class rl_coach.core_types.Transition(state: Dict[str, numpy.ndarray] = None, action: Union[int, float, numpy.ndarray, List] = None, reward: Union[int, float, numpy.ndarray] = None, next_state: Dict[str, numpy.ndarray] = None, game_over: bool = None, info: Dict = None)[source]
                                +class rl_coach.core_types.Transition(state: Dict[str, numpy.ndarray] = None, action: Union[int, float, numpy.ndarray, List] = None, reward: Union[int, float, numpy.ndarray] = None, next_state: Dict[str, numpy.ndarray] = None, game_over: bool = None, info: Dict = None)[source]

                                A transition is a tuple containing the information of a single step of interaction between the agent and the environment. The most basic version should contain the following values: (current state, action, reward, next state, game over) diff --git a/docs/components/data_stores/index.html b/docs/components/data_stores/index.html index 4e3fc79..0f3b777 100644 --- a/docs/components/data_stores/index.html +++ b/docs/components/data_stores/index.html @@ -194,7 +194,7 @@

                                S3DataStore

                                -class rl_coach.data_stores.s3_data_store.S3DataStore(params: rl_coach.data_stores.s3_data_store.S3DataStoreParameters)[source]
                                +class rl_coach.data_stores.s3_data_store.S3DataStore(params: rl_coach.data_stores.s3_data_store.S3DataStoreParameters)[source]

                                An implementation of the data store using S3 for storing policy checkpoints when using Coach in distributed mode. The policy checkpoints are written by the trainer and read by the rollout worker.

                                @@ -209,7 +209,7 @@ The policy checkpoints are written by the trainer and read by the rollout worker

                                NFSDataStore

                                -class rl_coach.data_stores.nfs_data_store.NFSDataStore(params: rl_coach.data_stores.nfs_data_store.NFSDataStoreParameters)[source]
                                +class rl_coach.data_stores.nfs_data_store.NFSDataStore(params: rl_coach.data_stores.nfs_data_store.NFSDataStoreParameters)[source]

                                An implementation of data store which uses NFS for storing policy checkpoints when using Coach in distributed mode. The policy checkpoints are written by the trainer and read by the rollout worker.

                                diff --git a/docs/components/environments/index.html b/docs/components/environments/index.html index dab4dd1..9ece82b 100644 --- a/docs/components/environments/index.html +++ b/docs/components/environments/index.html @@ -195,7 +195,7 @@

                                Environments

                                -class rl_coach.environments.environment.Environment(level: rl_coach.environments.environment.LevelSelection, seed: int, frame_skip: int, human_control: bool, custom_reward_threshold: Union[int, float], visualization_parameters: rl_coach.base_parameters.VisualizationParameters, target_success_rate: float = 1.0, **kwargs)[source]
                                +class rl_coach.environments.environment.Environment(level: rl_coach.environments.environment.LevelSelection, seed: int, frame_skip: int, human_control: bool, custom_reward_threshold: Union[int, float], visualization_parameters: rl_coach.base_parameters.VisualizationParameters, target_success_rate: float = 1.0, **kwargs)[source]
                                Parameters
                                  @@ -210,9 +210,9 @@ additional arguments which will be ignored by this class, but might be used by o
                                -
                                +
                                -action_space
                                +property action_space

                                Get the action space of the environment

                                Returns
                                @@ -223,7 +223,7 @@ additional arguments which will be ignored by this class, but might be used by o
                                -close() → None[source]
                                +close() → None[source]

                                Clean up steps.

                                Returns
                                @@ -234,7 +234,7 @@ additional arguments which will be ignored by this class, but might be used by o
                                -get_action_from_user() → Union[int, float, numpy.ndarray, List][source]
                                +get_action_from_user() → Union[int, float, numpy.ndarray, List][source]

                                Get an action from the user keyboard

                                Returns
                                @@ -245,7 +245,7 @@ additional arguments which will be ignored by this class, but might be used by o
                                -get_available_keys() → List[Tuple[str, Union[int, float, numpy.ndarray, List]]][source]
                                +get_available_keys() → List[Tuple[str, Union[int, float, numpy.ndarray, List]]][source]

                                Return a list of tuples mapping between action names and the keyboard key that triggers them

                                Returns
                                @@ -256,7 +256,7 @@ additional arguments which will be ignored by this class, but might be used by o
                                -get_goal() → Union[None, numpy.ndarray][source]
                                +get_goal() → Union[None, numpy.ndarray][source]

                                Get the current goal that the agents needs to achieve in the environment

                                Returns
                                @@ -267,7 +267,7 @@ additional arguments which will be ignored by this class, but might be used by o
                                -get_random_action() → Union[int, float, numpy.ndarray, List][source]
                                +get_random_action() → Union[int, float, numpy.ndarray, List][source]

                                Returns an action picked uniformly from the available actions

                                Returns
                                @@ -278,7 +278,7 @@ additional arguments which will be ignored by this class, but might be used by o
                                -get_rendered_image() → numpy.ndarray[source]
                                +get_rendered_image() → numpy.ndarray[source]

                                Return a numpy array containing the image that will be rendered to the screen. This can be different from the observation. For example, mujoco’s observation is a measurements vector.

                                @@ -288,9 +288,9 @@ This can be different from the observation. For example, mujoco’s observation
                                -
                                +
                                -goal_space
                                +property goal_space

                                Get the state space of the environment

                                Returns
                                @@ -301,7 +301,7 @@ This can be different from the observation. For example, mujoco’s observation
                                -handle_episode_ended() → None[source]
                                +handle_episode_ended() → None[source]

                                End an episode

                                Returns
                                @@ -310,9 +310,9 @@ This can be different from the observation. For example, mujoco’s observation
                                -
                                +
                                -last_env_response
                                +property last_env_response

                                Get the last environment response

                                Returns
                                @@ -321,16 +321,16 @@ This can be different from the observation. For example, mujoco’s observation
                                -
                                +
                                -phase
                                +property phase

                                Get the phase of the environment :return: the current phase

                                -render() → None[source]
                                +render() → None[source]

                                Call the environment function for rendering to the screen

                                Returns
                                @@ -341,7 +341,7 @@ This can be different from the observation. For example, mujoco’s observation
                                -reset_internal_state(force_environment_reset=False) → rl_coach.core_types.EnvResponse[source]
                                +reset_internal_state(force_environment_reset=False) → rl_coach.core_types.EnvResponse[source]

                                Reset the environment and all the variable of the wrapper

                                Parameters
                                @@ -355,7 +355,7 @@ This can be different from the observation. For example, mujoco’s observation
                                -set_goal(goal: Union[None, numpy.ndarray]) → None[source]
                                +set_goal(goal: Union[None, numpy.ndarray]) → None[source]

                                Set the current goal that the agent needs to achieve in the environment

                                Parameters
                                @@ -367,9 +367,9 @@ This can be different from the observation. For example, mujoco’s observation
                                -
                                +
                                -state_space
                                +property state_space

                                Get the state space of the environment

                                Returns
                                @@ -380,7 +380,7 @@ This can be different from the observation. For example, mujoco’s observation
                                -step(action: Union[int, float, numpy.ndarray, List]) → rl_coach.core_types.EnvResponse[source]
                                +step(action: Union[int, float, numpy.ndarray, List]) → rl_coach.core_types.EnvResponse[source]

                                Make a single step in the environment using the given action

                                Parameters
                                @@ -400,7 +400,7 @@ This can be different from the observation. For example, mujoco’s observation

                                Website: DeepMind Control Suite

                                -class rl_coach.environments.control_suite_environment.ControlSuiteEnvironment(level: rl_coach.environments.environment.LevelSelection, frame_skip: int, visualization_parameters: rl_coach.base_parameters.VisualizationParameters, target_success_rate: float = 1.0, seed: Union[None, int] = None, human_control: bool = False, observation_type: rl_coach.environments.control_suite_environment.ObservationType = <ObservationType.Measurements: 1>, custom_reward_threshold: Union[int, float] = None, **kwargs)[source]
                                +class rl_coach.environments.control_suite_environment.ControlSuiteEnvironment(level: rl_coach.environments.environment.LevelSelection, frame_skip: int, visualization_parameters: rl_coach.base_parameters.VisualizationParameters, target_success_rate: float = 1.0, seed: Union[None, int] = None, human_control: bool = False, observation_type: rl_coach.environments.control_suite_environment.ObservationType = <ObservationType.Measurements: 1>, custom_reward_threshold: Union[int, float] = None, **kwargs)[source]
                                Parameters
                                  @@ -438,7 +438,7 @@ Allows defining a custom reward that will be used to decide when the agent succe

                                  Website: Blizzard Starcraft II

                                  -class rl_coach.environments.starcraft2_environment.StarCraft2Environment(level: rl_coach.environments.environment.LevelSelection, frame_skip: int, visualization_parameters: rl_coach.base_parameters.VisualizationParameters, target_success_rate: float = 1.0, seed: Union[None, int] = None, human_control: bool = False, custom_reward_threshold: Union[int, float] = None, screen_size: int = 84, minimap_size: int = 64, feature_minimap_maps_to_use: List = range(0, 7), feature_screen_maps_to_use: List = range(0, 17), observation_type: rl_coach.environments.starcraft2_environment.StarcraftObservationType = <StarcraftObservationType.Features: 0>, disable_fog: bool = False, auto_select_all_army: bool = True, use_full_action_space: bool = False, **kwargs)[source]
                                  +class rl_coach.environments.starcraft2_environment.StarCraft2Environment(level: rl_coach.environments.environment.LevelSelection, frame_skip: int, visualization_parameters: rl_coach.base_parameters.VisualizationParameters, target_success_rate: float = 1.0, seed: Union[None, int] = None, human_control: bool = False, custom_reward_threshold: Union[int, float] = None, screen_size: int = 84, minimap_size: int = 64, feature_minimap_maps_to_use: List = range(0, 7), feature_screen_maps_to_use: List = range(0, 17), observation_type: rl_coach.environments.starcraft2_environment.StarcraftObservationType = <StarcraftObservationType.Features: 0>, disable_fog: bool = False, auto_select_all_army: bool = True, use_full_action_space: bool = False, **kwargs)[source]
                                  @@ -448,7 +448,7 @@ Allows defining a custom reward that will be used to decide when the agent succe

                                  Website: ViZDoom

                                  -class rl_coach.environments.doom_environment.DoomEnvironment(level: rl_coach.environments.environment.LevelSelection, seed: int, frame_skip: int, human_control: bool, custom_reward_threshold: Union[int, float], visualization_parameters: rl_coach.base_parameters.VisualizationParameters, cameras: List[rl_coach.environments.doom_environment.DoomEnvironment.CameraTypes], target_success_rate: float = 1.0, **kwargs)[source]
                                  +class rl_coach.environments.doom_environment.DoomEnvironment(level: rl_coach.environments.environment.LevelSelection, seed: int, frame_skip: int, human_control: bool, custom_reward_threshold: Union[int, float], visualization_parameters: rl_coach.base_parameters.VisualizationParameters, cameras: List[rl_coach.environments.doom_environment.DoomEnvironment.CameraTypes], target_success_rate: float = 1.0, **kwargs)[source]
                                  Parameters
                                    @@ -491,7 +491,7 @@ Stop experiment if given target success rate was achieved.

                                    Website: CARLA

                                    -class rl_coach.environments.carla_environment.CarlaEnvironment(level: rl_coach.environments.environment.LevelSelection, seed: int, frame_skip: int, human_control: bool, custom_reward_threshold: Union[int, float], visualization_parameters: rl_coach.base_parameters.VisualizationParameters, server_height: int, server_width: int, camera_height: int, camera_width: int, verbose: bool, experiment_suite: carla.driving_benchmark.experiment_suites.experiment_suite.ExperimentSuite, config: str, episode_max_time: int, allow_braking: bool, quality: rl_coach.environments.carla_environment.CarlaEnvironmentParameters.Quality, cameras: List[rl_coach.environments.carla_environment.CameraTypes], weather_id: List[int], experiment_path: str, separate_actions_for_throttle_and_brake: bool, num_speedup_steps: int, max_speed: float, target_success_rate: float = 1.0, **kwargs)[source]
                                    +class rl_coach.environments.carla_environment.CarlaEnvironment(level: rl_coach.environments.environment.LevelSelection, seed: int, frame_skip: int, human_control: bool, custom_reward_threshold: Union[int, float], visualization_parameters: rl_coach.base_parameters.VisualizationParameters, server_height: int, server_width: int, camera_height: int, camera_width: int, verbose: bool, experiment_suite: carla.driving_benchmark.experiment_suites.experiment_suite.ExperimentSuite, config: str, episode_max_time: int, allow_braking: bool, quality: rl_coach.environments.carla_environment.CarlaEnvironmentParameters.Quality, cameras: List[rl_coach.environments.carla_environment.CameraTypes], weather_id: List[int], experiment_path: str, separate_actions_for_throttle_and_brake: bool, num_speedup_steps: int, max_speed: float, target_success_rate: float = 1.0, **kwargs)[source]
                                    @@ -511,7 +511,7 @@ includes a set of robotics environments.

                                  -class rl_coach.environments.gym_environment.GymEnvironment(level: rl_coach.environments.environment.LevelSelection, frame_skip: int, visualization_parameters: rl_coach.base_parameters.VisualizationParameters, target_success_rate: float = 1.0, additional_simulator_parameters: Dict[str, Any] = {}, seed: Union[None, int] = None, human_control: bool = False, custom_reward_threshold: Union[int, float] = None, random_initialization_steps: int = 1, max_over_num_frames: int = 1, observation_space_type: rl_coach.environments.gym_environment.ObservationSpaceType = None, **kwargs)[source]
                                  +class rl_coach.environments.gym_environment.GymEnvironment(level: rl_coach.environments.environment.LevelSelection, frame_skip: int, visualization_parameters: rl_coach.base_parameters.VisualizationParameters, target_success_rate: float = 1.0, additional_simulator_parameters: Dict[str, Any] = {}, seed: Union[None, int] = None, human_control: bool = False, custom_reward_threshold: Union[int, float] = None, random_initialization_steps: int = 1, max_over_num_frames: int = 1, observation_space_type: rl_coach.environments.gym_environment.ObservationSpaceType = None, **kwargs)[source]
                                  Parameters
                                    diff --git a/docs/components/exploration_policies/index.html b/docs/components/exploration_policies/index.html index ad904a2..e5483c1 100644 --- a/docs/components/exploration_policies/index.html +++ b/docs/components/exploration_policies/index.html @@ -205,7 +205,7 @@ predefined policy. This is one of the most important aspects of reinforcement le tuning to get it right. Coach supports several pre-defined exploration policies, and it can be easily extended with custom policies. Note that not all exploration policies are expected to work for both discrete and continuous action spaces.

                                    - +
                                    @@ -268,7 +268,7 @@ spaces.

                                    ExplorationPolicy

                                    -class rl_coach.exploration_policies.exploration_policy.ExplorationPolicy(action_space: rl_coach.spaces.ActionSpace)[source]
                                    +class rl_coach.exploration_policies.exploration_policy.ExplorationPolicy(action_space: rl_coach.spaces.ActionSpace)[source]

                                    An exploration policy takes the predicted actions or action values from the agent, and selects the action to actually apply to the environment using some predefined algorithm.

                                    @@ -278,7 +278,7 @@ actually apply to the environment using some predefined algorithm.

                                    -change_phase(phase)[source]
                                    +change_phase(phase)[source]

                                    Change between running phases of the algorithm :param phase: Either Heatup or Train :return: none

                                    @@ -286,16 +286,19 @@ actually apply to the environment using some predefined algorithm.

                                    -get_action(action_values: List[Union[int, float, numpy.ndarray, List]]) → Union[int, float, numpy.ndarray, List][source]
                                    +get_action(action_values: List[Union[int, float, numpy.ndarray, List]]) → Union[int, float, numpy.ndarray, List][source]

                                    Given a list of values corresponding to each action, choose one actions according to the exploration policy :param action_values: A list of action values -:return: The chosen action

                                    +:return: The chosen action,

                                    +
                                    +

                                    The probability of the action (if available, otherwise 1 for absolute certainty in the action)

                                    +
                                    -requires_action_values() → bool[source]
                                    +requires_action_values() → bool[source]

                                    Allows exploration policies to define if they require the action values for the current step. This can save up a lot of computation. For example in e-greedy, if the random value generated is smaller than epsilon, the action is completely random, and the action values don’t need to be calculated @@ -304,7 +307,7 @@ than epsilon, the action is completely random, and the action values don’t nee

                                    -reset()[source]
                                    +reset()[source]

                                    Used for resetting the exploration policy parameters when needed :return: None

                                    @@ -316,7 +319,7 @@ than epsilon, the action is completely random, and the action values don’t nee

                                    AdditiveNoise

                                    -class rl_coach.exploration_policies.additive_noise.AdditiveNoise(action_space: rl_coach.spaces.ActionSpace, noise_percentage_schedule: rl_coach.schedules.Schedule, evaluation_noise_percentage: float)[source]
                                    +class rl_coach.exploration_policies.additive_noise.AdditiveNoise(action_space: rl_coach.spaces.ActionSpace, noise_schedule: rl_coach.schedules.Schedule, evaluation_noise: float, noise_as_percentage_from_action_space: bool = True)[source]

                                    AdditiveNoise is an exploration policy intended for continuous action spaces. It takes the action from the agent and adds a Gaussian distributed noise to it. The amount of noise added to the action follows the noise amount that can be given in two different ways: @@ -327,9 +330,10 @@ be the mean of the action, and 2nd is assumed to be its standard deviation.

                                    Parameters
                                    • action_space – the action space used by the environment

                                    • -
                                    • noise_percentage_schedule – the schedule for the noise variance percentage relative to the absolute range -of the action space

                                    • -
                                    • evaluation_noise_percentage – the noise variance percentage that will be used during evaluation phases

                                    • +
                                    • noise_schedule – the schedule for the noise

                                    • +
                                    • evaluation_noise – the noise variance that will be used during evaluation phases

                                    • +
                                    • noise_as_percentage_from_action_space – a bool deciding whether the noise is absolute or as a percentage +from the action space

                                    @@ -340,7 +344,7 @@ of the action space

                                    Boltzmann

                                    -class rl_coach.exploration_policies.boltzmann.Boltzmann(action_space: rl_coach.spaces.ActionSpace, temperature_schedule: rl_coach.schedules.Schedule)[source]
                                    +class rl_coach.exploration_policies.boltzmann.Boltzmann(action_space: rl_coach.spaces.ActionSpace, temperature_schedule: rl_coach.schedules.Schedule)[source]

                                    The Boltzmann exploration policy is intended for discrete action spaces. It assumes that each of the possible actions has some value assigned to it (such as the Q value), and uses a softmax function to convert these values into a distribution over the actions. It then samples the action for playing out of the calculated distribution. @@ -360,7 +364,7 @@ An additional temperature schedule can be given by the user, and will control th

                                    Bootstrapped

                                    -class rl_coach.exploration_policies.bootstrapped.Bootstrapped(action_space: rl_coach.spaces.ActionSpace, epsilon_schedule: rl_coach.schedules.Schedule, evaluation_epsilon: float, architecture_num_q_heads: int, continuous_exploration_policy_parameters: rl_coach.exploration_policies.exploration_policy.ExplorationParameters = <rl_coach.exploration_policies.additive_noise.AdditiveNoiseParameters object>)[source]
                                    +class rl_coach.exploration_policies.bootstrapped.Bootstrapped(action_space: rl_coach.spaces.ActionSpace, epsilon_schedule: rl_coach.schedules.Schedule, evaluation_epsilon: float, architecture_num_q_heads: int, continuous_exploration_policy_parameters: rl_coach.exploration_policies.exploration_policy.ExplorationParameters = <rl_coach.exploration_policies.additive_noise.AdditiveNoiseParameters object>)[source]

                                    Bootstrapped exploration policy is currently only used for discrete action spaces along with the Bootstrapped DQN agent. It assumes that there is an ensemble of network heads, where each one predicts the values for all the possible actions. For each episode, a single head is selected to lead the agent, according @@ -390,7 +394,7 @@ if the e-greedy is used for a continuous policy

                                    Categorical

                                    -class rl_coach.exploration_policies.categorical.Categorical(action_space: rl_coach.spaces.ActionSpace)[source]
                                    +class rl_coach.exploration_policies.categorical.Categorical(action_space: rl_coach.spaces.ActionSpace)[source]

                                    Categorical exploration policy is intended for discrete action spaces. It expects the action values to represent a probability distribution over the action, from which a single action will be sampled. In evaluation, the action that has the highest probability will be selected. This is particularly useful for @@ -407,7 +411,7 @@ actor-critic schemes, where the actors output is a probability distribution over

                                    ContinuousEntropy

                                    -class rl_coach.exploration_policies.continuous_entropy.ContinuousEntropy(action_space: rl_coach.spaces.ActionSpace, noise_percentage_schedule: rl_coach.schedules.Schedule, evaluation_noise_percentage: float)[source]
                                    +class rl_coach.exploration_policies.continuous_entropy.ContinuousEntropy(action_space: rl_coach.spaces.ActionSpace, noise_schedule: rl_coach.schedules.Schedule, evaluation_noise: float, noise_as_percentage_from_action_space: bool = True)[source]

                                    Continuous entropy is an exploration policy that is actually implemented as part of the network. The exploration policy class is only a placeholder for choosing this policy. The exploration policy is implemented by adding a regularization factor to the network loss, which regularizes the entropy of the action. @@ -422,9 +426,10 @@ There are only a few heads that actually are relevant and implement the entropy

                                    Parameters
                                    • action_space – the action space used by the environment

                                    • -
                                    • noise_percentage_schedule – the schedule for the noise variance percentage relative to the absolute range -of the action space

                                    • -
                                    • evaluation_noise_percentage – the noise variance percentage that will be used during evaluation phases

                                    • +
                                    • noise_schedule – the schedule for the noise

                                    • +
                                    • evaluation_noise – the noise variance that will be used during evaluation phases

                                    • +
                                    • noise_as_percentage_from_action_space – a bool deciding whether the noise is absolute or as a percentage +from the action space

                                    @@ -435,7 +440,7 @@ of the action space

                                    EGreedy

                                    -class rl_coach.exploration_policies.e_greedy.EGreedy(action_space: rl_coach.spaces.ActionSpace, epsilon_schedule: rl_coach.schedules.Schedule, evaluation_epsilon: float, continuous_exploration_policy_parameters: rl_coach.exploration_policies.exploration_policy.ExplorationParameters = <rl_coach.exploration_policies.additive_noise.AdditiveNoiseParameters object>)[source]
                                    +class rl_coach.exploration_policies.e_greedy.EGreedy(action_space: rl_coach.spaces.ActionSpace, epsilon_schedule: rl_coach.schedules.Schedule, evaluation_epsilon: float, continuous_exploration_policy_parameters: rl_coach.exploration_policies.exploration_policy.ExplorationParameters = <rl_coach.exploration_policies.additive_noise.AdditiveNoiseParameters object>)[source]

                                    e-greedy is an exploration policy that is intended for both discrete and continuous action spaces.

                                    For discrete action spaces, it assumes that each action is assigned a value, and it selects the action with the highest value with probability 1 - epsilon. Otherwise, it selects a action sampled uniformly out of all the @@ -463,7 +468,7 @@ if the e-greedy is used for a continuous policy

                                    Greedy

                                    -class rl_coach.exploration_policies.greedy.Greedy(action_space: rl_coach.spaces.ActionSpace)[source]
                                    +class rl_coach.exploration_policies.greedy.Greedy(action_space: rl_coach.spaces.ActionSpace)[source]

                                    The Greedy exploration policy is intended for both discrete and continuous action spaces. For discrete action spaces, it always selects the action with the maximum value, as given by the agent. For continuous action spaces, it always return the exact action, as it was given by the agent.

                                    @@ -479,7 +484,7 @@ For continuous action spaces, it always return the exact action, as it was given

                                    OUProcess

                                    -class rl_coach.exploration_policies.ou_process.OUProcess(action_space: rl_coach.spaces.ActionSpace, mu: float = 0, theta: float = 0.15, sigma: float = 0.2, dt: float = 0.01)[source]
                                    +class rl_coach.exploration_policies.ou_process.OUProcess(action_space: rl_coach.spaces.ActionSpace, mu: float = 0, theta: float = 0.15, sigma: float = 0.2, dt: float = 0.01)[source]

                                    OUProcess exploration policy is intended for continuous action spaces, and selects the action according to an Ornstein-Uhlenbeck process. The Ornstein-Uhlenbeck process implements the action as a Gaussian process, where the samples are correlated between consequent time steps.

                                    @@ -495,7 +500,7 @@ the samples are correlated between consequent time steps.

                                    ParameterNoise

                                    -class rl_coach.exploration_policies.parameter_noise.ParameterNoise(network_params: Dict[str, rl_coach.base_parameters.NetworkParameters], action_space: rl_coach.spaces.ActionSpace)[source]
                                    +class rl_coach.exploration_policies.parameter_noise.ParameterNoise(network_params: Dict[str, rl_coach.base_parameters.NetworkParameters], action_space: rl_coach.spaces.ActionSpace)[source]

                                    The ParameterNoise exploration policy is intended for both discrete and continuous action spaces. It applies the exploration policy by replacing all the dense network layers with noisy layers. The noisy layers have both weight means and weight standard deviations, and for each forward pass of the network @@ -514,7 +519,7 @@ values.

                                    TruncatedNormal

                                    -class rl_coach.exploration_policies.truncated_normal.TruncatedNormal(action_space: rl_coach.spaces.ActionSpace, noise_percentage_schedule: rl_coach.schedules.Schedule, evaluation_noise_percentage: float, clip_low: float, clip_high: float)[source]
                                    +class rl_coach.exploration_policies.truncated_normal.TruncatedNormal(action_space: rl_coach.spaces.ActionSpace, noise_schedule: rl_coach.schedules.Schedule, evaluation_noise: float, clip_low: float, clip_high: float, noise_as_percentage_from_action_space: bool = True)[source]

                                    The TruncatedNormal exploration policy is intended for continuous action spaces. It samples the action from a normal distribution, where the mean action is given by the agent, and the standard deviation can be given in t wo different ways: @@ -527,9 +532,10 @@ is within the bounds.

                                    Parameters
                                    • action_space – the action space used by the environment

                                    • -
                                    • noise_percentage_schedule – the schedule for the noise variance percentage relative to the absolute range -of the action space

                                    • -
                                    • evaluation_noise_percentage – the noise variance percentage that will be used during evaluation phases

                                    • +
                                    • noise_schedule – the schedule for the noise variance

                                    • +
                                    • evaluation_noise – the noise variance that will be used during evaluation phases

                                    • +
                                    • noise_as_percentage_from_action_space – whether to consider the noise as a percentage of the action space +or absolute value

                                    @@ -540,7 +546,7 @@ of the action space

                                    UCB

                                    -class rl_coach.exploration_policies.ucb.UCB(action_space: rl_coach.spaces.ActionSpace, epsilon_schedule: rl_coach.schedules.Schedule, evaluation_epsilon: float, architecture_num_q_heads: int, lamb: int, continuous_exploration_policy_parameters: rl_coach.exploration_policies.exploration_policy.ExplorationParameters = <rl_coach.exploration_policies.additive_noise.AdditiveNoiseParameters object>)[source]
                                    +class rl_coach.exploration_policies.ucb.UCB(action_space: rl_coach.spaces.ActionSpace, epsilon_schedule: rl_coach.schedules.Schedule, evaluation_epsilon: float, architecture_num_q_heads: int, lamb: int, continuous_exploration_policy_parameters: rl_coach.exploration_policies.exploration_policy.ExplorationParameters = <rl_coach.exploration_policies.additive_noise.AdditiveNoiseParameters object>)[source]

                                    UCB exploration policy is following the upper confidence bound heuristic to sample actions in discrete action spaces. It assumes that there are multiple network heads that are predicting action values, and that the standard deviation between the heads predictions represents the uncertainty of the agent in each of the actions. diff --git a/docs/components/filters/input_filters.html b/docs/components/filters/input_filters.html index 5269536..9df4d37 100644 --- a/docs/components/filters/input_filters.html +++ b/docs/components/filters/input_filters.html @@ -221,7 +221,7 @@

                                    ObservationClippingFilter

                                    -class rl_coach.filters.observation.ObservationClippingFilter(clipping_low: float = -inf, clipping_high: float = inf)[source]
                                    +class rl_coach.filters.observation.ObservationClippingFilter(clipping_low: float = -inf, clipping_high: float = inf)[source]

                                    Clips the observation values to a given range of values. For example, if the observation consists of measurements in an arbitrary range, and we want to control the minimum and maximum values of these observations, @@ -241,7 +241,7 @@ we can define a range and clip the values of the measurements.

                                    ObservationCropFilter

                                    -class rl_coach.filters.observation.ObservationCropFilter(crop_low: numpy.ndarray = None, crop_high: numpy.ndarray = None)[source]
                                    +class rl_coach.filters.observation.ObservationCropFilter(crop_low: numpy.ndarray = None, crop_high: numpy.ndarray = None)[source]

                                    Crops the size of the observation to a given crop window. For example, in Atari, the observations are images with a shape of 210x160. Usually, we will want to crop the size of the observation to a square of 160x160 before rescaling them.

                                    @@ -262,7 +262,7 @@ corresponding dimension. a negative value of -1 will be mapped to the max sizeObservationMoveAxisFilter
                                    -class rl_coach.filters.observation.ObservationMoveAxisFilter(axis_origin: int = None, axis_target: int = None)[source]
                                    +class rl_coach.filters.observation.ObservationMoveAxisFilter(axis_origin: int = None, axis_target: int = None)[source]

                                    Reorders the axes of the observation. This can be useful when the observation is an image, and we want to move the channel axis to be the last axis instead of the first axis.

                                    @@ -280,7 +280,7 @@ image, and we want to move the channel axis to be the last axis instead of the f

                                    ObservationNormalizationFilter

                                    -class rl_coach.filters.observation.ObservationNormalizationFilter(clip_min: float = -5.0, clip_max: float = 5.0, name='observation_stats')[source]
                                    +class rl_coach.filters.observation.ObservationNormalizationFilter(clip_min: float = -5.0, clip_max: float = 5.0, name='observation_stats')[source]

                                    Normalizes the observation values with a running mean and standard deviation of all the observations seen so far. The normalization is performed element-wise. Additionally, when working with multiple workers, the statistics used for the normalization operation are accumulated over all the workers.

                                    @@ -299,7 +299,7 @@ multiple workers, the statistics used for the normalization operation are accumu

                                    ObservationReductionBySubPartsNameFilter

                                    -class rl_coach.filters.observation.ObservationReductionBySubPartsNameFilter(part_names: List[str], reduction_method: rl_coach.filters.observation.observation_reduction_by_sub_parts_name_filter.ObservationReductionBySubPartsNameFilter.ReductionMethod)[source]
                                    +class rl_coach.filters.observation.ObservationReductionBySubPartsNameFilter(part_names: List[str], reduction_method: rl_coach.filters.observation.observation_reduction_by_sub_parts_name_filter.ObservationReductionBySubPartsNameFilter.ReductionMethod)[source]

                                    Allows keeping only parts of the observation, by specifying their name. This is useful when the environment has a measurements vector as observation which includes several different measurements, but you want the agent to only see some of the measurements and not all. @@ -321,7 +321,7 @@ This will currently work only for VectorObservationSpace observations

                                    ObservationRescaleSizeByFactorFilter

                                    -class rl_coach.filters.observation.ObservationRescaleSizeByFactorFilter(rescale_factor: float)[source]
                                    +class rl_coach.filters.observation.ObservationRescaleSizeByFactorFilter(rescale_factor: float)[source]

                                    Rescales an image observation by some factor. For example, the image size can be reduced by a factor of 2.

                                    @@ -336,7 +336,7 @@ can be reduced by a factor of 2.

                                    ObservationRescaleToSizeFilter

                                    -class rl_coach.filters.observation.ObservationRescaleToSizeFilter(output_observation_space: rl_coach.spaces.PlanarMapsObservationSpace)[source]
                                    +class rl_coach.filters.observation.ObservationRescaleToSizeFilter(output_observation_space: rl_coach.spaces.PlanarMapsObservationSpace)[source]

                                    Rescales an image observation to a given size. The target size does not necessarily keep the aspect ratio of the original observation. Warning: this requires the input observation to be of type uint8 due to scipy requirements!

                                    @@ -352,7 +352,7 @@ Warning: this requires the input observation to be of type uint8 due to scipy re

                                    ObservationRGBToYFilter

                                    -class rl_coach.filters.observation.ObservationRGBToYFilter[source]
                                    +class rl_coach.filters.observation.ObservationRGBToYFilter[source]

                                    Converts a color image observation specified using the RGB encoding into a grayscale image observation, by keeping only the luminance (Y) channel of the YUV encoding. This can be useful if the colors in the original image are not relevant for solving the task at hand. @@ -364,7 +364,7 @@ The channels axis is assumed to be the last axis

                                    ObservationSqueezeFilter

                                    -class rl_coach.filters.observation.ObservationSqueezeFilter(axis: int = None)[source]
                                    +class rl_coach.filters.observation.ObservationSqueezeFilter(axis: int = None)[source]

                                    Removes redundant axes from the observation, which are axes with a dimension of 1.

                                    Parameters
                                    @@ -378,7 +378,7 @@ The channels axis is assumed to be the last axis

                                    ObservationStackingFilter

                                    -class rl_coach.filters.observation.ObservationStackingFilter(stack_size: int, stacking_axis: int = -1)[source]
                                    +class rl_coach.filters.observation.ObservationStackingFilter(stack_size: int, stacking_axis: int = -1)[source]

                                    Stacks several observations on top of each other. For image observation this will create a 3D blob. The stacking is done in a lazy manner in order to reduce memory consumption. To achieve this, a LazyStack object is used in order to wrap the observations in the stack. For this reason, the @@ -403,7 +403,7 @@ and increase the memory footprint.

                                    ObservationToUInt8Filter

                                    -class rl_coach.filters.observation.ObservationToUInt8Filter(input_low: float, input_high: float)[source]
                                    +class rl_coach.filters.observation.ObservationToUInt8Filter(input_low: float, input_high: float)[source]

                                    Converts a floating point observation into an unsigned int 8 bit observation. This is mostly useful for reducing memory consumption and is usually used for image observations. The filter will first spread the observation values over the range 0-255 and then discretize them into integer values.

                                    @@ -425,7 +425,7 @@ spread the observation values over the range 0-255 and then discretize them into

                                    RewardClippingFilter

                                    -class rl_coach.filters.reward.RewardClippingFilter(clipping_low: float = -inf, clipping_high: float = inf)[source]
                                    +class rl_coach.filters.reward.RewardClippingFilter(clipping_low: float = -inf, clipping_high: float = inf)[source]

                                    Clips the reward values into a given range. For example, in DQN, the Atari rewards are clipped into the range -1 and 1 in order to control the scale of the returns.

                                    @@ -443,7 +443,7 @@ clipped into the range -1 and 1 in order to control the scale of the returns.

                                    RewardNormalizationFilter
                                    -class rl_coach.filters.reward.RewardNormalizationFilter(clip_min: float = -5.0, clip_max: float = 5.0)[source]
                                    +class rl_coach.filters.reward.RewardNormalizationFilter(clip_min: float = -5.0, clip_max: float = 5.0)[source]

                                    Normalizes the reward values with a running mean and standard deviation of all the rewards seen so far. When working with multiple workers, the statistics used for the normalization operation are accumulated over all the workers.

                                    @@ -462,7 +462,7 @@ are accumulated over all the workers.

                                    RewardRescaleFilter

                                    -class rl_coach.filters.reward.RewardRescaleFilter(rescale_factor: float)[source]
                                    +class rl_coach.filters.reward.RewardRescaleFilter(rescale_factor: float)[source]

                                    Rescales the reward by a given factor. Rescaling the rewards of the environment has been observed to have a large effect (negative or positive) on the behavior of the learning process.

                                    diff --git a/docs/components/filters/output_filters.html b/docs/components/filters/output_filters.html index 8c6fa80..73df03f 100644 --- a/docs/components/filters/output_filters.html +++ b/docs/components/filters/output_filters.html @@ -200,7 +200,7 @@

                                    Action Filters

                                    -class rl_coach.filters.action.AttentionDiscretization(num_bins_per_dimension: Union[int, List[int]], force_int_bins=False)[source]
                                    +class rl_coach.filters.action.AttentionDiscretization(num_bins_per_dimension: Union[int, List[int]], force_int_bins=False)[source]

                                    Discretizes an AttentionActionSpace. The attention action space defines the actions as choosing sub-boxes in a given box. For example, consider an image of size 100x100, where the action is choosing a crop window of size 20x20 to attend to in the image. AttentionDiscretization allows discretizing the possible crop @@ -219,7 +219,7 @@ windows to choose into a finite number of options, and map a discrete action spa ../../_images/attention_discretization.png

                                    -class rl_coach.filters.action.BoxDiscretization(num_bins_per_dimension: Union[int, List[int]], force_int_bins=False)[source]
                                    +class rl_coach.filters.action.BoxDiscretization(num_bins_per_dimension: Union[int, List[int]], force_int_bins=False)[source]

                                    Discretizes a continuous action space into a discrete action space, allowing the usage of agents such as DQN for continuous environments such as MuJoCo. Given the number of bins to discretize into, the original continuous action space is uniformly separated into the given number of bins, each mapped to a discrete @@ -242,7 +242,7 @@ instead of 0, 2.5, 5, 7.5, 10.

                                    ../../_images/box_discretization.png
                                    -class rl_coach.filters.action.BoxMasking(masked_target_space_low: Union[None, int, float, numpy.ndarray], masked_target_space_high: Union[None, int, float, numpy.ndarray])[source]
                                    +class rl_coach.filters.action.BoxMasking(masked_target_space_low: Union[None, int, float, numpy.ndarray], masked_target_space_high: Union[None, int, float, numpy.ndarray])[source]

                                    Masks part of the action space to enforce the agent to work in a defined space. For example, if the original action space is between -1 and 1, then this filter can be used in order to constrain the agent actions to the range 0 and 1 instead. This essentially masks the range -1 and 0 from the agent. @@ -260,7 +260,7 @@ The resulting action space will be shifted and will always start from 0 and have ../../_images/box_masking.png

                                    -class rl_coach.filters.action.PartialDiscreteActionSpaceMap(target_actions: List[Union[int, float, numpy.ndarray, List]] = None, descriptions: List[str] = None)[source]
                                    +class rl_coach.filters.action.PartialDiscreteActionSpaceMap(target_actions: List[Union[int, float, numpy.ndarray, List]] = None, descriptions: List[str] = None)[source]

                                    Partial map of two countable action spaces. For example, consider an environment with a MultiSelect action space (select multiple actions at the same time, such as jump and go right), with 8 actual MultiSelect actions. If we want the agent to be able to select only 5 of those actions by their index (0-4), we can @@ -279,7 +279,7 @@ use regular discrete actions, and mask 3 of the actions from the agent.

                                    ../../_images/partial_discrete_action_space_map.png
                                    -class rl_coach.filters.action.FullDiscreteActionSpaceMap[source]
                                    +class rl_coach.filters.action.FullDiscreteActionSpaceMap[source]

                                    Full map of two countable action spaces. This works in a similar way to the PartialDiscreteActionSpaceMap, but maps the entire source action space into the entire target action space, without masking any actions. @@ -290,7 +290,7 @@ multiselect actions.

                                    ../../_images/full_discrete_action_space_map.png
                                    -class rl_coach.filters.action.LinearBoxToBoxMap(input_space_low: Union[None, int, float, numpy.ndarray], input_space_high: Union[None, int, float, numpy.ndarray])[source]
                                    +class rl_coach.filters.action.LinearBoxToBoxMap(input_space_low: Union[None, int, float, numpy.ndarray], input_space_high: Union[None, int, float, numpy.ndarray])[source]

                                    A linear mapping of two box action spaces. For example, if the action space of the environment consists of continuous actions between 0 and 1, and we want the agent to choose actions between -1 and 1, the LinearBoxToBoxMap can be used to map the range -1 and 1 to the range 0 and 1 in a linear way. This means that the diff --git a/docs/components/memories/index.html b/docs/components/memories/index.html index c0d828f..a46a988 100644 --- a/docs/components/memories/index.html +++ b/docs/components/memories/index.html @@ -209,7 +209,7 @@

                                    EpisodicExperienceReplay

                                    -class rl_coach.memories.episodic.EpisodicExperienceReplay(max_size: Tuple[rl_coach.memories.memory.MemoryGranularity, int] = (<MemoryGranularity.Transitions: 0>, 1000000), n_step=-1, train_to_eval_ratio: int = 1)[source]
                                    +class rl_coach.memories.episodic.EpisodicExperienceReplay(max_size: Tuple[rl_coach.memories.memory.MemoryGranularity, int] = (<MemoryGranularity.Transitions: 0>, 1000000), n_step=-1, train_to_eval_ratio: int = 1)[source]

                                    A replay buffer that stores episodes of transitions. The additional structure allows performing various calculations of total return and other values that depend on the sequential behavior of the transitions in the episode.

                                    @@ -225,7 +225,7 @@ in the episode.

                                    EpisodicHindsightExperienceReplay

                                    -class rl_coach.memories.episodic.EpisodicHindsightExperienceReplay(max_size: Tuple[rl_coach.memories.memory.MemoryGranularity, int], hindsight_transitions_per_regular_transition: int, hindsight_goal_selection_method: rl_coach.memories.episodic.episodic_hindsight_experience_replay.HindsightGoalSelectionMethod, goals_space: rl_coach.spaces.GoalsSpace)[source]
                                    +class rl_coach.memories.episodic.EpisodicHindsightExperienceReplay(max_size: Tuple[rl_coach.memories.memory.MemoryGranularity, int], hindsight_transitions_per_regular_transition: int, hindsight_goal_selection_method: rl_coach.memories.episodic.episodic_hindsight_experience_replay.HindsightGoalSelectionMethod, goals_space: rl_coach.spaces.GoalsSpace)[source]

                                    Implements Hindsight Experience Replay as described in the following paper: https://arxiv.org/pdf/1707.01495.pdf

                                    Parameters
                                    @@ -246,7 +246,7 @@ hindsight transitions. Should be one of HindsightGoalSelectionMethod

                                    EpisodicHRLHindsightExperienceReplay

                                    -class rl_coach.memories.episodic.EpisodicHRLHindsightExperienceReplay(max_size: Tuple[rl_coach.memories.memory.MemoryGranularity, int], hindsight_transitions_per_regular_transition: int, hindsight_goal_selection_method: rl_coach.memories.episodic.episodic_hindsight_experience_replay.HindsightGoalSelectionMethod, goals_space: rl_coach.spaces.GoalsSpace)[source]
                                    +class rl_coach.memories.episodic.EpisodicHRLHindsightExperienceReplay(max_size: Tuple[rl_coach.memories.memory.MemoryGranularity, int], hindsight_transitions_per_regular_transition: int, hindsight_goal_selection_method: rl_coach.memories.episodic.episodic_hindsight_experience_replay.HindsightGoalSelectionMethod, goals_space: rl_coach.spaces.GoalsSpace)[source]

                                    Implements HRL Hindsight Experience Replay as described in the following paper: https://arxiv.org/abs/1805.08180

                                    This is the memory you should use if you want a shared hindsight experience replay buffer between multiple workers

                                    @@ -269,7 +269,7 @@ hindsight transitions. Should be one of HindsightGoalSelectionMethod

                                    SingleEpisodeBuffer

                                    -class rl_coach.memories.episodic.SingleEpisodeBuffer[source]
                                    +class rl_coach.memories.episodic.SingleEpisodeBuffer[source]
                                    @@ -280,7 +280,7 @@ hindsight transitions. Should be one of HindsightGoalSelectionMethod

                                    BalancedExperienceReplay

                                    -class rl_coach.memories.non_episodic.BalancedExperienceReplay(max_size: Tuple[rl_coach.memories.memory.MemoryGranularity, int], allow_duplicates_in_batch_sampling: bool = True, num_classes: int = 0, state_key_with_the_class_index: Any = 'class')[source]
                                    +class rl_coach.memories.non_episodic.BalancedExperienceReplay(max_size: Tuple[rl_coach.memories.memory.MemoryGranularity, int], allow_duplicates_in_batch_sampling: bool = True, num_classes: int = 0, state_key_with_the_class_index: Any = 'class')[source]
                                    Parameters
                                      @@ -299,7 +299,7 @@ this parameter determines the key to retrieve the class index value

                                      QDND

                                      -class rl_coach.memories.non_episodic.QDND(dict_size, key_width, num_actions, new_value_shift_coefficient=0.1, key_error_threshold=0.01, learning_rate=0.01, num_neighbors=50, return_additional_data=False, override_existing_keys=False, rebuild_on_every_update=False)[source]
                                      +class rl_coach.memories.non_episodic.QDND(dict_size, key_width, num_actions, new_value_shift_coefficient=0.1, key_error_threshold=0.01, learning_rate=0.01, num_neighbors=50, return_additional_data=False, override_existing_keys=False, rebuild_on_every_update=False)[source]
                                      @@ -307,7 +307,7 @@ this parameter determines the key to retrieve the class index value

                                      ExperienceReplay

                                      -class rl_coach.memories.non_episodic.ExperienceReplay(max_size: Tuple[rl_coach.memories.memory.MemoryGranularity, int], allow_duplicates_in_batch_sampling: bool = True)[source]
                                      +class rl_coach.memories.non_episodic.ExperienceReplay(max_size: Tuple[rl_coach.memories.memory.MemoryGranularity, int], allow_duplicates_in_batch_sampling: bool = True)[source]

                                      A regular replay buffer which stores transition without any additional structure

                                      Parameters
                                      @@ -324,7 +324,7 @@ this parameter determines the key to retrieve the class index value

                                      PrioritizedExperienceReplay

                                      -class rl_coach.memories.non_episodic.PrioritizedExperienceReplay(max_size: Tuple[rl_coach.memories.memory.MemoryGranularity, int], alpha: float = 0.6, beta: rl_coach.schedules.Schedule = <rl_coach.schedules.ConstantSchedule object>, epsilon: float = 1e-06, allow_duplicates_in_batch_sampling: bool = True)[source]
                                      +class rl_coach.memories.non_episodic.PrioritizedExperienceReplay(max_size: Tuple[rl_coach.memories.memory.MemoryGranularity, int], alpha: float = 0.6, beta: rl_coach.schedules.Schedule = <rl_coach.schedules.ConstantSchedule object>, epsilon: float = 1e-06, allow_duplicates_in_batch_sampling: bool = True)[source]

                                      This is the proportional sampling variant of the prioritized experience replay as described in https://arxiv.org/pdf/1511.05952.pdf.

                                      @@ -345,7 +345,7 @@ in htt

                                      TransitionCollection

                                      -class rl_coach.memories.non_episodic.TransitionCollection[source]
                                      +class rl_coach.memories.non_episodic.TransitionCollection[source]

                                      Simple python implementation of transitions collection non-episodic memories are constructed on top of.

                                      diff --git a/docs/components/memory_backends/index.html b/docs/components/memory_backends/index.html index 01ac55b..6832296 100644 --- a/docs/components/memory_backends/index.html +++ b/docs/components/memory_backends/index.html @@ -193,7 +193,7 @@

                                      RedisPubSubBackend

                                      -class rl_coach.memories.backend.redis.RedisPubSubBackend(params: rl_coach.memories.backend.redis.RedisPubSubMemoryBackendParameters)[source]
                                      +class rl_coach.memories.backend.redis.RedisPubSubBackend(params: rl_coach.memories.backend.redis.RedisPubSubMemoryBackendParameters)[source]

                                      A memory backend which transfers the experiences from the rollout to the training worker using Redis Pub/Sub in Coach when distributed mode is used.

                                      diff --git a/docs/components/orchestrators/index.html b/docs/components/orchestrators/index.html index e31a799..1536ec3 100644 --- a/docs/components/orchestrators/index.html +++ b/docs/components/orchestrators/index.html @@ -193,7 +193,7 @@

                                      Kubernetes

                                      -class rl_coach.orchestrators.kubernetes_orchestrator.Kubernetes(params: rl_coach.orchestrators.kubernetes_orchestrator.KubernetesParameters)[source]
                                      +class rl_coach.orchestrators.kubernetes_orchestrator.Kubernetes(params: rl_coach.orchestrators.kubernetes_orchestrator.KubernetesParameters)[source]

                                      An orchestrator implmentation which uses Kubernetes to deploy the components such as training and rollout workers and Redis Pub/Sub in Coach when used in the distributed mode.

                                      diff --git a/docs/components/spaces.html b/docs/components/spaces.html index 4f4b278..a62653c 100644 --- a/docs/components/spaces.html +++ b/docs/components/spaces.html @@ -208,7 +208,7 @@

                                      Space

                                      -class rl_coach.spaces.Space(shape: Union[int, tuple, list, numpy.ndarray], low: Union[None, int, float, numpy.ndarray] = -inf, high: Union[None, int, float, numpy.ndarray] = inf)[source]
                                      +class rl_coach.spaces.Space(shape: Union[int, tuple, list, numpy.ndarray], low: Union[None, int, float, numpy.ndarray] = -inf, high: Union[None, int, float, numpy.ndarray] = inf)[source]

                                      A space defines a set of valid values

                                      Parameters
                                      @@ -223,7 +223,7 @@ or a single value defining the general highest values

                                      -contains(val: Union[int, float, numpy.ndarray]) → bool[source]
                                      +contains(val: Union[int, float, numpy.ndarray]) → bool[source]

                                      Checks if value is contained by this space. The shape must match and all of the values must be within the low and high bounds.

                                      @@ -238,7 +238,7 @@ all of the values must be within the low and high bounds.

                                      -is_valid_index(index: numpy.ndarray) → bool[source]
                                      +is_valid_index(index: numpy.ndarray) → bool[source]

                                      Checks if a given multidimensional index is within the bounds of the shape of the space

                                      Parameters
                                      @@ -252,7 +252,7 @@ all of the values must be within the low and high bounds.

                                      -sample() → numpy.ndarray[source]
                                      +sample() → numpy.ndarray[source]

                                      Sample the defined space, either uniformly, if space bounds are defined, or Normal distributed if no bounds are defined

                                      @@ -269,10 +269,10 @@ bounds are defined

                                      Observation Spaces

                                      -class rl_coach.spaces.ObservationSpace(shape: Union[int, numpy.ndarray], low: Union[None, int, float, numpy.ndarray] = -inf, high: Union[None, int, float, numpy.ndarray] = inf)[source]
                                      +class rl_coach.spaces.ObservationSpace(shape: Union[int, numpy.ndarray], low: Union[None, int, float, numpy.ndarray] = -inf, high: Union[None, int, float, numpy.ndarray] = inf)[source]
                                      -contains(val: Union[int, float, numpy.ndarray]) → bool
                                      +contains(val: Union[int, float, numpy.ndarray]) → bool

                                      Checks if value is contained by this space. The shape must match and all of the values must be within the low and high bounds.

                                      @@ -287,7 +287,7 @@ all of the values must be within the low and high bounds.

                                      -is_valid_index(index: numpy.ndarray) → bool
                                      +is_valid_index(index: numpy.ndarray) → bool

                                      Checks if a given multidimensional index is within the bounds of the shape of the space

                                      Parameters
                                      @@ -301,7 +301,7 @@ all of the values must be within the low and high bounds.

                                      -sample() → numpy.ndarray
                                      +sample() → numpy.ndarray

                                      Sample the defined space, either uniformly, if space bounds are defined, or Normal distributed if no bounds are defined

                                      @@ -317,7 +317,7 @@ bounds are defined

                                      VectorObservationSpace

                                      -class rl_coach.spaces.VectorObservationSpace(shape: int, low: Union[None, int, float, numpy.ndarray] = -inf, high: Union[None, int, float, numpy.ndarray] = inf, measurements_names: List[str] = None)[source]
                                      +class rl_coach.spaces.VectorObservationSpace(shape: int, low: Union[None, int, float, numpy.ndarray] = -inf, high: Union[None, int, float, numpy.ndarray] = inf, measurements_names: List[str] = None)[source]

                                      An observation space which is defined as a vector of elements. This can be particularly useful for environments which return measurements, such as in robotic environments.

                                      @@ -327,7 +327,7 @@ which return measurements, such as in robotic environments.

                                      PlanarMapsObservationSpace

                                      -class rl_coach.spaces.PlanarMapsObservationSpace(shape: numpy.ndarray, low: int, high: int, channels_axis: int = -1)[source]
                                      +class rl_coach.spaces.PlanarMapsObservationSpace(shape: numpy.ndarray, low: int, high: int, channels_axis: int = -1)[source]

                                      An observation space which defines a stack of 2D observations. For example, an environment which returns a stack of segmentation maps like in Starcraft.

                                      @@ -337,7 +337,7 @@ a stack of segmentation maps like in Starcraft.

                                      ImageObservationSpace

                                      -class rl_coach.spaces.ImageObservationSpace(shape: numpy.ndarray, high: int, channels_axis: int = -1)[source]
                                      +class rl_coach.spaces.ImageObservationSpace(shape: numpy.ndarray, high: int, channels_axis: int = -1)[source]

                                      An observation space which is a private case of the PlanarMapsObservationSpace, where the stack of 2D observations represent a RGB image, or a grayscale image.

                                      @@ -348,10 +348,10 @@ represent a RGB image, or a grayscale image.

                                      Action Spaces

                                      -class rl_coach.spaces.ActionSpace(shape: Union[int, numpy.ndarray], low: Union[None, int, float, numpy.ndarray] = -inf, high: Union[None, int, float, numpy.ndarray] = inf, descriptions: Union[None, List, Dict] = None, default_action: Union[int, float, numpy.ndarray, List] = None)[source]
                                      +class rl_coach.spaces.ActionSpace(shape: Union[int, numpy.ndarray], low: Union[None, int, float, numpy.ndarray] = -inf, high: Union[None, int, float, numpy.ndarray] = inf, descriptions: Union[None, List, Dict] = None, default_action: Union[int, float, numpy.ndarray, List] = None)[source]
                                      -clip_action_to_space(action: Union[int, float, numpy.ndarray, List]) → Union[int, float, numpy.ndarray, List][source]
                                      +clip_action_to_space(action: Union[int, float, numpy.ndarray, List]) → Union[int, float, numpy.ndarray, List][source]

                                      Given an action, clip its values to fit to the action space ranges

                                      Parameters
                                      @@ -365,7 +365,7 @@ represent a RGB image, or a grayscale image.

                                      -contains(val: Union[int, float, numpy.ndarray]) → bool
                                      +contains(val: Union[int, float, numpy.ndarray]) → bool

                                      Checks if value is contained by this space. The shape must match and all of the values must be within the low and high bounds.

                                      @@ -380,7 +380,7 @@ all of the values must be within the low and high bounds.

                                      -is_valid_index(index: numpy.ndarray) → bool
                                      +is_valid_index(index: numpy.ndarray) → bool

                                      Checks if a given multidimensional index is within the bounds of the shape of the space

                                      Parameters
                                      @@ -394,7 +394,7 @@ all of the values must be within the low and high bounds.

                                      -sample() → numpy.ndarray
                                      +sample() → numpy.ndarray

                                      Sample the defined space, either uniformly, if space bounds are defined, or Normal distributed if no bounds are defined

                                      @@ -406,7 +406,7 @@ bounds are defined

                                      -sample_with_info() → rl_coach.core_types.ActionInfo[source]
                                      +sample_with_info() → rl_coach.core_types.ActionInfo[source]

                                      Get a random action with additional “fake” info

                                      Returns
                                      @@ -421,7 +421,7 @@ bounds are defined

                                      AttentionActionSpace

                                      -class rl_coach.spaces.AttentionActionSpace(shape: int, low: Union[None, int, float, numpy.ndarray] = -inf, high: Union[None, int, float, numpy.ndarray] = inf, descriptions: Union[None, List, Dict] = None, default_action: numpy.ndarray = None, forced_attention_size: Union[None, int, float, numpy.ndarray] = None)[source]
                                      +class rl_coach.spaces.AttentionActionSpace(shape: int, low: Union[None, int, float, numpy.ndarray] = -inf, high: Union[None, int, float, numpy.ndarray] = inf, descriptions: Union[None, List, Dict] = None, default_action: numpy.ndarray = None, forced_attention_size: Union[None, int, float, numpy.ndarray] = None)[source]

                                      A box selection continuous action space, meaning that the actions are defined as selecting a multidimensional box from a given range. The actions will be in the form: @@ -433,7 +433,7 @@ The actions will be in the form:

                                      BoxActionSpace

                                      -class rl_coach.spaces.BoxActionSpace(shape: Union[int, numpy.ndarray], low: Union[None, int, float, numpy.ndarray] = -inf, high: Union[None, int, float, numpy.ndarray] = inf, descriptions: Union[None, List, Dict] = None, default_action: numpy.ndarray = None)[source]
                                      +class rl_coach.spaces.BoxActionSpace(shape: Union[int, numpy.ndarray], low: Union[None, int, float, numpy.ndarray] = -inf, high: Union[None, int, float, numpy.ndarray] = inf, descriptions: Union[None, List, Dict] = None, default_action: numpy.ndarray = None)[source]

                                      A multidimensional bounded or unbounded continuous action space

                                      @@ -442,7 +442,7 @@ The actions will be in the form:

                                      DiscreteActionSpace

                                      -class rl_coach.spaces.DiscreteActionSpace(num_actions: int, descriptions: Union[None, List, Dict] = None, default_action: numpy.ndarray = None)[source]
                                      +class rl_coach.spaces.DiscreteActionSpace(num_actions: int, descriptions: Union[None, List, Dict] = None, default_action: numpy.ndarray = None)[source]

                                      A discrete action space with action indices as actions

                                      @@ -451,7 +451,7 @@ The actions will be in the form:

                                      MultiSelectActionSpace

                                      -class rl_coach.spaces.MultiSelectActionSpace(size: int, max_simultaneous_selected_actions: int = 1, descriptions: Union[None, List, Dict] = None, default_action: numpy.ndarray = None, allow_no_action_to_be_selected=True)[source]
                                      +class rl_coach.spaces.MultiSelectActionSpace(size: int, max_simultaneous_selected_actions: int = 1, descriptions: Union[None, List, Dict] = None, default_action: numpy.ndarray = None, allow_no_action_to_be_selected=True)[source]

                                      A discrete action space where multiple actions can be selected at once. The actions are encoded as multi-hot vectors

                                      @@ -460,7 +460,7 @@ The actions will be in the form:

                                      CompoundActionSpace

                                      -class rl_coach.spaces.CompoundActionSpace(sub_spaces: List[rl_coach.spaces.ActionSpace])[source]
                                      +class rl_coach.spaces.CompoundActionSpace(sub_spaces: List[rl_coach.spaces.ActionSpace])[source]

                                      An action space which consists of multiple sub-action spaces. For example, in Starcraft the agent should choose an action identifier from ~550 options (Discrete(550)), but it also needs to choose 13 different arguments for the selected action identifier, where each argument is @@ -473,7 +473,7 @@ by itself an action space. In Starcraft, the arguments are Discrete action space

                                      Goal Spaces

                                      -class rl_coach.spaces.GoalsSpace(goal_name: str, reward_type: rl_coach.spaces.GoalToRewardConversion, distance_metric: Union[rl_coach.spaces.GoalsSpace.DistanceMetric, Callable])[source]
                                      +class rl_coach.spaces.GoalsSpace(goal_name: str, reward_type: rl_coach.spaces.GoalToRewardConversion, distance_metric: Union[rl_coach.spaces.GoalsSpace.DistanceMetric, Callable])[source]

                                      A multidimensional space with a goal type definition. It also behaves as an action space, so that hierarchical agents can use it as an output action space. The class acts as a wrapper to the target space. So after setting the target space, all the values of the class @@ -491,13 +491,13 @@ returns the distance between them

                                      -class DistanceMetric[source]
                                      +class DistanceMetric[source]

                                      An enumeration.

                                      -clip_action_to_space(action: Union[int, float, numpy.ndarray, List]) → Union[int, float, numpy.ndarray, List]
                                      +clip_action_to_space(action: Union[int, float, numpy.ndarray, List]) → Union[int, float, numpy.ndarray, List]

                                      Given an action, clip its values to fit to the action space ranges

                                      Parameters
                                      @@ -511,7 +511,7 @@ returns the distance between them

                                      -contains(val: Union[int, float, numpy.ndarray]) → bool
                                      +contains(val: Union[int, float, numpy.ndarray]) → bool

                                      Checks if value is contained by this space. The shape must match and all of the values must be within the low and high bounds.

                                      @@ -526,7 +526,7 @@ all of the values must be within the low and high bounds.

                                      -distance_from_goal(goal: numpy.ndarray, state: dict) → float[source]
                                      +distance_from_goal(goal: numpy.ndarray, state: dict) → float[source]

                                      Given a state, check its distance from the goal

                                      Parameters
                                      @@ -543,7 +543,7 @@ all of the values must be within the low and high bounds.

                                      -get_reward_for_goal_and_state(goal: numpy.ndarray, state: dict) → Tuple[float, bool][source]
                                      +get_reward_for_goal_and_state(goal: numpy.ndarray, state: dict) → Tuple[float, bool][source]

                                      Given a state, check if the goal was reached and return a reward accordingly

                                      Parameters
                                      @@ -560,7 +560,7 @@ all of the values must be within the low and high bounds.

                                      -goal_from_state(state: Dict)[source]
                                      +goal_from_state(state: Dict)[source]

                                      Given a state, extract an observation according to the goal_name

                                      Parameters
                                      @@ -574,7 +574,7 @@ all of the values must be within the low and high bounds.

                                      -is_valid_index(index: numpy.ndarray) → bool
                                      +is_valid_index(index: numpy.ndarray) → bool

                                      Checks if a given multidimensional index is within the bounds of the shape of the space

                                      Parameters
                                      @@ -588,7 +588,7 @@ all of the values must be within the low and high bounds.

                                      -sample() → numpy.ndarray
                                      +sample() → numpy.ndarray

                                      Sample the defined space, either uniformly, if space bounds are defined, or Normal distributed if no bounds are defined

                                      @@ -600,7 +600,7 @@ bounds are defined

                                      -sample_with_info() → rl_coach.core_types.ActionInfo
                                      +sample_with_info() → rl_coach.core_types.ActionInfo

                                      Get a random action with additional “fake” info

                                      Returns
                                      diff --git a/docs/genindex.html b/docs/genindex.html index 23d1b6e..28d3d71 100644 --- a/docs/genindex.html +++ b/docs/genindex.html @@ -221,7 +221,7 @@
                                    • (rl_coach.agents.dqn_agent.DQNAgent method)
                                    -
                                  • action_space (rl_coach.environments.environment.Environment attribute) +
                                  • action_space() (rl_coach.environments.environment.Environment property)
                                  • ActionInfo (class in rl_coach.core_types)
                                  • @@ -408,6 +408,14 @@

                                    F

                                    + @@ -537,7 +551,7 @@

                                    L

                                    - + @@ -835,7 +855,7 @@
                                  • SingleEpisodeBuffer (class in rl_coach.memories.episodic)
                                  • -
                                  • size (rl_coach.core_types.Batch attribute) +
                                  • size() (rl_coach.core_types.Batch property)
                                  • slice() (rl_coach.core_types.Batch method)
                                  • @@ -845,7 +865,7 @@
                                  • StarCraft2Environment (class in rl_coach.environments.starcraft2_environment)
                                  • -
                                  • state_space (rl_coach.environments.environment.Environment attribute) +
                                  • state_space() (rl_coach.environments.environment.Environment property)
                                  • states() (rl_coach.core_types.Batch method)
                                  • @@ -866,6 +886,8 @@
                                    -
                                    -
                                  • train_and_sync_networks() (rl_coach.architectures.network_wrapper.NetworkWrapper method) -
                                    • +
                                    • train_and_sync_networks() (rl_coach.architectures.network_wrapper.NetworkWrapper method) +
                                    • train_on_batch() (rl_coach.architectures.architecture.Architecture method)
                                    • Transition (class in rl_coach.core_types) diff --git a/docs/objects.inv b/docs/objects.inv index df98ef02d80d2115a258432ce1983fb521935725..c23977828b6ab3e40529690326049809281e80ec 100644 GIT binary patch delta 3571 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 diff --git a/docs/searchindex.js b/docs/searchindex.js index 6d20f79..35fd839 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["components/additional_parameters","components/agents/imitation/bc","components/agents/imitation/cil","components/agents/index","components/agents/other/dfp","components/agents/policy_optimization/ac","components/agents/policy_optimization/acer","components/agents/policy_optimization/cppo","components/agents/policy_optimization/ddpg","components/agents/policy_optimization/hac","components/agents/policy_optimization/pg","components/agents/policy_optimization/ppo","components/agents/policy_optimization/sac","components/agents/value_optimization/bs_dqn","components/agents/value_optimization/categorical_dqn","components/agents/value_optimization/double_dqn","components/agents/value_optimization/dqn","components/agents/value_optimization/dueling_dqn","components/agents/value_optimization/mmc","components/agents/value_optimization/n_step","components/agents/value_optimization/naf","components/agents/value_optimization/nec","components/agents/value_optimization/pal","components/agents/value_optimization/qr_dqn","components/agents/value_optimization/rainbow","components/architectures/index","components/core_types","components/data_stores/index","components/environments/index","components/exploration_policies/index","components/filters/index","components/filters/input_filters","components/filters/output_filters","components/memories/index","components/memory_backends/index","components/orchestrators/index","components/spaces","contributing/add_agent","contributing/add_env","dashboard","design/control_flow","design/horizontal_scaling","design/network","dist_usage","features/algorithms","features/benchmarks","features/environments","features/index","index","selecting_an_algorithm","test","usage"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.todo":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["components/additional_parameters.rst","components/agents/imitation/bc.rst","components/agents/imitation/cil.rst","components/agents/index.rst","components/agents/other/dfp.rst","components/agents/policy_optimization/ac.rst","components/agents/policy_optimization/acer.rst","components/agents/policy_optimization/cppo.rst","components/agents/policy_optimization/ddpg.rst","components/agents/policy_optimization/hac.rst","components/agents/policy_optimization/pg.rst","components/agents/policy_optimization/ppo.rst","components/agents/policy_optimization/sac.rst","components/agents/value_optimization/bs_dqn.rst","components/agents/value_optimization/categorical_dqn.rst","components/agents/value_optimization/double_dqn.rst","components/agents/value_optimization/dqn.rst","components/agents/value_optimization/dueling_dqn.rst","components/agents/value_optimization/mmc.rst","components/agents/value_optimization/n_step.rst","components/agents/value_optimization/naf.rst","components/agents/value_optimization/nec.rst","components/agents/value_optimization/pal.rst","components/agents/value_optimization/qr_dqn.rst","components/agents/value_optimization/rainbow.rst","components/architectures/index.rst","components/core_types.rst","components/data_stores/index.rst","components/environments/index.rst","components/exploration_policies/index.rst","components/filters/index.rst","components/filters/input_filters.rst","components/filters/output_filters.rst","components/memories/index.rst","components/memory_backends/index.rst","components/orchestrators/index.rst","components/spaces.rst","contributing/add_agent.rst","contributing/add_env.rst","dashboard.rst","design/control_flow.rst","design/horizontal_scaling.rst","design/network.rst","dist_usage.rst","features/algorithms.rst","features/benchmarks.rst","features/environments.rst","features/index.rst","index.rst","selecting_an_algorithm.rst","test.rst","usage.rst"],objects:{"rl_coach.agents.acer_agent":{ACERAlgorithmParameters:[6,0,1,""]},"rl_coach.agents.actor_critic_agent":{ActorCriticAlgorithmParameters:[5,0,1,""]},"rl_coach.agents.agent":{Agent:[3,0,1,""]},"rl_coach.agents.agent.Agent":{act:[3,1,1,""],call_memory:[3,1,1,""],choose_action:[3,1,1,""],collect_savers:[3,1,1,""],create_networks:[3,1,1,""],get_predictions:[3,1,1,""],get_state_embedding:[3,1,1,""],handle_episode_ended:[3,1,1,""],init_environment_dependent_modules:[3,1,1,""],learn_from_batch:[3,1,1,""],log_to_screen:[3,1,1,""],observe:[3,1,1,""],parent:[3,2,1,""],phase:[3,2,1,""],post_training_commands:[3,1,1,""],prepare_batch_for_inference:[3,1,1,""],register_signal:[3,1,1,""],reset_evaluation_state:[3,1,1,""],reset_internal_state:[3,1,1,""],restore_checkpoint:[3,1,1,""],run_off_policy_evaluation:[3,1,1,""],run_pre_network_filter_for_inference:[3,1,1,""],save_checkpoint:[3,1,1,""],set_environment_parameters:[3,1,1,""],set_incoming_directive:[3,1,1,""],set_session:[3,1,1,""],setup_logger:[3,1,1,""],sync:[3,1,1,""],train:[3,1,1,""],update_log:[3,1,1,""],update_step_in_episode_log:[3,1,1,""],update_transition_before_adding_to_replay_buffer:[3,1,1,""]},"rl_coach.agents.bc_agent":{BCAlgorithmParameters:[1,0,1,""]},"rl_coach.agents.categorical_dqn_agent":{CategoricalDQNAlgorithmParameters:[14,0,1,""]},"rl_coach.agents.cil_agent":{CILAlgorithmParameters:[2,0,1,""]},"rl_coach.agents.clipped_ppo_agent":{ClippedPPOAlgorithmParameters:[7,0,1,""]},"rl_coach.agents.ddpg_agent":{DDPGAlgorithmParameters:[8,0,1,""]},"rl_coach.agents.dfp_agent":{DFPAlgorithmParameters:[4,0,1,""]},"rl_coach.agents.dqn_agent":{DQNAgent:[50,0,1,""],DQNAlgorithmParameters:[16,0,1,""]},"rl_coach.agents.dqn_agent.DQNAgent":{act:[50,1,1,""],call_memory:[50,1,1,""],choose_action:[50,1,1,""],collect_savers:[50,1,1,""],create_networks:[50,1,1,""],get_predictions:[50,1,1,""],get_state_embedding:[50,1,1,""],handle_episode_ended:[50,1,1,""],improve_reward_model:[50,1,1,""],init_environment_dependent_modules:[50,1,1,""],learn_from_batch:[50,1,1,""],log_to_screen:[50,1,1,""],observe:[50,1,1,""],parent:[50,2,1,""],phase:[50,2,1,""],post_training_commands:[50,1,1,""],prepare_batch_for_inference:[50,1,1,""],register_signal:[50,1,1,""],reset_evaluation_state:[50,1,1,""],reset_internal_state:[50,1,1,""],restore_checkpoint:[50,1,1,""],run_off_policy_evaluation:[50,1,1,""],run_pre_network_filter_for_inference:[50,1,1,""],save_checkpoint:[50,1,1,""],set_environment_parameters:[50,1,1,""],set_incoming_directive:[50,1,1,""],set_session:[50,1,1,""],setup_logger:[50,1,1,""],sync:[50,1,1,""],train:[50,1,1,""],update_log:[50,1,1,""],update_step_in_episode_log:[50,1,1,""],update_transition_before_adding_to_replay_buffer:[50,1,1,""]},"rl_coach.agents.mmc_agent":{MixedMonteCarloAlgorithmParameters:[18,0,1,""]},"rl_coach.agents.n_step_q_agent":{NStepQAlgorithmParameters:[19,0,1,""]},"rl_coach.agents.naf_agent":{NAFAlgorithmParameters:[20,0,1,""]},"rl_coach.agents.nec_agent":{NECAlgorithmParameters:[21,0,1,""]},"rl_coach.agents.pal_agent":{PALAlgorithmParameters:[22,0,1,""]},"rl_coach.agents.policy_gradients_agent":{PolicyGradientAlgorithmParameters:[10,0,1,""]},"rl_coach.agents.ppo_agent":{PPOAlgorithmParameters:[11,0,1,""]},"rl_coach.agents.qr_dqn_agent":{QuantileRegressionDQNAlgorithmParameters:[23,0,1,""]},"rl_coach.agents.rainbow_dqn_agent":{RainbowDQNAlgorithmParameters:[24,0,1,""]},"rl_coach.agents.soft_actor_critic_agent":{SoftActorCriticAlgorithmParameters:[12,0,1,""]},"rl_coach.architectures.architecture":{Architecture:[25,0,1,""]},"rl_coach.architectures.architecture.Architecture":{accumulate_gradients:[25,1,1,""],apply_and_reset_gradients:[25,1,1,""],apply_gradients:[25,1,1,""],collect_savers:[25,1,1,""],construct:[25,3,1,""],get_variable_value:[25,1,1,""],get_weights:[25,1,1,""],parallel_predict:[25,3,1,""],predict:[25,1,1,""],reset_accumulated_gradients:[25,1,1,""],set_variable_value:[25,1,1,""],set_weights:[25,1,1,""],train_on_batch:[25,1,1,""]},"rl_coach.architectures.network_wrapper":{NetworkWrapper:[25,0,1,""]},"rl_coach.architectures.network_wrapper.NetworkWrapper":{apply_gradients_and_sync_networks:[25,1,1,""],apply_gradients_to_global_network:[25,1,1,""],apply_gradients_to_online_network:[25,1,1,""],collect_savers:[25,1,1,""],parallel_prediction:[25,1,1,""],set_is_training:[25,1,1,""],sync:[25,1,1,""],train_and_sync_networks:[25,1,1,""],update_online_network:[25,1,1,""],update_target_network:[25,1,1,""]},"rl_coach.base_parameters":{AgentParameters:[3,0,1,""],DistributedTaskParameters:[0,0,1,""],NetworkParameters:[25,0,1,""],PresetValidationParameters:[0,0,1,""],TaskParameters:[0,0,1,""],VisualizationParameters:[0,0,1,""]},"rl_coach.core_types":{ActionInfo:[26,0,1,""],Batch:[26,0,1,""],EnvResponse:[26,0,1,""],Episode:[26,0,1,""],Transition:[26,0,1,""]},"rl_coach.core_types.Batch":{actions:[26,1,1,""],game_overs:[26,1,1,""],goals:[26,1,1,""],info:[26,1,1,""],info_as_list:[26,1,1,""],n_step_discounted_rewards:[26,1,1,""],next_states:[26,1,1,""],rewards:[26,1,1,""],shuffle:[26,1,1,""],size:[26,2,1,""],slice:[26,1,1,""],states:[26,1,1,""]},"rl_coach.core_types.Episode":{get_first_transition:[26,1,1,""],get_last_transition:[26,1,1,""],get_transition:[26,1,1,""],get_transitions_attribute:[26,1,1,""],insert:[26,1,1,""],is_empty:[26,1,1,""],length:[26,1,1,""],update_discounted_rewards:[26,1,1,""]},"rl_coach.data_stores.nfs_data_store":{NFSDataStore:[27,0,1,""]},"rl_coach.data_stores.s3_data_store":{S3DataStore:[27,0,1,""]},"rl_coach.environments.carla_environment":{CarlaEnvironment:[28,0,1,""]},"rl_coach.environments.control_suite_environment":{ControlSuiteEnvironment:[28,0,1,""]},"rl_coach.environments.doom_environment":{DoomEnvironment:[28,0,1,""]},"rl_coach.environments.environment":{Environment:[28,0,1,""]},"rl_coach.environments.environment.Environment":{action_space:[28,2,1,""],close:[28,1,1,""],get_action_from_user:[28,1,1,""],get_available_keys:[28,1,1,""],get_goal:[28,1,1,""],get_random_action:[28,1,1,""],get_rendered_image:[28,1,1,""],goal_space:[28,2,1,""],handle_episode_ended:[28,1,1,""],last_env_response:[28,2,1,""],phase:[28,2,1,""],render:[28,1,1,""],reset_internal_state:[28,1,1,""],set_goal:[28,1,1,""],state_space:[28,2,1,""],step:[28,1,1,""]},"rl_coach.environments.gym_environment":{GymEnvironment:[28,0,1,""]},"rl_coach.environments.starcraft2_environment":{StarCraft2Environment:[28,0,1,""]},"rl_coach.exploration_policies.additive_noise":{AdditiveNoise:[29,0,1,""]},"rl_coach.exploration_policies.boltzmann":{Boltzmann:[29,0,1,""]},"rl_coach.exploration_policies.bootstrapped":{Bootstrapped:[29,0,1,""]},"rl_coach.exploration_policies.categorical":{Categorical:[29,0,1,""]},"rl_coach.exploration_policies.continuous_entropy":{ContinuousEntropy:[29,0,1,""]},"rl_coach.exploration_policies.e_greedy":{EGreedy:[29,0,1,""]},"rl_coach.exploration_policies.exploration_policy":{ExplorationPolicy:[29,0,1,""]},"rl_coach.exploration_policies.exploration_policy.ExplorationPolicy":{change_phase:[29,1,1,""],get_action:[29,1,1,""],requires_action_values:[29,1,1,""],reset:[29,1,1,""]},"rl_coach.exploration_policies.greedy":{Greedy:[29,0,1,""]},"rl_coach.exploration_policies.ou_process":{OUProcess:[29,0,1,""]},"rl_coach.exploration_policies.parameter_noise":{ParameterNoise:[29,0,1,""]},"rl_coach.exploration_policies.truncated_normal":{TruncatedNormal:[29,0,1,""]},"rl_coach.exploration_policies.ucb":{UCB:[29,0,1,""]},"rl_coach.filters.action":{AttentionDiscretization:[32,0,1,""],BoxDiscretization:[32,0,1,""],BoxMasking:[32,0,1,""],FullDiscreteActionSpaceMap:[32,0,1,""],LinearBoxToBoxMap:[32,0,1,""],PartialDiscreteActionSpaceMap:[32,0,1,""]},"rl_coach.filters.observation":{ObservationClippingFilter:[31,0,1,""],ObservationCropFilter:[31,0,1,""],ObservationMoveAxisFilter:[31,0,1,""],ObservationNormalizationFilter:[31,0,1,""],ObservationRGBToYFilter:[31,0,1,""],ObservationReductionBySubPartsNameFilter:[31,0,1,""],ObservationRescaleSizeByFactorFilter:[31,0,1,""],ObservationRescaleToSizeFilter:[31,0,1,""],ObservationSqueezeFilter:[31,0,1,""],ObservationStackingFilter:[31,0,1,""],ObservationToUInt8Filter:[31,0,1,""]},"rl_coach.filters.reward":{RewardClippingFilter:[31,0,1,""],RewardNormalizationFilter:[31,0,1,""],RewardRescaleFilter:[31,0,1,""]},"rl_coach.memories.backend.redis":{RedisPubSubBackend:[34,0,1,""]},"rl_coach.memories.episodic":{EpisodicExperienceReplay:[33,0,1,""],EpisodicHRLHindsightExperienceReplay:[33,0,1,""],EpisodicHindsightExperienceReplay:[33,0,1,""],SingleEpisodeBuffer:[33,0,1,""]},"rl_coach.memories.non_episodic":{BalancedExperienceReplay:[33,0,1,""],ExperienceReplay:[33,0,1,""],PrioritizedExperienceReplay:[33,0,1,""],QDND:[33,0,1,""],TransitionCollection:[33,0,1,""]},"rl_coach.orchestrators.kubernetes_orchestrator":{Kubernetes:[35,0,1,""]},"rl_coach.spaces":{ActionSpace:[36,0,1,""],AttentionActionSpace:[36,0,1,""],BoxActionSpace:[36,0,1,""],CompoundActionSpace:[36,0,1,""],DiscreteActionSpace:[36,0,1,""],GoalsSpace:[36,0,1,""],ImageObservationSpace:[36,0,1,""],MultiSelectActionSpace:[36,0,1,""],ObservationSpace:[36,0,1,""],PlanarMapsObservationSpace:[36,0,1,""],Space:[36,0,1,""],VectorObservationSpace:[36,0,1,""]},"rl_coach.spaces.ActionSpace":{clip_action_to_space:[36,1,1,""],contains:[36,1,1,""],is_valid_index:[36,1,1,""],sample:[36,1,1,""],sample_with_info:[36,1,1,""]},"rl_coach.spaces.GoalsSpace":{DistanceMetric:[36,0,1,""],clip_action_to_space:[36,1,1,""],contains:[36,1,1,""],distance_from_goal:[36,1,1,""],get_reward_for_goal_and_state:[36,1,1,""],goal_from_state:[36,1,1,""],is_valid_index:[36,1,1,""],sample:[36,1,1,""],sample_with_info:[36,1,1,""]},"rl_coach.spaces.ObservationSpace":{contains:[36,1,1,""],is_valid_index:[36,1,1,""],sample:[36,1,1,""]},"rl_coach.spaces.Space":{contains:[36,1,1,""],is_valid_index:[36,1,1,""],sample:[36,1,1,""]}},objnames:{"0":["py","class","Python class"],"1":["py","method","Python method"],"2":["py","attribute","Python attribute"],"3":["py","staticmethod","Python static method"]},objtypes:{"0":"py:class","1":"py:method","2":"py:attribute","3":"py:staticmethod"},terms:{"100x100":32,"160x160":31,"1_0":[14,24],"1st":29,"20x20":32,"210x160":31,"2nd":29,"50k":40,"9_amd64":43,"abstract":[37,41],"boolean":[3,26,36,50],"break":39,"case":[0,3,5,21,25,26,29,36,49,50,51],"class":[0,1,2,3,4,5,6,7,8,10,11,12,14,16,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,40,44,50],"default":[0,29,51],"enum":[25,28,36],"export":[0,25,43],"final":[8,15,16,18,22,40],"float":[3,4,5,6,7,8,10,11,12,14,18,21,22,23,25,26,28,29,31,32,33,36,37,50],"function":[0,1,3,6,7,8,11,25,28,29,36,37,38,40,42,50],"import":[6,17,29,33,38,49,51],"int":[0,3,4,5,6,7,10,14,19,21,23,24,26,28,29,31,32,33,36,50],"long":42,"new":[0,3,7,8,11,12,21,22,25,26,32,40,41,48,49,50],"return":[0,3,8,10,11,13,18,21,22,24,25,26,28,29,31,33,36,37,38,40,49,50],"short":[0,40],"static":25,"super":[37,38],"switch":[0,39],"true":[0,3,4,5,6,7,8,11,12,21,22,24,25,26,28,29,32,33,36,50],"try":[4,45,49],"while":[0,5,6,8,9,10,11,12,25,28,39,42,49,51],AWS:43,Adding:[17,48],And:[38,49],But:[39,49],Doing:49,For:[0,1,2,3,4,7,10,13,14,15,16,19,21,22,25,26,28,29,30,31,32,36,37,38,40,41,42,43,45,50,51],Has:25,Its:50,NFS:[27,43],One:[23,49,51],That:39,The:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,39,40,41,42,43,45,46,48,49,50,51],Then:[4,7,8,13,20,22],There:[7,11,25,29,30,37,38,42,51],These:[1,2,3,23,28,35,41,42,43],Use:[1,2,8,20,21],Used:29,Uses:49,Using:[8,13,15,16,43],Will:25,With:[29,48],__init__:[28,37,38],_index:[5,19],_render:38,_restart_environment_episod:38,_take_act:38,_update_st:38,a2c:49,a3c:[10,19,39,49],a_i:21,a_t:[4,5,6,8,12,13,14,15,16,18,19,20,22,24],a_valu:5,abl:[32,49],about:[3,26,40,50,51],abov:[8,12,25,40],abs:[19,33],absolut:29,acceler:20,accept:28,access:[25,37,43],accord:[0,3,4,5,6,8,12,13,19,25,26,29,36,39,40,42,50],accordingli:[21,36,40,51],account:[4,7,11,21,22,29],accumul:[3,4,5,6,10,19,21,24,25,31,49,50],accumulate_gradi:25,accumulated_gradi:25,accur:49,acer:[3,49],acer_ag:6,aceralgorithmparamet:6,achiev:[0,4,7,28,31,33,36,45,49,51],acquir:12,across:[10,18,39],act:[3,4,8,13,23,36,37,40,50],action:[1,2,3,14,15,16,17,18,19,22,23,24,25,26,28,29,30,33,37,38,40,42,50],action_idx:38,action_penalti:8,action_spac:[28,29],action_space_s:25,action_valu:[26,29],actioninfo:[3,36,40,50],actionspac:[29,36],actiontyp:38,activ:[8,25],actor:[3,6,7,8,11,29,42,49],actor_critic_ag:5,actorcriticag:37,actorcriticalgorithmparamet:5,actual:[4,5,14,15,16,23,24,29,32,33],adam:[7,25],adam_optimizer_beta1:25,adam_optimizer_beta2:25,adapt:[7,11],add:[8,9,20,26,29,31,38,40,43],add_rendered_image_to_env_respons:0,added:[0,4,6,7,10,11,21,29,33,37],adding:[3,11,29,37,50],addit:[3,25,26,28,29,31,33,36,38,39,40,42,48,49,50],addition:[25,28,31,37,38,40,45,46,51],additional_fetch:25,additional_simulator_paramet:[28,38],additionali:39,additive_nois:29,additivenoiseparamet:29,advanc:[24,48],advantag:[3,5,7,11,17,29],affect:[0,13,25],aforement:[15,16,22],after:[0,3,8,10,11,12,19,20,22,24,25,26,28,31,36,50,51],again:29,against:3,agent:[0,1,2,4,5,6,7,8,10,11,12,14,16,18,19,20,21,22,23,24,25,26,28,29,30,31,32,36,38,39,42,44,45,48,49,50],agent_param:41,agent_paramet:[3,25,50],agentparamet:[3,25,37],aggreg:40,ahead:[4,49],aim:29,algorithm:[3,26,29,37,39,40,41,45,47,48,50],algorithmparamet:[3,37],all:[0,3,10,13,21,22,25,26,28,29,31,32,36,37,38,39,40,41,42,43,46,50,51],all_action_prob:26,allow:[0,3,4,17,25,26,28,29,30,31,32,33,39,40,41,42,48,49,50,51],allow_brak:28,allow_duplicates_in_batch_sampl:33,allow_no_action_to_be_select:36,along:[21,28,29,46],alpha:[6,18,22,33],alreadi:[21,26,38,49],also:[5,6,7,21,22,25,28,36,37,39,45,49,51],altern:[28,38,46],alwai:[25,29,32],amazon:43,amazonaw:43,amount:[8,10,18,22,29,40,49],analysi:39,analyz:39,ani:[3,25,26,28,32,33,37,40,41,42,43,50],anoth:[3,17,25,30,50],answer:49,api:[28,42,46,48],appear:[3,50],appli:[0,3,5,8,10,19,25,26,29,31,49,50],applic:49,apply_and_reset_gradi:25,apply_gradi:25,apply_gradients_and_sync_network:25,apply_gradients_every_x_episod:[5,10,19],apply_gradients_to_global_network:25,apply_gradients_to_online_network:25,apply_stop_condit:0,appropri:43,approx:[8,12],approxim:[12,42,49],apt:43,arbitrari:31,architectur:[3,17,37,48,50],architecture_num_q_head:29,area:32,arg:[3,25,43,50],argmax_a:[15,18,22],argument:[3,14,24,25,28,36,40,50],around:[25,26,42],arrai:[3,25,26,28,31,36,38,50],art:[3,44],artifact:43,artifici:33,arxiv:[19,33],aspect:[29,31,39],assign:[0,2,5,6,25,29],assign_kl_coeffici:25,assign_op:25,assum:[26,29,31,33,49],async:[25,41],async_train:25,asynchron:[5,19,25],atari:[16,28,31,43,51],atari_a3c:51,atari_dqn:51,ath:17,atom:[14,23,24],attach:28,attend:32,attent:32,attentionactionspac:32,attentiondiscret:32,attribut:26,attribute_nam:26,author:[28,45,46],auto_select_all_armi:28,autoclean:43,automat:[25,51],autonom:[28,46,48],autoremov:43,auxiliari:[28,46],avail:[4,25,26,28,39,41,43,48,49,51],averag:[6,7,11,25,39,40],avg:6,aws:43,axes:[31,39],axi:[31,39],axis_origin:31,axis_target:31,back:[7,41],backend:[25,41,43,48,51],background:51,backpropag:21,backward:25,balanc:2,band:39,bar:6,base1:43,base64:43,base:[7,11,12,18,20,22,28,33,37,40,43,46,49,50],base_paramet:[0,3,25,28,29],baselin:49,basic:[10,26,41,51],batch:[1,2,3,4,5,6,8,10,11,12,13,14,15,16,17,19,22,23,24,25,33,37,40,50],batch_siz:25,bc_agent:1,bcalgorithmparamet:1,becaus:40,becom:[8,41],been:[17,26,31,45,49],befor:[3,5,11,24,25,26,31,40,41,42,43,49,50],begin:[0,4,40],behav:36,behavior:[3,31,33,37,45,49,50,51],being:[3,37,48,49,50],bellman:[14,23,24],benchmark:[39,47,48,49],best:[49,51],beta1:25,beta2:25,beta:[6,8,10,33],beta_entropi:[5,6,7,10,11],better:[17,49],between:[0,1,2,3,6,7,8,10,11,12,14,18,19,21,23,24,25,26,28,29,32,33,36,37,39,40,42,48,49],bfg:[7,11],bia:[6,49],big:[11,14,24],bin:[32,43],binari:13,bind:25,binomi:13,bit:31,blizzard:46,blob:[28,31],block:48,blog:48,boilerpl:40,bolling:39,bool:[0,3,4,5,6,7,8,11,12,21,22,24,25,26,28,29,33,36,50],boost:[43,49],bootstrap:[3,5,6,7,8,11,18,19,21,22,24,26,49],bootstrap_total_return_from_old_polici:[21,26],both:[3,7,25,28,29,32,49,50],bound:[6,7,11,14,24,29,36,49],box2d:43,box:[29,32,36],boxactionspac:32,boxdiscret:32,boxmask:32,breakout:51,breakoutdeterminist:[28,51],bring:11,bucket:43,buffer:[1,2,3,6,12,13,14,15,16,19,21,22,23,24,33,40,49,50,51],build:[30,48,49],builder:43,built:[37,40],bullet:6,button:[39,51],c51:14,cach:43,calcul:[3,4,5,6,7,8,10,11,13,14,15,16,18,19,21,22,23,24,25,26,29,33,37,50],call:[0,3,10,19,25,26,28,40,50],call_memori:[3,50],callabl:36,camera:[28,38],camera_height:28,camera_width:28,cameratyp:[28,38],can:[0,2,3,5,6,7,8,11,12,22,25,26,28,29,30,31,32,36,37,38,39,40,42,46,48,50,51],cannot:[3,50],carla:[31,46],carla_environ:28,carlaenviron:28,carlaenvironmentparamet:28,carlo:[3,22],cartpol:[28,38],cartpole_a3c:51,cartpole_clippedppo:[43,51],cartpole_dqn:51,categor:[3,5,6,49],categori:[30,31],categorical_dqn_ag:14,categoricaldqnalgorithmparamet:14,caus:[31,39],cdot:[5,7,8,10,12,13,14,15,16,18,20,22,24],central:[25,39],chain:8,challeng:40,chang:[0,3,6,7,8,11,13,17,19,22,29,40,43,50],change_phas:29,channel:[28,31],channels_axi:36,check:[0,3,26,36,50],checkpoint:[0,3,25,27,41,43,50,51],checkpoint_dir:[3,50],checkpoint_prefix:[3,50],checkpoint_restore_dir:[0,51],checkpoint_restore_path:0,checkpoint_save_dir:0,checkpoint_save_sec:0,child:25,chmod:43,choic:[37,43],choos:[3,17,22,29,30,32,36,37,40,42,49,50,51],choose_act:[3,37,40,50],chosen:[3,12,22,29,32,37,50],chunk:11,cil:49,cil_ag:2,cilalgorithmparamet:2,classic_control:43,clean:[28,37,43],cli:43,clip:[3,6,8,11,25,31,36,49],clip_action_to_spac:36,clip_critic_target:8,clip_gradi:25,clip_high:29,clip_likelihood_ratio_using_epsilon:[7,11],clip_low:29,clip_max:31,clip_min:31,clipbyglobalnorm:25,clipped_ppo_ag:7,clippedppoalgorithmparamet:7,clipping_high:31,clipping_low:31,clone:[3,49],close:28,cmake:43,coach:[0,3,25,27,28,29,30,34,35,37,40,44,45,46,49,51],code:[38,40,49],coeffici:[7,11,25,29,33],collect:[3,7,10,11,19,25,26,33,40,45,48,50,51],collect_sav:[3,25,50],color:31,com:43,combin:[24,42,48,49],comma:0,command:[40,43,51],common:[37,39,43,51],commun:41,compar:[0,11,17,49],complet:[26,29,40],complex:[25,30,40,42,49,51],compon:[3,14,24,25,29,35,37,40,48,50,51],composit:[3,50],compositeag:[3,50],comput:[25,29],concat:25,concentr:40,condit:[0,3],confid:29,config:[28,51],configur:[3,5,10,37,43,50],confus:40,connect:[12,25],connectionist:10,consecut:[8,21],consequ:[19,29],consid:[5,6,32,39],consist:[8,28,31,32,36,40,46],constant:6,constantli:51,constantschedul:33,constrain:32,construct:[12,25,33],consumpt:31,contain:[0,1,2,3,13,25,26,28,36,38,40,50,51],content:43,contin:41,continu:[1,2,5,8,9,10,20,29,30,32,36,45],continuous_entropi:29,continuous_exploration_policy_paramet:29,contribut:[4,48],control:[2,3,5,6,7,8,11,25,29,31,39,46,48,49,50],control_suite_environ:28,controlsuiteenviron:28,conveni:[39,51],converg:10,convers:30,convert:[3,26,29,31,36,40,42,50],convolut:[25,42],coordin:32,copi:[8,12,13,14,15,16,18,19,20,22,23,24,25,43],core:48,core_typ:[3,26,28,36,50,51],correct:[3,6,49],correctli:25,correl:29,correpond:26,correspond:[2,3,4,14,15,25,26,29,31,36,38,50],could:[3,25,36,43,50],count:18,countabl:32,counter:[3,50],counterpart:42,cpu:[0,25],crd:51,creat:[3,19,25,31,38,50,51],create_network:[3,50],create_target_network:25,creation:[3,50],credenti:43,critic:[3,6,7,8,11,29,42,49],crop:[31,32],crop_high:31,crop_low:31,cross:[1,14,24],csv:0,ctrl:39,cuda:43,cudnn7:43,curl:43,curr_stat:[3,37,50],current:[0,1,2,3,4,6,7,8,9,10,11,12,13,15,16,18,20,21,22,23,25,26,28,29,31,32,36,37,40,48,49,50],custom:[28,29,36,37,40],custom_reward_threshold:28,cycl:40,dai:51,dashboard:[0,3,43,48,50],data:[0,10,19,25,33,40,41,43,45,48,49,51],data_stor:[27,43],dataset:[3,7,11,49,50,51],date:[21,42,49,51],dcp:[43,51],ddpg:49,ddpg_agent:8,ddpgalgorithmparamet:8,ddqn:[18,22,49],deal:49,debug:[0,39,48],decai:[5,7,11,25],decid:[0,3,4,28,37,50],decis:[3,50],decod:43,dedic:25,deep:[0,3,5,12,13,15,17,19,20,24,50],deepmind:46,def:[37,38],default_act:36,default_input_filt:38,default_output_filt:38,defin:[0,3,5,6,7,10,11,12,19,21,22,25,26,28,29,31,32,33,36,37,38,40,41,42,45,46,50,51],definit:[3,25,28,36,38,40,50],delai:49,delta:[6,14,21,24],demonstr:[1,2,51],dens:29,densiti:18,depecr:0,depend:[0,3,6,25,31,33,36,38,43,45,49,50],deploi:[35,41],depth:28,descend:49,describ:[3,14,23,31,33,37,40,43,50],descript:[3,32,36,44,51],design:[40,43,48],desir:[32,37],destabil:10,detail:[3,26,44,46,48,51],determin:[2,3,21,26,33,50],determinist:[3,12,49],dev:43,develop:[40,45],deviat:[10,11,29,31,39],devic:25,dfp:49,dfp_agent:4,dfpalgorithmparamet:4,dict:[3,4,25,26,28,29,36,50],dict_siz:33,dictat:4,dictionari:[2,3,25,26,28,33,36,37,50],did:28,differ:[0,1,2,3,4,5,6,7,10,11,13,17,25,28,29,31,36,37,38,39,41,42,48,49,50],differenti:17,difficult:[39,45],difficulti:51,dimens:[26,28,31,32],dimension:[11,32],dir:[0,3,50,51],direct:[3,28,50],directli:[3,5,40,42,50],directori:[0,25,37,39,43,51],disabl:51,disable_fog:28,disappear:28,disassembl:49,discard:[26,31],discount:[8,10,11,18,21,22,24,25,26,49],discret:[1,2,4,7,11,13,14,15,16,17,18,19,21,22,23,24,29,30,31,32,36,40],disentangl:40,disk:0,displai:[0,39],distanc:36,distance_from_go:36,distance_metr:36,distancemetr:36,distil:[3,50],distribut:[5,6,10,11,12,14,23,24,25,27,29,34,35,36,42,48,49,51],distributed_coach:41,distributed_coach_synchronization_typ:41,distributedcoachsynchronizationtyp:41,divereg:[7,11],diverg:[6,7,11,24],dnd:[0,21,49],dnd_key_error_threshold:21,dnd_size:21,do_action_hindsight:33,doc:43,docker:43,dockerfil:43,document:46,doe:[13,25,31],doesn:41,doing:[7,11,30],domain:42,don:[4,29,39,49],done:[0,3,7,10,11,28,31,38,50,51],doom:[28,38,43,46],doom_basic_bc:51,doom_basic_dqn:51,doom_environ:[28,38,51],doomenviron:[28,38],doomenvironmentparamet:[38,51],doominputfilt:38,doomlevel:28,doomoutputfilt:38,doubl:[3,18,24],doubli:50,down:[25,28],download:43,dpkg:43,dqn:[3,18,19,24,28,29,31,32,40,42,49],dqn_agent:[16,50],dqnagent:50,dqnalgorithmparamet:16,drive:[2,28,46,48],driving_benchmark:28,due:31,duel:[3,24],dump:[0,3,50],dump_csv:0,dump_gif:0,dump_in_episode_sign:0,dump_mp4:0,dump_one_value_per_episod:[3,50],dump_one_value_per_step:[3,50],dump_parameters_document:0,dump_signals_to_csv_every_x_episod:0,dure:[3,6,7,10,11,12,13,21,29,39,40,50,51],dynam:[39,45,49],e_greedi:29,each:[0,1,2,3,4,5,6,7,10,11,12,13,15,16,17,19,21,22,23,25,26,28,29,30,31,32,33,36,37,39,40,41,42,43,45,49,50],eas:39,easi:[38,39,48],easier:42,easili:[29,51],echo:43,effect:[0,3,6,7,19,31,40,50],effici:[6,40,49],either:[0,3,5,19,25,29,36,39,42,51],element:[3,13,25,31,36],elf:43,embbed:25,embed:[3,21,25,50],embedd:[25,42],embedding_merger_typ:25,embeddingmergertyp:25,emploi:49,empti:26,emul:6,enabl:[25,42,51],encod:[31,36],encourag:[20,22,40],end:[2,3,10,24,26,28,31,50,51],enforc:32,engin:[28,46],enough:[4,6,21],ensembl:[29,49],ensur:[6,25],enter:[3,50,51],entir:[11,18,21,24,29,32,40],entri:[21,40],entropi:[1,5,6,7,10,11,12,14,24,29,49],enumer:36,env:[26,43],env_param:38,env_respons:[3,50],enviorn:28,environ:[0,3,4,6,17,25,26,29,30,31,32,36,37,40,43,45,47,48,50],environmentparamet:[28,38],envrespons:[0,3,28,50],episod:[0,3,4,5,10,11,13,18,19,24,28,29,37,38,39,40,41,50,51],episode_max_tim:28,episodic_hindsight_experience_replai:33,epoch:[7,50],epsilon:[7,29,33],epsilon_schedul:29,equal:2,equat:[8,12,15,16,19,23],error:[25,49],escap:51,especi:17,essenti:[19,25,32,38,40,43],estim:[3,5,7,11,13,18,22,29,50],estimate_state_value_using_ga:[5,7,11],eta:[7,11],etc:[0,3,25,28,30,36,37,46,50],evalu:[0,3,12,25,26,29,40,50],evaluate_onli:0,evaluation_epsilon:29,evaluation_noise_percentag:29,even:[17,25,28,38,39,40,49],everi:[0,5,6,8,10,12,13,14,15,16,18,19,20,22,23,24,51],exact:[21,29,45],exactli:25,exampl:[2,3,4,25,26,28,29,30,31,32,36,37,38,40,42,50,51],except:[19,26],execut:[26,39,40],exhibit:[3,37,50],exist:[21,25],exit:[3,50],expand_dim:26,expect:[0,3,29,45,50],experi:[0,6,8,11,12,24,28,33,34,39,40,41,43,48,49,51],experiment_path:[0,28],experiment_suit:28,experimentsuit:28,expert:[1,2,26,49],exploit:[29,40],explor:[3,4,5,6,7,8,9,11,13,18,20,21,37,40,48,49],exploration_polici:29,explorationparamet:[3,29,37],exponenti:[6,7,11,24,25],expor:3,export_onnx_graph:0,expos:[39,42,48],extend:[28,29,46],extens:[28,46],extent:51,extern:0,extra:[25,26,42],extract:[3,20,21,26,31,36,39,40,50],factor:[8,10,11,22,24,25,26,29,31],faithfulli:39,fake:36,fals:[0,3,8,25,26,28,29,32,33,36,38,50],far:[11,31,40,45],faster:[17,49],featur:[8,28,42,48,49],feature_minimap_maps_to_us:28,feature_screen_maps_to_us:28,fetch:[25,26],fetched_tensor:25,few:[10,13,14,15,16,18,22,23,24,29,38],field:[45,48],file:[0,3,37,40,50,51],fill:[26,38],filter:[0,3,48,50],find:[15,39,46,48],finish:[21,51],finit:32,first:[0,8,11,13,21,23,24,25,26,31,40,42],fit:36,flag:[0,3,25,26,28,50],flexibl:41,flicker:28,flow:[30,48],follow:[2,3,5,6,8,10,12,14,15,16,19,20,21,23,24,25,26,28,29,33,37,38,43,45,49,50],footprint:31,forc:[25,28,32,38],force_cpu:25,force_environment_reset:[28,38],force_int_bin:32,forced_attention_s:36,form:[4,19,36,49],format:37,formul:[5,6],forward:[25,29],found:[3,44,51],frac:[6,7,12,14,24],fraction:[7,11],frame:[0,28],frame_skip:28,framework:[0,3,25,37,48,50],framework_typ:0,free:[28,46],freeglut3:43,from:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,34,36,37,38,39,40,41,42,43,45,46,48,50,51],full:[3,10,18,32,50],fulldiscreteactionspacemap:32,fulli:25,func:[3,50],futur:[0,3,10,26,49],future_measurements_weight:4,gae:[5,7,11],gae_lambda:[5,7,11],game:[3,26,28,46,48,50,51],game_ov:26,gamma:[5,6,8,12,13,14,15,16,18,19,20,21,22,24],gap:[22,49],gather:41,gaussian:[11,12,29],gener:[0,5,7,11,13,25,28,29,33,36,37,43,51],general_network:37,get:[3,4,7,8,9,10,11,13,15,16,18,20,22,25,26,28,29,36,40,42,43,45,50],get_act:29,get_action_from_us:28,get_available_kei:28,get_first_transit:26,get_goal:28,get_last_env_respons:28,get_last_transit:26,get_output_head:37,get_predict:[3,50],get_random_act:28,get_rendered_imag:[28,38],get_reward_for_goal_and_st:36,get_state_embed:[3,50],get_transit:26,get_transitions_attribut:26,get_variable_valu:25,get_weight:25,gfortran:43,gif:0,git:43,github:[38,43,45,48],given:[0,1,2,3,4,5,8,10,11,25,26,28,29,31,32,33,36,37,40,50],given_weight:25,global:[3,25,42,50],global_network:25,glx:43,goal:[1,2,3,4,6,25,26,28,33,40,42,49,50],goal_from_st:36,goal_nam:36,goal_spac:28,goal_vector:4,goals_spac:33,goalsspac:[33,36],goaltorewardconvers:36,going:30,good:[38,39],gpu:[0,25],gracefulli:51,gradient:[3,5,6,7,11,19,21,25,37,49,50],gradientclippingmethod:25,gradients_clipping_method:25,granular:33,graph:0,graphmanag:40,grayscal:[31,36],greedili:40,group:39,grow:24,guidelin:49,gym:[43,46],gym_environ:[28,51],gymenviron:28,gymenvironmentparamet:38,hac:49,had:45,hand:[17,31,40,49],handl:4,handle_episode_end:[3,28,50],handling_targets_after_episode_end:4,handlingtargetsafterepisodeend:4,hard:[39,49],harder:39,has:[0,3,17,21,22,26,29,31,40,42,45,49,50],has_glob:25,has_target:25,hat:[6,7,14,24],have:[0,3,4,6,25,28,29,31,32,33,40,42,45,50],head:[1,2,3,5,6,10,13,17,20,21,25,29,37,42,50],headparamet:25,heads_paramet:25,health_gath:28,heat:6,heatup:[29,40],help:[22,26,39,40,49],here:[38,40],heurist:[11,29],hide:42,hierarch:[36,40],hierarchi:[3,40,49,50],high:[8,11,31,32,36,39],high_i:36,high_kl_penalty_coeffici:11,high_x:36,higher:11,highest:[5,6,10,22,29,31,32,36],highli:[0,38,49],hindsight:[9,33,49],hindsight_goal_selection_method:33,hindsight_transitions_per_regular_transit:33,hindsightgoalselectionmethod:33,hold:[13,25,26,33,39,40,42],horizont:[43,48,51],host:43,hostnam:0,hot:36,how:[4,7,11,29,41,43,49,51],hrl:33,html:43,http:[19,33,43],hub:43,huber:23,huber_loss_interv:23,human:[0,28],human_control:28,hyper:[37,45],hyperparamet:37,ident:25,identifi:[25,36],ies:50,ignor:28,imag:[0,25,28,31,32,36,38,42,51],image1:43,imit:[3,26,44,49],impact:25,implement:[3,7,11,25,27,28,29,33,37,38,41,45,49,51],impli:51,implment:35,importance_weight:25,importance_weight_trunc:6,importantli:40,improv:[5,17,24,28,40,49],improve_reward_model:50,includ:[0,3,4,28,30,31,35,42,46,50,51],increas:[11,22,31,49],increment:[3,50],index:[0,2,26,28,31,32,33,36],indic:36,inf:[31,36],infer:[3,25,28,50],infinit:[0,49],info:[3,13,26,36,38,50],info_as_list:26,inform:[3,4,19,26,28,30,39,40,43,46,50],inherit:[3,37,38],init_environment_dependent_modul:[3,50],initi:[3,4,11,22,25,26,37,40,48,50],initial_feed_dict:25,initial_kl_coeffici:11,innov:49,input:[1,2,3,4,8,13,15,16,18,20,21,22,25,30,36,40,42,50],input_embedders_paramet:25,input_high:31,input_low:31,input_space_high:32,input_space_low:32,inputembedderparamet:25,inputfilt:40,insert:[21,26],inspect:0,instal:[43,51],instanc:[3,34,36,42],instanti:[3,28,40],instead:[0,3,7,19,22,25,31,32,40,49,50],instruct:51,intact:[13,45],integ:[0,31,32],integr:[38,40,41,48],intel:48,intend:[10,25,29,40],interact:[26,40,41,48,51],interest:[25,39],interfac:[28,39,41,46],intermedi:21,intern:[3,10,19,25,26,30,40,50,51],intersect:49,interv:23,intro:48,introduc:49,invers:[28,46],invok:40,involv:37,is_empti:26,is_valid_index:36,item:26,iter:[3,5,6,8,11,17,25,50],its:[0,3,14,24,25,26,29,36,40,43,49,50,51],itself:[25,36,51],job:0,job_typ:0,joint:28,json:0,jump:[4,32],jupyt:37,just:[3,11,22,24,38,40,42,50,51],kapa:23,keep:[16,26,31,51],kei:[2,21,25,26,28,33,37,39,43,49,51],key_error_threshold:33,key_width:33,keyboard:[28,51],keyword:25,kl_coeffici:25,kl_coefficient_ph:25,know:[3,49,50,51],knowledg:[3,40,50],known:[26,39,45,49],kubeconfig:35,kubernet:43,kubernetes_orchestr:35,kubernetesparamet:35,kwarg:[25,28],l2_norm_added_delta:21,l2_regular:25,lack:39,lamb:29,lambda:[5,7,11,29],lane:2,larg:[29,31,46],larger:25,last:[4,6,11,21,26,28,31],last_env_respons:28,lastli:40,later:[0,3,25,50,51],latest:[19,21,40,43],layer:[25,29,33,40,42],lazi:[26,31],lazystack:31,lbfg:25,ld_library_path:43,lead:29,learn:[0,3,4,5,6,8,9,10,12,13,14,15,16,17,20,23,24,25,26,28,29,31,39,40,42,44,45,46,49,50],learn_from_batch:[3,37,40,50],learner:25,learning_r:[25,33],learning_rate_decay_r:25,learning_rate_decay_step:25,least:[42,49],leav:[11,13],left:[2,6,12,49],length:[4,5,7,11,19,21,25,26],less:[17,49],level:[0,3,25,28,38,50,51],levelmanag:[3,40,50],levelselect:28,libatla:43,libav:43,libavformat:43,libbla:43,libboost:43,libbz2:43,libfluidsynth:43,libgl1:43,libglew:43,libgm:43,libgstream:43,libgtk2:43,libgtk:43,libjpeg:43,liblapack:43,libnotifi:43,libopen:43,libosmesa6:43,libportmidi:43,librari:[28,43,46],libsdl1:43,libsdl2:43,libsdl:43,libsm:43,libsmpeg:43,libswscal:43,libtiff:43,libwebkitgtk:43,libwildmidi:43,like:[12,28,36,40,42,43,49],likelihood:[7,11],line:[3,40,50,51],linear:32,linearboxtoboxmap:32,linearli:32,list:[0,3,4,25,26,28,29,31,32,36,37,50,51],load:[0,39,41,51],load_memory_from_file_path:51,local:[3,42,43,50],locat:[23,26,31,49],log:[0,3,5,6,10,12,50],log_to_screen:[3,50],logger:[0,3,50],look:[38,43],loop:40,loss:[1,2,3,6,7,10,11,14,15,16,23,24,25,29,37,42,50],lot:[29,39,45,49],low:[8,11,31,32,36],low_i:36,low_x:36,lower:[0,33,40],lowest:[31,32,36],lstm:42,lumin:31,lvert:[6,14,24],lvl:51,mai:[0,25,44,51],main:[3,37,40,42,44,50,51],mainli:41,major:29,make:[0,3,25,28,37,39,43,45,49,50],manag:[3,25,41,43,50],mandatori:[36,38,42],mani:[3,17,44,45],manner:[11,18,19,22,31,40],manual:43,map:[3,25,28,30,31,32,36,37,50],mark:26,markdown:50,mask:[13,32],masked_target_space_high:32,masked_target_space_low:32,master:[3,40,43,50],match:[2,21,25,36],mathbb:[5,6],mathop:5,max:[5,6,14,19,24,31],max_a:[13,16,21,22],max_action_valu:26,max_episodes_to_achieve_reward:0,max_fps_for_human_control:0,max_kl_diverg:6,max_over_num_fram:28,max_simultaneous_selected_act:36,max_siz:33,max_spe:28,maxim:[4,15],maximum:[0,12,14,16,21,22,26,28,29,31,33,49],mean:[0,2,7,8,9,10,11,12,20,25,29,31,32,36,39,49],meant:42,measur:[3,4,25,28,31,36,38,49,50],measurements_nam:36,mechan:[30,41,45,51],memor:49,memori:[3,24,26,31,37,40,41,43,48,49,50],memory_backend:43,memorygranular:33,memoryparamet:[3,37],merg:[25,28],mesa:43,method:[0,5,7,11,19,25,31,33],metric:[0,36,39],mid:6,middlewar:[21,25,42],middleware_paramet:25,middlewareparamet:25,midpoint:23,might:[3,10,28,37,42,50],min:[6,7,14,22,24],min_:12,min_reward_threshold:0,mind:51,minim:[2,4,14],minimap_s:28,minimum:[0,7,31],mix:[3,7,11,21,22,49],mixedmontecarloalgorithmparamet:18,mixer1:43,mixtur:[18,25],mjkei:43,mjpro150:43,mjpro150_linux:43,mkdir:43,mmc:[18,49],mmc_agent:18,mode:[22,25,27,34,35,40,41,43,51],model:[0,18,20,25,48,50,51],modif:49,modifi:6,modul:[3,37,40,41,50],modular:[37,40,42,48],monitor:41,mont:[3,22],monte_carlo_mixing_r:[18,22],more:[3,8,19,25,31,37,39,40,42,43,48,50,51],moreov:39,most:[3,10,21,25,26,29,42,45,49,50,51],mostli:[31,40],motiv:40,move:[6,7,11,31,39,45],mp4:0,mse:[2,6,15,16,23],much:[7,11,40,49],mujoco:[28,32,38,43,46],mujoco_kei:43,mujoco_pi:43,multi:[11,25,36,42],multidimension:36,multipl:[4,7,11,19,25,28,29,31,32,33,36,39,40,45,48,51],multipli:[4,10,25,31],multiselect:32,multitask:[28,46],must:[25,31,36,45],mxnet:51,n_step:[21,24,26,33],n_step_discounted_reward:26,n_step_q_ag:19,nabla:[6,8],nabla_:[8,12],nabla_a:8,naf:49,naf_ag:20,nafalgorithmparamet:20,name:[3,25,26,28,31,36,37,43,50,51],namespac:35,nasm:43,nativ:[0,28,38,46],native_rend:0,navig:3,ndarrai:[3,25,26,28,29,31,32,36,38,50],nearest:21,neat:39,nec:[0,49],nec_ag:21,necalgorithmparamet:21,necessari:[3,21,25,50],necessarili:31,need:[0,3,6,24,25,28,29,36,37,40,45,49,50,51],neg:[4,31],neighbor:21,neon_compon:37,nervanasystem:43,network:[0,3,25,29,37,40,45,48,49,50,51],network_input_tupl:25,network_nam:[3,50],network_param:29,network_paramet:25,network_wrapp:[3,25,50],networkparamet:[3,25,29,37],networkwrapp:[3,50],neural:[3,18,25,42,45],never:25,new_value_shift_coeffici:[21,33],new_weight:25,newli:[22,38,49],next:[0,3,8,15,16,20,22,23,26,28,40,50,51],next_stat:26,nfs_data_stor:27,nfsdatastoreparamet:27,nice:51,no_accumul:25,node:[25,42],nois:[8,9,20,29,40],noise_percentage_schedul:29,noisi:[10,24,29],non_episod:33,none:[0,3,7,8,11,25,26,28,29,31,32,36,38,50],norm:25,norm_unclipped_grad:25,norm_unclippsed_grad:25,normal:[3,4,10,29,30,31,36],note:[21,25,29,50],notebook:37,notic:[25,49],notori:[39,45,49],now:[7,38],nstepqalgorithmparamet:19,nth:24,num_act:[21,33,36],num_bins_per_dimens:32,num_class:33,num_consecutive_playing_step:[3,8,50],num_consecutive_training_step:[3,50],num_gpu:0,num_neighbor:33,num_predicted_steps_ahead:4,num_speedup_step:28,num_steps_between_copying_online_weights_to_target:[8,12,19],num_steps_between_gradient_upd:[5,6,10,19],num_task:0,num_training_task:0,num_transitions_to_start_replai:6,num_work:0,number:[0,2,4,5,6,8,10,12,13,14,19,21,23,24,25,26,28,29,31,32,33,39,46,50,51],number_of_knn:21,numpi:[3,25,26,28,29,31,32,36,38,50],nvidia:43,object:[0,3,24,25,28,29,31,33,40,50],observ:[0,3,4,11,25,26,28,30,38,40,50],observation_reduction_by_sub_parts_name_filt:31,observation_space_s:25,observation_space_typ:28,observation_stat:31,observation_typ:28,observationspac:36,observationspacetyp:28,observationtyp:28,off:[3,6,12,41,49,50],offer:[28,46],often:[39,40,42],old:[7,11,25,49],old_weight:25,onc:[0,7,10,11,13,14,15,16,18,19,22,23,24,25,36,51],one:[0,3,6,17,21,22,25,26,28,29,30,33,36,38,39,42,49,50],ones:[38,49],onli:[0,3,4,5,6,7,10,11,13,14,16,17,19,21,23,24,25,26,28,29,31,32,38,40,49,50,51],onlin:[8,12,13,14,15,16,18,19,20,21,22,23,24,25,40,42],online_network:25,onnx:[0,25],onto:30,open:[0,28,46],openai:[43,46],opencv:43,oper:[22,25,31],optim:[3,4,6,25,44,49],optimization_epoch:7,optimizer_epsilon:25,optimizer_typ:25,option:[6,10,25,28,32,36,37,39,41,42,51],orchestr:[41,43,48],order:[0,3,5,6,7,8,10,11,12,15,16,17,19,20,21,22,23,25,26,30,31,32,39,40,42,45,49,50],org:[19,33],origin:[19,31,32,45],ornstein:[8,9,29],other:[0,2,10,17,22,25,28,30,31,33,39,40,49],otherwis:[11,13,25,28,29,36],ou_process:29,our:7,out:[2,15,16,29,30,32,39,43,48,49,51],outcom:[29,40],output:[0,4,6,8,13,14,20,21,25,29,30,31,36,37,42],output_0_0:25,output_observation_spac:31,outputfilt:40,outsid:[4,29],over:[3,7,10,11,19,21,24,25,26,29,31,32,39,40,49,50],overestim:8,overfit:11,overhead:0,overlai:39,overrid:[3,50],override_existing_kei:33,overriden:37,overview:40,overwhelm:40,overwritten:25,own:[25,37],p_j:[14,24],page:[3,45],pair:[0,36],pal:[22,49],pal_ag:22,pal_alpha:22,palalgorithmparamet:22,paper:[5,10,12,14,19,21,23,28,33,45],parallel:[6,25,39,42],parallel_predict:25,param:[3,25,26,27,28,29,34,35,37,38,50],paramet:[2,3,4,5,6,7,8,10,11,12,14,18,19,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,45,48,50,51],parameter_nois:29,parameters_server_host:0,parent:[3,25,50],parent_path_suffix:[3,25,50],parmet:3,pars:40,part:[0,13,25,26,29,31,32,41,42,45,49],part_nam:31,partial:32,partialdiscreteactionspacemap:32,particular:4,particularli:[28,29,36,45,49],pass:[0,4,8,9,20,21,25,28,29,30,38,39,40,42,51],patamet:21,patchelf:43,patchelf_0:43,path:[0,3,25,37,38,43,50,51],pattern:40,pdf:33,penal:[7,8,11],penalti:11,pendulum_hac:38,pendulum_with_go:38,pendulumwithgo:38,per:[0,3,4,36,37,40,50],percentag:29,percentil:29,perceptron:42,perform:[0,3,6,25,26,31,33,38,39,40,49,50],period:[42,51],persist:3,persistent_advantage_learn:22,perspect:14,phase:[3,6,7,8,9,11,12,25,28,29,40,50],phi:[14,24],physic:[28,46],pi_:[6,7,12],pick:[12,28],pickl:51,pickledreplaybuff:51,pip3:43,pip:43,pixel:28,place:[32,39,40],placehold:[25,29],plai:[0,3,10,13,15,16,19,29,37,39,50],plain:42,planarmap:28,planarmapsobservationspac:31,platform:[28,46],pleas:[19,45],plu:25,plugin:43,point:[31,36,40,41],polici:[1,3,4,5,6,9,12,13,19,20,21,27,37,40,41,42,43,44,48,49,50],policy_gradient_rescal:[5,7,10,11],policy_gradients_ag:10,policygradientalgorithmparamet:10,policygradientrescal:[5,7,10,11],policyoptimizationag:37,popul:40,popular:[28,46],port:0,posit:[4,31],possibl:[2,3,4,21,29,32,36,39,42,48,49,50,51],post:[30,48],post_training_command:[3,50],power:[28,46],ppo:[7,11,49],ppo_ag:11,ppoalgorithmparamet:11,pre:[8,29,30],predefin:[13,22,29,51],predict:[1,2,3,5,6,7,8,11,12,13,14,15,16,22,23,24,25,29,42,49,50],prediction_typ:[3,50],predictiontyp:[3,50],prefect:49,prefer:25,prefix:[3,50],prep:43,prepar:[3,50],prepare_batch_for_infer:[3,50],present:[17,21,25,28,31,49],preset:[0,5,37,38,40,41,43,51],press:[39,51],prevent:[8,11,40],previou:31,previous:[11,25],print:[0,3,51],print_networks_summari:0,priorit:[24,33],prioriti:[24,33],privat:36,probabilit:[5,6],probabl:[3,5,6,10,13,14,24,26,29,37,49,50],problem:49,procedur:6,process:[0,3,8,9,25,29,30,31,32,37,39,40,42,45,48,50],produc:25,progress:25,project:[14,24],propag:7,propagate_updates_to_dnd:21,properti:[25,33,37,38,43],proport:33,provid:[25,41],proxi:40,proxim:3,pub:[34,35,43],publish:45,purpos:[0,3,10],pursuit:2,pybullet:[28,46],pygam:[0,43],pytest:43,python3:43,python:[28,33,37,43,46,48],q_i:12,qr_dqn_agent:23,quad:6,qualiti:28,quantil:[3,49],quantileregressiondqnalgorithmparamet:23,queri:[21,25,40,49],question:49,quit:39,r_i:[5,19],r_t:[4,6,7,24],rainbow:[3,37,49],rainbow_ag:37,rainbow_dqn_ag:24,rainbowag:37,rainbowagentparamet:37,rainbowalgorithmparamet:37,rainbowdqnalgorithmparamet:24,rainbowexplorationparamet:37,rainbowmemoryparamet:37,rainbownetworkparamet:37,rais:[3,26,50],ramp:[37,40],random:[0,19,28,29,36,40,45],random_initialization_step:28,randomli:[26,40],rang:[4,7,8,11,14,24,28,29,31,32,36,49],rare:21,rate:[0,6,18,21,25,28,42],rate_for_copying_weights_to_target:[6,8,12],rather:[4,12,39],ratio:[6,7,11,18,31],ratio_of_replai:6,raw:[28,46],reach:[0,11,36],read:27,readabl:40,readm:43,real:3,reason:[31,45],rebuild_on_every_upd:33,receiv:[25,26],recent:[3,24,25,49,50],recommend:38,redi:[34,35,43],redispubsub:43,redispubsubmemorybackendparamet:34,reduc:[1,2,10,11,22,25,31,40,49],reduct:31,reduction_method:31,reductionmethod:31,redund:31,refer:[2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,41,43],referenc:3,regard:[3,50],region:[6,49],regist:[3,50],register_sign:[3,50],registri:43,regress:[2,3,49],regula:[6,7,11],regular:[5,7,10,11,19,21,25,29,32,33,49],regularli:25,reinforc:[3,5,8,9,10,12,14,15,16,17,19,22,23,24,28,29,39,40,42,44,45,46,49],rel:29,relat:[25,43],relationship:49,releas:[0,48,49],relev:[3,13,29,31,50],remov:[0,31],render:[0,3,28,38],reorder:31,repeat:[28,40],replac:[29,31,33,43],replace_mse_with_huber_loss:25,replai:[1,2,3,6,8,12,13,14,15,16,19,21,22,23,24,33,40,49,50,51],replay_buff:51,replicated_devic:25,repo:38,repositori:48,repres:[0,7,11,14,24,25,26,28,29,32,36,51],represent:42,reproduc:[40,45],request:[3,25,50],requir:[3,25,27,29,31,39,42,43,49,50],requires_action_valu:29,rescal:[4,5,7,10,11,25,30,31],rescale_factor:31,research:[28,45,46],reset:[3,21,25,28,29,38,50],reset_accumulated_gradi:25,reset_evaluation_st:[3,50],reset_gradi:25,reset_internal_st:[3,28,50],resourc:[41,43],respect:[8,26,28],respons:[3,26,28,40,50],rest:[25,26,32,43],restart:38,restor:[0,3,50],restore_checkpoint:[3,50],result:[3,4,14,15,16,17,23,24,25,31,32,45,49,50,51],ret:6,retrac:6,retriev:[21,33],return_additional_data:33,reus:40,reusabl:42,reward:[0,1,2,3,4,8,10,18,19,24,25,26,28,30,36,38,39,40,49,50],reward_test_level:0,reward_typ:36,rgb:[28,31,36],rho:[6,8],rho_t:6,right:[2,3,6,12,29,32,39,49,50],rl_coach:[0,1,2,3,4,5,6,7,8,10,11,12,14,16,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,38,43,50,51],rms_prop_optimizer_decai:25,rmsprop:25,roboschool:[28,46],robot:[28,36,46,48],roboti:43,robust:50,rollout:[27,34,35,41,43,51],root:[39,43],rule:[8,13],run:[0,3,4,8,10,11,12,13,15,16,21,22,25,28,29,31,50,51],run_off_policy_evalu:[3,50],run_pre_network_filter_for_infer:[3,50],runphas:[3,50],runtim:43,rvert:[14,24],rvert_2:6,s3_bucket_nam:43,s3_creds_fil:43,s3_data_stor:27,s3_end_point:43,s3datastoreparamet:27,s_t:[4,5,6,8,12,13,14,15,16,18,19,20,22,24],sac:49,sai:49,same:[3,4,7,10,18,19,22,25,28,32,33,39,42,45,49,50],sampl:[1,2,3,5,6,8,10,11,12,13,14,15,16,18,19,22,23,24,25,29,33,36,40,43,50],sample_with_info:36,satur:8,save:[0,3,24,25,29,43,50,51],save_checkpoint:[3,50],saver:[3,25,50],savercollect:[3,25,50],scale:[4,10,25,31,39,43,48,51],scale_down_gradients_by_number_of_workers_for_sync_train:25,scale_measurements_target:4,scaler:25,schedul:[7,29,33,40,41,43,51],scheme:[5,29,40,49],schulman:11,sci:43,scienc:45,scipi:[31,43],scope:25,scratch:49,scratchpad:0,screen:[3,28,38,51],screen_siz:28,script:40,second:[0,25,39,49,51],section:[43,44,46],see:[3,28,31,43,45,46,49,50,51],seed:[0,28,45],seen:[4,21,22,28,31,40,45,49],segment:[28,36],select:[5,13,21,25,26,29,31,32,36,38,39,40,48,51],self:[3,25,37,38,50],send:[38,42],separ:[0,3,17,31,32,42,44,49],separate_actions_for_throttle_and_brak:28,seper:10,sequenti:[4,26,33],serv:[7,10,42],server:0,server_height:28,server_width:28,sess:[3,25,50],session:[3,25,50],set:[0,2,3,4,5,6,7,8,11,14,15,16,18,21,22,24,25,26,28,29,31,32,36,37,41,45,46,48,49,50,51],set_environment_paramet:[3,50],set_goal:28,set_incoming_direct:[3,50],set_is_train:25,set_sess:[3,50],set_variable_valu:25,set_weight:25,setup:[3,43,50],setup_logg:[3,50],setuptool:43,sever:[0,3,7,10,11,13,25,28,29,31,37,38,39,40,42,46,49,50,51],shape:[25,31,36],share:[0,3,25,33,42,50],shared_memory_scratchpad:0,shared_optim:25,shift:[32,40],shine:39,should:[0,3,4,7,11,13,19,22,25,26,28,31,33,36,37,38,41,50,51],should_dump:0,shouldn:13,show:45,shown:45,shuffl:26,side:[3,50],sigma:29,signal:[3,40,50],signal_nam:[3,50],significantli:17,sim:[6,12],similar:[7,17,19,26,28,32,49],simpl:[10,33,37,38,42,48,49,51],simplest:49,simplif:49,simplifi:[7,39,42],simul:[28,38,46,51],simultan:7,sinc:[3,7,8,10,19,21,22,24,25,29,31,50],singl:[3,4,5,6,7,11,13,17,18,19,25,26,28,29,32,36,39,40,42,50],size:[25,26,29,31,32,33,36],skill:49,skip:[28,40],slave:[3,50],slice:26,slow:[25,51],slower:[0,17,25],slowli:8,small:[7,21,33],smaller:29,smooth:39,soft:[3,8,11,20,49],soft_actor_critic_ag:12,softactorcriticalgorithmparamet:12,softmax:[25,29],softmax_temperatur:25,softwar:43,solut:49,solv:[31,38,46,48],some:[0,3,11,25,26,29,31,37,38,39,42,45,49,50,51],sort:23,sourc:[0,1,2,3,4,5,6,7,8,10,11,12,14,16,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,38,43,46,50],space:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,28,29,30,31,32,33,40,48,50],spacesdefinit:[3,25,50],spatial:49,spawn:[41,43],special:17,specif:[0,3,13,17,21,25,26,37,40,51],specifi:[0,25,28,29,31,38,41,51],speed:[25,31,49],speedup:51,spread:[31,32],squar:31,squeeze_list:25,squeeze_output:25,src:43,stabil:[6,19,25,49],stabl:[42,49],stack:[3,30,31,36,50],stack_siz:[25,31],stacking_axi:31,stage:42,stai:45,standard:[7,10,11,13,29,31,39],starcraft2_environ:28,starcraft2environ:28,starcraft:[36,46],starcraftobservationtyp:28,start:[3,6,8,11,12,17,22,26,31,32,38,43,50],state:[1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,28,31,33,36,37,38,40,42,44,49,50],state_key_with_the_class_index:[2,33],state_spac:28,state_valu:26,statist:[3,10,31,48,50],std:12,stdev:29,steep:29,step:[0,3,4,5,6,7,8,10,11,12,13,14,15,16,18,20,21,22,23,24,25,26,28,29,31,37,38,39,40,49,50,51],stepmethod:[8,12,19],stochast:[12,40,49],stop:[0,28],store:[0,3,21,24,26,28,31,33,39,40,41,43,48,50,51],store_transitions_only_when_episodes_are_termin:24,str:[0,2,3,4,19,25,26,28,29,31,32,36,50],strategi:[28,46],stream:[17,41],strict:45,string:[0,25,28],structur:[0,3,26,33,37,40,50],stuff:25,style:29,sub:[32,33,34,35,36,37,40,43,51],sub_spac:36,subset:[39,45,49],subtract:22,succeed:28,success:[0,28,49],suffer:39,suffici:26,suffix:[3,25,50],suggest:37,suit:[0,46],suitabl:[41,51],sum:[4,7,10,18,25,26],sum_:[5,12,14,18,19,21,24],summari:[0,3,50],supervis:49,suppli:[3,50],support:[0,3,25,28,29,39,42,43,44,46,48,51],sure:[0,43,45],surrog:7,swig:43,swingup:28,symbol:25,sync:[3,25,40,41,50],synchron:[0,25,40,42],t_max:[10,19],tag:43,take:[0,3,10,11,17,21,22,25,28,29,30,38,39,40,50],taken:[1,2,4,5,6,7,8,11,12,14,17,21,22,23,24,25,26,28,29],tanh:8,tar:43,target:[0,1,2,3,4,5,6,7,8,11,12,13,14,15,16,18,19,20,21,22,23,24,25,28,31,32,36,37,40,42,50],target_act:32,target_kl_diverg:11,target_network:25,target_success_r:28,targets_horizon:19,task:[0,1,2,28,31,37,39,46],task_index:0,tau:12,techniqu:[7,11,48,49],technolog:41,teh:25,temperatur:[25,29],temperature_schedul:29,tensor:[3,25,50],tensorboard:0,tensorflow:[0,3,25,50,51],tensorflow_support:25,term:[6,7,11],termin:[3,8,26,40,50],test:[0,3,5,6,8,9,10,11,12,25,37,45,48,51],test_using_a_trace_test:0,text:6,textrm:40,than:[0,3,11,25,29,39,42,50],thei:[3,21,22,25,29,39,40,41,49,50,51],them:[4,5,10,19,25,26,28,31,36,38,39,42],therefor:[0,8,25,30,49],theta:[6,7,8,12,14,24,29],theta_:[6,7],thi:[0,3,4,5,6,7,8,10,11,13,17,19,21,24,25,26,28,29,30,31,32,33,34,36,37,38,39,40,41,42,43,45,49,50,51],thing:39,those:[0,3,8,13,15,16,17,21,26,29,32,40,42,44,49,50],thousand:[11,13,14,15,16,18,22,23,24],thread:25,three:[3,41,42,43,44],threshold:[11,21,31],through:[0,3,4,8,9,10,11,13,21,22,25,37,38,40,42,50],tild:[8,12],time:[0,4,22,25,29,32,33,39,42,49],time_limit:38,timestep:[4,10],timid:43,tmp:0,togeth:[3,19,26,40,50],toggl:39,too:11,tool:[39,43,49],top:[25,28,30,31,33,38,39,49],torqu:28,total:[0,3,10,11,18,21,22,26,33,37,39,49,50],total_loss:25,total_return:26,trace:0,trace_max_env_step:0,trace_test_level:0,tradeoff:29,train:[0,3,17,25,29,34,35,37,38,39,40,41,42,45,48,49,50],train_and_sync_network:25,train_on_batch:25,train_to_eval_ratio:33,trainer:[27,41],transfer:[28,34,46],transit:[1,2,3,4,5,6,8,10,11,12,14,15,16,19,21,22,23,24,33,37,40,41,50],transition_idx:26,tri:49,trick:45,tricki:39,trigger:[28,43],truncat:6,truncated_norm:29,trust:[6,49],ttf2:43,tune:29,tupl:[1,2,3,8,25,26,28,33,36,37],turn:[2,49],tutori:[37,38],tweak:[3,50],two:[8,10,19,25,28,29,30,31,32,36,38,41,42,51],txt:43,type:[0,3,10,17,25,28,31,36,37,40,42,48,49,50,51],typic:[7,11,25,49,51],ubuntu16:43,uhlenbeck:[8,9,29],uint8:31,unbound:36,uncertain:29,uncertainti:29,unchang:11,unclip:[3,37,50],uncorrel:19,undeploi:41,under:[3,25,37,51],underbrac:5,understand:51,unifi:7,uniformli:[28,29,32,36],union:[3,26,28,29,32,36,50],uniqu:25,unit:39,unlik:11,unmask:32,unnecessari:0,unshar:[3,50],unsign:31,unspecifi:25,unstabl:[39,45],until:[0,6,10,11,21,24,29],unus:25,unzip:43,updat:[3,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,29,37,38,39,40,42,43,49,50],update_discounted_reward:26,update_filter_internal_st:[3,50],update_log:[3,50],update_online_network:25,update_step_in_episode_log:[3,50],update_target_network:25,update_transition_before_adding_to_replay_buff:[3,50],upgrad:43,upon:[3,5,37,50],upper:[6,29],usag:[32,48],use:[0,1,2,3,4,5,6,8,9,10,12,13,15,16,20,25,26,27,28,29,31,32,33,36,37,38,40,42,43,48,49,50,51],use_accumulated_reward_as_measur:4,use_cpu:0,use_deterministic_for_evalu:12,use_full_action_spac:28,use_kl_regular:[7,11],use_non_zero_discount_for_terminal_st:8,use_separate_networks_per_head:25,use_target_network_for_evalu:8,use_trust_region_optim:6,used:[0,2,3,5,6,7,8,10,11,12,13,14,18,19,20,21,22,23,25,28,29,31,32,33,34,35,37,38,40,41,42,45,50,51],useful:[0,3,4,24,25,29,31,36,45,49,50,51],user:[25,28,29,39,40,43],userguid:43,uses:[0,1,7,11,17,26,27,29,35,40,41,43,45,49,51],using:[0,3,5,6,7,8,10,11,12,15,16,18,19,20,21,22,24,25,27,28,29,31,34,37,38,39,41,46,49,50,51],usr:43,usual:[31,40],util:[3,39,50],v_max:14,v_min:14,val:[3,36,50],valid:[0,36],valu:[0,2,3,4,5,6,7,8,11,12,13,14,15,16,17,19,20,21,22,24,25,26,28,29,31,32,33,36,37,40,42,43,44,49,50],valuabl:39,value_targets_mix_fract:[7,11],valueexcept:[3,50],valueoptimizationag:37,van:4,vari:42,variabl:[25,28,43],variable_scop:25,varianc:[10,29,39,49],variant:[29,33,49],variou:[3,26,33,48],vector:[3,4,8,9,11,13,25,28,31,36,38,42,49,50],vectorobservationspac:31,verbos:28,veri:[0,7,8,10,17,21,39,49,51],version:[7,11,26],versu:25,vert:12,vertic:25,via:[2,13],video:[0,3,28],video_dump_method:0,view:39,viewabl:[3,50],visit:45,visual:[0,3,28,46,48],visualization_paramet:28,visualizationparamet:[3,28],vizdoom:[43,46],vote:29,wai:[3,7,11,29,32,38,40,42,48,49,50,51],wait:[5,25,41],walk:38,want:[3,4,24,25,31,32,33,50],warn:[29,31,32],wasn:26,weather_id:28,websit:[28,48],weight:[4,5,6,7,8,11,12,13,14,15,16,18,19,20,21,22,23,24,25,29,40,42,49],well:[21,25,29,36,49],went:11,were:[4,14,15,16,17,21,23,24,25,26,32,45],west:43,wget:43,what:[11,49],whatev:[3,50],when:[0,3,4,5,6,7,8,9,10,11,12,21,25,26,27,28,29,31,34,35,37,38,39,50,51],whenev:41,where:[2,3,4,5,6,7,11,13,14,17,19,21,22,24,25,26,28,29,31,32,36,39,49,50],which:[0,1,2,3,5,6,7,8,10,11,12,13,17,19,20,21,22,23,25,26,27,28,29,31,33,34,35,36,37,38,39,40,41,42,44,45,46,48,49,50,51],who:40,why:[39,40],window:[31,32],wise:31,within:[0,7,11,20,29,36,39],without:[5,11,32,33,39,49,51],won:[4,25],wont:25,work:[3,19,25,29,31,32,39,40,49,50,51],workaround:0,workdir:43,worker:[0,19,25,27,31,33,34,35,39,41,42,43,49,51],worker_devic:25,worker_host:0,wors:49,would:[25,43,49],wrap:[28,31,40,46],wrapper:[3,25,26,28,36,42,50],write:[0,3,50],written:[3,24,27,50],www:43,xdist:43,y_t:[8,12,13,15,16,18,20,21,22],year:49,yet:[17,38],you:[4,31,33,37,38,43,48,51],your:[37,38,43,51],yuv:31,z_i:[14,24],z_j:[14,24],zero:[2,15,16],zip:43,zlib1g:43},titles:["Additional Parameters","Behavioral Cloning","Conditional Imitation Learning","Agents","Direct Future Prediction","Actor-Critic","ACER","Clipped Proximal Policy Optimization","Deep Deterministic Policy Gradient","Hierarchical Actor Critic","Policy Gradient","Proximal Policy Optimization","Soft Actor-Critic","Bootstrapped DQN","Categorical DQN","Double DQN","Deep Q Networks","Dueling DQN","Mixed Monte Carlo","N-Step Q Learning","Normalized Advantage Functions","Neural Episodic Control","Persistent Advantage Learning","Quantile Regression DQN","Rainbow","Architectures","Core Types","Data Stores","Environments","Exploration Policies","Filters","Input Filters","Output Filters","Memories","Memory Backends","Orchestrators","Spaces","Adding a New Agent","Adding a New Environment","Coach Dashboard","Control Flow","Distributed Coach - Horizontal Scale-Out","Network Design","Usage - Distributed Coach","Algorithms","Benchmarks","Environments","Features","Reinforcement Learning Coach","Selecting an Algorithm","test","Usage"],titleterms:{"final":21,"function":20,"new":[37,38],"switch":51,Adding:[37,38],Using:38,acer:6,across:49,action:[4,5,6,7,8,9,10,11,12,13,20,21,32,36,49],actioninfo:26,actor:[5,9,12],addit:[0,51],additivenois:29,advantag:[20,22],agent:[3,37,40,51],algorithm:[1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,44,49,51],api:38,architectur:25,attentionactionspac:36,backend:34,balancedexperiencereplai:33,batch:26,behavior:1,benchmark:45,between:51,blizzard:28,boltzmann:29,bootstrap:[13,29],boxactionspac:36,build:43,can:49,carla:28,carlo:18,categor:[14,29],choos:[4,5,6,7,8,9,10,11,12,13,20,21],clip:7,clone:[1,43],coach:[38,39,41,43,48],collect:49,compar:39,compoundactionspac:36,condit:2,config:43,contain:43,continu:[7,11,12,49],continuousentropi:29,control:[21,28,40],copi:42,core:26,creat:43,critic:[5,9,12],dashboard:39,data:27,deep:[8,16,51],deepmind:28,demonstr:49,descript:[1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],design:42,determinist:8,direct:4,discret:[5,6,10,49],discreteactionspac:36,distribut:[41,43],distributedtaskparamet:0,doe:49,doubl:15,dqn:[13,14,15,17,23],duel:17,dump:51,egreedi:29,environ:[28,38,46,49,51],envrespons:26,episod:[21,26,33],episodicexperiencereplai:33,episodichindsightexperiencereplai:33,episodichrlhindsightexperiencereplai:33,evalu:51,experiencereplai:33,explor:29,explorationpolici:29,featur:47,file:43,filter:[30,31,32],flag:51,flow:40,framework:51,from:49,futur:4,gener:17,gif:51,goal:36,gradient:[8,10],graph:40,greedi:29,gym:[28,38],have:49,hierarch:9,horizont:41,human:[49,51],imag:43,imageobservationspac:36,imit:[2,51],implement:43,input:31,interfac:43,keep:42,kubernet:35,learn:[2,19,22,48,51],level:40,manag:40,memori:[33,34],mix:18,mont:18,more:49,multi:51,multipl:49,multiselectactionspac:36,network:[1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,42],networkwrapp:25,neural:21,nfsdatastor:27,node:[49,51],non:33,normal:20,observ:[31,36],observationclippingfilt:31,observationcropfilt:31,observationmoveaxisfilt:31,observationnormalizationfilt:31,observationreductionbysubpartsnamefilt:31,observationrescalesizebyfactorfilt:31,observationrescaletosizefilt:31,observationrgbtoyfilt:31,observationsqueezefilt:31,observationstackingfilt:31,observationtouint8filt:31,openai:[28,38],optim:[7,11],orchestr:35,ouprocess:29,out:41,output:32,pain:49,parallel:49,paramet:0,parameternois:29,persist:22,plai:51,planarmapsobservationspac:36,polici:[7,8,10,11,29],predict:4,prerequisit:43,presetvalidationparamet:0,prioritizedexperiencereplai:33,process:49,proxim:[7,11],push:43,qdnd:33,quantil:23,rainbow:24,redispubsubbackend:34,regress:23,reinforc:48,render:51,repositori:43,reward:31,rewardclippingfilt:31,rewardnormalizationfilt:31,rewardrescalefilt:31,run:[39,43],s3datastor:27,sampl:49,scale:41,select:49,signal:39,simul:49,singl:51,singleepisodebuff:33,soft:12,solv:49,space:[36,49],starcraft:28,statist:39,step:19,store:[13,27],structur:[1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],suit:28,support:41,sync:42,synchron:41,task:49,taskparamet:0,test:50,thread:51,through:51,track:39,train:[1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,51],transit:[13,26],transitioncollect:33,truncatednorm:29,type:[26,41],ucb:29,usag:[43,51],vectorobservationspac:36,visual:[39,51],visualizationparamet:0,vizdoom:28,you:49,your:49}}) \ No newline at end of file +Search.setIndex({docnames:["components/additional_parameters","components/agents/imitation/bc","components/agents/imitation/cil","components/agents/index","components/agents/other/dfp","components/agents/policy_optimization/ac","components/agents/policy_optimization/acer","components/agents/policy_optimization/cppo","components/agents/policy_optimization/ddpg","components/agents/policy_optimization/hac","components/agents/policy_optimization/pg","components/agents/policy_optimization/ppo","components/agents/policy_optimization/sac","components/agents/policy_optimization/td3","components/agents/value_optimization/bs_dqn","components/agents/value_optimization/categorical_dqn","components/agents/value_optimization/double_dqn","components/agents/value_optimization/dqn","components/agents/value_optimization/dueling_dqn","components/agents/value_optimization/mmc","components/agents/value_optimization/n_step","components/agents/value_optimization/naf","components/agents/value_optimization/nec","components/agents/value_optimization/pal","components/agents/value_optimization/qr_dqn","components/agents/value_optimization/rainbow","components/architectures/index","components/core_types","components/data_stores/index","components/environments/index","components/exploration_policies/index","components/filters/index","components/filters/input_filters","components/filters/output_filters","components/memories/index","components/memory_backends/index","components/orchestrators/index","components/spaces","contributing/add_agent","contributing/add_env","dashboard","design/control_flow","design/horizontal_scaling","design/network","dist_usage","features/algorithms","features/benchmarks","features/environments","features/index","index","selecting_an_algorithm","test","usage"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.todo":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["components/additional_parameters.rst","components/agents/imitation/bc.rst","components/agents/imitation/cil.rst","components/agents/index.rst","components/agents/other/dfp.rst","components/agents/policy_optimization/ac.rst","components/agents/policy_optimization/acer.rst","components/agents/policy_optimization/cppo.rst","components/agents/policy_optimization/ddpg.rst","components/agents/policy_optimization/hac.rst","components/agents/policy_optimization/pg.rst","components/agents/policy_optimization/ppo.rst","components/agents/policy_optimization/sac.rst","components/agents/policy_optimization/td3.rst","components/agents/value_optimization/bs_dqn.rst","components/agents/value_optimization/categorical_dqn.rst","components/agents/value_optimization/double_dqn.rst","components/agents/value_optimization/dqn.rst","components/agents/value_optimization/dueling_dqn.rst","components/agents/value_optimization/mmc.rst","components/agents/value_optimization/n_step.rst","components/agents/value_optimization/naf.rst","components/agents/value_optimization/nec.rst","components/agents/value_optimization/pal.rst","components/agents/value_optimization/qr_dqn.rst","components/agents/value_optimization/rainbow.rst","components/architectures/index.rst","components/core_types.rst","components/data_stores/index.rst","components/environments/index.rst","components/exploration_policies/index.rst","components/filters/index.rst","components/filters/input_filters.rst","components/filters/output_filters.rst","components/memories/index.rst","components/memory_backends/index.rst","components/orchestrators/index.rst","components/spaces.rst","contributing/add_agent.rst","contributing/add_env.rst","dashboard.rst","design/control_flow.rst","design/horizontal_scaling.rst","design/network.rst","dist_usage.rst","features/algorithms.rst","features/benchmarks.rst","features/environments.rst","features/index.rst","index.rst","selecting_an_algorithm.rst","test.rst","usage.rst"],objects:{"rl_coach.agents.acer_agent":{ACERAlgorithmParameters:[6,0,1,""]},"rl_coach.agents.actor_critic_agent":{ActorCriticAlgorithmParameters:[5,0,1,""]},"rl_coach.agents.agent":{Agent:[3,0,1,""]},"rl_coach.agents.agent.Agent":{act:[3,1,1,""],call_memory:[3,1,1,""],choose_action:[3,1,1,""],collect_savers:[3,1,1,""],create_networks:[3,1,1,""],freeze_memory:[3,1,1,""],get_predictions:[3,1,1,""],get_state_embedding:[3,1,1,""],handle_episode_ended:[3,1,1,""],init_environment_dependent_modules:[3,1,1,""],initialize_session_dependent_components:[3,1,1,""],learn_from_batch:[3,1,1,""],load_memory_from_file:[3,1,1,""],log_to_screen:[3,1,1,""],observe:[3,1,1,""],parent:[3,1,1,""],phase:[3,1,1,""],post_training_commands:[3,1,1,""],prepare_batch_for_inference:[3,1,1,""],register_signal:[3,1,1,""],reset_evaluation_state:[3,1,1,""],reset_internal_state:[3,1,1,""],restore_checkpoint:[3,1,1,""],run_off_policy_evaluation:[3,1,1,""],run_pre_network_filter_for_inference:[3,1,1,""],save_checkpoint:[3,1,1,""],set_environment_parameters:[3,1,1,""],set_incoming_directive:[3,1,1,""],set_session:[3,1,1,""],setup_logger:[3,1,1,""],sync:[3,1,1,""],train:[3,1,1,""],update_log:[3,1,1,""],update_step_in_episode_log:[3,1,1,""],update_transition_before_adding_to_replay_buffer:[3,1,1,""]},"rl_coach.agents.bc_agent":{BCAlgorithmParameters:[1,0,1,""]},"rl_coach.agents.categorical_dqn_agent":{CategoricalDQNAlgorithmParameters:[15,0,1,""]},"rl_coach.agents.cil_agent":{CILAlgorithmParameters:[2,0,1,""]},"rl_coach.agents.clipped_ppo_agent":{ClippedPPOAlgorithmParameters:[7,0,1,""]},"rl_coach.agents.ddpg_agent":{DDPGAlgorithmParameters:[8,0,1,""]},"rl_coach.agents.dfp_agent":{DFPAlgorithmParameters:[4,0,1,""]},"rl_coach.agents.dqn_agent":{DQNAgent:[51,0,1,""],DQNAlgorithmParameters:[17,0,1,""]},"rl_coach.agents.dqn_agent.DQNAgent":{act:[51,1,1,""],call_memory:[51,1,1,""],choose_action:[51,1,1,""],collect_savers:[51,1,1,""],create_networks:[51,1,1,""],freeze_memory:[51,1,1,""],get_predictions:[51,1,1,""],get_state_embedding:[51,1,1,""],handle_episode_ended:[51,1,1,""],improve_reward_model:[51,1,1,""],init_environment_dependent_modules:[51,1,1,""],initialize_session_dependent_components:[51,1,1,""],learn_from_batch:[51,1,1,""],load_memory_from_file:[51,1,1,""],log_to_screen:[51,1,1,""],observe:[51,1,1,""],parent:[51,1,1,""],phase:[51,1,1,""],post_training_commands:[51,1,1,""],prepare_batch_for_inference:[51,1,1,""],register_signal:[51,1,1,""],reset_evaluation_state:[51,1,1,""],reset_internal_state:[51,1,1,""],restore_checkpoint:[51,1,1,""],run_off_policy_evaluation:[51,1,1,""],run_pre_network_filter_for_inference:[51,1,1,""],save_checkpoint:[51,1,1,""],set_environment_parameters:[51,1,1,""],set_incoming_directive:[51,1,1,""],set_session:[51,1,1,""],setup_logger:[51,1,1,""],sync:[51,1,1,""],train:[51,1,1,""],update_log:[51,1,1,""],update_step_in_episode_log:[51,1,1,""],update_transition_before_adding_to_replay_buffer:[51,1,1,""]},"rl_coach.agents.mmc_agent":{MixedMonteCarloAlgorithmParameters:[19,0,1,""]},"rl_coach.agents.n_step_q_agent":{NStepQAlgorithmParameters:[20,0,1,""]},"rl_coach.agents.naf_agent":{NAFAlgorithmParameters:[21,0,1,""]},"rl_coach.agents.nec_agent":{NECAlgorithmParameters:[22,0,1,""]},"rl_coach.agents.pal_agent":{PALAlgorithmParameters:[23,0,1,""]},"rl_coach.agents.policy_gradients_agent":{PolicyGradientAlgorithmParameters:[10,0,1,""]},"rl_coach.agents.ppo_agent":{PPOAlgorithmParameters:[11,0,1,""]},"rl_coach.agents.qr_dqn_agent":{QuantileRegressionDQNAlgorithmParameters:[24,0,1,""]},"rl_coach.agents.rainbow_dqn_agent":{RainbowDQNAlgorithmParameters:[25,0,1,""]},"rl_coach.agents.soft_actor_critic_agent":{SoftActorCriticAlgorithmParameters:[12,0,1,""]},"rl_coach.agents.td3_agent":{TD3AlgorithmParameters:[13,0,1,""]},"rl_coach.architectures.architecture":{Architecture:[26,0,1,""]},"rl_coach.architectures.architecture.Architecture":{accumulate_gradients:[26,1,1,""],apply_and_reset_gradients:[26,1,1,""],apply_gradients:[26,1,1,""],collect_savers:[26,1,1,""],construct:[26,1,1,""],get_variable_value:[26,1,1,""],get_weights:[26,1,1,""],parallel_predict:[26,1,1,""],predict:[26,1,1,""],reset_accumulated_gradients:[26,1,1,""],set_variable_value:[26,1,1,""],set_weights:[26,1,1,""],train_on_batch:[26,1,1,""]},"rl_coach.architectures.network_wrapper":{NetworkWrapper:[26,0,1,""]},"rl_coach.architectures.network_wrapper.NetworkWrapper":{apply_gradients_and_sync_networks:[26,1,1,""],apply_gradients_to_global_network:[26,1,1,""],apply_gradients_to_online_network:[26,1,1,""],collect_savers:[26,1,1,""],parallel_prediction:[26,1,1,""],set_is_training:[26,1,1,""],sync:[26,1,1,""],train_and_sync_networks:[26,1,1,""],update_online_network:[26,1,1,""],update_target_network:[26,1,1,""]},"rl_coach.base_parameters":{AgentParameters:[3,0,1,""],DistributedTaskParameters:[0,0,1,""],NetworkParameters:[26,0,1,""],PresetValidationParameters:[0,0,1,""],TaskParameters:[0,0,1,""],VisualizationParameters:[0,0,1,""]},"rl_coach.core_types":{ActionInfo:[27,0,1,""],Batch:[27,0,1,""],EnvResponse:[27,0,1,""],Episode:[27,0,1,""],Transition:[27,0,1,""]},"rl_coach.core_types.Batch":{actions:[27,1,1,""],game_overs:[27,1,1,""],goals:[27,1,1,""],info:[27,1,1,""],info_as_list:[27,1,1,""],n_step_discounted_rewards:[27,1,1,""],next_states:[27,1,1,""],rewards:[27,1,1,""],shuffle:[27,1,1,""],size:[27,1,1,""],slice:[27,1,1,""],states:[27,1,1,""]},"rl_coach.core_types.Episode":{get_first_transition:[27,1,1,""],get_last_transition:[27,1,1,""],get_transition:[27,1,1,""],get_transitions_attribute:[27,1,1,""],insert:[27,1,1,""],is_empty:[27,1,1,""],length:[27,1,1,""],update_discounted_rewards:[27,1,1,""]},"rl_coach.data_stores.nfs_data_store":{NFSDataStore:[28,0,1,""]},"rl_coach.data_stores.s3_data_store":{S3DataStore:[28,0,1,""]},"rl_coach.environments.carla_environment":{CarlaEnvironment:[29,0,1,""]},"rl_coach.environments.control_suite_environment":{ControlSuiteEnvironment:[29,0,1,""]},"rl_coach.environments.doom_environment":{DoomEnvironment:[29,0,1,""]},"rl_coach.environments.environment":{Environment:[29,0,1,""]},"rl_coach.environments.environment.Environment":{action_space:[29,1,1,""],close:[29,1,1,""],get_action_from_user:[29,1,1,""],get_available_keys:[29,1,1,""],get_goal:[29,1,1,""],get_random_action:[29,1,1,""],get_rendered_image:[29,1,1,""],goal_space:[29,1,1,""],handle_episode_ended:[29,1,1,""],last_env_response:[29,1,1,""],phase:[29,1,1,""],render:[29,1,1,""],reset_internal_state:[29,1,1,""],set_goal:[29,1,1,""],state_space:[29,1,1,""],step:[29,1,1,""]},"rl_coach.environments.gym_environment":{GymEnvironment:[29,0,1,""]},"rl_coach.environments.starcraft2_environment":{StarCraft2Environment:[29,0,1,""]},"rl_coach.exploration_policies.additive_noise":{AdditiveNoise:[30,0,1,""]},"rl_coach.exploration_policies.boltzmann":{Boltzmann:[30,0,1,""]},"rl_coach.exploration_policies.bootstrapped":{Bootstrapped:[30,0,1,""]},"rl_coach.exploration_policies.categorical":{Categorical:[30,0,1,""]},"rl_coach.exploration_policies.continuous_entropy":{ContinuousEntropy:[30,0,1,""]},"rl_coach.exploration_policies.e_greedy":{EGreedy:[30,0,1,""]},"rl_coach.exploration_policies.exploration_policy":{ExplorationPolicy:[30,0,1,""]},"rl_coach.exploration_policies.exploration_policy.ExplorationPolicy":{change_phase:[30,1,1,""],get_action:[30,1,1,""],requires_action_values:[30,1,1,""],reset:[30,1,1,""]},"rl_coach.exploration_policies.greedy":{Greedy:[30,0,1,""]},"rl_coach.exploration_policies.ou_process":{OUProcess:[30,0,1,""]},"rl_coach.exploration_policies.parameter_noise":{ParameterNoise:[30,0,1,""]},"rl_coach.exploration_policies.truncated_normal":{TruncatedNormal:[30,0,1,""]},"rl_coach.exploration_policies.ucb":{UCB:[30,0,1,""]},"rl_coach.filters.action":{AttentionDiscretization:[33,0,1,""],BoxDiscretization:[33,0,1,""],BoxMasking:[33,0,1,""],FullDiscreteActionSpaceMap:[33,0,1,""],LinearBoxToBoxMap:[33,0,1,""],PartialDiscreteActionSpaceMap:[33,0,1,""]},"rl_coach.filters.observation":{ObservationClippingFilter:[32,0,1,""],ObservationCropFilter:[32,0,1,""],ObservationMoveAxisFilter:[32,0,1,""],ObservationNormalizationFilter:[32,0,1,""],ObservationRGBToYFilter:[32,0,1,""],ObservationReductionBySubPartsNameFilter:[32,0,1,""],ObservationRescaleSizeByFactorFilter:[32,0,1,""],ObservationRescaleToSizeFilter:[32,0,1,""],ObservationSqueezeFilter:[32,0,1,""],ObservationStackingFilter:[32,0,1,""],ObservationToUInt8Filter:[32,0,1,""]},"rl_coach.filters.reward":{RewardClippingFilter:[32,0,1,""],RewardNormalizationFilter:[32,0,1,""],RewardRescaleFilter:[32,0,1,""]},"rl_coach.memories.backend.redis":{RedisPubSubBackend:[35,0,1,""]},"rl_coach.memories.episodic":{EpisodicExperienceReplay:[34,0,1,""],EpisodicHRLHindsightExperienceReplay:[34,0,1,""],EpisodicHindsightExperienceReplay:[34,0,1,""],SingleEpisodeBuffer:[34,0,1,""]},"rl_coach.memories.non_episodic":{BalancedExperienceReplay:[34,0,1,""],ExperienceReplay:[34,0,1,""],PrioritizedExperienceReplay:[34,0,1,""],QDND:[34,0,1,""],TransitionCollection:[34,0,1,""]},"rl_coach.orchestrators.kubernetes_orchestrator":{Kubernetes:[36,0,1,""]},"rl_coach.spaces":{ActionSpace:[37,0,1,""],AttentionActionSpace:[37,0,1,""],BoxActionSpace:[37,0,1,""],CompoundActionSpace:[37,0,1,""],DiscreteActionSpace:[37,0,1,""],GoalsSpace:[37,0,1,""],ImageObservationSpace:[37,0,1,""],MultiSelectActionSpace:[37,0,1,""],ObservationSpace:[37,0,1,""],PlanarMapsObservationSpace:[37,0,1,""],Space:[37,0,1,""],VectorObservationSpace:[37,0,1,""]},"rl_coach.spaces.ActionSpace":{clip_action_to_space:[37,1,1,""],contains:[37,1,1,""],is_valid_index:[37,1,1,""],sample:[37,1,1,""],sample_with_info:[37,1,1,""]},"rl_coach.spaces.GoalsSpace":{DistanceMetric:[37,0,1,""],clip_action_to_space:[37,1,1,""],contains:[37,1,1,""],distance_from_goal:[37,1,1,""],get_reward_for_goal_and_state:[37,1,1,""],goal_from_state:[37,1,1,""],is_valid_index:[37,1,1,""],sample:[37,1,1,""],sample_with_info:[37,1,1,""]},"rl_coach.spaces.ObservationSpace":{contains:[37,1,1,""],is_valid_index:[37,1,1,""],sample:[37,1,1,""]},"rl_coach.spaces.Space":{contains:[37,1,1,""],is_valid_index:[37,1,1,""],sample:[37,1,1,""]}},objnames:{"0":["py","class","Python class"],"1":["py","method","Python method"]},objtypes:{"0":"py:class","1":"py:method"},terms:{"100x100":33,"160x160":32,"1_0":[15,25],"1st":30,"20x20":33,"210x160":32,"2nd":30,"50k":41,"9_amd64":44,"abstract":[38,42],"boolean":[3,27,37,51],"break":40,"case":[0,3,5,22,26,27,30,37,50,51,52],"class":[0,1,2,3,4,5,6,7,8,10,11,12,13,15,17,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,38,39,41,45,51],"default":[0,30,52],"enum":[26,29,37],"export":[0,26,44],"final":[8,13,16,17,19,23,41],"float":[3,4,5,6,7,8,10,11,12,13,15,19,22,23,24,26,27,29,30,32,33,34,37,38,51],"function":[0,1,3,6,7,8,11,13,26,29,30,37,38,39,41,43,51],"import":[6,18,30,34,39,50,52],"int":[0,3,4,5,6,7,10,15,20,22,24,25,27,29,30,32,33,34,37,51],"long":43,"new":[0,3,7,8,11,12,13,22,23,26,27,33,41,42,49,50,51],"return":[0,3,8,10,11,13,14,19,22,23,25,26,27,29,30,32,34,37,38,39,41,50,51],"short":[0,41],"static":26,"super":[38,39],"switch":[0,40],"true":[0,3,4,5,6,7,8,11,12,13,22,23,25,26,27,29,30,33,34,37,51],"try":[4,46,50],"while":[0,5,6,8,9,10,11,12,13,26,29,40,43,50,52],AWS:44,Adding:[18,49],And:[39,50],But:[40,50],Doing:50,For:[0,1,2,3,4,7,10,14,15,16,17,20,22,23,26,27,29,30,31,32,33,37,38,39,41,42,43,44,46,51,52],Has:26,Its:51,NFS:[28,44],One:[24,50,52],That:40,The:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,38,40,41,42,43,44,46,47,49,50,51,52],Then:[4,7,8,13,14,21,23],There:[7,11,26,30,31,38,39,43,52],These:[1,2,3,24,29,36,42,43,44],Use:[1,2,8,13,21,22],Used:30,Uses:50,Using:[8,13,14,16,17,44],Will:26,With:[30,49],__init__:[29,38,39],_index:[5,20],_nois:13,_render:39,_restart_environment_episod:39,_take_act:39,_update_st:39,a2c:50,a3c:[10,20,40,50],a_i:22,a_t:[4,5,6,8,12,13,14,15,16,17,19,20,21,23,25],a_valu:5,abl:[33,50],about:[3,27,41,51,52],abov:[8,12,13,26,41],abs:[20,34],absolut:30,acceler:21,accept:29,access:[26,38,44],accord:[0,3,4,5,6,8,12,13,14,20,26,27,30,37,40,41,43,51],accordingli:[22,37,41,52],account:[4,7,11,22,23,30],accumul:[3,4,5,6,10,20,22,25,26,32,50,51],accumulate_gradi:26,accumulated_gradi:26,accur:50,acer:[3,50],acer_ag:6,aceralgorithmparamet:6,achiev:[0,4,7,29,32,34,37,46,50,52],acquir:12,across:[10,19,40],act:[3,4,8,13,14,24,37,38,41,51],action:[1,2,3,15,16,17,18,19,20,23,24,25,26,27,29,30,31,34,38,39,41,43,51],action_idx:39,action_penalti:[8,13],action_spac:[29,30],action_space_s:26,action_valu:[27,30],actioninfo:[3,37,41,51],actionspac:[30,37],actiontyp:39,activ:[8,13,26],actor:[3,6,7,8,11,13,30,43,50],actor_critic_ag:5,actorcriticag:38,actorcriticalgorithmparamet:5,actual:[4,5,15,16,17,24,25,30,33,34],adam:[7,26],adam_optimizer_beta1:26,adam_optimizer_beta2:26,adapt:[7,11],add:[8,9,13,21,27,30,32,39,41,44,50],add_rendered_image_to_env_respons:0,added:[0,4,6,7,10,11,22,30,34,38],adding:[3,11,30,38,51],addit:[3,26,27,29,30,32,34,37,39,40,41,43,49,50,51],addition:[26,29,32,38,39,41,46,47,52],additional_fetch:26,additional_simulator_paramet:[29,39],additionali:40,additive_nois:30,additivenoiseparamet:30,address:13,advanc:[25,49],advantag:[3,5,7,11,18,30],affect:[0,14,26],aforement:[16,17,23],after:[0,3,8,10,11,12,20,21,23,25,26,27,29,32,37,51,52],again:30,against:3,agent:[0,1,2,4,5,6,7,8,10,11,12,13,15,17,19,20,21,22,23,24,25,26,27,29,30,31,32,33,37,39,40,43,45,46,49,50,51],agent_param:42,agent_paramet:[3,26,51],agentparamet:[3,26,38],aggreg:41,ahead:[4,50],aim:30,algorithm:[3,27,30,38,40,41,42,46,48,49,51],algorithmparamet:[3,38],all:[0,3,10,14,22,23,26,27,29,30,32,33,37,38,39,40,41,42,43,44,47,51,52],all_action_prob:27,allow:[0,3,4,13,18,26,27,29,30,31,32,33,34,40,41,42,43,49,50,51,52],allow_brak:29,allow_duplicates_in_batch_sampl:34,allow_no_action_to_be_select:37,along:[22,29,30,47],alpha:[6,19,23,34],alreadi:[22,27,39,50],also:[5,6,7,22,23,26,29,37,38,40,46,50,52],altern:[29,39,47],alwai:[26,30,33],amazon:44,amazonaw:44,amount:[8,10,13,19,23,30,41,50],analysi:40,analyz:40,ani:[3,26,27,29,33,34,38,41,42,43,44,51],anoth:[3,18,26,31,51],answer:50,anymor:[3,51],api:[29,43,47,49],appear:[3,51],appli:[0,3,5,8,10,13,20,26,27,30,32,50,51],applic:50,apply_and_reset_gradi:26,apply_gradi:26,apply_gradients_and_sync_network:26,apply_gradients_every_x_episod:[5,10,20],apply_gradients_to_global_network:26,apply_gradients_to_online_network:26,apply_stop_condit:0,appropri:44,approx:[8,12,13],approxim:[12,13,43,50],apt:44,arbitrari:32,architectur:[3,18,38,49,51],architecture_num_q_head:30,area:33,arg:[3,26,44,51],argmax_a:[16,19,23],argument:[3,15,25,26,29,37,41,51],around:[26,27,43],arrai:[3,26,27,29,32,37,39,51],art:[3,45],artifact:44,artifici:34,arxiv:[20,34],aspect:[30,32,40],assign:[0,2,5,6,26,30],assign_kl_coeffici:26,assign_op:26,assum:[27,30,32,34,50],async:[26,42],async_train:26,asynchron:[5,20,26],atari:[17,29,32,44,52],atari_a3c:52,atari_dqn:52,ath:18,atom:[15,24,25],attach:29,attempt:0,attend:33,attent:33,attentionactionspac:33,attentiondiscret:33,attribut:27,attribute_nam:27,author:[29,46,47],auto_select_all_armi:29,autoclean:44,automat:[26,52],autonom:[29,47,49],autoremov:44,auxiliari:[29,47],avail:[4,26,27,29,30,40,42,44,49,50,52],averag:[6,7,11,26,40,41],avg:6,aws:44,axes:[32,40],axi:[32,40],axis_origin:32,axis_target:32,back:[7,42],backend:[26,42,44,49,52],background:52,backpropag:22,backward:26,balanc:2,band:40,bar:6,base1:44,base64:44,base:[7,11,12,19,21,23,29,34,38,41,44,47,50,51],base_paramet:[0,3,26,29,30],baselin:50,basic:[10,27,42,52],batch:[1,2,3,4,5,6,8,10,11,12,13,14,15,16,17,18,20,23,24,25,26,34,38,41,51],batch_siz:26,bc_agent:1,bcalgorithmparamet:1,becaus:41,becom:[8,13,42],been:[18,27,32,46,50],befor:[0,3,5,11,13,25,26,27,32,41,42,43,44,50,51],begin:[0,4,41],behav:37,behavior:[3,32,34,38,46,50,51,52],being:[3,38,49,50,51],bellman:[15,24,25],benchmark:[40,48,49,50],best:[50,52],beta1:26,beta2:26,beta:[6,8,10,13,34],beta_entropi:[5,6,7,10,11],better:[13,18,50],between:[0,1,2,3,6,7,8,10,11,12,13,15,19,20,22,24,25,26,27,29,30,33,34,37,38,40,41,43,49,50],bfg:[7,11],bia:[6,50],big:[11,15,25],bin:[33,44],binari:14,bind:26,binomi:14,bit:32,blizzard:47,blob:[29,32],block:49,blog:49,boilerpl:41,bolling:40,bool:[0,3,4,5,6,7,8,11,12,13,22,23,25,26,27,29,30,34,37,51],boost:[44,50],bootstrap:[3,5,6,7,8,11,13,19,20,22,23,25,27,50],bootstrap_total_return_from_old_polici:[22,27],both:[3,7,26,29,30,33,50,51],bound:[6,7,11,15,25,30,37,50],box2d:44,box:[30,33,37],boxactionspac:33,boxdiscret:33,boxmask:33,breakout:52,breakoutdeterminist:[29,52],bring:11,bucket:44,buffer:[1,2,3,6,12,14,15,16,17,20,22,23,24,25,34,41,50,51,52],build:[31,49,50],builder:44,built:[38,41],bullet:6,button:[40,52],c51:15,cach:44,cadenc:13,calcul:[3,4,5,6,7,8,10,11,13,14,15,16,17,19,20,22,23,24,25,26,27,30,34,38,51],call:[0,3,10,20,26,27,29,41,51],call_memori:[3,51],callabl:37,camera:[29,39],camera_height:29,camera_width:29,cameratyp:[29,39],can:[0,2,3,5,6,7,8,11,12,13,23,26,27,29,30,31,32,33,37,38,39,40,41,43,47,49,51,52],cannot:[3,51],carla:[32,47],carla_environ:29,carlaenviron:29,carlaenvironmentparamet:29,carlo:[3,23],cartpol:[29,39],cartpole_a3c:52,cartpole_clippedppo:[44,52],cartpole_dqn:52,categor:[3,5,6,50],categori:[31,32],categorical_dqn_ag:15,categoricaldqnalgorithmparamet:15,caus:[32,40],cdot:[5,7,8,10,12,13,14,15,16,17,19,21,23,25],central:[26,40],certainti:30,chain:[8,13],challeng:41,chang:[0,3,6,7,8,11,13,14,18,20,23,30,41,44,51],change_phas:30,channel:[29,32],channels_axi:37,check:[0,3,27,37,51],checkpoint:[0,3,26,28,42,44,51,52],checkpoint_dir:[3,51],checkpoint_prefix:[3,51],checkpoint_restore_dir:[0,52],checkpoint_restore_path:0,checkpoint_save_dir:0,checkpoint_save_sec:0,child:26,chmod:44,choic:[38,44],choos:[3,18,23,30,31,33,37,38,41,43,50,51,52],choose_act:[3,38,41,51],chosen:[3,12,23,30,33,38,51],chunk:11,cil:50,cil_ag:2,cilalgorithmparamet:2,classic_control:44,clean:[29,38,44],cli:44,clip:[3,6,8,11,13,26,32,37,50],clip_action_to_spac:37,clip_critic_target:[8,13],clip_gradi:26,clip_high:30,clip_likelihood_ratio_using_epsilon:[7,11],clip_low:30,clip_max:32,clip_min:32,clipbyglobalnorm:26,clipped_ppo_ag:7,clippedppoalgorithmparamet:7,clipping_high:32,clipping_low:32,clone:[3,50],close:29,cmake:44,coach:[0,3,26,28,29,30,31,35,36,38,41,45,46,47,50,52],code:[39,41,50],coeffici:[7,11,26,30,34],collect:[3,7,10,11,20,26,27,34,41,46,49,51,52],collect_sav:[3,26,51],color:32,com:44,combin:[25,43,49,50],comma:0,command:[41,44,52],common:[38,40,44,52],commun:42,compar:[0,11,18,50],complet:[27,30,41],complex:[26,31,41,43,50,52],compon:[3,15,25,26,30,36,38,41,49,51,52],composit:[3,51],compositeag:[3,51],comput:[26,30],concat:26,concentr:41,condit:[0,3],confid:30,config:[29,52],configur:[3,5,10,38,44,51],confus:41,connect:[12,26],connectionist:10,consecut:[8,13,22],consequ:[20,30],consid:[5,6,30,33,40],consist:[8,13,29,32,33,37,41,47],constant:6,constantli:52,constantschedul:34,constrain:33,construct:[12,26,34],consumpt:32,contain:[0,1,2,3,14,26,27,29,37,39,41,51,52],content:44,contin:42,continu:[1,2,5,8,9,10,13,21,30,31,33,37,46],continuous_entropi:30,continuous_exploration_policy_paramet:30,contribut:[4,49],control:[2,3,5,6,7,8,11,26,30,32,40,47,49,50,51],control_suite_environ:29,controlsuiteenviron:29,conveni:[40,52],converg:10,convers:31,convert:[3,27,30,32,37,41,43,51],convolut:[26,43],coordin:33,copi:[8,12,13,14,15,16,17,19,20,21,23,24,25,26,44],core:[3,49,51],core_typ:[3,27,29,37,51,52],correct:[3,6,50],correctli:26,correl:30,correpond:27,correspond:[2,3,4,15,16,26,27,30,32,37,39,51],could:[3,26,37,44,51],count:19,countabl:33,counter:[3,51],counterpart:43,cpu:[0,26],crd:52,creat:[3,20,26,32,39,51,52],create_network:[3,51],create_target_network:26,creation:[3,51],credenti:44,critic:[3,6,7,8,11,13,30,43,50],crop:[32,33],crop_high:32,crop_low:32,cross:[1,15,25],csv:0,ctrl:40,cuda:44,cudnn7:44,curl:44,curr_stat:[3,38,51],current:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,16,17,19,21,22,23,24,26,27,29,30,32,33,37,38,41,49,50,51],custom:[29,30,37,38,41],custom_reward_threshold:29,cycl:41,dai:52,dashboard:[0,3,44,49,51],data:[0,3,10,20,26,34,41,42,44,46,49,50,51,52],data_stor:[28,44],dataset:[3,7,11,50,51,52],date:[22,43,50,52],dcp:[44,52],ddpg:50,ddpg_agent:8,ddpgalgorithmparamet:8,ddqn:[19,23,50],deal:50,debug:[0,40,49],decai:[5,7,11,26],decid:[0,3,4,29,30,38,51],decis:[3,51],declar:0,decod:44,dedic:26,deep:[0,3,5,12,14,16,18,20,21,25,51],deepmind:47,def:[38,39],default_act:37,default_input_filt:39,default_output_filt:39,defin:[0,3,5,6,7,10,11,12,20,22,23,26,27,29,30,32,33,34,37,38,39,41,42,43,46,47,51,52],definit:[3,26,29,37,39,41,51],delai:[3,50],delta:[6,15,22,25],demonstr:[1,2,52],dens:30,densiti:19,depecr:0,depend:[0,3,6,26,32,34,37,39,44,46,50,51],deploi:[36,42],depth:29,descend:50,describ:[3,15,24,32,34,38,41,44,51],descript:[3,33,37,45,52],design:[41,44,49],desir:[33,38],destabil:10,detail:[3,27,45,47,49,52],determin:[2,3,22,27,34,51],determinist:[3,12,50],dev:44,develop:[41,46],deviat:[10,11,30,32,40],devic:26,dfp:50,dfp_agent:4,dfpalgorithmparamet:4,dict:[3,4,26,27,29,30,37,51],dict_siz:34,dictat:4,dictionari:[2,3,26,27,29,34,37,38,51],did:29,differ:[0,1,2,3,4,5,6,7,10,11,14,18,26,29,30,32,37,38,39,40,42,43,49,50,51],differenti:18,difficult:[40,46],difficulti:52,dimens:[27,29,32,33],dimension:[11,33],dir:[0,3,51,52],direct:[3,29,51],directli:[3,5,41,43,51],directori:[0,26,38,40,44,52],disabl:52,disable_fog:29,disappear:29,disassembl:50,discard:[27,32],discount:[8,10,11,13,19,22,23,25,26,27,50],discret:[1,2,4,7,11,14,15,16,17,18,19,20,22,23,24,25,30,31,32,33,37,41],disentangl:41,disk:0,displai:[0,40],distanc:37,distance_from_go:37,distance_metr:37,distancemetr:37,distil:[3,51],distribut:[5,6,10,11,12,15,24,25,26,28,30,35,36,37,43,49,50,52],distributed_coach:42,distributed_coach_synchronization_typ:42,distributedcoachsynchronizationtyp:42,divereg:[7,11],diverg:[6,7,11,25],dnd:[0,22,50],dnd_key_error_threshold:22,dnd_size:22,do_action_hindsight:34,doc:44,docker:44,dockerfil:44,document:47,doe:[14,26,32],doesn:42,doing:[7,11,31],domain:43,don:[4,30,40,50],done:[0,3,7,10,11,13,29,32,39,51,52],doom:[29,39,44,47],doom_basic_bc:52,doom_basic_dqn:52,doom_environ:[29,39,52],doomenviron:[29,39],doomenvironmentparamet:[39,52],doominputfilt:39,doomlevel:29,doomoutputfilt:39,doubl:[3,19,25],doubli:51,down:[26,29,50],download:44,dpkg:44,dqn:[3,19,20,25,29,30,32,33,41,43,50],dqn_agent:[17,51],dqnagent:51,dqnalgorithmparamet:17,drive:[2,29,47,49],driving_benchmark:29,due:32,duel:[3,25],dump:[0,3,51],dump_csv:0,dump_gif:0,dump_in_episode_sign:0,dump_mp4:0,dump_one_value_per_episod:[3,51],dump_one_value_per_step:[3,51],dump_parameters_document:0,dump_signals_to_csv_every_x_episod:0,dure:[3,6,7,10,11,12,14,22,30,40,41,51,52],dynam:[40,46,50],e_greedi:30,each:[0,1,2,3,4,5,6,7,10,11,12,14,16,17,18,20,22,23,24,26,27,29,30,31,32,33,34,37,38,40,41,42,43,44,46,50,51],eas:40,easi:[39,40,49],easier:43,easili:[30,52],echo:44,effect:[0,3,6,7,20,32,41,51],effici:[6,41,50],either:[0,3,5,20,26,30,37,40,43,52],element:[3,14,26,32,37],elf:44,embbed:26,embed:[3,22,26,51],embedd:[26,43],embedding_merger_typ:26,embeddingmergertyp:26,emploi:50,empti:27,emul:6,enabl:[26,43,52],encod:[32,37],encourag:[21,23,41],end:[2,3,10,25,27,29,32,51,52],enforc:33,engin:[29,47],enough:[4,6,22],ensembl:[30,50],ensur:[6,26],enter:[3,51,52],entir:[11,19,22,25,30,33,41],entri:[22,41],entropi:[1,5,6,7,10,11,12,15,25,30,50],enumer:37,env:[27,44],env_param:39,env_respons:[3,51],enviorn:29,environ:[0,3,4,6,18,26,27,30,31,32,33,37,38,41,44,46,48,49,51],environmentparamet:[29,39],envrespons:[0,3,29,51],episod:[0,3,4,5,10,11,14,19,20,25,29,30,38,39,40,41,42,51,52],episode_max_tim:29,episodic_hindsight_experience_replai:34,epoch:[7,51],epsilon:[7,30,34],epsilon_schedul:30,equal:2,equat:[8,12,13,16,17,20,24],error:[13,26,50],escap:52,especi:18,essenti:[20,26,33,39,41,44],estim:[3,5,7,11,14,19,23,30,51],estimate_state_value_using_ga:[5,7,11],eta:[7,11],etc:[0,3,26,29,31,37,38,47,51],evalu:[0,3,12,26,27,30,41,51],evaluate_onli:0,evaluation_epsilon:30,evaluation_nois:30,even:[18,26,29,39,40,41,50],everi:[0,5,6,8,10,12,13,14,15,16,17,19,20,21,23,24,25,52],exact:[22,30,46],exactli:26,exampl:[2,3,4,26,27,29,30,31,32,33,37,38,39,41,43,51,52],except:[20,27],execut:[27,40,41],exercis:13,exhibit:[3,38,51],exist:[22,26],exit:[3,51],expand_dim:27,expect:[0,3,30,46,51],experi:[0,6,8,11,12,13,25,29,34,35,40,41,42,44,49,50,52],experiment_path:[0,29],experiment_suit:29,experimentsuit:29,expert:[1,2,27,50],exploit:[30,41],explor:[3,4,5,6,7,8,9,11,13,14,19,21,22,38,41,49,50],exploration_polici:30,explorationparamet:[3,30,38],exponenti:[6,7,11,25,26],expor:3,export_onnx_graph:0,expos:[40,43,49],extend:[29,30,47],extens:[29,47],extent:52,extern:0,extra:[3,26,27,43,51],extract:[3,21,22,27,32,37,40,41,51],factor:[8,10,11,13,23,25,26,27,30,32],failur:0,faithfulli:40,fake:37,fals:[0,3,8,13,26,27,29,30,33,34,37,39,51],far:[11,32,41,46],faster:[18,50],featur:[8,13,29,43,49,50],feature_minimap_maps_to_us:29,feature_screen_maps_to_us:29,fetch:[26,27],fetched_tensor:26,few:[10,14,15,16,17,19,23,24,25,30,39],field:[46,49],file:[0,3,38,41,51,52],fill:[27,39],filter:[0,3,49,51],find:[16,40,47,49],finish:[22,52],finit:33,first:[0,8,11,13,14,22,24,25,26,27,32,41,43],fit:[13,37],flag:[0,3,26,27,29,51],flexibl:42,flicker:29,flow:[31,49],follow:[2,3,5,6,8,10,12,13,15,16,17,20,21,22,24,25,26,27,29,30,34,38,39,44,46,50,51],footprint:32,forc:[26,29,33,39],force_cpu:26,force_environment_reset:[29,39],force_int_bin:33,forced_attention_s:37,form:[4,20,37,50],format:38,formul:[5,6],forward:[26,30],found:[3,45,52],frac:[6,7,12,15,25],fraction:[7,11],frame:[0,29],frame_skip:29,framework:[0,3,26,38,49,51],framework_typ:0,free:[29,47],freeglut3:44,freez:[3,51],freeze_memori:[3,51],frequenc:13,from:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,29,30,31,32,33,35,37,38,39,40,41,42,43,44,46,47,49,51,52],full:[3,10,19,33,51],fulldiscreteactionspacemap:33,fulli:26,func:[3,51],futur:[0,3,10,27,50],future_measurements_weight:4,gae:[5,7,11],gae_lambda:[5,7,11],game:[3,27,29,47,49,51,52],game_ov:27,gamma:[5,6,8,12,13,14,15,16,17,19,20,21,22,23,25],gap:[23,50],gather:42,gaussian:[11,12,13,30],gener:[0,5,7,11,14,26,29,30,34,37,38,44,52],general_network:38,get:[3,4,7,8,9,10,11,13,14,16,17,19,21,23,26,27,29,30,37,41,43,44,46,51],get_act:30,get_action_from_us:29,get_available_kei:29,get_first_transit:27,get_goal:29,get_last_env_respons:29,get_last_transit:27,get_output_head:38,get_predict:[3,51],get_random_act:29,get_rendered_imag:[29,39],get_reward_for_goal_and_st:37,get_state_embed:[3,51],get_transit:27,get_transitions_attribut:27,get_variable_valu:26,get_weight:26,gfortran:44,gif:0,git:44,github:[39,44,46,49],given:[0,1,2,3,4,5,8,10,11,13,26,27,29,30,32,33,34,37,38,41,51],given_weight:26,global:[3,26,43,51],global_network:26,glx:44,goal:[1,2,3,4,6,26,27,29,34,41,43,50,51],goal_from_st:37,goal_nam:37,goal_spac:29,goal_vector:4,goals_spac:34,goalsspac:[34,37],goaltorewardconvers:37,going:31,good:[39,40],gpu:[0,26],gracefulli:52,gradient:[3,5,6,7,11,20,22,26,38,50,51],gradientclippingmethod:26,gradients_clipping_method:26,granular:34,graph:0,graphmanag:41,grayscal:[32,37],greedili:41,group:40,grow:25,guidelin:50,gym:[44,47],gym_environ:[29,52],gymenviron:29,gymenvironmentparamet:39,hac:50,had:46,hand:[18,32,41,50],handl:4,handle_episode_end:[3,29,51],handling_targets_after_episode_end:4,handlingtargetsafterepisodeend:4,hard:[40,50],harder:40,has:[0,3,18,22,23,27,30,32,41,43,46,50,51],has_glob:26,has_target:26,hat:[6,7,15,25],have:[0,3,4,6,26,29,30,32,33,34,41,43,46,51],head:[1,2,3,5,6,10,14,18,21,22,26,30,38,43,51],headparamet:26,heads_paramet:26,health_gath:29,heat:6,heatup:[30,41],help:[23,27,40,41,50],here:[39,41],heurist:[11,30],hide:43,hierarch:[37,41],hierarchi:[3,41,50,51],high:[8,11,13,32,33,37,40],high_i:37,high_kl_penalty_coeffici:11,high_x:37,higher:11,highest:[5,6,10,23,30,32,33,37],highli:[0,39,50],hindsight:[9,34,50],hindsight_goal_selection_method:34,hindsight_transitions_per_regular_transit:34,hindsightgoalselectionmethod:34,hold:[14,26,27,34,40,41,43],horizont:[44,49,52],host:44,hostnam:0,hot:37,how:[4,7,11,30,42,44,50,52],hrl:34,html:44,http:[20,34,44],hub:44,huber:24,huber_loss_interv:24,human:[0,29],human_control:29,hyper:[38,46],hyperparamet:38,ident:26,identifi:[26,37],ies:51,ignor:29,imag:[0,26,29,32,33,37,39,43,52],image1:44,imit:[3,27,45,50],impact:26,implement:[3,7,11,26,28,29,30,34,38,39,42,46,50,52],impli:52,implment:36,importance_weight:26,importance_weight_trunc:6,importantli:41,improv:[5,18,25,29,41,50],improve_reward_model:51,includ:[0,3,4,29,31,32,36,43,47,51,52],increas:[11,23,32,50],increment:[3,51],index:[0,2,27,29,32,33,34,37],indic:37,inf:[32,37],infer:[3,26,29,51],infinit:[0,50],info:[3,14,27,37,39,51],info_as_list:27,inform:[3,4,20,27,29,31,40,41,44,47,51],inherit:[3,38,39],init_environment_dependent_modul:[3,51],initi:[3,4,11,23,26,27,38,41,49,51],initial_feed_dict:26,initial_kl_coeffici:11,initialize_session_dependent_compon:[3,51],innov:50,input:[1,2,3,4,8,13,14,16,17,19,21,22,23,26,31,37,41,43,51],input_embedders_paramet:26,input_high:32,input_low:32,input_space_high:33,input_space_low:33,inputembedderparamet:26,inputfilt:41,insert:[22,27],inspect:0,instal:[44,52],instanc:[3,35,37,43],instanti:[3,29,41],instead:[0,3,7,20,23,26,32,33,41,50,51],instruct:52,intact:[14,46],integ:[0,32,33],integr:[39,41,42,49],intel:49,intend:[10,26,30,41],interact:[27,41,42,49,52],interest:[26,40],interfac:[29,40,42,47],intermedi:22,intern:[3,10,20,26,27,31,41,51,52],intersect:50,interv:24,intro:49,introduc:50,invers:[29,47],invok:41,involv:38,is_empti:27,is_valid_index:37,item:27,iter:[3,5,6,8,11,13,18,26,51],its:[0,3,15,25,26,27,30,37,41,44,50,51,52],itself:[26,37,52],job:0,job_typ:0,joint:29,json:0,jump:[4,33],jupyt:38,just:[3,11,23,25,39,41,43,51,52],kapa:24,keep:[17,27,32,52],kei:[2,22,26,27,29,34,38,40,44,50,52],key_error_threshold:34,key_width:34,keyboard:[29,52],keyword:26,kl_coeffici:26,kl_coefficient_ph:26,know:[3,50,51,52],knowledg:[3,41,51],known:[27,40,46,50],kubeconfig:36,kubernet:44,kubernetes_orchestr:36,kubernetesparamet:36,kwarg:[26,29],l2_norm_added_delta:22,l2_regular:26,lack:40,lamb:30,lambda:[5,7,11,30],lane:2,larg:[30,32,47],larger:26,last:[4,6,11,22,27,29,32],last_env_respons:29,lastli:41,later:[0,3,26,51,52],latest:[20,22,41,44],layer:[26,30,34,41,43],lazi:[27,32],lazystack:32,lbfg:26,ld_library_path:44,lead:30,learn:[0,3,4,5,6,8,9,10,12,14,15,16,17,18,21,24,25,26,27,29,30,32,40,41,43,45,46,47,50,51],learn_from_batch:[3,38,41,51],learner:26,learning_r:[26,34],learning_rate_decay_r:26,learning_rate_decay_step:26,least:[43,50],leav:[11,14],left:[2,6,12,50],length:[4,5,7,11,20,22,26,27],less:[18,50],level:[0,3,26,29,39,51,52],levelmanag:[3,41,51],levelselect:29,libatla:44,libav:44,libavformat:44,libbla:44,libboost:44,libbz2:44,libfluidsynth:44,libgl1:44,libglew:44,libgm:44,libgstream:44,libgtk2:44,libgtk:44,libjpeg:44,liblapack:44,libnotifi:44,libopen:44,libosmesa6:44,libportmidi:44,librari:[29,44,47],libsdl1:44,libsdl2:44,libsdl:44,libsm:44,libsmpeg:44,libswscal:44,libtiff:44,libwebkitgtk:44,libwildmidi:44,like:[12,29,37,41,43,44,50],likelihood:[7,11],line:[3,41,51,52],linear:33,linearboxtoboxmap:33,linearli:33,list:[0,3,4,26,27,29,30,32,33,37,38,51,52],load:[0,3,40,42,51,52],load_memory_from_fil:[3,51],load_memory_from_file_path:52,local:[3,43,44,51],locat:[24,27,32,50],log:[0,3,5,6,10,12,51],log_to_screen:[3,51],logger:[0,3,51],look:[39,44],loop:41,loss:[1,2,3,6,7,10,11,15,16,17,24,25,26,30,38,43,51],lot:[30,40,46,50],low:[8,11,13,32,33,37],low_i:37,low_x:37,lower:[0,34,41],lowest:[32,33,37],lstm:43,lumin:32,lvert:[6,15,25],lvl:52,mai:[0,26,45,52],main:[3,38,41,43,45,51,52],mainli:42,major:30,make:[0,3,26,29,38,40,44,46,50,51],manag:[3,26,42,44,51],mandatori:[37,39,43],mani:[3,18,45,46],manner:[11,19,20,23,32,41],manual:44,map:[3,26,29,31,32,33,37,38,51],mark:27,markdown:51,mask:[14,33],masked_target_space_high:33,masked_target_space_low:33,master:[3,41,44,51],match:[2,22,26,37],mathbb:[5,6],mathcal:13,mathop:5,max:[5,6,13,15,20,25,32],max_a:[14,17,22,23],max_action_valu:27,max_episodes_to_achieve_reward:0,max_fps_for_human_control:0,max_kl_diverg:6,max_over_num_fram:29,max_simultaneous_selected_act:37,max_siz:34,max_spe:29,maxim:[4,16],maximum:[0,12,15,17,22,23,27,29,30,32,34,50],mean:[0,2,7,8,9,10,11,12,13,21,26,30,32,33,37,40,50],meant:43,measur:[3,4,26,29,32,37,39,50,51],measurements_nam:37,mechan:[31,42,46,52],memor:50,memori:[3,25,27,32,38,41,42,44,49,50,51],memory_backend:44,memorygranular:34,memoryparamet:[3,38],merg:[26,29],mesa:44,method:[0,5,7,11,13,20,26,32,34],metric:[0,37,40],mid:6,middlewar:[22,26,43],middleware_paramet:26,middlewareparamet:26,midpoint:24,might:[3,10,29,38,43,51],min:[6,7,13,15,23,25],min_:[12,13],min_reward_threshold:0,mind:52,minim:[2,4,15],minimap_s:29,minimum:[0,7,13,32],mitig:50,mix:[3,7,11,22,23,50],mixedmontecarloalgorithmparamet:19,mixer1:44,mixtur:[19,26],mjkei:44,mjpro150:44,mjpro150_linux:44,mkdir:44,mmc:[19,50],mmc_agent:19,mode:[23,26,28,35,36,41,42,44,52],model:[0,19,21,26,49,51,52],modif:50,modifi:6,modul:[3,38,41,42,51],modular:[38,41,43,49],monitor:42,mont:[3,23],monte_carlo_mixing_r:[19,23],more:[3,8,13,20,26,32,38,40,41,43,44,49,51,52],moreov:40,most:[3,10,22,26,27,30,43,46,50,51,52],mostli:[32,41],motiv:41,move:[6,7,11,32,40,46],mp4:0,mse:[2,6,16,17,24],much:[7,11,41,50],mujoco:[29,33,39,44,47],mujoco_kei:44,mujoco_pi:44,multi:[11,26,37,43],multiarrai:[3,51],multidimension:37,multipl:[4,7,11,20,26,29,30,32,33,34,37,40,41,46,49,52],multipli:[4,10,26,32],multiselect:33,multitask:[29,47],must:[26,32,37,46],mxnet:52,n_step:[22,25,27,34],n_step_discounted_reward:27,n_step_q_ag:20,nabla:[6,8,13],nabla_:[8,12,13],nabla_a:[8,13],naf:50,naf_ag:21,nafalgorithmparamet:21,name:[3,26,27,29,32,37,38,44,51,52],namespac:36,nasm:44,nativ:[0,29,39,47],native_rend:0,navig:3,ndarrai:[3,26,27,29,30,32,33,37,39,51],nearest:22,neat:40,nec:[0,50],nec_ag:22,necalgorithmparamet:22,necessari:[3,22,26,51],necessarili:32,need:[0,3,6,25,26,29,30,37,38,41,46,50,51,52],neg:[4,32],neighbor:22,neon_compon:38,nervanasystem:44,network:[0,3,26,30,38,41,46,49,50,51,52],network_input_tupl:26,network_nam:[3,51],network_param:30,network_paramet:26,network_wrapp:[3,26,51],networkparamet:[3,26,30,38],networkwrapp:[3,51],neural:[3,19,26,43,46],never:26,new_value_shift_coeffici:[22,34],new_weight:26,newli:[23,39,50],next:[0,3,8,13,16,17,21,23,24,27,29,41,51,52],next_stat:27,nfs_data_stor:28,nfsdatastoreparamet:28,nice:52,no_accumul:26,node:[26,43],nois:[8,9,13,21,30,41,50],noise_as_percentage_from_action_spac:30,noise_schedul:30,noisi:[10,25,30],non_episod:34,none:[0,3,7,8,11,13,26,27,29,30,32,33,37,39,51],norm:26,norm_unclipped_grad:26,norm_unclippsed_grad:26,normal:[3,4,10,30,31,32,37],note:[22,26,30,51],notebook:38,notic:[26,50],notori:[40,46,50],now:[7,39],nstepqalgorithmparamet:20,nth:25,num_act:[22,34,37],num_bins_per_dimens:33,num_class:34,num_consecutive_playing_step:[3,8,13,51],num_consecutive_training_step:[3,51],num_gpu:0,num_neighbor:34,num_predicted_steps_ahead:4,num_speedup_step:29,num_steps_between_copying_online_weights_to_target:[8,12,13,20],num_steps_between_gradient_upd:[5,6,10,20],num_task:0,num_training_task:0,num_transitions_to_start_replai:6,num_work:0,number:[0,2,4,5,6,8,10,12,13,14,15,20,22,24,25,26,27,29,30,32,33,34,40,47,51,52],number_of_knn:22,numpi:[3,26,27,29,30,32,33,37,39,51],nvidia:44,object:[0,3,25,26,29,30,32,34,41,51],observ:[0,3,4,11,26,27,29,31,39,41,51],observation_reduction_by_sub_parts_name_filt:32,observation_space_s:26,observation_space_typ:29,observation_stat:32,observation_typ:29,observationspac:37,observationspacetyp:29,observationtyp:29,off:[3,6,12,42,50,51],offer:[29,47],often:[40,41,43],old:[7,11,26,50],old_weight:26,onc:[0,7,10,11,14,15,16,17,19,20,23,24,25,26,37,52],one:[0,3,6,18,22,23,26,27,29,30,31,34,37,39,40,43,50,51],ones:[39,50],onli:[0,3,4,5,6,7,10,11,14,15,17,18,20,22,24,25,26,27,29,30,32,33,39,41,50,51,52],onlin:[8,12,13,14,15,16,17,19,20,21,22,23,24,25,26,41,43],online_network:26,onnx:[0,26],onto:31,open:[0,29,47],openai:[44,47],opencv:44,oper:[23,26,32],optim:[3,4,6,26,45,50],optimization_epoch:7,optimizer_epsilon:26,optimizer_typ:26,option:[6,10,26,29,33,37,38,40,42,43,52],orchestr:[42,44,49],order:[0,3,5,6,7,8,10,11,12,13,16,17,18,20,21,22,23,24,26,27,31,32,33,40,41,43,46,50,51],org:[20,34],origin:[20,32,33,46],ornstein:[8,9,30],other:[0,2,10,18,23,26,29,31,32,34,40,41,50],otherwis:[11,14,26,29,30,37],ou_process:30,our:7,out:[2,16,17,30,31,33,40,44,49,50,52],outcom:[30,41],output:[0,4,6,8,13,14,15,21,22,26,30,31,32,37,38,43],output_0_0:26,output_observation_spac:32,outputfilt:41,outsid:[4,30],over:[3,7,10,11,20,22,25,26,27,30,32,33,40,41,50,51],overestim:[8,13,50],overfit:11,overhead:0,overlai:40,overrid:[3,51],override_existing_kei:34,overriden:38,overview:41,overwhelm:41,overwritten:26,own:[26,38],p_j:[15,25],page:[3,46],pair:[0,37],pal:[23,50],pal_ag:23,pal_alpha:23,palalgorithmparamet:23,paper:[5,10,12,15,20,22,24,29,34,46],parallel:[6,26,40,43],parallel_predict:26,param:[3,26,27,28,29,30,35,36,38,39,51],paramet:[2,3,4,5,6,7,8,10,11,12,13,15,19,20,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,38,39,46,49,51,52],parameter_nois:30,parameters_server_host:0,parent:[3,26,51],parent_path_suffix:[3,26,51],parmet:3,pars:41,part:[0,3,14,26,27,30,32,33,42,43,46,50,51],part_nam:32,partial:33,partialdiscreteactionspacemap:33,particular:4,particularli:[29,30,37,46,50],pass:[0,4,8,9,13,21,22,26,29,30,31,39,40,41,43,52],patamet:22,patchelf:44,patchelf_0:44,path:[0,3,26,38,39,44,51,52],pattern:41,pdf:34,penal:[7,8,11,13],penalti:11,pendulum_hac:39,pendulum_with_go:39,pendulumwithgo:39,per:[0,3,4,37,38,41,51],percentag:30,percentil:30,perceptron:43,perform:[0,3,6,26,27,32,34,39,40,41,50,51],period:[43,52],persist:3,persistent_advantage_learn:23,perspect:15,phase:[3,6,7,8,9,11,12,13,26,29,30,41,51],phi:[15,25],physic:[29,47],pi_:[6,7,12],pick:[12,29],pickl:52,pickledreplaybuff:52,pip3:44,pip:44,pixel:29,place:[33,40,41],placehold:[26,30],plai:[0,3,10,14,16,17,20,30,38,40,51],plain:43,planarmap:29,planarmapsobservationspac:32,platform:[29,47],pleas:[20,46],plu:26,plugin:44,point:[32,37,41,42],polici:[1,3,4,5,6,9,12,14,20,21,22,28,38,41,42,43,44,45,49,50,51],policy_gradient_rescal:[5,7,10,11],policy_gradients_ag:10,policygradientalgorithmparamet:10,policygradientrescal:[5,7,10,11],policyoptimizationag:38,popul:41,popular:[29,47],port:0,posit:[4,32],possibl:[2,3,4,22,30,33,37,40,43,49,50,51,52],post:[31,49],post_training_command:[3,51],power:[29,47],ppo:[7,11,50],ppo_ag:11,ppoalgorithmparamet:11,pre:[8,13,30,31],predefin:[14,23,30,52],predict:[1,2,3,5,6,7,8,11,12,13,14,15,16,17,23,24,25,26,30,43,50,51],prediction_typ:[3,51],predictiontyp:[3,51],prefect:50,prefer:26,prefix:[3,51],prep:44,prepar:[3,51],prepare_batch_for_infer:[3,51],present:[18,22,26,29,32,50],preset:[0,5,38,39,41,42,44,52],press:[40,52],prevent:[8,11,13,41],previou:32,previous:[11,26],print:[0,3,52],print_networks_summari:0,priorit:[25,34],prioriti:[25,34],privat:37,probabilit:[5,6],probabl:[3,5,6,10,14,15,25,27,30,38,50,51],problem:50,procedur:6,process:[0,3,8,9,26,30,31,32,33,38,40,41,43,46,49,51],produc:26,progress:26,project:[15,25],propag:7,propagate_updates_to_dnd:22,properti:[3,26,27,29,34,38,39,44,51],proport:34,provid:[26,42],proxi:41,proxim:3,pub:[35,36,44],publish:46,purpos:[0,3,10],pursuit:2,push:[3,51],pybullet:[29,47],pygam:[0,44],pytest:44,python3:44,python:[29,34,38,44,47,49],q_i:12,qr_dqn_agent:24,quad:6,qualiti:29,quantil:[3,50],quantileregressiondqnalgorithmparamet:24,queri:[22,26,41,50],question:50,quit:40,r_i:[5,20],r_t:[4,6,7,25],rainbow:[3,38,50],rainbow_ag:38,rainbow_dqn_ag:25,rainbowag:38,rainbowagentparamet:38,rainbowalgorithmparamet:38,rainbowdqnalgorithmparamet:25,rainbowexplorationparamet:38,rainbowmemoryparamet:38,rainbownetworkparamet:38,rais:[3,27,51],ramp:[38,41],random:[0,20,29,30,37,41,46],random_initialization_step:29,randomli:[27,41],rang:[4,7,8,11,13,15,25,29,32,33,37,50],rare:22,rate:[0,6,19,22,26,29,43],rate_for_copying_weights_to_target:[6,8,12,13],rather:[4,12,40],ratio:[6,7,11,19,32],ratio_of_replai:6,raw:[29,47],reach:[0,11,37],read:[0,28],read_csv_tri:0,readabl:41,readm:44,real:3,reason:[32,46],rebuild_on_every_upd:34,receiv:[26,27],recent:[3,25,26,50,51],recommend:39,redi:[35,36,44],redispubsub:44,redispubsubmemorybackendparamet:35,reduc:[1,2,10,11,23,26,32,41,50],reduct:32,reduction_method:32,reductionmethod:32,redund:32,refer:[2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,42,44],referenc:3,regard:[3,51],region:[6,50],regist:[3,51],register_sign:[3,51],registri:44,regress:[2,3,50],regula:[6,7,11],regular:[5,7,10,11,20,22,26,30,33,34,50],regularli:26,reinforc:[3,5,8,9,10,12,15,16,17,18,20,23,24,25,29,30,40,41,43,45,46,47,50],relat:[26,44],relationship:50,releas:[0,49,50],relev:[3,14,30,32,51],remov:[0,32],render:[0,3,29,39],reorder:32,repeat:[29,41],replac:[30,32,34,44],replace_mse_with_huber_loss:26,replai:[1,2,3,6,8,12,13,14,15,16,17,20,22,23,24,25,34,41,50,51,52],replay_buff:52,replicated_devic:26,repo:39,repositori:49,repres:[0,7,11,15,25,26,27,29,30,33,37,52],represent:43,reproduc:[41,46],request:[3,26,51],requir:[3,26,28,30,32,40,43,44,50,51],requires_action_valu:30,rescal:[4,5,7,10,11,26,31,32],rescale_factor:32,research:[29,46,47],reset:[3,22,26,29,30,39,51],reset_accumulated_gradi:26,reset_evaluation_st:[3,51],reset_gradi:26,reset_internal_st:[3,29,51],resourc:[42,44],respect:[8,13,27,29],respons:[3,27,29,41,51],rest:[26,27,33,44],restart:39,restor:[0,3,51],restore_checkpoint:[3,51],result:[3,4,13,15,16,17,18,24,25,26,32,33,46,50,51,52],ret:6,retrac:6,retri:0,retriev:[22,34],return_additional_data:34,reus:41,reusabl:43,reward:[0,1,2,3,4,8,10,13,19,20,25,26,27,29,31,37,39,40,41,50,51],reward_test_level:0,reward_typ:37,rgb:[29,32,37],rho:[6,8,13],rho_t:6,right:[2,3,6,12,30,33,40,50,51],rl_coach:[0,1,2,3,4,5,6,7,8,10,11,12,13,15,17,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,39,44,51,52],rms_prop_optimizer_decai:26,rmsprop:26,roboschool:[29,47],robot:[29,37,47,49],roboti:44,robust:51,rollout:[28,35,36,42,44,52],root:[40,44],rule:[8,13,14],run:[0,3,4,8,10,11,12,13,14,16,17,22,23,26,29,30,32,51,52],run_off_policy_evalu:[3,51],run_pre_network_filter_for_infer:[3,51],runphas:[3,51],runtim:44,rvert:[15,25],rvert_2:6,s3_bucket_nam:44,s3_creds_fil:44,s3_data_stor:28,s3_end_point:44,s3datastoreparamet:28,s_t:[4,5,6,8,12,13,14,15,16,17,19,20,21,23,25],sac:50,sai:50,same:[3,4,7,10,13,19,20,23,26,29,33,34,40,43,46,50,51],sampl:[1,2,3,5,6,8,10,11,12,13,14,15,16,17,19,20,23,24,25,26,30,34,37,41,44,51],sample_with_info:37,satur:[8,13],save:[0,3,25,26,30,44,51,52],save_checkpoint:[3,51],saver:[3,26,51],savercollect:[3,26,51],scale:[4,10,26,32,40,44,49,52],scale_down_gradients_by_number_of_workers_for_sync_train:26,scale_measurements_target:4,scaler:26,schedul:[7,30,34,41,42,44,52],scheme:[5,30,41,50],schulman:11,sci:44,scienc:46,scipi:[32,44],scope:26,scratch:50,scratchpad:0,screen:[3,29,39,52],screen_siz:29,script:41,second:[0,26,40,50,52],section:[44,45,47],see:[3,29,32,44,46,47,50,51,52],seed:[0,29,46],seen:[4,22,23,29,32,41,46,50],segment:[29,37],select:[5,14,22,26,27,30,32,33,37,39,40,41,49,52],self:[3,26,38,39,51],send:[39,43],separ:[0,3,18,32,33,43,45,50],separate_actions_for_throttle_and_brak:29,seper:10,sequenti:[4,27,34],serv:[7,10,43],server:0,server_height:29,server_width:29,sess:[3,26,51],session:[3,26,51],set:[0,2,3,4,5,6,7,8,11,13,15,16,17,19,22,23,25,26,27,29,30,32,33,37,38,42,46,47,49,50,51,52],set_environment_paramet:[3,51],set_goal:29,set_incoming_direct:[3,51],set_is_train:26,set_sess:[3,51],set_variable_valu:26,set_weight:26,setup:[3,44,51],setup_logg:[3,51],setuptool:44,sever:[0,3,7,10,11,14,26,29,30,32,38,39,40,41,43,47,50,51,52],shape:[26,32,37],share:[0,3,26,34,43,51],shared_memory_scratchpad:0,shared_optim:26,shift:[33,41],shine:40,should:[0,3,4,7,11,14,20,23,26,27,29,32,34,37,38,39,42,51,52],should_dump:0,shouldn:14,show:46,shown:46,shuffl:[3,27,51],side:[3,51],sigma:[13,30],signal:[3,41,51],signal_nam:[3,51],significantli:18,sim:[6,12],similar:[7,18,20,27,29,33,50],simpl:[10,34,38,39,43,49,50,52],simplest:50,simplif:50,simplifi:[7,40,43],simul:[29,39,47,52],simultan:7,sinc:[3,7,8,10,13,20,22,23,25,26,30,32,51],singl:[3,4,5,6,7,11,14,18,19,20,26,27,29,30,33,37,40,41,43,51],size:[26,27,30,32,33,34,37],skill:50,skip:[29,41],slave:[3,51],slice:27,slow:[26,50,52],slower:[0,13,18,26],slowli:[8,13],small:[7,13,22,34],smaller:30,smooth:[40,50],soft:[3,8,11,13,21,50],soft_actor_critic_ag:12,softactorcriticalgorithmparamet:12,softmax:[26,30],softmax_temperatur:26,softwar:44,solut:50,solv:[32,39,47,49],some:[0,3,11,26,27,30,32,38,39,40,43,46,50,51,52],sort:24,sourc:[0,1,2,3,4,5,6,7,8,10,11,12,13,15,17,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,39,44,47,51],space:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,29,30,31,32,33,34,41,49,51],spacesdefinit:[3,26,51],spatial:50,spawn:[42,44],special:18,specif:[0,3,14,18,22,26,27,38,41,52],specifi:[0,26,29,30,32,39,42,52],speed:[26,32,50],speedup:52,spread:[32,33],squar:32,squeeze_list:26,squeeze_output:26,src:44,stabil:[6,20,26,50],stabl:[43,50],stack:[3,31,32,37,51],stack_siz:[26,32],stacking_axi:32,stage:43,stai:46,standard:[7,10,11,14,30,32,40],starcraft2_environ:29,starcraft2environ:29,starcraft:[37,47],starcraftobservationtyp:29,start:[3,6,8,11,12,13,18,23,27,32,33,39,44,51],state:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,29,32,34,37,38,39,41,43,45,50,51],state_key_with_the_class_index:[2,34],state_spac:29,state_valu:27,statist:[3,10,32,49,51],std:12,stdev:30,steep:30,step:[0,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,21,22,23,24,25,26,27,29,30,32,38,39,40,41,50,51,52],stepmethod:[8,12,13,20],stochast:[12,41,50],stop:[0,29],store:[0,3,22,25,27,29,32,34,40,41,42,44,49,51,52],store_transitions_only_when_episodes_are_termin:25,str:[0,2,3,4,20,26,27,29,30,32,33,37,51],strategi:[29,47],stream:[18,42],strict:46,string:[0,26,29],structur:[0,3,27,34,38,41,51],stuff:26,style:30,sub:[33,34,35,36,37,38,41,44,52],sub_spac:37,subset:[40,46,50],subtract:23,succeed:29,success:[0,29,50],suffer:40,suffici:27,suffix:[3,26,51],suggest:38,suit:[0,47],suitabl:[42,52],sum:[4,7,10,19,26,27],sum_:[5,12,15,19,20,22,25],summari:[0,3,51],supervis:50,suppli:[3,51],support:[0,3,26,29,30,40,43,44,45,47,49,52],sure:[0,3,44,46,51],surrog:7,swig:44,swingup:29,symbol:26,sync:[3,26,41,42,51],synchron:[0,26,41,43],t_max:[10,20],tag:44,take:[0,3,10,11,18,22,23,26,29,30,31,39,40,41,51],taken:[1,2,4,5,6,7,8,11,12,13,15,18,22,23,24,25,26,27,29,30],tanh:[8,13],tar:44,target:[0,1,2,3,4,5,6,7,8,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,29,32,33,37,38,41,43,51],target_act:33,target_kl_diverg:11,target_network:26,target_success_r:29,targets_horizon:20,task:[0,1,2,29,32,38,40,47],task_index:0,tau:12,td3:50,td3_agent:13,td3algorithmparamet:13,techniqu:[7,11,49,50],technolog:42,teh:26,temperatur:[26,30],temperature_schedul:30,tensor:[3,26,51],tensorboard:0,tensorflow:[0,3,26,51,52],tensorflow_support:26,term:[6,7,11],termin:[3,8,13,27,41,51],test:[0,3,5,6,8,9,10,11,12,13,26,38,46,49,52],test_using_a_trace_test:0,text:6,textrm:41,than:[0,3,11,13,26,30,40,43,51],thei:[3,22,23,26,30,40,41,42,50,51,52],them:[4,5,10,20,26,27,29,32,37,39,40,43],therefor:[0,8,13,26,31,50],theta:[6,7,8,12,13,15,25,30],theta_:[6,7],thi:[0,3,4,5,6,7,8,10,11,13,14,18,20,22,25,26,27,29,30,31,32,33,34,35,37,38,39,40,41,42,43,44,46,50,51,52],thing:40,those:[0,3,8,13,14,16,17,18,22,27,30,33,41,43,45,50,51],thousand:[11,14,15,16,17,19,23,24,25],thread:26,three:[3,42,43,44,45],threshold:[11,22,32],through:[0,3,4,8,9,10,11,13,14,22,23,26,38,39,41,43,51],tild:[8,12,13],time:[0,4,23,26,30,33,34,40,43,50],time_limit:39,timestep:[4,10],timid:44,tmp:0,togeth:[3,20,27,41,51],toggl:40,too:11,tool:[40,44,50],top:[26,29,31,32,34,39,40,50],torqu:29,total:[0,3,10,11,19,22,23,27,34,38,40,50,51],total_loss:26,total_return:27,trace:0,trace_max_env_step:0,trace_test_level:0,tradeoff:30,train:[0,3,18,26,30,35,36,38,39,40,41,42,43,46,49,50,51],train_and_sync_network:26,train_on_batch:26,train_to_eval_ratio:34,trainer:[28,42],transfer:[29,35,47],transit:[1,2,3,4,5,6,8,10,11,12,13,15,16,17,20,22,23,24,25,34,38,41,42,51],transition_idx:27,tri:50,trick:46,tricki:40,trigger:[29,44],truncat:6,truncated_norm:30,trust:[6,50],ttf2:44,tune:30,tupl:[1,2,3,8,13,26,27,29,34,37,38],turn:[2,50],tutori:[38,39],tweak:[3,51],twin:3,two:[8,10,13,20,26,29,30,31,32,33,37,39,42,43,50,52],txt:44,type:[0,3,10,18,26,29,32,37,38,41,43,49,50,51,52],typic:[7,11,26,50,52],ubuntu16:44,uhlenbeck:[8,9,30],uint8:32,unbound:37,uncertain:30,uncertainti:30,unchang:11,unclip:[3,38,51],uncorrel:20,undeploi:42,under:[3,26,38,52],underbrac:5,understand:52,unifi:7,uniformli:[29,30,33,37],union:[3,27,29,30,33,37,51],uniqu:26,unit:40,unlik:11,unmask:33,unnecessari:0,unshar:[3,51],unsign:32,unspecifi:26,unstabl:[40,46],until:[0,6,10,11,22,25,30],unus:26,unzip:44,updat:[3,6,7,8,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,30,38,39,40,41,43,44,50,51],update_discounted_reward:27,update_filter_internal_st:[3,51],update_log:[3,51],update_online_network:26,update_step_in_episode_log:[3,51],update_target_network:26,update_transition_before_adding_to_replay_buff:[3,51],upgrad:44,upon:[3,5,38,51],upper:[6,30],usag:[33,49],use:[0,1,2,3,4,5,6,8,9,10,12,13,14,16,17,21,26,27,28,29,30,32,33,34,37,38,39,41,43,44,49,50,51,52],use_accumulated_reward_as_measur:4,use_cpu:0,use_deterministic_for_evalu:12,use_full_action_spac:29,use_kl_regular:[7,11],use_non_zero_discount_for_terminal_st:[8,13],use_separate_networks_per_head:26,use_target_network_for_evalu:[8,13],use_trust_region_optim:6,used:[0,2,3,5,6,7,8,10,11,12,13,14,15,19,20,21,22,23,24,26,29,30,32,33,34,35,36,38,39,41,42,43,46,51,52],useful:[0,3,4,25,26,30,32,37,46,50,51,52],user:[26,29,30,40,41,44],userguid:44,uses:[0,1,7,11,18,27,28,30,36,41,42,44,46,50,52],using:[0,3,5,6,7,8,10,11,12,13,16,17,19,20,21,22,23,25,26,28,29,30,32,35,38,39,40,42,47,50,51,52],usr:44,usual:[32,41],util:[3,40,51],v_max:15,v_min:15,val:[3,37,51],valid:[0,37],valu:[0,2,3,4,5,6,7,8,11,12,13,14,15,16,17,18,20,21,22,23,25,26,27,29,30,32,33,34,37,38,41,43,44,45,50,51],valuabl:40,value_targets_mix_fract:[7,11],valueexcept:[3,51],valueoptimizationag:38,van:4,vari:43,variabl:[26,29,44],variable_scop:26,varianc:[10,30,40,50],variant:[30,34,50],variou:[3,27,34,49],vector:[3,4,8,9,11,13,14,26,29,32,37,39,43,50,51],vectorobservationspac:32,verbos:29,veri:[0,7,8,10,13,18,22,40,50,52],version:[7,11,27],versu:26,vert:12,vertic:26,via:[2,14],video:[0,3,29],video_dump_method:0,view:40,viewabl:[3,51],visit:46,visual:[0,3,29,47,49],visualization_paramet:29,visualizationparamet:[3,29],vizdoom:[44,47],vote:30,wai:[3,7,11,30,33,39,41,43,49,50,51,52],wait:[5,26,42],walk:39,want:[3,4,25,26,32,33,34,51],warn:[30,32,33],wasn:27,weather_id:29,websit:[29,49],weight:[4,5,6,7,8,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,30,41,43,50],well:[22,26,30,37,50],went:11,were:[4,15,16,17,18,22,24,25,26,27,33,46],west:44,wget:44,what:[11,50],whatev:[3,51],when:[0,3,4,5,6,7,8,9,10,11,12,13,22,26,27,28,29,30,32,35,36,38,39,40,51,52],whenev:42,where:[2,3,4,5,6,7,11,14,15,18,20,22,23,25,26,27,29,30,32,33,37,40,50,51],whether:30,which:[0,1,2,3,5,6,7,8,10,11,12,13,14,18,20,21,22,23,24,26,27,28,29,30,32,34,35,36,37,38,39,40,41,42,43,45,46,47,49,50,51,52],who:41,why:[40,41],window:[32,33],wise:32,within:[0,7,11,21,30,37,40],without:[5,11,33,34,40,50,52],won:[4,26],wont:26,work:[3,20,26,30,32,33,40,41,50,51,52],workaround:0,workdir:44,worker:[0,20,26,28,32,34,35,36,40,42,43,44,50,52],worker_devic:26,worker_host:0,wors:50,would:[26,44,50],wrap:[29,32,41,47],wrapper:[3,26,27,29,37,43,51],write:[0,3,51],written:[3,25,28,51],www:44,xdist:44,y_t:[8,12,13,14,16,17,19,21,22,23],year:50,yet:[18,39],you:[4,32,34,38,39,44,49,52],your:[38,39,44,52],yuv:32,z_i:[15,25],z_j:[15,25],zero:[2,13,16,17],zip:44,zlib1g:44},titles:["Additional Parameters","Behavioral Cloning","Conditional Imitation Learning","Agents","Direct Future Prediction","Actor-Critic","ACER","Clipped Proximal Policy Optimization","Deep Deterministic Policy Gradient","Hierarchical Actor Critic","Policy Gradient","Proximal Policy Optimization","Soft Actor-Critic","Twin Delayed Deep Deterministic Policy Gradient","Bootstrapped DQN","Categorical DQN","Double DQN","Deep Q Networks","Dueling DQN","Mixed Monte Carlo","N-Step Q Learning","Normalized Advantage Functions","Neural Episodic Control","Persistent Advantage Learning","Quantile Regression DQN","Rainbow","Architectures","Core Types","Data Stores","Environments","Exploration Policies","Filters","Input Filters","Output Filters","Memories","Memory Backends","Orchestrators","Spaces","Adding a New Agent","Adding a New Environment","Coach Dashboard","Control Flow","Distributed Coach - Horizontal Scale-Out","Network Design","Usage - Distributed Coach","Algorithms","Benchmarks","Environments","Features","Reinforcement Learning Coach","Selecting an Algorithm","test","Usage"],titleterms:{"final":22,"function":21,"new":[38,39],"switch":52,Adding:[38,39],Using:39,acer:6,across:50,action:[4,5,6,7,8,9,10,11,12,13,14,21,22,33,37,50],actioninfo:27,actor:[5,9,12],addit:[0,52],additivenois:30,advantag:[21,23],agent:[3,38,41,52],algorithm:[1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,45,50,52],api:39,architectur:26,attentionactionspac:37,backend:35,balancedexperiencereplai:34,batch:27,behavior:1,benchmark:46,between:52,blizzard:29,boltzmann:30,bootstrap:[14,30],boxactionspac:37,build:44,can:50,carla:29,carlo:19,categor:[15,30],choos:[4,5,6,7,8,9,10,11,12,13,14,21,22],clip:7,clone:[1,44],coach:[39,40,42,44,49],collect:50,compar:40,compoundactionspac:37,condit:2,config:44,contain:44,continu:[7,11,12,50],continuousentropi:30,control:[22,29,41],copi:43,core:27,creat:44,critic:[5,9,12],dashboard:40,data:28,deep:[8,13,17,52],deepmind:29,delai:13,demonstr:50,descript:[1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],design:43,determinist:[8,13],direct:4,discret:[5,6,10,50],discreteactionspac:37,distribut:[42,44],distributedtaskparamet:0,doe:50,doubl:16,dqn:[14,15,16,18,24],duel:18,dump:52,egreedi:30,environ:[29,39,47,50,52],envrespons:27,episod:[22,27,34],episodicexperiencereplai:34,episodichindsightexperiencereplai:34,episodichrlhindsightexperiencereplai:34,evalu:52,experiencereplai:34,explor:30,explorationpolici:30,featur:48,file:44,filter:[31,32,33],flag:52,flow:41,framework:52,from:50,futur:4,gener:18,gif:52,goal:37,gradient:[8,10,13],graph:41,greedi:30,gym:[29,39],have:50,hierarch:9,horizont:42,human:[50,52],imag:44,imageobservationspac:37,imit:[2,52],implement:44,input:32,interfac:44,keep:43,kubernet:36,learn:[2,20,23,49,52],level:41,manag:41,memori:[34,35],mix:19,mont:19,more:50,multi:52,multipl:50,multiselectactionspac:37,network:[1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,43],networkwrapp:26,neural:22,nfsdatastor:28,node:[50,52],non:34,normal:21,observ:[32,37],observationclippingfilt:32,observationcropfilt:32,observationmoveaxisfilt:32,observationnormalizationfilt:32,observationreductionbysubpartsnamefilt:32,observationrescalesizebyfactorfilt:32,observationrescaletosizefilt:32,observationrgbtoyfilt:32,observationsqueezefilt:32,observationstackingfilt:32,observationtouint8filt:32,openai:[29,39],optim:[7,11],orchestr:36,ouprocess:30,out:42,output:33,pain:50,parallel:50,paramet:0,parameternois:30,persist:23,plai:52,planarmapsobservationspac:37,polici:[7,8,10,11,13,30],predict:4,prerequisit:44,presetvalidationparamet:0,prioritizedexperiencereplai:34,process:50,proxim:[7,11],push:44,qdnd:34,quantil:24,rainbow:25,redispubsubbackend:35,regress:24,reinforc:49,render:52,repositori:44,reward:32,rewardclippingfilt:32,rewardnormalizationfilt:32,rewardrescalefilt:32,run:[40,44],s3datastor:28,sampl:50,scale:42,select:50,signal:40,simul:50,singl:52,singleepisodebuff:34,soft:12,solv:50,space:[37,50],starcraft:29,statist:40,step:20,store:[14,28],structur:[1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],suit:29,support:42,sync:43,synchron:42,task:50,taskparamet:0,test:51,thread:52,through:52,track:40,train:[1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,52],transit:[14,27],transitioncollect:34,truncatednorm:30,twin:13,type:[27,42],ucb:30,usag:[44,52],vectorobservationspac:37,visual:[40,52],visualizationparamet:0,vizdoom:29,you:50,your:50}}) \ No newline at end of file diff --git a/docs/selecting_an_algorithm.html b/docs/selecting_an_algorithm.html index b5844f3..f38ace9 100644 --- a/docs/selecting_an_algorithm.html +++ b/docs/selecting_an_algorithm.html @@ -391,6 +391,16 @@ $(document).ready(function() { and therefore it is able to use a replay buffer in order to improve sample efficiency. +
                                      + + TD3 +
                                      + Very similar to DDPG, i.e. an actor-critic for continuous action spaces, that uses a replay buffer in + order to improve sample efficiency. TD3 uses two critic networks in order to mitigate the overestimation + in the Q state-action value prediction, slows down the actor updates in order to increase stability and + adds noise to actions while training the critic in order to smooth out the critic's predictions. +
                                      +
                                      PPO diff --git a/docs/test.html b/docs/test.html index 20146f7..0798236 100644 --- a/docs/test.html +++ b/docs/test.html @@ -190,10 +190,10 @@
                                      -class rl_coach.agents.dqn_agent.DQNAgent(agent_parameters, parent: Union[LevelManager, CompositeAgent] = None)[source]
                                      +class rl_coach.agents.dqn_agent.DQNAgent(agent_parameters, parent: Union[LevelManager, CompositeAgent] = None)[source]
                                      -act(action: Union[None, int, float, numpy.ndarray, List] = None) → rl_coach.core_types.ActionInfo
                                      +act(action: Union[None, int, float, numpy.ndarray, List] = None) → rl_coach.core_types.ActionInfo

                                      Given the agents current knowledge, decide on the next action to apply to the environment

                                      Parameters
                                      @@ -207,7 +207,7 @@
                                      -call_memory(func, args=())
                                      +call_memory(func, args=())

                                      This function is a wrapper to allow having the same calls for shared or unshared memories. It should be used instead of calling the memory directly in order to allow different algorithms to work both with a shared and a local memory.

                                      @@ -226,7 +226,7 @@ both with a shared and a local memory.

                                      -choose_action(curr_state)
                                      +choose_action(curr_state)

                                      choose an action to act with in the current episode being played. Different behavior might be exhibited when training or testing.

                                      @@ -241,7 +241,7 @@ training or testing.

                                      -collect_savers(parent_path_suffix: str) → rl_coach.saver.SaverCollection
                                      +collect_savers(parent_path_suffix: str) → rl_coach.saver.SaverCollection

                                      Collect all of agent’s network savers :param parent_path_suffix: path suffix of the parent of the agent (could be name of level manager or composite agent) @@ -250,7 +250,7 @@ training or testing.

                                      -create_networks() → Dict[str, rl_coach.architectures.network_wrapper.NetworkWrapper]
                                      +create_networks() → Dict[str, rl_coach.architectures.network_wrapper.NetworkWrapper]

                                      Create all the networks of the agent. The network creation will be done after setting the environment parameters for the agent, since they are needed for creating the network.

                                      @@ -261,9 +261,16 @@ for creating the network.

                                      +
                                      +
                                      +freeze_memory()
                                      +

                                      Shuffle episodes in the memory and freeze it to make sure that no extra data is being pushed anymore. +:return: None

                                      +
                                      +
                                      -get_predictions(states: List[Dict[str, numpy.ndarray]], prediction_type: rl_coach.core_types.PredictionType)
                                      +get_predictions(states: List[Dict[str, numpy.ndarray]], prediction_type: rl_coach.core_types.PredictionType)

                                      Get a prediction from the agent with regard to the requested prediction_type. If the agent cannot predict this type of prediction_type, or if there is more than possible way to do so, raise a ValueException.

                                      @@ -282,7 +289,7 @@ raise a ValueException.

                                      -get_state_embedding(state: dict) → numpy.ndarray
                                      +get_state_embedding(state: dict) → numpy.ndarray

                                      Given a state, get the corresponding state embedding from the main network

                                      Parameters
                                      @@ -296,7 +303,7 @@ raise a ValueException.

                                      -handle_episode_ended() → None
                                      +handle_episode_ended() → None

                                      Make any changes needed when each episode is ended. This includes incrementing counters, updating full episode dependent values, updating logs, etc. This function is called right after each episode is ended.

                                      @@ -309,7 +316,7 @@ This function is called right after each episode is ended.

                                      -improve_reward_model(epochs: int)
                                      +improve_reward_model(epochs: int)

                                      Train a reward model to be used by the doubly-robust estimator

                                      Parameters
                                      @@ -323,7 +330,7 @@ This function is called right after each episode is ended.

                                      -init_environment_dependent_modules()
                                      +init_environment_dependent_modules()

                                      Initialize any modules that depend on knowing information about the environment such as the action space or the observation space

                                      @@ -333,9 +340,20 @@ the observation space

                                      +
                                      +
                                      +initialize_session_dependent_components()
                                      +

                                      Initialize components which require a session as part of their initialization.

                                      +
                                      +
                                      Returns
                                      +

                                      None

                                      +
                                      +
                                      +
                                      +
                                      -learn_from_batch(batch)[source]
                                      +learn_from_batch(batch)[source]

                                      Given a batch of transitions, calculates their target values and updates the network.

                                      Parameters
                                      @@ -347,9 +365,20 @@ the observation space

                                      +
                                      +
                                      +load_memory_from_file()
                                      +

                                      Load memory transitions from a file.

                                      +
                                      +
                                      Returns
                                      +

                                      None

                                      +
                                      +
                                      +
                                      +
                                      -log_to_screen() → None
                                      +log_to_screen() → None

                                      Write an episode summary line to the terminal

                                      Returns
                                      @@ -360,7 +389,7 @@ the observation space

                                      -observe(env_response: rl_coach.core_types.EnvResponse) → bool
                                      +observe(env_response: rl_coach.core_types.EnvResponse) → bool

                                      Given a response from the environment, distill the observation from it and store it for later use. The response should be a dictionary containing the performed action, the new observation and measurements, the reward, a game over flag and any additional information necessary.

                                      @@ -375,9 +404,9 @@ given observation

                                      -
                                      +
                                      -parent
                                      +property parent

                                      Get the parent class of the agent

                                      Returns
                                      @@ -386,9 +415,9 @@ given observation

                                      -
                                      +
                                      -phase
                                      +property phase

                                      The current running phase of the agent

                                      Returns
                                      @@ -399,7 +428,7 @@ given observation

                                      -post_training_commands() → None
                                      +post_training_commands() → None

                                      A function which allows adding any functionality that is required to run right after the training phase ends.

                                      Returns
                                      @@ -410,7 +439,7 @@ given observation

                                      -prepare_batch_for_inference(states: Union[Dict[str, numpy.ndarray], List[Dict[str, numpy.ndarray]]], network_name: str) → Dict[str, numpy.array]
                                      +prepare_batch_for_inference(states: Union[Dict[str, numpy.ndarray], List[Dict[str, numpy.ndarray]]], network_name: str) → Dict[str, numpy.core.multiarray.array]

                                      Convert curr_state into input tensors tensorflow is expecting. i.e. if we have several inputs states, stack all observations together, measurements together, etc.

                                      @@ -430,7 +459,7 @@ the observation relevant for the network from the states.

                                    • -register_signal(signal_name: str, dump_one_value_per_episode: bool = True, dump_one_value_per_step: bool = False) → rl_coach.utils.Signal
                                      +register_signal(signal_name: str, dump_one_value_per_episode: bool = True, dump_one_value_per_step: bool = False) → rl_coach.utils.Signal

                                      Register a signal such that its statistics will be dumped and be viewable through dashboard

                                      Parameters
                                      @@ -448,7 +477,7 @@ the observation relevant for the network from the states.

                                      -reset_evaluation_state(val: rl_coach.core_types.RunPhase) → None
                                      +reset_evaluation_state(val: rl_coach.core_types.RunPhase) → None

                                      Perform accumulators initialization when entering an evaluation phase, and signal dumping when exiting an evaluation phase. Entering or exiting the evaluation phase is determined according to the new phase given by val, and by the current phase set in self.phase.

                                      @@ -464,7 +493,7 @@ by val, and by the current phase set in self.phase.

                                      -reset_internal_state() → None
                                      +reset_internal_state() → None

                                      Reset all the episodic parameters. This function is called right before each episode starts.

                                      Returns
                                      @@ -475,7 +504,7 @@ by val, and by the current phase set in self.phase.

                                      -restore_checkpoint(checkpoint_dir: str) → None
                                      +restore_checkpoint(checkpoint_dir: str) → None

                                      Allows agents to store additional information when saving checkpoints.

                                      Parameters
                                      @@ -489,7 +518,7 @@ by val, and by the current phase set in self.phase.

                                      -run_off_policy_evaluation()
                                      +run_off_policy_evaluation()

                                      Run the off-policy evaluation estimators to get a prediction for the performance of the current policy based on an evaluation dataset, which was collected by another policy(ies). :return: None

                                      @@ -497,7 +526,7 @@ an evaluation dataset, which was collected by another policy(ies).
                                      -run_pre_network_filter_for_inference(state: Dict[str, numpy.ndarray], update_filter_internal_state: bool = True) → Dict[str, numpy.ndarray]
                                      +run_pre_network_filter_for_inference(state: Dict[str, numpy.ndarray], update_filter_internal_state: bool = True) → Dict[str, numpy.ndarray]

                                      Run filters which where defined for being applied right before using the state for inference.

                                      Parameters
                                      @@ -514,7 +543,7 @@ an evaluation dataset, which was collected by another policy(ies).
                                      -save_checkpoint(checkpoint_prefix: str) → None
                                      +save_checkpoint(checkpoint_prefix: str) → None

                                      Allows agents to store additional information when saving checkpoints.

                                      Parameters
                                      @@ -528,7 +557,7 @@ an evaluation dataset, which was collected by another policy(ies).
                                      -set_environment_parameters(spaces: rl_coach.spaces.SpacesDefinition)
                                      +set_environment_parameters(spaces: rl_coach.spaces.SpacesDefinition)

                                      Sets the parameters that are environment dependent. As a side effect, initializes all the components that are dependent on those values, by calling init_environment_dependent_modules

                                      @@ -543,7 +572,7 @@ dependent on those values, by calling init_environment_dependent_modules

                                      -set_incoming_directive(action: Union[int, float, numpy.ndarray, List]) → None
                                      +set_incoming_directive(action: Union[int, float, numpy.ndarray, List]) → None

                                      Allows setting a directive for the agent to follow. This is useful in hierarchy structures, where the agent has another master agent that is controlling it. In such cases, the master agent can define the goals for the slave agent, define it’s observation, possible actions, etc. The directive type is defined by the agent @@ -560,7 +589,7 @@ in-action-space.

                                      -set_session(sess) → None
                                      +set_session(sess) → None

                                      Set the deep learning framework session for all the agents in the composite agent

                                      Returns
                                      @@ -571,7 +600,7 @@ in-action-space.

                                      -setup_logger() → None
                                      +setup_logger() → None

                                      Setup the logger for the agent

                                      Returns
                                      @@ -582,7 +611,7 @@ in-action-space.

                                      -sync() → None
                                      +sync() → None

                                      Sync the global network parameters to local networks

                                      Returns
                                      @@ -593,7 +622,7 @@ in-action-space.

                                      -train() → float
                                      +train() → float

                                      Check if a training phase should be done as configured by num_consecutive_playing_steps. If it should, then do several training steps as configured by num_consecutive_training_steps. A single training iteration: Sample a batch, train on it and update target networks.

                                      @@ -606,7 +635,7 @@ A single training iteration: Sample a batch, train on it and update target netwo
                                      -update_log() → None
                                      +update_log() → None

                                      Updates the episodic log file with all the signal values from the most recent episode. Additional signals for logging can be set by the creating a new signal using self.register_signal, and then updating it with some internal agent values.

                                      @@ -619,7 +648,7 @@ and then updating it with some internal agent values.

                                      -update_step_in_episode_log() → None
                                      +update_step_in_episode_log() → None

                                      Updates the in-episode log file with all the signal values from the most recent step.

                                      Returns
                                      @@ -630,7 +659,7 @@ and then updating it with some internal agent values.

                                      -update_transition_before_adding_to_replay_buffer(transition: rl_coach.core_types.Transition) → rl_coach.core_types.Transition
                                      +update_transition_before_adding_to_replay_buffer(transition: rl_coach.core_types.Transition) → rl_coach.core_types.Transition

                                      Allows agents to update the transition just before adding it to the replay buffer. Can be useful for agents that want to tweak the reward, termination signal, etc.

                                      diff --git a/docs_raw/source/_static/img/algorithms.png b/docs_raw/source/_static/img/algorithms.png index b3310c076a25084ab3563b97af8a5fbc25f9957d..6c00f21a226c5b91c86a38287167e46323c12d5e 100644 GIT binary patch literal 60878 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­=Cem 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

                                      U)4 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 diff --git a/docs_raw/source/_static/img/design_imgs/td3.png b/docs_raw/source/_static/img/design_imgs/td3.png new file mode 100644 index 0000000000000000000000000000000000000000..fc28eb40494138e5663d46e30d8e373d9709413f GIT binary patch literal 49185 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 \ No newline at end of file diff --git a/docs_raw/source/components/agents/index.rst b/docs_raw/source/components/agents/index.rst index 476bc7a..ca21713 100644 --- a/docs_raw/source/components/agents/index.rst +++ b/docs_raw/source/components/agents/index.rst @@ -21,6 +21,7 @@ A detailed description of those algorithms can be found by navigating to each of imitation/cil policy_optimization/cppo policy_optimization/ddpg + policy_optimization/td3 policy_optimization/sac other/dfp value_optimization/double_dqn diff --git a/docs_raw/source/components/agents/policy_optimization/td3.rst b/docs_raw/source/components/agents/policy_optimization/td3.rst new file mode 100644 index 0000000..f7b9a78 --- /dev/null +++ b/docs_raw/source/components/agents/policy_optimization/td3.rst @@ -0,0 +1,55 @@ +Twin Delayed Deep Deterministic Policy Gradient +================================== + +**Actions space:** Continuous + +**References:** `Addressing Function Approximation Error in Actor-Critic Methods `_ + +Network Structure +----------------- + +.. image:: /_static/img/design_imgs/td3.png + :align: center + +Algorithm Description +--------------------- +Choosing an action +++++++++++++++++++ + +Pass the current states through the actor network, and get an action mean vector :math:`\mu`. +While in training phase, use a continuous exploration policy, such as a small zero-meaned gaussian noise, +to add exploration noise to the action. When testing, use the mean vector :math:`\mu` as-is. + +Training the network +++++++++++++++++++++ + +Start by sampling a batch of transitions from the experience replay. + +* To train the two **critic networks**, use the following targets: + + :math:`y_t=r(s_t,a_t )+\gamma \cdot \min_{i=1,2} Q_{i}(s_{t+1},\mu(s_{t+1} )+[\mathcal{N}(0,\,\sigma^{2})]^{MAX\_NOISE}_{MIN\_NOISE})` + + First run the actor target network, using the next states as the inputs, and get :math:`\mu (s_{t+1} )`. Then, add a + clipped gaussian noise to these actions, and clip the resulting actions to the actions space. + Next, run the critic target networks using the next states and :math:`\mu (s_{t+1} )+[\mathcal{N}(0,\,\sigma^{2})]^{MAX\_NOISE}_{MIN\_NOISE}`, + and use the minimum between the two critic networks predictions in order to calculate :math:`y_t` according to the + equation above. To train the networks, use the current states and actions as the inputs, and :math:`y_t` + as the targets. + +* To train the **actor network**, use the following equation: + + :math:`\nabla_{\theta^\mu } J \approx E_{s_t \tilde{} \rho^\beta } [\nabla_a Q_{1}(s,a)|_{s=s_t,a=\mu (s_t ) } \cdot \nabla_{\theta^\mu} \mu(s)|_{s=s_t} ]` + + Use the actor's online network to get the action mean values using the current states as the inputs. + Then, use the first critic's online network in order to get the gradients of the critic output with respect to the + action mean values :math:`\nabla _a Q_{1}(s,a)|_{s=s_t,a=\mu(s_t ) }`. + Using the chain rule, calculate the gradients of the actor's output, with respect to the actor weights, + given :math:`\nabla_a Q(s,a)`. Finally, apply those gradients to the actor network. + + The actor's training is done at a slower frequency than the critic's training, in order to allow the critic to better fit the + current policy, before exercising the critic in order to train the actor. + Following the same, delayed, actor's training cadence, do a soft update of the critic and actor target networks' weights + from the online networks. + + +.. autoclass:: rl_coach.agents.td3_agent.TD3AlgorithmParameters \ No newline at end of file diff --git a/docs_raw/source/diagrams.xml b/docs_raw/source/diagrams.xml index b923c63..15f067f 100644 --- a/docs_raw/source/diagrams.xml +++ b/docs_raw/source/diagrams.xml @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/docs_raw/source/selecting_an_algorithm.rst b/docs_raw/source/selecting_an_algorithm.rst index e4027de..d039cc4 100644 --- a/docs_raw/source/selecting_an_algorithm.rst +++ b/docs_raw/source/selecting_an_algorithm.rst @@ -214,6 +214,16 @@ The algorithms are ordered by their release date in descending order. and therefore it is able to use a replay buffer in order to improve sample efficiency. +

                                      + + TD3 +
                                      + Very similar to DDPG, i.e. an actor-critic for continuous action spaces, that uses a replay buffer in + order to improve sample efficiency. TD3 uses two critic networks in order to mitigate the overestimation + in the Q state-action value prediction, slows down the actor updates in order to increase stability and + adds noise to actions while training the critic in order to smooth out the critic's predictions. +
                                      +
                                      PPO diff --git a/img/algorithms.png b/img/algorithms.png deleted file mode 100644 index b3310c076a25084ab3563b97af8a5fbc25f9957d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60448 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­=Cem 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

                                      U)4 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 diff --git a/rl_coach/agents/ddpg_agent.py b/rl_coach/agents/ddpg_agent.py index 0288f00..be58319 100644 --- a/rl_coach/agents/ddpg_agent.py +++ b/rl_coach/agents/ddpg_agent.py @@ -41,14 +41,15 @@ class DDPGCriticNetworkParameters(NetworkParameters): self.middleware_parameters = FCMiddlewareParameters() self.heads_parameters = [DDPGVHeadParameters()] self.optimizer_type = 'Adam' - self.adam_optimizer_beta2 = 0.999 - self.optimizer_epsilon = 1e-8 self.batch_size = 64 self.async_training = False self.learning_rate = 0.001 + self.adam_optimizer_beta2 = 0.999 + self.optimizer_epsilon = 1e-8 self.create_target_network = True self.shared_optimizer = True self.scale_down_gradients_by_number_of_workers_for_sync_training = False + # self.l2_regularization = 1e-2 class DDPGActorNetworkParameters(NetworkParameters): @@ -58,9 +59,9 @@ class DDPGActorNetworkParameters(NetworkParameters): self.middleware_parameters = FCMiddlewareParameters(batchnorm=True) self.heads_parameters = [DDPGActorHeadParameters()] self.optimizer_type = 'Adam' + self.batch_size = 64 self.adam_optimizer_beta2 = 0.999 self.optimizer_epsilon = 1e-8 - self.batch_size = 64 self.async_training = False self.learning_rate = 0.0001 self.create_target_network = True @@ -217,4 +218,4 @@ class DDPGAgent(ActorCriticAgent): action_info = ActionInfo(action=action, action_value=q_value) - return action_info + return action_info \ No newline at end of file diff --git a/rl_coach/agents/ddqn_bcq_agent.py b/rl_coach/agents/ddqn_bcq_agent.py index ee9fb39..1e4237c 100644 --- a/rl_coach/agents/ddqn_bcq_agent.py +++ b/rl_coach/agents/ddqn_bcq_agent.py @@ -90,7 +90,7 @@ class DDQNBCQAgent(DQNAgent): if self.ap.algorithm.action_drop_method_parameters.use_state_embedding_instead_of_state: return self.networks['reward_model'].online_network.predict( states, - outputs=[self.networks['reward_model'].online_network.state_embedding]) + outputs=[self.networks['reward_model'].online_network.state_embedding[0]]) else: return states['observation'] self.embedding = to_embedding @@ -189,7 +189,7 @@ class DDQNBCQAgent(DQNAgent): if self.ap.algorithm.action_drop_method_parameters.use_state_embedding_instead_of_state: self.knn_trees = [AnnoyDictionary( dict_size=knn_size, - key_width=int(self.networks['reward_model'].online_network.state_embedding.shape[-1]), + key_width=int(self.networks['reward_model'].online_network.state_embedding[0].shape[-1]), batch_size=knn_size) for _ in range(len(self.spaces.action.actions))] else: diff --git a/rl_coach/agents/nec_agent.py b/rl_coach/agents/nec_agent.py index 3e381b3..a184001 100644 --- a/rl_coach/agents/nec_agent.py +++ b/rl_coach/agents/nec_agent.py @@ -194,7 +194,7 @@ class NECAgent(ValueOptimizationAgent): ) if self.phase != RunPhase.TEST: # store the state embedding for inserting it to the DND later - self.current_episode_state_embeddings.append(embedding.squeeze()) + self.current_episode_state_embeddings.append(embedding[0].squeeze()) actions_q_values = actions_q_values[0][0] return actions_q_values diff --git a/rl_coach/agents/td3_agent.py b/rl_coach/agents/td3_agent.py new file mode 100644 index 0000000..44dbf3a --- /dev/null +++ b/rl_coach/agents/td3_agent.py @@ -0,0 +1,223 @@ +# +# Copyright (c) 2019 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import copy +from typing import Union +from collections import OrderedDict + +import numpy as np + +from rl_coach.agents.agent import Agent +from rl_coach.agents.ddpg_agent import DDPGAgent +from rl_coach.architectures.embedder_parameters import InputEmbedderParameters +from rl_coach.architectures.head_parameters import DDPGActorHeadParameters, TD3VHeadParameters +from rl_coach.architectures.middleware_parameters import FCMiddlewareParameters +from rl_coach.base_parameters import NetworkParameters, AlgorithmParameters, \ + AgentParameters, EmbedderScheme +from rl_coach.core_types import ActionInfo, TrainingSteps, Transition +from rl_coach.exploration_policies.additive_noise import AdditiveNoiseParameters +from rl_coach.memories.episodic.episodic_experience_replay import EpisodicExperienceReplayParameters +from rl_coach.spaces import BoxActionSpace, GoalsSpace + + +class TD3CriticNetworkParameters(NetworkParameters): + def __init__(self, num_q_networks): + super().__init__() + self.input_embedders_parameters = {'observation': InputEmbedderParameters(), + 'action': InputEmbedderParameters(scheme=EmbedderScheme.Shallow)} + self.middleware_parameters = FCMiddlewareParameters(num_streams=num_q_networks) + self.heads_parameters = [TD3VHeadParameters()] + self.optimizer_type = 'Adam' + self.adam_optimizer_beta2 = 0.999 + self.optimizer_epsilon = 1e-8 + self.batch_size = 100 + self.async_training = False + self.learning_rate = 0.001 + self.create_target_network = True + self.shared_optimizer = True + self.scale_down_gradients_by_number_of_workers_for_sync_training = False + + +class TD3ActorNetworkParameters(NetworkParameters): + def __init__(self): + super().__init__() + self.input_embedders_parameters = {'observation': InputEmbedderParameters()} + self.middleware_parameters = FCMiddlewareParameters() + self.heads_parameters = [DDPGActorHeadParameters(batchnorm=False)] + self.optimizer_type = 'Adam' + self.adam_optimizer_beta2 = 0.999 + self.optimizer_epsilon = 1e-8 + self.batch_size = 100 + self.async_training = False + self.learning_rate = 0.001 + self.create_target_network = True + self.shared_optimizer = True + self.scale_down_gradients_by_number_of_workers_for_sync_training = False + + +class TD3AlgorithmParameters(AlgorithmParameters): + """ + :param num_steps_between_copying_online_weights_to_target: (StepMethod) + The number of steps between copying the online network weights to the target network weights. + + :param rate_for_copying_weights_to_target: (float) + When copying the online network weights to the target network weights, a soft update will be used, which + weight the new online network weights by rate_for_copying_weights_to_target + + :param num_consecutive_playing_steps: (StepMethod) + The number of consecutive steps to act between every two training iterations + + :param use_target_network_for_evaluation: (bool) + If set to True, the target network will be used for predicting the actions when choosing actions to act. + Since the target network weights change more slowly, the predicted actions will be more consistent. + + :param action_penalty: (float) + The amount by which to penalize the network on high action feature (pre-activation) values. + This can prevent the actions features from saturating the TanH activation function, and therefore prevent the + gradients from becoming very low. + + :param clip_critic_targets: (Tuple[float, float] or None) + The range to clip the critic target to in order to prevent overestimation of the action values. + + :param use_non_zero_discount_for_terminal_states: (bool) + If set to True, the discount factor will be used for terminal states to bootstrap the next predicted state + values. If set to False, the terminal states reward will be taken as the target return for the network. + """ + def __init__(self): + super().__init__() + self.rate_for_copying_weights_to_target = 0.005 + self.use_target_network_for_evaluation = False + self.action_penalty = 0 + self.clip_critic_targets = None # expected to be a tuple of the form (min_clip_value, max_clip_value) or None + self.use_non_zero_discount_for_terminal_states = False + self.act_for_full_episodes = True + self.update_policy_every_x_episode_steps = 2 + self.num_steps_between_copying_online_weights_to_target = TrainingSteps(self.update_policy_every_x_episode_steps) + self.policy_noise = 0.2 + self.noise_clipping = 0.5 + self.num_q_networks = 2 + + +class TD3AgentExplorationParameters(AdditiveNoiseParameters): + def __init__(self): + super().__init__() + self.noise_as_percentage_from_action_space = False + + +class TD3AgentParameters(AgentParameters): + def __init__(self): + td3_algorithm_params = TD3AlgorithmParameters() + super().__init__(algorithm=td3_algorithm_params, + exploration=TD3AgentExplorationParameters(), + memory=EpisodicExperienceReplayParameters(), + networks=OrderedDict([("actor", TD3ActorNetworkParameters()), + ("critic", + TD3CriticNetworkParameters(td3_algorithm_params.num_q_networks))])) + + @property + def path(self): + return 'rl_coach.agents.td3_agent:TD3Agent' + + +# Twin Delayed DDPG - https://arxiv.org/pdf/1802.09477.pdf +class TD3Agent(DDPGAgent): + def __init__(self, agent_parameters, parent: Union['LevelManager', 'CompositeAgent']=None): + super().__init__(agent_parameters, parent) + + self.q_values = self.register_signal("Q") + self.TD_targets_signal = self.register_signal("TD targets") + self.action_signal = self.register_signal("actions") + + def learn_from_batch(self, batch): + actor = self.networks['actor'] + critic = self.networks['critic'] + + actor_keys = self.ap.network_wrappers['actor'].input_embedders_parameters.keys() + critic_keys = self.ap.network_wrappers['critic'].input_embedders_parameters.keys() + + # TD error = r + discount*max(q_st_plus_1) - q_st + next_actions, actions_mean = actor.parallel_prediction([ + (actor.target_network, batch.next_states(actor_keys)), + (actor.online_network, batch.states(actor_keys)) + ]) + + # add noise to the next_actions + noise = np.random.normal(0, self.ap.algorithm.policy_noise, next_actions.shape).clip( + -self.ap.algorithm.noise_clipping, self.ap.algorithm.noise_clipping) + next_actions = self.spaces.action.clip_action_to_space(next_actions + noise) + + critic_inputs = copy.copy(batch.next_states(critic_keys)) + critic_inputs['action'] = next_actions + q_st_plus_1 = critic.target_network.predict(critic_inputs)[2] # output #2 is the min (Q1, Q2) + + # calculate the bootstrapped TD targets while discounting terminal states according to + # use_non_zero_discount_for_terminal_states + if self.ap.algorithm.use_non_zero_discount_for_terminal_states: + TD_targets = batch.rewards(expand_dims=True) + self.ap.algorithm.discount * q_st_plus_1 + else: + TD_targets = batch.rewards(expand_dims=True) + \ + (1.0 - batch.game_overs(expand_dims=True)) * self.ap.algorithm.discount * q_st_plus_1 + + # clip the TD targets to prevent overestimation errors + if self.ap.algorithm.clip_critic_targets: + TD_targets = np.clip(TD_targets, *self.ap.algorithm.clip_critic_targets) + + self.TD_targets_signal.add_sample(TD_targets) + + # train the critic + critic_inputs = copy.copy(batch.states(critic_keys)) + critic_inputs['action'] = batch.actions(len(batch.actions().shape) == 1) + result = critic.train_and_sync_networks(critic_inputs, TD_targets) + total_loss, losses, unclipped_grads = result[:3] + + if self.training_iteration % self.ap.algorithm.update_policy_every_x_episode_steps == 0: + # get the gradients of output #3 (=mean of Q1 network) w.r.t the action + critic_inputs = copy.copy(batch.states(critic_keys)) + critic_inputs['action'] = actions_mean + action_gradients = critic.online_network.predict(critic_inputs, + outputs=critic.online_network.gradients_wrt_inputs[3]['action']) + + # apply the gradients from the critic to the actor + initial_feed_dict = {actor.online_network.gradients_weights_ph[0]: -action_gradients} + gradients = actor.online_network.predict(batch.states(actor_keys), + outputs=actor.online_network.weighted_gradients[0], + initial_feed_dict=initial_feed_dict) + + if actor.has_global: + actor.apply_gradients_to_global_network(gradients) + actor.update_online_network() + else: + actor.apply_gradients_to_online_network(gradients) + + return total_loss, losses, unclipped_grads + + def train(self): + self.ap.algorithm.num_consecutive_training_steps = self.current_episode_steps_counter + return Agent.train(self) + + def update_transition_before_adding_to_replay_buffer(self, transition: Transition) -> Transition: + """ + Allows agents to update the transition just before adding it to the replay buffer. + Can be useful for agents that want to tweak the reward, termination signal, etc. + + :param transition: the transition to update + :return: the updated transition + """ + transition.game_over = False if self.current_episode_steps_counter ==\ + self.parent_level_manager.environment.env._max_episode_steps\ + else transition.game_over + + return transition \ No newline at end of file diff --git a/rl_coach/architectures/head_parameters.py b/rl_coach/architectures/head_parameters.py index 8879647..981251b 100644 --- a/rl_coach/architectures/head_parameters.py +++ b/rl_coach/architectures/head_parameters.py @@ -221,3 +221,14 @@ class SACQHeadParameters(HeadParameters): super().__init__(parameterized_class_name='SACQHead', activation_function=activation_function, name=name, dense_layer=dense_layer) self.network_layers_sizes = layers_sizes + + +class TD3VHeadParameters(HeadParameters): + def __init__(self, activation_function: str ='relu', name: str='td3_v_head_params', + num_output_head_copies: int = 1, rescale_gradient_from_head_by_factor: float = 1.0, + loss_weight: float = 1.0, dense_layer=None, initializer='xavier'): + super().__init__(parameterized_class_name="TD3VHead", activation_function=activation_function, name=name, + dense_layer=dense_layer, num_output_head_copies=num_output_head_copies, + rescale_gradient_from_head_by_factor=rescale_gradient_from_head_by_factor, + loss_weight=loss_weight) + self.initializer = initializer \ No newline at end of file diff --git a/rl_coach/architectures/middleware_parameters.py b/rl_coach/architectures/middleware_parameters.py index 73bb4bd..0bdbe09 100644 --- a/rl_coach/architectures/middleware_parameters.py +++ b/rl_coach/architectures/middleware_parameters.py @@ -41,10 +41,11 @@ class FCMiddlewareParameters(MiddlewareParameters): def __init__(self, activation_function='relu', scheme: Union[List, MiddlewareScheme] = MiddlewareScheme.Medium, batchnorm: bool = False, dropout_rate: float = 0.0, - name="middleware_fc_embedder", dense_layer=None, is_training=False): + name="middleware_fc_embedder", dense_layer=None, is_training=False, num_streams=1): super().__init__(parameterized_class_name="FCMiddleware", activation_function=activation_function, scheme=scheme, batchnorm=batchnorm, dropout_rate=dropout_rate, name=name, dense_layer=dense_layer, is_training=is_training) + self.num_streams = num_streams class LSTMMiddlewareParameters(MiddlewareParameters): diff --git a/rl_coach/architectures/tensorflow_components/architecture.py b/rl_coach/architectures/tensorflow_components/architecture.py index 648381f..9075936 100644 --- a/rl_coach/architectures/tensorflow_components/architecture.py +++ b/rl_coach/architectures/tensorflow_components/architecture.py @@ -203,7 +203,6 @@ class TensorFlowArchitecture(Architecture): self._create_gradient_accumulators() # gradients of the outputs w.r.t. the inputs - # at the moment, this is only used by ddpg self.gradients_wrt_inputs = [{name: tf.gradients(output, input_ph) for name, input_ph in self.inputs.items()} for output in self.outputs] self.gradients_weights_ph = [tf.placeholder('float32', self.outputs[i].shape, 'output_gradient_weights') diff --git a/rl_coach/architectures/tensorflow_components/heads/__init__.py b/rl_coach/architectures/tensorflow_components/heads/__init__.py index 91c1b79..03c237a 100644 --- a/rl_coach/architectures/tensorflow_components/heads/__init__.py +++ b/rl_coach/architectures/tensorflow_components/heads/__init__.py @@ -16,6 +16,7 @@ from .sac_head import SACPolicyHead from .sac_q_head import SACQHead from .classification_head import ClassificationHead from .cil_head import RegressionHead +from .td3_v_head import TD3VHead from .ddpg_v_head import DDPGVHead __all__ = [ @@ -37,5 +38,6 @@ __all__ = [ 'SACQHead', 'ClassificationHead', 'RegressionHead', + 'TD3VHead' 'DDPGVHead' ] diff --git a/rl_coach/architectures/tensorflow_components/heads/head.py b/rl_coach/architectures/tensorflow_components/heads/head.py index d898362..d997442 100644 --- a/rl_coach/architectures/tensorflow_components/heads/head.py +++ b/rl_coach/architectures/tensorflow_components/heads/head.py @@ -13,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # -from typing import Type import numpy as np import tensorflow as tf @@ -22,7 +21,7 @@ from rl_coach.architectures.tensorflow_components.layers import Dense, convert_l from rl_coach.base_parameters import AgentParameters from rl_coach.spaces import SpacesDefinition from rl_coach.utils import force_list - +from rl_coach.architectures.tensorflow_components.utils import squeeze_tensor # Used to initialize weights for policy and value output layers def normalized_columns_initializer(std=1.0): @@ -72,8 +71,9 @@ class Head(object): :param input_layer: the input to the graph :return: the output of the last layer and the target placeholder """ + with tf.variable_scope(self.get_name(), initializer=tf.contrib.layers.xavier_initializer()): - self._build_module(input_layer) + self._build_module(squeeze_tensor(input_layer)) self.output = force_list(self.output) self.target = force_list(self.target) diff --git a/rl_coach/architectures/tensorflow_components/heads/td3_v_head.py b/rl_coach/architectures/tensorflow_components/heads/td3_v_head.py new file mode 100644 index 0000000..86457ec --- /dev/null +++ b/rl_coach/architectures/tensorflow_components/heads/td3_v_head.py @@ -0,0 +1,67 @@ +# +# Copyright (c) 2019 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import tensorflow as tf + +from rl_coach.architectures.tensorflow_components.layers import Dense +from rl_coach.architectures.tensorflow_components.heads.head import Head, normalized_columns_initializer +from rl_coach.base_parameters import AgentParameters +from rl_coach.core_types import VStateValue +from rl_coach.spaces import SpacesDefinition + + +class TD3VHead(Head): + def __init__(self, agent_parameters: AgentParameters, spaces: SpacesDefinition, network_name: str, + head_idx: int = 0, loss_weight: float = 1., is_local: bool = True, activation_function: str='relu', + dense_layer=Dense, initializer='xavier'): + super().__init__(agent_parameters, spaces, network_name, head_idx, loss_weight, is_local, activation_function, + dense_layer=dense_layer) + self.name = 'td3_v_values_head' + self.return_type = VStateValue + self.loss_type = [] + self.initializer = initializer + self.loss = [] + self.output = [] + + def _build_module(self, input_layer): + # Standard V Network + q_outputs = [] + self.target = tf.placeholder(tf.float32, shape=(None, 1), name="q_networks_min_placeholder") + + for i in range(input_layer.shape[0]): # assuming that the actual size is 2, as there are two critic networks + if self.initializer == 'normalized_columns': + q_outputs.append(self.dense_layer(1)(input_layer[i], name='q_output_{}'.format(i + 1), + kernel_initializer=normalized_columns_initializer(1.0))) + elif self.initializer == 'xavier' or self.initializer is None: + q_outputs.append(self.dense_layer(1)(input_layer[i], name='q_output_{}'.format(i + 1))) + + self.output.append(q_outputs[i]) + self.loss.append(tf.reduce_mean((self.target-q_outputs[i])**2)) + + self.output.append(tf.reduce_min(q_outputs, axis=0)) + self.output.append(tf.reduce_mean(self.output[0])) + self.loss = sum(self.loss) + tf.losses.add_loss(self.loss) + + def __str__(self): + result = [ + "Q1 Action-Value Stream", + "\tDense (num outputs = 1)", + "Q2 Action-Value Stream", + "\tDense (num outputs = 1)", + "Min (Q1, Q2)" + ] + return '\n'.join(result) diff --git a/rl_coach/architectures/tensorflow_components/middlewares/fc_middleware.py b/rl_coach/architectures/tensorflow_components/middlewares/fc_middleware.py index 816674a..61d340b 100644 --- a/rl_coach/architectures/tensorflow_components/middlewares/fc_middleware.py +++ b/rl_coach/architectures/tensorflow_components/middlewares/fc_middleware.py @@ -28,23 +28,28 @@ class FCMiddleware(Middleware): def __init__(self, activation_function=tf.nn.relu, scheme: MiddlewareScheme = MiddlewareScheme.Medium, batchnorm: bool = False, dropout_rate: float = 0.0, - name="middleware_fc_embedder", dense_layer=Dense, is_training=False): + name="middleware_fc_embedder", dense_layer=Dense, is_training=False, num_streams: int = 1): super().__init__(activation_function=activation_function, batchnorm=batchnorm, dropout_rate=dropout_rate, scheme=scheme, name=name, dense_layer=dense_layer, is_training=is_training) self.return_type = Middleware_FC_Embedding - self.layers = [] + + assert(isinstance(num_streams, int) and num_streams >= 1) + self.num_streams = num_streams def _build_module(self): - self.layers.append(self.input) + self.output = [] - for idx, layer_params in enumerate(self.layers_params): - self.layers.extend(force_list( - layer_params(self.layers[-1], name='{}_{}'.format(layer_params.__class__.__name__, idx), - is_training=self.is_training) - )) + for stream_idx in range(self.num_streams): + layers = [self.input] - self.output = self.layers[-1] + for idx, layer_params in enumerate(self.layers_params): + layers.extend(force_list( + layer_params(layers[-1], name='{}_{}'.format(layer_params.__class__.__name__, + idx + stream_idx * len(self.layers_params)), + is_training=self.is_training) + )) + self.output.append((layers[-1])) @property def schemes(self): @@ -72,3 +77,15 @@ class FCMiddleware(Middleware): ] } + def __str__(self): + stream = [str(l) for l in self.layers_params] + if self.layers_params: + if self.num_streams > 1: + stream = [''] + ['\t' + l for l in stream] + result = stream * self.num_streams + result[0::len(stream)] = ['Stream {}'.format(i) for i in range(self.num_streams)] + else: + result = stream + return '\n'.join(result) + else: + return 'No layers' diff --git a/rl_coach/architectures/tensorflow_components/utils.py b/rl_coach/architectures/tensorflow_components/utils.py index 749a0ab..45f6d01 100644 --- a/rl_coach/architectures/tensorflow_components/utils.py +++ b/rl_coach/architectures/tensorflow_components/utils.py @@ -38,3 +38,10 @@ def get_activation_function(activation_function_string: str): "Activation function must be one of the following {}. instead it was: {}" \ .format(activation_functions.keys(), activation_function_string) return activation_functions[activation_function_string] + + +def squeeze_tensor(tensor): + if tensor.shape[0] == 1: + return tensor[0] + else: + return tensor \ No newline at end of file diff --git a/rl_coach/exploration_policies/additive_noise.py b/rl_coach/exploration_policies/additive_noise.py index e6ccbad..8194718 100644 --- a/rl_coach/exploration_policies/additive_noise.py +++ b/rl_coach/exploration_policies/additive_noise.py @@ -17,7 +17,6 @@ from typing import List import numpy as np -import scipy.stats from rl_coach.core_types import RunPhase, ActionType from rl_coach.exploration_policies.exploration_policy import ContinuousActionExplorationPolicy, ExplorationParameters @@ -31,8 +30,9 @@ from rl_coach.spaces import ActionSpace, BoxActionSpace class AdditiveNoiseParameters(ExplorationParameters): def __init__(self): super().__init__() - self.noise_percentage_schedule = LinearSchedule(0.1, 0.1, 50000) - self.evaluation_noise_percentage = 0.05 + self.noise_schedule = LinearSchedule(0.1, 0.1, 50000) + self.evaluation_noise = 0.05 + self.noise_as_percentage_from_action_space = True @property def path(self): @@ -48,17 +48,19 @@ class AdditiveNoise(ContinuousActionExplorationPolicy): 2. Specified by the agents action. In case the agents action is a list with 2 values, the 1st one is assumed to be the mean of the action, and 2nd is assumed to be its standard deviation. """ - def __init__(self, action_space: ActionSpace, noise_percentage_schedule: Schedule, - evaluation_noise_percentage: float): + def __init__(self, action_space: ActionSpace, noise_schedule: Schedule, + evaluation_noise: float, noise_as_percentage_from_action_space: bool = True): """ :param action_space: the action space used by the environment - :param noise_percentage_schedule: the schedule for the noise variance percentage relative to the absolute range - of the action space - :param evaluation_noise_percentage: the noise variance percentage that will be used during evaluation phases + :param noise_schedule: the schedule for the noise + :param evaluation_noise: the noise variance that will be used during evaluation phases + :param noise_as_percentage_from_action_space: a bool deciding whether the noise is absolute or as a percentage + from the action space """ super().__init__(action_space) - self.noise_percentage_schedule = noise_percentage_schedule - self.evaluation_noise_percentage = evaluation_noise_percentage + self.noise_schedule = noise_schedule + self.evaluation_noise = evaluation_noise + self.noise_as_percentage_from_action_space = noise_as_percentage_from_action_space if not isinstance(action_space, BoxActionSpace): raise ValueError("Additive noise exploration works only for continuous controls." @@ -68,19 +70,20 @@ class AdditiveNoise(ContinuousActionExplorationPolicy): or not np.all(-np.inf < action_space.low) or not np.all(action_space.low < np.inf): raise ValueError("Additive noise exploration requires bounded actions") - # TODO: allow working with unbounded actions by defining the noise in terms of range and not percentage - def get_action(self, action_values: List[ActionType]) -> ActionType: # TODO-potential-bug consider separating internally defined stdev and externally defined stdev into 2 policies - # set the current noise percentage + # set the current noise if self.phase == RunPhase.TEST: - current_noise_precentage = self.evaluation_noise_percentage + current_noise = self.evaluation_noise else: - current_noise_precentage = self.noise_percentage_schedule.current_value + current_noise = self.noise_schedule.current_value # scale the noise to the action space range - action_values_std = current_noise_precentage * (self.action_space.high - self.action_space.low) + if self.noise_as_percentage_from_action_space: + action_values_std = current_noise * (self.action_space.high - self.action_space.low) + else: + action_values_std = current_noise # extract the mean values if isinstance(action_values, list): @@ -92,15 +95,18 @@ class AdditiveNoise(ContinuousActionExplorationPolicy): # step the noise schedule if self.phase is not RunPhase.TEST: - self.noise_percentage_schedule.step() + self.noise_schedule.step() # the second element of the list is assumed to be the standard deviation if isinstance(action_values, list) and len(action_values) > 1: action_values_std = action_values[1].squeeze() # add noise to the action means - action = np.random.normal(action_values_mean, action_values_std) + if self.phase is not RunPhase.TEST: + action = np.random.normal(action_values_mean, action_values_std) + else: + action = action_values_mean - return action + return np.atleast_1d(action) def get_control_param(self): - return np.ones(self.action_space.shape)*self.noise_percentage_schedule.current_value + return np.ones(self.action_space.shape)*self.noise_schedule.current_value diff --git a/rl_coach/exploration_policies/e_greedy.py b/rl_coach/exploration_policies/e_greedy.py index fde73b3..b9cb885 100644 --- a/rl_coach/exploration_policies/e_greedy.py +++ b/rl_coach/exploration_policies/e_greedy.py @@ -32,7 +32,7 @@ class EGreedyParameters(ExplorationParameters): self.epsilon_schedule = LinearSchedule(0.5, 0.01, 50000) self.evaluation_epsilon = 0.05 self.continuous_exploration_policy_parameters = AdditiveNoiseParameters() - self.continuous_exploration_policy_parameters.noise_percentage_schedule = LinearSchedule(0.1, 0.1, 50000) + self.continuous_exploration_policy_parameters.noise_schedule = LinearSchedule(0.1, 0.1, 50000) # for continuous control - # (see http://www.cs.ubc.ca/~van/papers/2017-TOG-deepLoco/2017-TOG-deepLoco.pdf) diff --git a/rl_coach/exploration_policies/truncated_normal.py b/rl_coach/exploration_policies/truncated_normal.py index 91848ed..7d859ee 100644 --- a/rl_coach/exploration_policies/truncated_normal.py +++ b/rl_coach/exploration_policies/truncated_normal.py @@ -28,10 +28,11 @@ from rl_coach.spaces import ActionSpace, BoxActionSpace class TruncatedNormalParameters(ExplorationParameters): def __init__(self): super().__init__() - self.noise_percentage_schedule = LinearSchedule(0.1, 0.1, 50000) - self.evaluation_noise_percentage = 0.05 + self.noise_schedule = LinearSchedule(0.1, 0.1, 50000) + self.evaluation_noise = 0.05 self.clip_low = 0 self.clip_high = 1 + self.noise_as_percentage_from_action_space = True @property def path(self): @@ -49,17 +50,20 @@ class TruncatedNormal(ContinuousActionExplorationPolicy): When the sampled action is outside of the action bounds given by the user, it is sampled again and again, until it is within the bounds. """ - def __init__(self, action_space: ActionSpace, noise_percentage_schedule: Schedule, - evaluation_noise_percentage: float, clip_low: float, clip_high: float): + def __init__(self, action_space: ActionSpace, noise_schedule: Schedule, + evaluation_noise: float, clip_low: float, clip_high: float, + noise_as_percentage_from_action_space: bool = True): """ :param action_space: the action space used by the environment - :param noise_percentage_schedule: the schedule for the noise variance percentage relative to the absolute range - of the action space - :param evaluation_noise_percentage: the noise variance percentage that will be used during evaluation phases + :param noise_schedule: the schedule for the noise variance + :param evaluation_noise: the noise variance that will be used during evaluation phases + :param noise_as_percentage_from_action_space: whether to consider the noise as a percentage of the action space + or absolute value """ super().__init__(action_space) - self.noise_percentage_schedule = noise_percentage_schedule - self.evaluation_noise_percentage = evaluation_noise_percentage + self.noise_schedule = noise_schedule + self.evaluation_noise = evaluation_noise + self.noise_as_percentage_from_action_space = noise_as_percentage_from_action_space self.clip_low = clip_low self.clip_high = clip_high @@ -71,17 +75,21 @@ class TruncatedNormal(ContinuousActionExplorationPolicy): or not np.all(-np.inf < action_space.low) or not np.all(action_space.low < np.inf): raise ValueError("Additive noise exploration requires bounded actions") - # TODO: allow working with unbounded actions by defining the noise in terms of range and not percentage - def get_action(self, action_values: List[ActionType]) -> ActionType: - # set the current noise percentage + # set the current noise if self.phase == RunPhase.TEST: - current_noise_precentage = self.evaluation_noise_percentage + current_noise = self.evaluation_noise else: - current_noise_precentage = self.noise_percentage_schedule.current_value + current_noise = self.noise_schedule.current_value # scale the noise to the action space range - action_values_std = current_noise_precentage * (self.action_space.high - self.action_space.low) + if self.noise_as_percentage_from_action_space: + action_values_std = current_noise * (self.action_space.high - self.action_space.low) + else: + action_values_std = current_noise + + # scale the noise to the action space range + action_values_std = current_noise * (self.action_space.high - self.action_space.low) # extract the mean values if isinstance(action_values, list): @@ -93,7 +101,7 @@ class TruncatedNormal(ContinuousActionExplorationPolicy): # step the noise schedule if self.phase is not RunPhase.TEST: - self.noise_percentage_schedule.step() + self.noise_schedule.step() # the second element of the list is assumed to be the standard deviation if isinstance(action_values, list) and len(action_values) > 1: action_values_std = action_values[1].squeeze() @@ -107,4 +115,4 @@ class TruncatedNormal(ContinuousActionExplorationPolicy): return action def get_control_param(self): - return np.ones(self.action_space.shape)*self.noise_percentage_schedule.current_value + return np.ones(self.action_space.shape)*self.noise_schedule.current_value diff --git a/rl_coach/presets/CARLA_CIL.py b/rl_coach/presets/CARLA_CIL.py index a2151c2..9c7342c 100644 --- a/rl_coach/presets/CARLA_CIL.py +++ b/rl_coach/presets/CARLA_CIL.py @@ -123,8 +123,8 @@ agent_params.input_filter.add_observation_filter( # no exploration is used agent_params.exploration = AdditiveNoiseParameters() -agent_params.exploration.noise_percentage_schedule = ConstantSchedule(0) -agent_params.exploration.evaluation_noise_percentage = 0 +agent_params.exploration.noise_schedule = ConstantSchedule(0) +agent_params.exploration.evaluation_noise = 0 # no playing during the training phase agent_params.algorithm.num_consecutive_playing_steps = EnvironmentSteps(0) diff --git a/rl_coach/presets/CartPole_Dueling_DDQN.py b/rl_coach/presets/CartPole_Dueling_DDQN.py index 861fdc5..97fd040 100644 --- a/rl_coach/presets/CartPole_Dueling_DDQN.py +++ b/rl_coach/presets/CartPole_Dueling_DDQN.py @@ -53,7 +53,7 @@ env_params = GymVectorEnvironment(level='CartPole-v0') preset_validation_params = PresetValidationParameters() preset_validation_params.test = True preset_validation_params.min_reward_threshold = 150 -preset_validation_params.max_episodes_to_achieve_reward = 250 +preset_validation_params.max_episodes_to_achieve_reward = 300 graph_manager = BasicRLGraphManager(agent_params=agent_params, env_params=env_params, schedule_params=schedule_params, vis_params=VisualizationParameters(), diff --git a/rl_coach/presets/Fetch_DDPG_HER_baselines.py b/rl_coach/presets/Fetch_DDPG_HER_baselines.py index c2f17d7..24579ff 100644 --- a/rl_coach/presets/Fetch_DDPG_HER_baselines.py +++ b/rl_coach/presets/Fetch_DDPG_HER_baselines.py @@ -87,9 +87,9 @@ agent_params.memory.shared_memory = True agent_params.exploration = EGreedyParameters() agent_params.exploration.epsilon_schedule = ConstantSchedule(0.3) agent_params.exploration.evaluation_epsilon = 0 -# they actually take the noise_percentage_schedule to be 0.2 * max_abs_range which is 0.1 * total_range -agent_params.exploration.continuous_exploration_policy_parameters.noise_percentage_schedule = ConstantSchedule(0.1) -agent_params.exploration.continuous_exploration_policy_parameters.evaluation_noise_percentage = 0 +# they actually take the noise_schedule to be 0.2 * max_abs_range which is 0.1 * total_range +agent_params.exploration.continuous_exploration_policy_parameters.noise_schedule = ConstantSchedule(0.1) +agent_params.exploration.continuous_exploration_policy_parameters.evaluation_noise = 0 agent_params.input_filter = InputFilter() agent_params.input_filter.add_observation_filter('observation', 'clipping', ObservationClippingFilter(-200, 200)) diff --git a/rl_coach/presets/Mujoco_DDPG.py b/rl_coach/presets/Mujoco_DDPG.py index 03a95a8..4f317fb 100644 --- a/rl_coach/presets/Mujoco_DDPG.py +++ b/rl_coach/presets/Mujoco_DDPG.py @@ -15,7 +15,7 @@ schedule_params = ScheduleParameters() schedule_params.improve_steps = EnvironmentSteps(2000000) schedule_params.steps_between_evaluation_periods = EnvironmentEpisodes(20) schedule_params.evaluation_steps = EnvironmentEpisodes(1) -schedule_params.heatup_steps = EnvironmentSteps(1000) +schedule_params.heatup_steps = EnvironmentSteps(10000) ######### # Agent # @@ -38,7 +38,7 @@ env_params = GymVectorEnvironment(level=SingleLevelSelection(mujoco_v2)) preset_validation_params = PresetValidationParameters() preset_validation_params.test = True preset_validation_params.min_reward_threshold = 400 -preset_validation_params.max_episodes_to_achieve_reward = 1000 +preset_validation_params.max_episodes_to_achieve_reward = 3000 preset_validation_params.reward_test_level = 'inverted_pendulum' preset_validation_params.trace_test_levels = ['inverted_pendulum', 'hopper'] diff --git a/rl_coach/presets/Mujoco_TD3.py b/rl_coach/presets/Mujoco_TD3.py new file mode 100644 index 0000000..613b436 --- /dev/null +++ b/rl_coach/presets/Mujoco_TD3.py @@ -0,0 +1,49 @@ +from rl_coach.agents.td3_agent import TD3AgentParameters +from rl_coach.architectures.layers import Dense +from rl_coach.base_parameters import VisualizationParameters, PresetValidationParameters, EmbedderScheme +from rl_coach.core_types import EnvironmentEpisodes, EnvironmentSteps +from rl_coach.environments.environment import SingleLevelSelection +from rl_coach.environments.gym_environment import GymVectorEnvironment, mujoco_v2 +from rl_coach.graph_managers.basic_rl_graph_manager import BasicRLGraphManager +from rl_coach.graph_managers.graph_manager import ScheduleParameters + +#################### +# Graph Scheduling # +#################### + +schedule_params = ScheduleParameters() +schedule_params.improve_steps = EnvironmentSteps(1000000) +schedule_params.steps_between_evaluation_periods = EnvironmentSteps(5000) +schedule_params.evaluation_steps = EnvironmentEpisodes(10) +schedule_params.heatup_steps = EnvironmentSteps(10000) + +######### +# Agent # +######### +agent_params = TD3AgentParameters() +agent_params.network_wrappers['actor'].input_embedders_parameters['observation'].scheme = [Dense(400)] +agent_params.network_wrappers['actor'].middleware_parameters.scheme = [Dense(300)] + +agent_params.network_wrappers['critic'].input_embedders_parameters['observation'].scheme = EmbedderScheme.Empty +agent_params.network_wrappers['critic'].input_embedders_parameters['action'].scheme = EmbedderScheme.Empty +agent_params.network_wrappers['critic'].middleware_parameters.scheme = [Dense(400), Dense(300)] + + +############### +# Environment # +############### +env_params = GymVectorEnvironment(level=SingleLevelSelection(mujoco_v2)) + +######## +# Test # +######## +preset_validation_params = PresetValidationParameters() +preset_validation_params.test = True +preset_validation_params.min_reward_threshold = 500 +preset_validation_params.max_episodes_to_achieve_reward = 1100 +preset_validation_params.reward_test_level = 'hopper' +preset_validation_params.trace_test_levels = ['inverted_pendulum', 'hopper'] + +graph_manager = BasicRLGraphManager(agent_params=agent_params, env_params=env_params, + schedule_params=schedule_params, vis_params=VisualizationParameters(), + preset_validation_params=preset_validation_params) diff --git a/rl_coach/presets/Starcraft_CollectMinerals_A3C.py b/rl_coach/presets/Starcraft_CollectMinerals_A3C.py index 6819ef5..9bc1401 100644 --- a/rl_coach/presets/Starcraft_CollectMinerals_A3C.py +++ b/rl_coach/presets/Starcraft_CollectMinerals_A3C.py @@ -37,9 +37,9 @@ agent_params.network_wrappers['main'].input_embedders_parameters = { } agent_params.exploration = AdditiveNoiseParameters() -agent_params.exploration.noise_percentage_schedule = ConstantSchedule(0.05) -# agent_params.exploration.noise_percentage_schedule = LinearSchedule(0.4, 0.05, 100000) -agent_params.exploration.evaluation_noise_percentage = 0.05 +agent_params.exploration.noise_schedule = ConstantSchedule(0.05) +# agent_params.exploration.noise_schedule = LinearSchedule(0.4, 0.05, 100000) +agent_params.exploration.evaluation_noise = 0.05 agent_params.network_wrappers['main'].batch_size = 64 agent_params.network_wrappers['main'].optimizer_epsilon = 1e-5 diff --git a/rl_coach/run_multiple_seeds.py b/rl_coach/run_multiple_seeds.py index b8ddc5e..6a6ddde 100644 --- a/rl_coach/run_multiple_seeds.py +++ b/rl_coach/run_multiple_seeds.py @@ -53,10 +53,14 @@ if __name__ == "__main__": "the preset name, followed by the environment level", default='', type=str) - parser.add_argument('-sd', '--level_as_sub_dir', + parser.add_argument('-lsd', '--level_as_sub_dir', help="(flag) Store each level in it's own sub directory where the root directory name matches " "the preset name", action='store_true') + parser.add_argument('-ssd', '--seed_as_sub_dir', + help="(flag) Store each seed in it's own sub directory where the root directory name matches " + "the preset name", + action='store_true') parser.add_argument('-ew', '--evaluation_worker', help="(flag) Start an additional worker that will only do evaluation", action='store_true') @@ -108,6 +112,8 @@ if __name__ == "__main__": command.append("-c") if args.evaluation_worker: command.append("-ew") + if args.seed_as_sub_dir: + seed = '' if level is not None: command.extend(['-lvl', '{}'.format(level)]) if level_as_sub_dir: