From 6a91da264f1e642d0ca8da4cdd4c1f515487e49d Mon Sep 17 00:00:00 2001 From: pseudo-rnd-thoughts Date: Mon, 19 Aug 2024 10:53:51 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20Farama-F?= =?UTF-8?q?oundation/HighwayEnv@fa446b3d3433f81a3e636ad5fd6c23db7a63a4fb?= =?UTF-8?q?=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/_images/index_1_0.png | Bin 7893 -> 8073 bytes main/_images/index_2_0.png | Bin 10360 -> 10504 bytes main/_images/index_2_1.png | Bin 12472 -> 12695 bytes main/_images/index_2_2.png | Bin 14316 -> 14532 bytes main/_images/index_3_1.png | Bin 25606 -> 24305 bytes main/_images/quickstart_0_0.png | Bin 7806 -> 7779 bytes main/_images/quickstart_2_0.png | Bin 6226 -> 6251 bytes main/_modules/highway_env/__init__/index.html | 3 +- .../envs/common/abstract/index.html | 44 +++++------ .../highway_env/envs/common/action/index.html | 50 ++++++------ .../envs/common/graphics/index.html | 20 ++--- .../envs/common/observation/index.html | 71 +++++++++--------- .../highway_env/envs/highway_env/index.html | 5 +- .../envs/intersection_env/index.html | 12 +-- .../highway_env/envs/merge_env/index.html | 5 +- .../highway_env/envs/parking_env/index.html | 9 ++- .../highway_env/envs/racetrack_env/index.html | 4 +- .../envs/roundabout_env/index.html | 4 +- .../highway_env/road/graphics/index.html | 31 ++++---- .../_modules/highway_env/road/lane/index.html | 46 ++++++------ .../highway_env/road/regulation/index.html | 8 +- .../_modules/highway_env/road/road/index.html | 54 ++++++------- .../highway_env/vehicle/behavior/index.html | 14 ++-- .../highway_env/vehicle/controller/index.html | 1 - .../highway_env/vehicle/kinematics/index.html | 26 +++---- main/actions/index.html | 10 +-- main/dynamics/road/lane/index.html | 22 +++--- main/dynamics/road/regulation/index.html | 2 +- main/dynamics/road/road/index.html | 4 +- main/dynamics/vehicle/behavior/index.html | 4 +- main/dynamics/vehicle/kinematics/index.html | 6 +- main/environments/highway/index.html | 2 +- main/environments/intersection/index.html | 4 +- main/environments/merge/index.html | 2 +- main/environments/parking/index.html | 2 +- main/environments/racetrack/index.html | 2 +- main/environments/roundabout/index.html | 2 +- main/graphics/index.html | 10 +-- main/make_your_own/index.html | 14 ++-- main/multi_agent/index.html | 10 +-- main/observations/index.html | 36 ++++----- main/searchindex.js | 2 +- 42 files changed, 269 insertions(+), 272 deletions(-) diff --git a/main/_images/index_1_0.png b/main/_images/index_1_0.png index a111a87e06173603ee42ec7f1fa6b39b243c4094..9af546eeed2f55658ae50502c3c4eaa4d5d420cd 100644 GIT binary patch literal 8073 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 diff --git a/main/_images/index_2_0.png b/main/_images/index_2_0.png index 80baf679442bc8c0c9abdea61befb86df5a7ec0e..95f64dbf3873870ddef32e536592f2be64b57265 100644 GIT binary patch literal 10504 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 aNhXVC%Yo%{rneP7pko!9UD{eI^ie%U~K&+ojy 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

W}@1NdiCeZT~+8 zF0lEd?3^NYE$+SZWM7ltuF=9Re~DNuw988pDExylsK4?ggdoy3>%(Wp6ULcLrUvJh zojkxRKmqUmd)GA(h$1Tbx1D>Ceev<&bG$ok=m_PbK3cFFjAc`3lHb37UxQOL4f+$% zte5fS->d8C6k!Ba4$3K%l2^2^M;g0NJSEw`+m&9=o>fe_bf|?mW_`fS1OAO>-9b7z85 zHUYV`h0lF(8f<+|mDxK;?4Yd#TzJEo@m^X>eQm<3{Zc-)LcQ?%o^g`us48kb^5J{+khH53L7pV^uC-#nC& z5_ZtUwVG}Q)`_1RbQb5;mY`*N8S#1(xpFJDOAOd)B9XN0U`V3q6Ftdt4=U}Qx+p{@Q!4Pb% z7-7T>mwcYn#}{=-`W(2~O+UI1aC3tpS=DC^olwx(Ez0IFZ-DVwP$<=M;IM*u)eQ|; zx8)b-wAgn^)aCWs8t0l2~Dffj^s^;dpS5c zVd;}yAl9`}zX;i;Ed*Z4>OK?ge?Fb!{`uJq)Q+d{xD8CPCM`{P&tdsX&|v|GCl0tD zFq%r<(OF&G!VhfqX5IY}3G@r(@o9XwMwD_C+IKf*hWC2;P=iPPlaX)QFvREE)EqmM z;_@anHC4`M+5*~w-vjXVLx@xS438K55VM^CqCH8)@5;o)1h29W(v~JS|A5-#4fS|* z7R$!Lmj$g3AJ36nXG%aT(yYN?$N_U3_LxDs`Mu}@Kpq$|3V}_p@9_EZAqmkd2Q!En zi8|Vt1R>#5oOzKbQXfhz`rcg)&uxf^h}5C&h`sQP#-~6=<$xTV&v?uwRG~%%0T|(TNPqj1%Jc)|hB_AvH1p5>arb`#%Fvl4 diff --git a/main/_images/index_2_1.png b/main/_images/index_2_1.png index 32835536e438c0b02605c63a40a0644efe7c0776..39476e3e1d7e12878989fc9d155eac64fb39b876 100644 GIT binary patch literal 12695 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 JK-%!p{{q#)Nb>*y diff --git a/main/_images/index_2_2.png b/main/_images/index_2_2.png index 93bcb02b9e46f779153150b86e6cdd9a2e9fdaf2..d82aebeda1466e650f2f56635b87b8ca8a6c845e 100644 GIT binary patch literal 14532 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 diff --git a/main/_images/index_3_1.png b/main/_images/index_3_1.png index 98df4ef7fd91616bb55bde9b3b686813b8a3f696..4616c0409cabbb274dcf61627827a4aab1ab264d 100644 GIT binary patch literal 24305 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 abrti(T)m6$7SzvwU~7HgtD?O=@&5*}XbQjp literal 25606 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 Ut;>TPyzqr6D`?1nmNg6c58ZiqSpWb4 literal 7806 zcmdscWmuHoyY&!~(j7`jgOqf4DpGrF&UOBu-uHUHydPlCJkK-x*>T_NUTf_*Lj!Fx5@r$z1VW~(qhSnz;PQdb z6+{H!zfq039cW~IG#~nycsTg@+j`kU?%Dcyx_bDyI@_`P*?W0Ad$`{bmK7EkVt4ZK z@${Ax5pnyk2ZTMm97Q+`@Fqbg#GX2jyde+@TkIdsC*=}n2;|15u7;{vxboo75Pnt*x$b`2i{AP-oAZ1f|(lo;wT5BW^8P% zdnzTam6er_u5N@`Fb1Wg_R{GtwLu9D9Ua}nT9=HHkK-;Wd3j0I)#7l>4RS(O@|e{_ z@713i^76qt-Fjefm*Yc2u&-agZtl<|!$zj2NHY7Qi;KB*75Vvzc@47nrov|$eIGXY zRhoxhUYrhX9!E+Ufb}|HD;bSjT(r~B)}Hg6gW=OQm{nRtX9$`HDb-E7>fFB{1BE-P zaBy;xh_?zMiF8!rl9FN!O4Pl*Yl>%o|Gu8kwOEVzZUg&n!&tTe=5GYMw#;|41)5Z9 zQd0Q!>zIjm(+uD3+tK4LWSz-io;sSif9a8Z8G=<#!<=`sq{v1~?)RJ>Zw}AQBx>Ib zr>l5Tl3z;B9&19t+hFzBk#bHA=AM9>zb+ULgNBGYM5~62=MIiH)b+hfAaWqCy=xh0%`X{0< zu?e8+USu4SDinHCE0HLJ;}hbJckJC2K+ z=_&p<1{xT`RZlMtkyHRu))qjADHL0N@(u%U7e<-WRU0188&0-{%3mi?&yP_B162a= zSK4J6!}-wClB2y3p1($1GP-`)Y8j~pZkN%F!SgAt^v%r~f`WrFv(ge0W1B9&CB(nh z)pe|Rowj&rXy9|+x`mm|&h60Xl@N~bXCXdL^fjkPU} z_7~$rPME{5vOx+%M&8tk+}zjsH1KRx3T*o&y9rW8wlkrPy|B+B`0fawA{)AQ_R&&Y zVDIGlv|_w|(v7hd8-{~#3R&EF4oV;Clr4UPy?`WX8;4tq6+7iS`(UWFp+ zW#Yyy7{(`GTeTRf5dSZ{0P{Fy52DRK#$2drNJ|8<4o#7bT?=B@5a@!bEk_PHsW1=- zr*b3Wr0_BWK9CnavjgMOA1xp}x|H>ZmZ69ZyR3iZ6Y92_KYY6S+(w!3=-aom4-CVe zosO2wZ$OMK)~%c(Jn-Qd31iKun5FiQ++mxjgSn*P;o-1NU5RW_uspOZEC~}66Dkyu zFR2o`sMk0s6Z!sgfd2!~ct4@?e|z=cCZeD~2VT+e8U$D^_$_wEi87|&4p9g>5&iAH z9#PWJ&;U@QI=I17m{rzG!l=bis1N#?o(Idi z@E|ocTw@axd-Sts&(zh`Bh3|W-BKTJOsR2179N)saissng}r~z?BlNwU$_%?5deaK zZ^Qp+&FBb?)_1AN_JF3mxI&|d$1qDS<6fwsC|djJvj*Tc!DoT@{~2q|ZY8wQPC+ zpXIsl-Vvwuay40phAK`?PjlA}7ikN&!km45C4+*3xN0jZga9+(-;f^K?aa<*b*jBW zTl^Tmnmfk#Rnfh7FXLE$35*_!(*?S1O0o)fyv?nxcj*jMQ&VXb3m|R# zOFb>vRU#rzxmq%R@IcZ=#mLKg#vKjA(S)M}HyrDxTX6N9oIWk?MjDhHlJKRZq{N^5 z`uhi8qfP5AuAe(STm=t=geWX7E!m@8TwIt%^NWj%`OfglK7Mp)gQdQIFCcGfDfr{# zhY$QDd@U_4P#kV9E{%P3L2d20V186gjNk_9*DopX;xkJW3MFl$5|@x*LK|T5_%Z0& z(vmebEzKT{D@?dlju+WwXGB{a(I2j2b;EFEWP}SrBVyIK?5&)5;vhs$EtN&alSWL+ zARGmSQyh7MGVy~DaGu9??wXE{ysxyDe9F!W})rJmX;gBnMtUEcnS48&cABwp23Pu+h&I#)88ZGlY%%?6F?q0yYhrbQ_yRBk!dbN1+J@S&7bC^slpOT79nwhMS#{%QGVo$`rMvgAd z?}34LqkNb3+jc?)xC&Ld&-rriE1lv~D4nny8yn{jI~f`qb506JwQY=-r(|cp+S~J7 zUR@2&5v>4Yi;j*KWlj{$8pKuy+q!9wjn|Y^!|aRtd=i~c3Db9W+?W6SvFmtAhUXrB zx{|ryCkVGW{4+R#2v-I;D)#J`P%o1uDJkjmtqHNM*%lVIkUbow(`6ck%af(P-D^}- zWbcbj*|jc-z2e;CxBe-VhK7cs^HLo6zu?wMt9ju!DHM+=AvT-8Ds}Yq)O2-;{~+^{ z%E|<`rfNwE$ywXJI*&pi@YXYd9mG}G#U&b{t)~}nZXMIXA?tQHUXsbfS@=EeEpGj0 z#9_ouqC~zhMWe@7RyRPkPR`5QEq!;FXL)6%prYbB#L&!)pk{K5m=^->P*j>FV9wDL z6aN3LqAP=nE@4N^!ET8`wKl**eCFzzQrJ#?Q(R3qT;hewZ) ziu%RG#6zT#`Qus_I!-gRYQ%~usjSjqHQU+uW0>T#kohY)lBk)I9R%ATiO5^s zVhuyqt|y|50e{svIobY!-frH|DRVgL$z6v(>`AdYN(h2z^+rzk3(Q01d$5=jRVNS%|@b0ATL~UF}aiNwNh|u(r9`0jRE6_~ivo(tN|s zN;A^RU+7mWH*Hcfv*B#L7=n!t!%iRqpQ5SNRET!d1Ws!5MxZKtp=@Kb_nqO-6b&vW zk#k8jA23=Y=tlZ4)yo}GQY(x176LC?jQm3RGa@Wuu!yMRDni5TE}Z}0MCD+E%5 z>ZX(w3gQ_``rN$YVFVzpdBGv0@NmpCnH&S;Dsv)%rl#i5x_h(ewu_>o;>n;#*sW5q zj!Ub`R}F<#k`fa0;O%K+Sf&Z2frcL(2p;TWK#!U3IN1E%nyfy*p%6eR@3*yAb~R6^ ztb(lrVQgV19DV)$+_kdaf9AhUyQj^NLZIOo-w@0(Ds?KATmLEHnjkc2o!iIXU*83( zeAQg&`v8I2_GmG1aS~mM3tiQAL>`I%Gx$=cbOAFQNcDIG2C{7?B^)3IHk1GRj8Ym2`H z?AtvRc!=Bwm-EZY`pPd8tS{PESGznc5Mhc_Q&U`$pg0s3a!w)!qA0OSZFw=$qLTjE zuL`51gep+IL=YF%#q@wEIOYaw`H4Ved^c#nxlVGH+S}U~eEDMN2fyR^b3RdecCT#C z8>v_in7ln&P*AW#n=N$t!PNpqcx)UEZ{H5MzPm6~pq@H)ae64`Ji;~E0J-g=1)LVBND~UHz4SAMbzOp5 zZr)eekJ^F?XOgl=yC0SD^6=QrHV0OpTQvtzc_1*~ir*wB!$5!iJJ%pU)l4*amlVIr z$cR4QX}WKO06KzI##6<(349f^@1xbk%!XfuX3KhO8E4&bBnPv3iay)xpm=_E9{J;%}P!mvrDSUH6d_dQ^?ioTz0c!hsK@2T|Shb}68ALRO8YAmY|`cDl1XTKTb9 zFJxJ72rfA}IjQLC#udK-2(}xBZmJH>k@qLxZ9(Unhn^j+|LE^en}JtXQ|E=9m6~HN z&v$$3T90o}VlEH!u0R^-84L39wE>!kO()<(Sk`;08lMj*g+&4OqlvjZ$V9ZQ`{=po zzY$W^(TQCJcEW3r{rNRDG+IUbjhGj5`4tbVa0w#6ufjLi)?ocBsbd2UHH9iTSa}7l z1w}(s`6~cq1`%lbm;^H!z+SMufE-F?-7_X7BWqc}vt!3#Fwpyc5K4Obk88a(b#)9g zGc(ZRPoMZ6%^?LFo0^8Frv*zjwX`^egzjROVQWhxJRDK%ApVX^`KcEu6H6OxcRnPg zMFjDOW)pD?&Cc#TK&|`4t2OnnsA+4*SO?+2Iu>9v?wMoP2_h?$^;*{ff)cIN zaza1{lrQl5fPkb6O^b_-by|}JfGijyO~TiA$;HK)H@WQxM+jVew-FW1ry2eNWRS#< z_ZGr!7s}CL>mP<8x}|MhQx+5Vvkfok*{Kp;fr5v6B%Z5dd1sw3yc_$xL?dPA4El<; zQg(mi15ULE;m@t9xI4TCC$>Hs64c-gjF*m7N6$;c)-%OPhT?9TUjD5EqVJa3P$ly% zPRaNm1F8?F@DWFP+4xb7Eewov*9m9~**Wn&Pas3nXYCDp}S!mo3^ZEx{hVPv= z5_kr(8HJhz@H{GHPfI6xo1P>7B9_l-j}H9OYlSa2m$B`f_L+u8L`o`-(|JTq*j6tX zD(!FKs|vSqXjq>4b@+Ei?5y7dHA$PH;&g}e(g#?hzd?jmozjWL#Sa~ zx3?Gl8P}Ib0#$gMMQpw9FdD`ZOs)+V;VA+$D(=e{QJ+hU^uJ`D9^6fm63br;sd#vJ zwDzwt$B-l~0w;lUoVd^2@UvxrTYi5U4M0gbtJ9Y4{%fX^cA~;HazB3NDkdBq9RW=U zm@zFj(JU;ce9^>xutmQnBP*-Ktu0px35hl*34$OURRDY(ii$ahYlPYQR|}SBgsa2h zGMSegQ7S;AW9jKQG(1Dsu(hiQSc&h0PDz0EkwQVQJg;y@u{wf%^n2hD+s~E3JMZo) zZTDza1A$j82et&;sInLWAsZhbZzIZxtC*hOjeYdPm8UQ!@^DQ#yT5=TJ>e-flmbYn z%niYColfkqt|8~R?Z0cl6sm1I2wvS(WVW@n1sKu6U>!oW#!>o{H!tJ`AzKI~AVNUE z^6~ShxH72O9B+*47#L^;1jrm59vYdL+?p);H;g)F4~jqA=)388zFl`qPL4S)E)Gkk zz)IboECET~|K_$j&?kk3g`)mDmRQ00w-gTV!J|-s#l{i=nz`txe9m-sejao18Gj5o zRLN;+OR}UT<1Sr4bL17LWn=nUjz;vsxE@y7MVEA+9szUi86aI;bwCs%{eC`y#j%@M zS_&NnwFDdvN_SN~>FIouq{ssR2^e+cM?p(NRsnRZkB3MY?YI|K`|fJ~Tl7 z1~y?VgI{5%^Ov(;89ReV0Zp^J2$kftPCGw zWM;+_RnJOaYf%Xd#e=OH=TRP83FhdI1;#1)d`>YjvBhJQ^(w2t*!VbicOna~-|p<~ zR>1s%aY0l$Q2ya{~h>EvpO2HsA$}{vT8?MwLrC9B_}<)EhjIJ1F5R2g23YANsf+>b^nM9 z3X(E0F{L&%ue^DjoSwcs>G-SS5imPs{I(`2Uqf$L3NyqfBmh60tbDvr*3@aT+CE@D zf{^QwU{8$S{N6n>kjtVD1B|rv^o6ahHzBJ=WG^;cx+^OyJsT`j3GpCY+}sPmy2W9B zu;=XJf(yf0-S7KP9rZ0HDvDi7>Q@a?XUVUr%C3uK;H?;58t;7oow>j%0g?K2u6)%i zzoE6-tysounW(}{5YQuF8b*UyWtW#{$;imaR(}VE_WK!t;(*uMYG0zk-@8P&@C{Isl}`H60BsGCRXUl+3%S_u z(b3mG9J@_V3N~6!PLAu`S}_xE@HoTmRx}je11O1@?}ll`<2rI63{OV$E<0t@OA8Be z!BJ2B_P1$DYU&rs$&^@M9o~FEqNb(>Hna28^oOg|lZ%u6PnDG`OUBn;2;{FF2i?t) zqxY68IZ&yq12 zZi}AzXF$SiMHxH6W_AL%scR`oSr{7?bdpxkh48f@j_2SHN96*j3CbAq8`Rd}m|Duk z1KVzgnnxFa)6vFIu+amfVF(t(G#9j4X?JyrS*$@S(Ex$L@;rt~5CjyU^Z( z*i2!ogRR5mwEOX|UR|$pMBdzA$+RXZ9~Y=FD|bB4P^Us1=IqAy_32eTLkXuOCyN%6 zYleVBw9eMha}6u29GQ@lFW5u1D1Z=Gz_Ey?%Sag4w<9~dLJB3A`WQi@dKd7IRI$CRSIq714n*G$)>Ad-t>@W_XPUe z)M}PWV<*uJP)c20-F6$%Sm0g8Z)~{eCILlQW%C^uBnLMrrUA<-+8XBO=8&Cx^VcO} zAf1mrT2>}YN=me`?76eE6O=_FF(4*}CnosTz5fg_85tU~gDBPv326=hM>d+))^n6| zS#6J+1F9G$UDClJ9VZ8e>Oi*aD2)LC-r0(BJOEVEKmybB_V%j5Q3+#XreYqm3Pz6~ zZ%+OUye^bTsfPcjmIV~v!ia0*|9EH2On{q!gE!y*%jQzq${{XUPk{6koCQO4H4QXA ItJ%Ex58)~Cu>b%7 diff --git a/main/_images/quickstart_2_0.png b/main/_images/quickstart_2_0.png index 85b5215d8160b4b3b6af4ff2300e57420f60e617..3f093bf5713f9529e0e49fcbac5105e79e354aed 100644 GIT binary patch literal 6251 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

V&89iwVA1W(lM%=1P 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 diff --git a/main/_modules/highway_env/__init__/index.html b/main/_modules/highway_env/__init__/index.html index f3790bf8b..37c4ef488 100644 --- a/main/_modules/highway_env/__init__/index.html +++ b/main/_modules/highway_env/__init__/index.html @@ -296,7 +296,8 @@

Source code for highway_env.__init__

 
 from gymnasium.envs.registration import register
 
-__version__ = "1.10.0"
+
+__version__ = "2.0.0"
 
 try:
     from farama_notifications import notifications
diff --git a/main/_modules/highway_env/envs/common/abstract/index.html b/main/_modules/highway_env/envs/common/abstract/index.html
index f809c24b7..df2252a62 100644
--- a/main/_modules/highway_env/envs/common/abstract/index.html
+++ b/main/_modules/highway_env/envs/common/abstract/index.html
@@ -291,9 +291,11 @@
           

Source code for highway_env.envs.common.abstract

-import copy
+from __future__ import annotations
+
+import copy
 import os
-from typing import Dict, List, Optional, Text, Tuple, TypeVar
+from typing import TypeVar
 
 import gymnasium as gym
 import numpy as np
@@ -309,13 +311,13 @@ 

Source code for highway_env.envs.common.abstract

from highway_env.vehicle.behavior import IDMVehicle from highway_env.vehicle.kinematics import Vehicle + Observation = TypeVar("Observation")
[docs] class AbstractEnv(gym.Env): - """ A generic environment for various tasks involving a vehicle driving on a road. @@ -326,7 +328,7 @@

Source code for highway_env.envs.common.abstract

observation_type: ObservationType action_type: ActionType - _record_video_wrapper: Optional[RecordVideo] + _record_video_wrapper: RecordVideo | None metadata = { "render_modes": ["human", "rgb_array"], } @@ -334,7 +336,7 @@

Source code for highway_env.envs.common.abstract

PERCEPTION_DISTANCE = 5.0 * Vehicle.MAX_SPEED """The maximum distance of any vehicle present in the observation [m]""" - def __init__(self, config: dict = None, render_mode: Optional[str] = None) -> None: + def __init__(self, config: dict = None, render_mode: str | None = None) -> None: super().__init__() # Configuration @@ -442,7 +444,7 @@

Source code for highway_env.envs.common.abstract

[docs] - def _rewards(self, action: Action) -> Dict[Text, float]: + def _rewards(self, action: Action) -> dict[str, float]: """ Returns a multi-objective vector of rewards. @@ -479,7 +481,7 @@

Source code for highway_env.envs.common.abstract

[docs] - def _info(self, obs: Observation, action: Optional[Action] = None) -> dict: + def _info(self, obs: Observation, action: Action | None = None) -> dict: """ Return a dictionary of additional information @@ -504,9 +506,9 @@

Source code for highway_env.envs.common.abstract

def reset( self, *, - seed: Optional[int] = None, - options: Optional[dict] = None, - ) -> Tuple[Observation, dict]: + seed: int | None = None, + options: dict | None = None, + ) -> tuple[Observation, dict]: """ Reset the environment to it's initial configuration @@ -543,7 +545,7 @@

Source code for highway_env.envs.common.abstract

[docs] - def step(self, action: Action) -> Tuple[Observation, float, bool, bool, dict]: + def step(self, action: Action) -> tuple[Observation, float, bool, bool, dict]: """ Perform an action and step the environment dynamics. @@ -574,7 +576,7 @@

Source code for highway_env.envs.common.abstract

[docs] - def _simulate(self, action: Optional[Action] = None) -> None: + def _simulate(self, action: Action | None = None) -> None: """Perform several steps of simulation with constant action.""" frames = int( self.config["simulation_frequency"] // self.config["policy_frequency"] @@ -609,7 +611,7 @@

Source code for highway_env.envs.common.abstract

[docs] - def render(self) -> Optional[np.ndarray]: + def render(self) -> np.ndarray | None: """ Render the environment. @@ -651,7 +653,7 @@

Source code for highway_env.envs.common.abstract

self.viewer = None
- def get_available_actions(self) -> List[int]: + def get_available_actions(self) -> list[int]: return self.action_type.get_available_actions() def set_record_video_wrapper(self, wrapper: RecordVideo): @@ -676,7 +678,7 @@

Source code for highway_env.envs.common.abstract

[docs] - def simplify(self) -> "AbstractEnv": + def simplify(self) -> AbstractEnv: """ Return a simplified copy of the environment where distant vehicles have been removed from the road. @@ -696,7 +698,7 @@

Source code for highway_env.envs.common.abstract

[docs] - def change_vehicles(self, vehicle_class_path: str) -> "AbstractEnv": + def change_vehicles(self, vehicle_class_path: str) -> AbstractEnv: """ Change the type of all vehicles on the road @@ -714,7 +716,7 @@

Source code for highway_env.envs.common.abstract

return env_copy
- def set_preferred_lane(self, preferred_lane: int = None) -> "AbstractEnv": + def set_preferred_lane(self, preferred_lane: int = None) -> AbstractEnv: env_copy = copy.deepcopy(self) if preferred_lane: for v in env_copy.road.vehicles: @@ -724,14 +726,14 @@

Source code for highway_env.envs.common.abstract

v.LANE_CHANGE_MAX_BRAKING_IMPOSED = 1000 return env_copy - def set_route_at_intersection(self, _to: str) -> "AbstractEnv": + def set_route_at_intersection(self, _to: str) -> AbstractEnv: env_copy = copy.deepcopy(self) for v in env_copy.road.vehicles: if isinstance(v, IDMVehicle): v.set_route_at_intersection(_to) return env_copy - def set_vehicle_field(self, args: Tuple[str, object]) -> "AbstractEnv": + def set_vehicle_field(self, args: tuple[str, object]) -> AbstractEnv: field, value = args env_copy = copy.deepcopy(self) for v in env_copy.road.vehicles: @@ -739,7 +741,7 @@

Source code for highway_env.envs.common.abstract

setattr(v, field, value) return env_copy - def call_vehicle_method(self, args: Tuple[str, Tuple[object]]) -> "AbstractEnv": + def call_vehicle_method(self, args: tuple[str, tuple[object]]) -> AbstractEnv: method, method_args = args env_copy = copy.deepcopy(self) for i, v in enumerate(env_copy.road.vehicles): @@ -747,7 +749,7 @@

Source code for highway_env.envs.common.abstract

env_copy.road.vehicles[i] = getattr(v, method)(*method_args) return env_copy - def randomize_behavior(self) -> "AbstractEnv": + def randomize_behavior(self) -> AbstractEnv: env_copy = copy.deepcopy(self) for v in env_copy.road.vehicles: if isinstance(v, IDMVehicle): diff --git a/main/_modules/highway_env/envs/common/action/index.html b/main/_modules/highway_env/envs/common/action/index.html index ad14f4c67..6c091d984 100644 --- a/main/_modules/highway_env/envs/common/action/index.html +++ b/main/_modules/highway_env/envs/common/action/index.html @@ -291,9 +291,11 @@

Source code for highway_env.envs.common.action

-import functools
+from __future__ import annotations
+
+import functools
 import itertools
-from typing import TYPE_CHECKING, Callable, List, Optional, Tuple, Union
+from typing import TYPE_CHECKING, Callable, Union
 
 import numpy as np
 from gymnasium import spaces
@@ -304,6 +306,7 @@ 

Source code for highway_env.envs.common.action

from highway_env.vehicle.dynamics import BicycleVehicle from highway_env.vehicle.kinematics import Vehicle + if TYPE_CHECKING: from highway_env.envs.common.abstract import AbstractEnv @@ -312,11 +315,10 @@

Source code for highway_env.envs.common.action

[docs] -class ActionType(object): - +class ActionType: """A type of action specifies its definition space, and how actions are executed in the environment""" - def __init__(self, env: "AbstractEnv", **kwargs) -> None: + def __init__(self, env: AbstractEnv, **kwargs) -> None: self.env = env self.__controlled_vehicle = None @@ -376,7 +378,6 @@

Source code for highway_env.envs.common.action

[docs] class ContinuousAction(ActionType): - """ An continuous action space for throttle and/or steering angle. @@ -393,10 +394,10 @@

Source code for highway_env.envs.common.action

def __init__( self, - env: "AbstractEnv", - acceleration_range: Optional[Tuple[float, float]] = None, - steering_range: Optional[Tuple[float, float]] = None, - speed_range: Optional[Tuple[float, float]] = None, + env: AbstractEnv, + acceleration_range: tuple[float, float] | None = None, + steering_range: tuple[float, float] | None = None, + speed_range: tuple[float, float] | None = None, longitudinal: bool = True, lateral: bool = True, dynamical: bool = False, @@ -480,9 +481,9 @@

Source code for highway_env.envs.common.action

class DiscreteAction(ContinuousAction): def __init__( self, - env: "AbstractEnv", - acceleration_range: Optional[Tuple[float, float]] = None, - steering_range: Optional[Tuple[float, float]] = None, + env: AbstractEnv, + acceleration_range: tuple[float, float] | None = None, + steering_range: tuple[float, float] | None = None, longitudinal: bool = True, lateral: bool = True, dynamical: bool = False, @@ -521,7 +522,6 @@

Source code for highway_env.envs.common.action

[docs] class DiscreteMetaAction(ActionType): - """ An discrete action space of meta-actions: lane changes, and cruise control set-point. """ @@ -537,10 +537,10 @@

Source code for highway_env.envs.common.action

def __init__( self, - env: "AbstractEnv", + env: AbstractEnv, longitudinal: bool = True, lateral: bool = True, - target_speeds: Optional[Vector] = None, + target_speeds: Vector | None = None, **kwargs, ) -> None: """ @@ -562,11 +562,11 @@

Source code for highway_env.envs.common.action

self.actions = ( self.ACTIONS_ALL if longitudinal and lateral - else self.ACTIONS_LONGI - if longitudinal - else self.ACTIONS_LAT - if lateral - else None + else ( + self.ACTIONS_LONGI + if longitudinal + else self.ACTIONS_LAT if lateral else None + ) ) if self.actions is None: raise ValueError( @@ -586,13 +586,13 @@

Source code for highway_env.envs.common.action

[docs] - def act(self, action: Union[int, np.ndarray]) -> None: + def act(self, action: int | np.ndarray) -> None: self.controlled_vehicle.act(self.actions[int(action)])

[docs] - def get_available_actions(self) -> List[int]: + def get_available_actions(self) -> list[int]: """ Get the list of currently available actions. @@ -636,7 +636,7 @@

Source code for highway_env.envs.common.action

[docs] class MultiAgentAction(ActionType): - def __init__(self, env: "AbstractEnv", action_config: dict, **kwargs) -> None: + def __init__(self, env: AbstractEnv, action_config: dict, **kwargs) -> None: super().__init__(env) self.action_config = action_config self.agents_action_types = [] @@ -678,7 +678,7 @@

Source code for highway_env.envs.common.action

def action_factory(env: "AbstractEnv", config: dict) -> ActionType: +def action_factory(env: AbstractEnv, config: dict) -> ActionType: if config["type"] == "ContinuousAction": return ContinuousAction(env, **config) if config["type"] == "DiscreteAction": diff --git a/main/_modules/highway_env/envs/common/graphics/index.html b/main/_modules/highway_env/envs/common/graphics/index.html index 361740f51..4653e5781 100644 --- a/main/_modules/highway_env/envs/common/graphics/index.html +++ b/main/_modules/highway_env/envs/common/graphics/index.html @@ -291,8 +291,10 @@

Source code for highway_env.envs.common.graphics

-import os
-from typing import TYPE_CHECKING, Callable, List, Optional
+from __future__ import annotations
+
+import os
+from typing import TYPE_CHECKING, Callable
 
 import numpy as np
 import pygame
@@ -305,6 +307,7 @@ 

Source code for highway_env.envs.common.graphics

from highway_env.road.graphics import RoadGraphics, WorldSurface from highway_env.vehicle.graphics import VehicleGraphics + if TYPE_CHECKING: from highway_env.envs import AbstractEnv from highway_env.envs.common.abstract import Action @@ -312,14 +315,13 @@

Source code for highway_env.envs.common.graphics

[docs] -class EnvViewer(object): - +class EnvViewer: """A viewer to render a highway driving environment.""" SAVE_IMAGES = False agent_display = None - def __init__(self, env: "AbstractEnv", config: Optional[dict] = None) -> None: + def __init__(self, env: AbstractEnv, config: dict | None = None) -> None: self.env = env self.config = config or env.config self.offscreen = self.config["offscreen_rendering"] @@ -386,7 +388,7 @@

Source code for highway_env.envs.common.graphics

[docs] - def set_agent_action_sequence(self, actions: List["Action"]) -> None: + def set_agent_action_sequence(self, actions: list[Action]) -> None: """ Set the sequence of actions chosen by the agent, so that it can be displayed @@ -466,7 +468,7 @@

Source code for highway_env.envs.common.graphics

if self.SAVE_IMAGES and self.directory: pygame.image.save( self.sim_surface, - str(self.directory / "highway-env_{}.png".format(self.frame)), + str(self.directory / f"highway-env_{self.frame}.png"), ) self.frame += 1
@@ -509,7 +511,7 @@

Source code for highway_env.envs.common.graphics

-class EventHandler(object): +class EventHandler: @classmethod def handle_event( cls, action_type: ActionType, event: pygame.event.EventType @@ -566,7 +568,7 @@

Source code for highway_env.envs.common.graphics

action_type.act(action) -class ObservationGraphics(object): +class ObservationGraphics: COLOR = (0, 0, 0) @classmethod diff --git a/main/_modules/highway_env/envs/common/observation/index.html b/main/_modules/highway_env/envs/common/observation/index.html index 59a45f30e..921038a9d 100644 --- a/main/_modules/highway_env/envs/common/observation/index.html +++ b/main/_modules/highway_env/envs/common/observation/index.html @@ -291,9 +291,11 @@

Source code for highway_env.envs.common.observation

-from collections import OrderedDict
+from __future__ import annotations
+
+from collections import OrderedDict
 from itertools import product
-from typing import TYPE_CHECKING, Dict, List, Optional, Tuple
+from typing import TYPE_CHECKING
 
 import numpy as np
 import pandas as pd
@@ -306,12 +308,13 @@ 

Source code for highway_env.envs.common.observation

from highway_env.utils import Vector from highway_env.vehicle.kinematics import Vehicle + if TYPE_CHECKING: from highway_env.envs.common.abstract import AbstractEnv -class ObservationType(object): - def __init__(self, env: "AbstractEnv", **kwargs) -> None: +class ObservationType: + def __init__(self, env: AbstractEnv, **kwargs) -> None: self.env = env self.__observer_vehicle = None @@ -340,7 +343,6 @@

Source code for highway_env.envs.common.observation

[docs] class GrayscaleObservation(ObservationType): - """ An observation class that collects directly what the simulator renders. @@ -359,12 +361,12 @@

Source code for highway_env.envs.common.observation

def __init__( self, - env: "AbstractEnv", - observation_shape: Tuple[int, int], + env: AbstractEnv, + observation_shape: tuple[int, int], stack_size: int, - weights: List[float], - scaling: Optional[float] = None, - centering_position: Optional[List[float]] = None, + weights: list[float], + scaling: float | None = None, + centering_position: list[float] | None = None, **kwargs, ) -> None: super().__init__(env) @@ -412,7 +414,7 @@

Source code for highway_env.envs.common.observation

class TimeToCollisionObservation(ObservationType): - def __init__(self, env: "AbstractEnv", horizon: int = 10, **kwargs: dict) -> None: + def __init__(self, env: AbstractEnv, horizon: int = 10, **kwargs: dict) -> None: super().__init__(env) self.horizon = horizon @@ -454,17 +456,16 @@

Source code for highway_env.envs.common.observation

[docs] class KinematicObservation(ObservationType): - """Observe the kinematics of nearby vehicles.""" - FEATURES: List[str] = ["presence", "x", "y", "vx", "vy"] + FEATURES: list[str] = ["presence", "x", "y", "vx", "vy"] def __init__( self, - env: "AbstractEnv", - features: List[str] = None, + env: AbstractEnv, + features: list[str] = None, vehicles_count: int = 5, - features_range: Dict[str, List[float]] = None, + features_range: dict[str, list[float]] = None, absolute: bool = False, order: str = "sorted", normalize: bool = True, @@ -591,20 +592,19 @@

Source code for highway_env.envs.common.observation

[docs] class OccupancyGridObservation(ObservationType): - """Observe an occupancy grid of nearby vehicles.""" - FEATURES: List[str] = ["presence", "vx", "vy", "on_road"] - GRID_SIZE: List[List[float]] = [[-5.5 * 5, 5.5 * 5], [-5.5 * 5, 5.5 * 5]] - GRID_STEP: List[int] = [5, 5] + FEATURES: list[str] = ["presence", "vx", "vy", "on_road"] + GRID_SIZE: list[list[float]] = [[-5.5 * 5, 5.5 * 5], [-5.5 * 5, 5.5 * 5]] + GRID_STEP: list[int] = [5, 5] def __init__( self, - env: "AbstractEnv", - features: Optional[List[str]] = None, - grid_size: Optional[Tuple[Tuple[float, float], Tuple[float, float]]] = None, - grid_step: Optional[Tuple[float, float]] = None, - features_range: Dict[str, List[float]] = None, + env: AbstractEnv, + features: list[str] | None = None, + grid_size: tuple[tuple[float, float], tuple[float, float]] | None = None, + grid_step: tuple[float, float] | None = None, + features_range: dict[str, list[float]] = None, absolute: bool = False, align_to_vehicle_axes: bool = False, clip: bool = True, @@ -738,7 +738,7 @@

Source code for highway_env.envs.common.observation

[docs] - def pos_to_index(self, position: Vector, relative: bool = False) -> Tuple[int, int]: + def pos_to_index(self, position: Vector, relative: bool = False) -> tuple[int, int]: """ Convert a world position to a grid cell index @@ -761,7 +761,7 @@

Source code for highway_env.envs.common.observation

)
- def index_to_pos(self, index: Tuple[int, int]) -> np.ndarray: + def index_to_pos(self, index: tuple[int, int]) -> np.ndarray: position = np.array( [ (index[0] + 0.5) * self.grid_step[0] + self.grid_size[0, 0], @@ -836,7 +836,7 @@

Source code for highway_env.envs.common.observation

[docs] class KinematicsGoalObservation(KinematicObservation): - def __init__(self, env: "AbstractEnv", scales: List[float], **kwargs: dict) -> None: + def __init__(self, env: AbstractEnv, scales: list[float], **kwargs: dict) -> None: self.scales = np.array(scales) super().__init__(env, **kwargs) @@ -873,7 +873,7 @@

Source code for highway_env.envs.common.observation

[docs] - def observe(self) -> Dict[str, np.ndarray]: + def observe(self) -> dict[str, np.ndarray]: if not self.observer_vehicle: return OrderedDict( [ @@ -904,9 +904,7 @@

Source code for highway_env.envs.common.observation

class AttributesObservation(ObservationType): - def __init__( - self, env: "AbstractEnv", attributes: List[str], **kwargs: dict - ) -> None: + def __init__(self, env: AbstractEnv, attributes: list[str], **kwargs: dict) -> None: self.env = env self.attributes = attributes @@ -924,14 +922,14 @@

Source code for highway_env.envs.common.observation

except AttributeError: return spaces.Space() - def observe(self) -> Dict[str, np.ndarray]: + def observe(self) -> dict[str, np.ndarray]: return OrderedDict( [(attribute, getattr(self.env, attribute)) for attribute in self.attributes] ) class MultiAgentObservation(ObservationType): - def __init__(self, env: "AbstractEnv", observation_config: dict, **kwargs) -> None: + def __init__(self, env: AbstractEnv, observation_config: dict, **kwargs) -> None: super().__init__(env) self.observation_config = observation_config self.agents_observation_types = [] @@ -951,7 +949,7 @@

Source code for highway_env.envs.common.observation

class TupleObservation(ObservationType): def __init__( - self, env: "AbstractEnv", observation_configs: List[dict], **kwargs + self, env: AbstractEnv, observation_configs: list[dict], **kwargs ) -> None: super().__init__(env) self.observation_types = [ @@ -969,7 +967,6 @@

Source code for highway_env.envs.common.observation

[docs] class ExitObservation(KinematicObservation): - """Specific to exit_env, observe the distance to the next exit lane as part of a KinematicObservation."""
@@ -1121,7 +1118,7 @@

Source code for highway_env.envs.common.observation

return np.array([np.cos(index * self.angle), np.sin(index * self.angle)]) -def observation_factory(env: "AbstractEnv", config: dict) -> ObservationType: +def observation_factory(env: AbstractEnv, config: dict) -> ObservationType: if config["type"] == "TimeToCollision": return TimeToCollisionObservation(env, **config) elif config["type"] == "Kinematics": diff --git a/main/_modules/highway_env/envs/highway_env/index.html b/main/_modules/highway_env/envs/highway_env/index.html index 734631e06..bffae67d0 100644 --- a/main/_modules/highway_env/envs/highway_env/index.html +++ b/main/_modules/highway_env/envs/highway_env/index.html @@ -291,7 +291,7 @@

Source code for highway_env.envs.highway_env

-from typing import Dict, Text
+from __future__ import annotations
 
 import numpy as np
 
@@ -303,6 +303,7 @@ 

Source code for highway_env.envs.highway_env

from highway_env.vehicle.controller import ControlledVehicle
 from highway_env.vehicle.kinematics import Vehicle
 
+
 Observation = np.ndarray
 
 
@@ -412,7 +413,7 @@ 

Source code for highway_env.envs.highway_env

reward *= rewards["on_road_reward"]
         return reward
 
-    def _rewards(self, action: Action) -> Dict[Text, float]:
+    def _rewards(self, action: Action) -> dict[str, float]:
         neighbours = self.road.network.all_side_lanes(self.vehicle.lane_index)
         lane = (
             self.vehicle.target_lane_index[2]
diff --git a/main/_modules/highway_env/envs/intersection_env/index.html b/main/_modules/highway_env/envs/intersection_env/index.html
index 946c15432..0755f0ad7 100644
--- a/main/_modules/highway_env/envs/intersection_env/index.html
+++ b/main/_modules/highway_env/envs/intersection_env/index.html
@@ -291,7 +291,7 @@
           

Source code for highway_env.envs.intersection_env

-from typing import Dict, Text, Tuple
+from __future__ import annotations
 
 import numpy as np
 
@@ -306,7 +306,7 @@ 

Source code for highway_env.envs.intersection_env

[docs] class IntersectionEnv(AbstractEnv): - ACTIONS: Dict[int, str] = {0: "SLOWER", 1: "IDLE", 2: "FASTER"} + ACTIONS: dict[int, str] = {0: "SLOWER", 1: "IDLE", 2: "FASTER"} ACTIONS_INDEXES = {v: k for k, v in ACTIONS.items()}
@@ -362,7 +362,7 @@

Source code for highway_env.envs.intersection_env

self._agent_reward(action, vehicle) for vehicle in self.controlled_vehicles ) / len(self.controlled_vehicles) - def _rewards(self, action: int) -> Dict[Text, float]: + def _rewards(self, action: int) -> dict[str, float]: """Multi-objective rewards, for cooperative agents.""" agents_rewards = [ self._agent_rewards(action, vehicle) for vehicle in self.controlled_vehicles @@ -389,7 +389,7 @@

Source code for highway_env.envs.intersection_env

) return reward - def _agent_rewards(self, action: int, vehicle: Vehicle) -> Dict[Text, float]: + def _agent_rewards(self, action: int, vehicle: Vehicle) -> dict[str, float]: """Per-agent per-objective reward signal.""" scaled_speed = utils.lmap( vehicle.speed, self.config["reward_speed_range"], [0, 1] @@ -432,7 +432,7 @@

Source code for highway_env.envs.intersection_env

[docs] - def step(self, action: int) -> Tuple[np.ndarray, float, bool, bool, dict]: + def step(self, action: int) -> tuple[np.ndarray, float, bool, bool, dict]: obs, reward, terminated, truncated, info = super().step(action) self._clear_vehicles() self._spawn_vehicle(spawn_probability=self.config["spawn_probability"]) @@ -587,7 +587,7 @@

Source code for highway_env.envs.intersection_env

self.controlled_vehicles = [] for ego_id in range(0, self.config["controlled_vehicles"]): ego_lane = self.road.network.get_lane( - ("o{}".format(ego_id % 4), "ir{}".format(ego_id % 4), 0) + (f"o{ego_id % 4}", f"ir{ego_id % 4}", 0) ) destination = self.config["destination"] or "o" + str( self.np_random.integers(1, 4) diff --git a/main/_modules/highway_env/envs/merge_env/index.html b/main/_modules/highway_env/envs/merge_env/index.html index e0cd99d97..ed35c13bb 100644 --- a/main/_modules/highway_env/envs/merge_env/index.html +++ b/main/_modules/highway_env/envs/merge_env/index.html @@ -291,7 +291,7 @@

Source code for highway_env.envs.merge_env

-from typing import Dict, Text
+from __future__ import annotations
 
 import numpy as np
 
@@ -306,7 +306,6 @@ 

Source code for highway_env.envs.merge_env

 
[docs] class MergeEnv(AbstractEnv): - """ A highway merge negotiation environment. @@ -355,7 +354,7 @@

Source code for highway_env.envs.merge_env

             [0, 1],
         )
 
-    def _rewards(self, action: int) -> Dict[Text, float]:
+    def _rewards(self, action: int) -> dict[str, float]:
         scaled_speed = utils.lmap(
             self.vehicle.speed, self.config["reward_speed_range"], [0, 1]
         )
diff --git a/main/_modules/highway_env/envs/parking_env/index.html b/main/_modules/highway_env/envs/parking_env/index.html
index cbf59982c..f1ee4a1ab 100644
--- a/main/_modules/highway_env/envs/parking_env/index.html
+++ b/main/_modules/highway_env/envs/parking_env/index.html
@@ -291,8 +291,9 @@
           

Source code for highway_env.envs.parking_env

-from abc import abstractmethod
-from typing import Optional
+from __future__ import annotations
+
+from abc import abstractmethod
 
 import numpy as np
 from gymnasium import Env
@@ -372,7 +373,7 @@ 

Source code for highway_env.envs.parking_env

}
     }
 
-    def __init__(self, config: dict = None, render_mode: Optional[str] = None) -> None:
+    def __init__(self, config: dict = None, render_mode: str | None = None) -> None:
         super().__init__(config, render_mode)
         self.observation_type_parking = None
 
@@ -422,7 +423,7 @@ 

Source code for highway_env.envs.parking_env

def _info(self, obs, action) -> dict:
-        info = super(ParkingEnv, self)._info(obs, action)
+        info = super()._info(obs, action)
         if isinstance(self.observation_type, MultiAgentObservation):
             success = tuple(
                 self._is_success(agent_obs["achieved_goal"], agent_obs["desired_goal"])
diff --git a/main/_modules/highway_env/envs/racetrack_env/index.html b/main/_modules/highway_env/envs/racetrack_env/index.html
index af57a7fa9..edd70d9d6 100644
--- a/main/_modules/highway_env/envs/racetrack_env/index.html
+++ b/main/_modules/highway_env/envs/racetrack_env/index.html
@@ -291,7 +291,7 @@
           

Source code for highway_env.envs.racetrack_env

-from typing import Dict, Text
+from __future__ import annotations
 
 import numpy as np
 
@@ -363,7 +363,7 @@ 

Source code for highway_env.envs.racetrack_env

reward *= rewards["on_road_reward"] return reward - def _rewards(self, action: np.ndarray) -> Dict[Text, float]: + def _rewards(self, action: np.ndarray) -> dict[str, float]: _, lateral = self.vehicle.lane.local_coordinates(self.vehicle.position) return { "lane_centering_reward": 1 diff --git a/main/_modules/highway_env/envs/roundabout_env/index.html b/main/_modules/highway_env/envs/roundabout_env/index.html index 49ade235e..3fe3cc605 100644 --- a/main/_modules/highway_env/envs/roundabout_env/index.html +++ b/main/_modules/highway_env/envs/roundabout_env/index.html @@ -291,7 +291,7 @@

Source code for highway_env.envs.roundabout_env

-from typing import Dict, Text
+from __future__ import annotations
 
 import numpy as np
 
@@ -352,7 +352,7 @@ 

Source code for highway_env.envs.roundabout_env

< reward *= rewards["on_road_reward"] return reward - def _rewards(self, action: int) -> Dict[Text, float]: + def _rewards(self, action: int) -> dict[str, float]: return { "collision_reward": self.vehicle.crashed, "high_speed_reward": MDPVehicle.get_speed_index(self.vehicle) diff --git a/main/_modules/highway_env/road/graphics/index.html b/main/_modules/highway_env/road/graphics/index.html index c8cafe886..233dc187f 100644 --- a/main/_modules/highway_env/road/graphics/index.html +++ b/main/_modules/highway_env/road/graphics/index.html @@ -291,7 +291,9 @@

Source code for highway_env.road.graphics

-from typing import TYPE_CHECKING, List, Tuple, Union
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Tuple, Union
 
 import numpy as np
 import pygame
@@ -302,6 +304,7 @@ 

Source code for highway_env.road.graphics

 from highway_env.vehicle.graphics import VehicleGraphics
 from highway_env.vehicle.objects import Landmark, Obstacle
 
+
 if TYPE_CHECKING:
     from highway_env.vehicle.objects import RoadObject
 
@@ -311,7 +314,6 @@ 

Source code for highway_env.road.graphics

 
[docs] class WorldSurface(pygame.Surface): - """A pygame Surface implementing a local coordinate system so that we can move and zoom in the displayed area.""" BLACK = (0, 0, 0) @@ -325,7 +327,7 @@

Source code for highway_env.road.graphics

     MOVING_FACTOR = 0.1
 
     def __init__(
-        self, size: Tuple[int, int], flags: object, surf: pygame.SurfaceType
+        self, size: tuple[int, int], flags: object, surf: pygame.SurfaceType
     ) -> None:
         super().__init__(size, flags, surf)
         self.origin = np.array([0, 0])
@@ -346,7 +348,7 @@ 

Source code for highway_env.road.graphics

 
 
[docs] - def pos2pix(self, x: float, y: float) -> Tuple[int, int]: + def pos2pix(self, x: float, y: float) -> tuple[int, int]: """ Convert two world coordinates [m] into a position in the surface [px] @@ -359,7 +361,7 @@

Source code for highway_env.road.graphics

 
 
[docs] - def vec2pix(self, vec: PositionType) -> Tuple[int, int]: + def vec2pix(self, vec: PositionType) -> tuple[int, int]: """ Convert a world position [m] into a position in the surface [px]. @@ -424,8 +426,7 @@

Source code for highway_env.road.graphics

 
 
[docs] -class LaneGraphics(object): - +class LaneGraphics: """A visualization of a lane.""" # See https://www.researchgate.net/figure/French-road-traffic-lane-description-and-specification_fig4_261170641 @@ -559,9 +560,9 @@

Source code for highway_env.road.graphics

         cls,
         lane: AbstractLane,
         surface: WorldSurface,
-        starts: List[float],
-        ends: List[float],
-        lats: List[float],
+        starts: list[float],
+        ends: list[float],
+        lats: list[float],
     ) -> None:
         """
         Draw a set of stripes along a lane.
@@ -590,7 +591,7 @@ 

Source code for highway_env.road.graphics

         cls,
         lane: AbstractLane,
         surface: WorldSurface,
-        color: Tuple[float],
+        color: tuple[float],
         width: float,
         draw_surface: pygame.Surface = None,
     ) -> None:
@@ -622,8 +623,7 @@ 

Source code for highway_env.road.graphics

 
 
[docs] -class RoadGraphics(object): - +class RoadGraphics: """A visualization of a road lanes and vehicles."""
@@ -691,7 +691,6 @@

Source code for highway_env.road.graphics

 
[docs] class RoadObjectGraphics: - """A visualization of objects on the road.""" YELLOW = (200, 200, 0) @@ -706,7 +705,7 @@

Source code for highway_env.road.graphics

     @classmethod
     def display(
         cls,
-        object_: "RoadObject",
+        object_: RoadObject,
         surface: WorldSurface,
         transparent: bool = False,
         offscreen: bool = False,
@@ -790,7 +789,7 @@ 

Source code for highway_env.road.graphics

 
 
     @classmethod
-    def get_color(cls, object_: "RoadObject", transparent: bool = False):
+    def get_color(cls, object_: RoadObject, transparent: bool = False):
         color = cls.DEFAULT_COLOR
 
         if isinstance(object_, Obstacle):
diff --git a/main/_modules/highway_env/road/lane/index.html b/main/_modules/highway_env/road/lane/index.html
index 296fe1976..b8a493d54 100644
--- a/main/_modules/highway_env/road/lane/index.html
+++ b/main/_modules/highway_env/road/lane/index.html
@@ -291,8 +291,9 @@
           

Source code for highway_env.road.lane

-from abc import ABCMeta, abstractmethod
-from typing import List, Optional, Tuple, Union
+from __future__ import annotations
+
+from abc import ABCMeta, abstractmethod
 
 import numpy as np
 
@@ -303,15 +304,14 @@ 

Source code for highway_env.road.lane

 
 
[docs] -class AbstractLane(object): - +class AbstractLane: """A lane on the road, described by its central curve.""" metaclass__ = ABCMeta DEFAULT_WIDTH: float = 4 VEHICLE_LENGTH: float = 5 length: float = 0 - line_types: List["LineType"] + line_types: list[LineType]
[docs] @@ -330,7 +330,7 @@

Source code for highway_env.road.lane

 
[docs] @abstractmethod - def local_coordinates(self, position: np.ndarray) -> Tuple[float, float]: + def local_coordinates(self, position: np.ndarray) -> tuple[float, float]: """ Convert a world position to local lane coordinates. @@ -456,7 +456,7 @@

Source code for highway_env.road.lane

     def distance_with_heading(
         self,
         position: np.ndarray,
-        heading: Optional[float],
+        heading: float | None,
         heading_weight: float = 1.0,
     ):
         """Compute a weighted distance in position and heading to the lane."""
@@ -479,7 +479,6 @@ 

Source code for highway_env.road.lane

 
[docs] class LineType: - """A lane side line type.""" NONE = 0 @@ -492,7 +491,6 @@

Source code for highway_env.road.lane

 
[docs] class StraightLane(AbstractLane): - """A lane going in straight line.""" def __init__( @@ -500,7 +498,7 @@

Source code for highway_env.road.lane

         start: Vector,
         end: Vector,
         width: float = AbstractLane.DEFAULT_WIDTH,
-        line_types: Tuple[LineType, LineType] = None,
+        line_types: tuple[LineType, LineType] = None,
         forbidden: bool = False,
         speed_limit: float = 20,
         priority: int = 0,
@@ -553,7 +551,7 @@ 

Source code for highway_env.road.lane

 
 
[docs] - def local_coordinates(self, position: np.ndarray) -> Tuple[float, float]: + def local_coordinates(self, position: np.ndarray) -> tuple[float, float]: delta = position - self.start longitudinal = np.dot(delta, self.direction) lateral = np.dot(delta, self.direction_lateral) @@ -591,7 +589,6 @@

Source code for highway_env.road.lane

 
[docs] class SineLane(StraightLane): - """A sinusoidal lane.""" def __init__( @@ -602,7 +599,7 @@

Source code for highway_env.road.lane

         pulsation: float,
         phase: float,
         width: float = StraightLane.DEFAULT_WIDTH,
-        line_types: List[LineType] = None,
+        line_types: list[LineType] = None,
         forbidden: bool = False,
         speed_limit: float = 20,
         priority: int = 0,
@@ -645,7 +642,7 @@ 

Source code for highway_env.road.lane

 
 
[docs] - def local_coordinates(self, position: np.ndarray) -> Tuple[float, float]: + def local_coordinates(self, position: np.ndarray) -> tuple[float, float]: longitudinal, lateral = super().local_coordinates(position) return longitudinal, lateral - self.amplitude * np.sin( self.pulsation * longitudinal + self.phase @@ -685,7 +682,6 @@

Source code for highway_env.road.lane

 
[docs] class CircularLane(AbstractLane): - """A lane going in circle arc.""" def __init__( @@ -696,7 +692,7 @@

Source code for highway_env.road.lane

         end_phase: float,
         clockwise: bool = True,
         width: float = AbstractLane.DEFAULT_WIDTH,
-        line_types: List[LineType] = None,
+        line_types: list[LineType] = None,
         forbidden: bool = False,
         speed_limit: float = 20,
         priority: int = 0,
@@ -740,7 +736,7 @@ 

Source code for highway_env.road.lane

 
 
[docs] - def local_coordinates(self, position: np.ndarray) -> Tuple[float, float]: + def local_coordinates(self, position: np.ndarray) -> tuple[float, float]: delta = position - self.center phi = np.arctan2(delta[1], delta[0]) phi = self.start_phase + utils.wrap_to_pi(phi - self.start_phase) @@ -789,9 +785,9 @@

Source code for highway_env.road.lane

 
     def __init__(
         self,
-        lane_points: List[Tuple[float, float]],
+        lane_points: list[tuple[float, float]],
         width: float = AbstractLane.DEFAULT_WIDTH,
-        line_types: Tuple[LineType, LineType] = None,
+        line_types: tuple[LineType, LineType] = None,
         forbidden: bool = False,
         speed_limit: float = 20,
         priority: int = 0,
@@ -814,7 +810,7 @@ 

Source code for highway_env.road.lane

 
 
[docs] - def local_coordinates(self, position: np.ndarray) -> Tuple[float, float]: + def local_coordinates(self, position: np.ndarray) -> tuple[float, float]: lon, lat = self.curve.cartesian_to_frenet(position) return lon, lat
@@ -868,10 +864,10 @@

Source code for highway_env.road.lane

 
     def __init__(
         self,
-        lane_points: List[Tuple[float, float]],
-        left_boundary_points: List[Tuple[float, float]],
-        right_boundary_points: List[Tuple[float, float]],
-        line_types: Tuple[LineType, LineType] = None,
+        lane_points: list[tuple[float, float]],
+        left_boundary_points: list[tuple[float, float]],
+        right_boundary_points: list[tuple[float, float]],
+        line_types: tuple[LineType, LineType] = None,
         forbidden: bool = False,
         speed_limit: float = 20,
         priority: int = 0,
@@ -955,7 +951,7 @@ 

Source code for highway_env.road.lane

 
 
 
-def _to_serializable(arg: Union[np.ndarray, List]) -> List:
+def _to_serializable(arg: np.ndarray | list) -> list:
     if isinstance(arg, np.ndarray):
         return arg.tolist()
     return arg
diff --git a/main/_modules/highway_env/road/regulation/index.html b/main/_modules/highway_env/road/regulation/index.html
index 2f1ec9df4..9b41134e9 100644
--- a/main/_modules/highway_env/road/regulation/index.html
+++ b/main/_modules/highway_env/road/regulation/index.html
@@ -291,7 +291,7 @@
           

Source code for highway_env.road.regulation

-from typing import List, Tuple
+from __future__ import annotations
 
 import numpy as np
 
@@ -305,15 +305,15 @@ 

Source code for highway_env.road.regulation

 
[docs] class RegulatedRoad(Road): - YIELDING_COLOR: Tuple[float, float, float] = None + YIELDING_COLOR: tuple[float, float, float] = None REGULATION_FREQUENCY: int = 2 YIELD_DURATION: float = 0.0 def __init__( self, network: RoadNetwork = None, - vehicles: List[Vehicle] = None, - obstacles: List[Obstacle] = None, + vehicles: list[Vehicle] = None, + obstacles: list[Obstacle] = None, np_random: np.random.RandomState = None, record_history: bool = False, ) -> None: diff --git a/main/_modules/highway_env/road/road/index.html b/main/_modules/highway_env/road/road/index.html index a2f2f3ddb..0cfe7344b 100644 --- a/main/_modules/highway_env/road/road/index.html +++ b/main/_modules/highway_env/road/road/index.html @@ -291,14 +291,17 @@

Source code for highway_env.road.road

-import logging
-from typing import TYPE_CHECKING, Dict, List, Optional, Tuple
+from __future__ import annotations
+
+import logging
+from typing import TYPE_CHECKING, List, Tuple
 
 import numpy as np
 
 from highway_env.road.lane import AbstractLane, LineType, StraightLane, lane_from_config
 from highway_env.vehicle.objects import Landmark
 
+
 if TYPE_CHECKING:
     from highway_env.vehicle import kinematics, objects
 
@@ -308,8 +311,8 @@ 

Source code for highway_env.road.road

 Route = List[LaneIndex]
 
 
-class RoadNetwork(object):
-    graph: Dict[str, Dict[str, List[AbstractLane]]]
+class RoadNetwork:
+    graph: dict[str, dict[str, list[AbstractLane]]]
 
     def __init__(self):
         self.graph = {}
@@ -343,7 +346,7 @@ 

Source code for highway_env.road.road

         return self.graph[_from][_to][_id]
 
     def get_closest_lane_index(
-        self, position: np.ndarray, heading: Optional[float] = None
+        self, position: np.ndarray, heading: float | None = None
     ) -> LaneIndex:
         """
         Get the index of the lane closest to a world position.
@@ -433,7 +436,7 @@ 

Source code for highway_env.road.road

         next_to: str,
         next_id: int,
         position: np.ndarray,
-    ) -> Tuple[int, float]:
+    ) -> tuple[int, float]:
         # If next road has same number of lane, stay on the same lane
         if len(self.graph[_from][_to]) == len(self.graph[_to][next_to]):
             if next_id is None:
@@ -446,7 +449,7 @@ 

Source code for highway_env.road.road

             )
         return next_id, self.get_lane((_to, next_to, next_id)).distance(position)
 
-    def bfs_paths(self, start: str, goal: str) -> List[List[str]]:
+    def bfs_paths(self, start: str, goal: str) -> list[list[str]]:
         """
         Breadth-first search of all routes from start to goal.
 
@@ -467,7 +470,7 @@ 

Source code for highway_env.road.road

                 elif _next in self.graph:
                     queue.append((_next, path + [_next]))
 
-    def shortest_path(self, start: str, goal: str) -> List[str]:
+    def shortest_path(self, start: str, goal: str) -> list[str]:
         """
         Breadth-first search of shortest path from start to goal.
 
@@ -477,7 +480,7 @@ 

Source code for highway_env.road.road

         """
         return next(self.bfs_paths(start, goal), [])
 
-    def all_side_lanes(self, lane_index: LaneIndex) -> List[LaneIndex]:
+    def all_side_lanes(self, lane_index: LaneIndex) -> list[LaneIndex]:
         """
         :param lane_index: the index of a lane.
         :return: all lanes belonging to the same road.
@@ -487,7 +490,7 @@ 

Source code for highway_env.road.road

             for i in range(len(self.graph[lane_index[0]][lane_index[1]]))
         ]
 
-    def side_lanes(self, lane_index: LaneIndex) -> List[LaneIndex]:
+    def side_lanes(self, lane_index: LaneIndex) -> list[LaneIndex]:
         """
         :param lane_index: the index of a lane.
         :return: indexes of lanes next to a an input lane, to its right or left.
@@ -565,12 +568,12 @@ 

Source code for highway_env.road.road

                 )
         return False
 
-    def lanes_list(self) -> List[AbstractLane]:
+    def lanes_list(self) -> list[AbstractLane]:
         return [
             lane for to in self.graph.values() for ids in to.values() for lane in ids
         ]
 
-    def lanes_dict(self) -> Dict[str, AbstractLane]:
+    def lanes_dict(self) -> dict[str, AbstractLane]:
         return {
             (from_, to_, i): lane
             for from_, tos in self.graph.items()
@@ -585,9 +588,9 @@ 

Source code for highway_env.road.road

         length: float = 10000,
         angle: float = 0,
         speed_limit: float = 30,
-        nodes_str: Optional[Tuple[str, str]] = None,
-        net: Optional["RoadNetwork"] = None,
-    ) -> "RoadNetwork":
+        nodes_str: tuple[str, str] | None = None,
+        net: RoadNetwork | None = None,
+    ) -> RoadNetwork:
         net = net or RoadNetwork()
         nodes_str = nodes_str or ("0", "1")
         for lane in range(lanes):
@@ -616,7 +619,7 @@ 

Source code for highway_env.road.road

         longitudinal: float,
         lateral: float,
         current_lane_index: LaneIndex,
-    ) -> Tuple[np.ndarray, float]:
+    ) -> tuple[np.ndarray, float]:
         """
         Get the absolute position and heading along a route composed of several lanes at some local coordinates.
 
@@ -681,15 +684,14 @@ 

Source code for highway_env.road.road

 
 
[docs] -class Road(object): - +class Road: """A road is a set of lanes, and a set of vehicles driving on these lanes.""" def __init__( self, network: RoadNetwork = None, - vehicles: List["kinematics.Vehicle"] = None, - road_objects: List["objects.RoadObject"] = None, + vehicles: list[kinematics.Vehicle] = None, + road_objects: list[objects.RoadObject] = None, np_random: np.random.RandomState = None, record_history: bool = False, ) -> None: @@ -710,9 +712,9 @@

Source code for highway_env.road.road

 
     def close_objects_to(
         self,
-        vehicle: "kinematics.Vehicle",
+        vehicle: kinematics.Vehicle,
         distance: float,
-        count: Optional[int] = None,
+        count: int | None = None,
         see_behind: bool = True,
         sort: bool = True,
         vehicles_only: bool = False,
@@ -741,9 +743,9 @@ 

Source code for highway_env.road.road

 
     def close_vehicles_to(
         self,
-        vehicle: "kinematics.Vehicle",
+        vehicle: kinematics.Vehicle,
         distance: float,
-        count: Optional[int] = None,
+        count: int | None = None,
         see_behind: bool = True,
         sort: bool = True,
     ) -> object:
@@ -779,8 +781,8 @@ 

Source code for highway_env.road.road

 
[docs] def neighbour_vehicles( - self, vehicle: "kinematics.Vehicle", lane_index: LaneIndex = None - ) -> Tuple[Optional["kinematics.Vehicle"], Optional["kinematics.Vehicle"]]: + self, vehicle: kinematics.Vehicle, lane_index: LaneIndex = None + ) -> tuple[kinematics.Vehicle | None, kinematics.Vehicle | None]: """ Find the preceding and following vehicles of a given vehicle. diff --git a/main/_modules/highway_env/vehicle/behavior/index.html b/main/_modules/highway_env/vehicle/behavior/index.html index 093b8f8cd..24ba841d1 100644 --- a/main/_modules/highway_env/vehicle/behavior/index.html +++ b/main/_modules/highway_env/vehicle/behavior/index.html @@ -291,7 +291,7 @@

Source code for highway_env.vehicle.behavior

-from typing import Union
+from __future__ import annotations
 
 import numpy as np
 
@@ -366,7 +366,7 @@ 

Source code for highway_env.vehicle.behavior

 [docs]
     @classmethod
-    def create_from(cls, vehicle: ControlledVehicle) -> "IDMVehicle":
+    def create_from(cls, vehicle: ControlledVehicle) -> IDMVehicle:
         """
         Create a new vehicle from an existing one.
 
@@ -390,7 +390,7 @@ 

Source code for highway_env.vehicle.behavior

 [docs]
-    def act(self, action: Union[dict, str] = None):
+    def act(self, action: dict | str = None):
         """
         Execute an action.
 
@@ -433,9 +433,8 @@ 

Source code for highway_env.vehicle.behavior

action["acceleration"] = np.clip(
             action["acceleration"], -self.ACC_MAX, self.ACC_MAX
         )
-        Vehicle.act(
-            self, action
-        )  # Skip ControlledVehicle.act(), or the command will be overriden.
+ # Skip ControlledVehicle.act(), or the command will be overridden. + Vehicle.act(self, action)
@@ -671,7 +670,6 @@

Source code for highway_env.vehicle.behavior

 [docs]
 class LinearVehicle(IDMVehicle):
-
     """A Vehicle whose longitudinal and lateral controllers are linear with respect to parameters."""
 
     ACCELERATION_PARAMETERS = [0.3, 0.3, 2.0]
@@ -724,7 +722,7 @@ 

Source code for highway_env.vehicle.behavior

 [docs]
-    def act(self, action: Union[dict, str] = None):
+    def act(self, action: dict | str = None):
         if self.collecting_data:
             self.collect_data()
         super().act(action)
diff --git a/main/_modules/highway_env/vehicle/controller/index.html b/main/_modules/highway_env/vehicle/controller/index.html index 594eb226c..524c17f34 100644 --- a/main/_modules/highway_env/vehicle/controller/index.html +++ b/main/_modules/highway_env/vehicle/controller/index.html @@ -579,7 +579,6 @@

Source code for highway_env.vehicle.controller

[docs] class MDPVehicle(ControlledVehicle): - """A controlled vehicle with a specified discrete range of allowed target speeds.""" DEFAULT_TARGET_SPEEDS = np.linspace(20, 30, 3) diff --git a/main/_modules/highway_env/vehicle/kinematics/index.html b/main/_modules/highway_env/vehicle/kinematics/index.html index 485bedcb6..3b177b899 100644 --- a/main/_modules/highway_env/vehicle/kinematics/index.html +++ b/main/_modules/highway_env/vehicle/kinematics/index.html @@ -291,9 +291,10 @@

Source code for highway_env.vehicle.kinematics

-import copy
+from __future__ import annotations
+
+import copy
 from collections import deque
-from typing import List, Optional, Tuple, Union
 
 import numpy as np
 
@@ -305,7 +306,6 @@ 

Source code for highway_env.vehicle.kinematics

[docs] class Vehicle(RoadObject): - """ A moving vehicle on a road, and its kinematics. @@ -349,11 +349,11 @@

Source code for highway_env.vehicle.kinematics

cls, road: Road, speed: float = None, - lane_from: Optional[str] = None, - lane_to: Optional[str] = None, - lane_id: Optional[int] = None, + lane_from: str | None = None, + lane_to: str | None = None, + lane_id: int | None = None, spacing: float = 1, - ) -> "Vehicle": + ) -> Vehicle: """ Create a random vehicle on the road. @@ -404,7 +404,7 @@

Source code for highway_env.vehicle.kinematics

[docs] @classmethod - def create_from(cls, vehicle: "Vehicle") -> "Vehicle": + def create_from(cls, vehicle: Vehicle) -> Vehicle: """ Create a new vehicle from an existing one. @@ -421,7 +421,7 @@

Source code for highway_env.vehicle.kinematics

[docs] - def act(self, action: Union[dict, str] = None) -> None: + def act(self, action: dict | str = None) -> None: """ Store an action to be repeated. @@ -485,7 +485,7 @@

Source code for highway_env.vehicle.kinematics

def predict_trajectory_constant_speed( self, times: np.ndarray - ) -> Tuple[List[np.ndarray], List[float]]: + ) -> tuple[list[np.ndarray], list[float]]: if self.prediction_type == "zero_steering": action = {"acceleration": 0.0, "steering": 0.0} elif self.prediction_type == "constant_steering": @@ -542,7 +542,7 @@

Source code for highway_env.vehicle.kinematics

return np.zeros((3,)) def to_dict( - self, origin_vehicle: "Vehicle" = None, observe_intentions: bool = True + self, origin_vehicle: Vehicle = None, observe_intentions: bool = True ) -> dict: d = { "presence": 1, @@ -579,11 +579,11 @@

Source code for highway_env.vehicle.kinematics

[docs] def predict_trajectory( self, - actions: List, + actions: list, action_duration: float, trajectory_timestep: float, dt: float, - ) -> List["Vehicle"]: + ) -> list[Vehicle]: """ Predict the future trajectory of the vehicle given a sequence of actions. diff --git a/main/actions/index.html b/main/actions/index.html index 7f884579c..90c0717cc 100644 --- a/main/actions/index.html +++ b/main/actions/index.html @@ -437,7 +437,7 @@

Manual control
-class highway_env.envs.common.action.ContinuousAction(env: AbstractEnv, acceleration_range: Tuple[float, float] | None = None, steering_range: Tuple[float, float] | None = None, speed_range: Tuple[float, float] | None = None, longitudinal: bool = True, lateral: bool = True, dynamical: bool = False, clip: bool = True, **kwargs)[source]¶
+class highway_env.envs.common.action.ContinuousAction(env: AbstractEnv, acceleration_range: tuple[float, float] | None = None, steering_range: tuple[float, float] | None = None, speed_range: tuple[float, float] | None = None, longitudinal: bool = True, lateral: bool = True, dynamical: bool = False, clip: bool = True, **kwargs)[source]¶

An continuous action space for throttle and/or steering angle.

If both throttle and steering are enabled, they are set in this order: [throttle, steering]

The space intervals are always [-1, 1], but are mapped to throttle/steering intervals through configurations.

@@ -509,7 +509,7 @@

Manual control
-class highway_env.envs.common.action.DiscreteAction(env: AbstractEnv, acceleration_range: Tuple[float, float] | None = None, steering_range: Tuple[float, float] | None = None, longitudinal: bool = True, lateral: bool = True, dynamical: bool = False, clip: bool = True, actions_per_axis: int = 3, **kwargs)[source]¶
+class highway_env.envs.common.action.DiscreteAction(env: AbstractEnv, acceleration_range: tuple[float, float] | None = None, steering_range: tuple[float, float] | None = None, longitudinal: bool = True, lateral: bool = True, dynamical: bool = False, clip: bool = True, actions_per_axis: int = 3, **kwargs)[source]¶

Create a continuous action space.

Parameters:
@@ -549,7 +549,7 @@

Manual control
-class highway_env.envs.common.action.DiscreteMetaAction(env: AbstractEnv, longitudinal: bool = True, lateral: bool = True, target_speeds: ndarray | Sequence[float] | None = None, **kwargs)[source]¶
+class highway_env.envs.common.action.DiscreteMetaAction(env: AbstractEnv, longitudinal: bool = True, lateral: bool = True, target_speeds: Vector | None = None, **kwargs)[source]¶

An discrete action space of meta-actions: lane changes, and cruise control set-point.

Create a discrete action space of meta-actions.

@@ -595,7 +595,7 @@

Manual control
-act(action: int | ndarray) None[source]¶
+act(action: int | np.ndarray) None[source]¶

Execute the action on the ego-vehicle.

Most of the action mechanics are actually implemented in vehicle.act(action), where vehicle is an instance of the specified highway_env.envs.common.action.ActionType.vehicle_class. @@ -609,7 +609,7 @@

Manual control
-get_available_actions() List[int][source]¶
+get_available_actions() list[int][source]¶

Get the list of currently available actions.

Lane changes are not available on the boundary of the road, and speed changes are not available at maximal or minimal speed.

diff --git a/main/dynamics/road/lane/index.html b/main/dynamics/road/lane/index.html index d8fb88c63..86f5fb115 100644 --- a/main/dynamics/road/lane/index.html +++ b/main/dynamics/road/lane/index.html @@ -332,7 +332,7 @@
-abstract local_coordinates(position: ndarray) Tuple[float, float][source]¶
+abstract local_coordinates(position: ndarray) tuple[float, float][source]¶

Convert a world position to local lane coordinates.

Parameters:
@@ -435,7 +435,7 @@
-distance_with_heading(position: ndarray, heading: float | None, heading_weight: float = 1.0)[source]¶
+distance_with_heading(position: np.ndarray, heading: float | None, heading_weight: float = 1.0)[source]¶

Compute a weighted distance in position and heading to the lane.

@@ -455,7 +455,7 @@
-class highway_env.road.lane.StraightLane(start: ndarray | Sequence[float], end: ndarray | Sequence[float], width: float = AbstractLane.DEFAULT_WIDTH, line_types: Tuple[LineType, LineType] | None = None, forbidden: bool = False, speed_limit: float = 20, priority: int = 0)[source]¶
+class highway_env.road.lane.StraightLane(start: ndarray | Sequence[float], end: ndarray | Sequence[float], width: float = AbstractLane.DEFAULT_WIDTH, line_types: tuple[LineType, LineType] | None = None, forbidden: bool = False, speed_limit: float = 20, priority: int = 0)[source]¶

A lane going in straight line.

New straight lane.

@@ -517,7 +517,7 @@
-local_coordinates(position: ndarray) Tuple[float, float][source]¶
+local_coordinates(position: ndarray) tuple[float, float][source]¶

Convert a world position to local lane coordinates.

Parameters:
@@ -555,7 +555,7 @@
-class highway_env.road.lane.SineLane(start: ndarray | Sequence[float], end: ndarray | Sequence[float], amplitude: float, pulsation: float, phase: float, width: float = StraightLane.DEFAULT_WIDTH, line_types: List[LineType] | None = None, forbidden: bool = False, speed_limit: float = 20, priority: int = 0)[source]¶
+class highway_env.road.lane.SineLane(start: ndarray | Sequence[float], end: ndarray | Sequence[float], amplitude: float, pulsation: float, phase: float, width: float = StraightLane.DEFAULT_WIDTH, line_types: list[LineType] | None = None, forbidden: bool = False, speed_limit: float = 20, priority: int = 0)[source]¶

A sinusoidal lane.

New sinusoidal lane.

@@ -602,7 +602,7 @@
-local_coordinates(position: ndarray) Tuple[float, float][source]¶
+local_coordinates(position: ndarray) tuple[float, float][source]¶

Convert a world position to local lane coordinates.

Parameters:
@@ -640,7 +640,7 @@
-class highway_env.road.lane.CircularLane(center: ndarray | Sequence[float], radius: float, start_phase: float, end_phase: float, clockwise: bool = True, width: float = AbstractLane.DEFAULT_WIDTH, line_types: List[LineType] | None = None, forbidden: bool = False, speed_limit: float = 20, priority: int = 0)[source]¶
+class highway_env.road.lane.CircularLane(center: ndarray | Sequence[float], radius: float, start_phase: float, end_phase: float, clockwise: bool = True, width: float = AbstractLane.DEFAULT_WIDTH, line_types: list[LineType] | None = None, forbidden: bool = False, speed_limit: float = 20, priority: int = 0)[source]¶

A lane going in circle arc.

@@ -689,7 +689,7 @@
-local_coordinates(position: ndarray) Tuple[float, float][source]¶
+local_coordinates(position: ndarray) tuple[float, float][source]¶

Convert a world position to local lane coordinates.

Parameters:
@@ -727,7 +727,7 @@
-class highway_env.road.lane.PolyLaneFixedWidth(lane_points: List[Tuple[float, float]], width: float = AbstractLane.DEFAULT_WIDTH, line_types: Tuple[LineType, LineType] | None = None, forbidden: bool = False, speed_limit: float = 20, priority: int = 0)[source]¶
+class highway_env.road.lane.PolyLaneFixedWidth(lane_points: list[tuple[float, float]], width: float = AbstractLane.DEFAULT_WIDTH, line_types: tuple[LineType, LineType] | None = None, forbidden: bool = False, speed_limit: float = 20, priority: int = 0)[source]¶

A fixed-width lane defined by a set of points and approximated with a 2D Hermite polynomial.

@@ -748,7 +748,7 @@
-local_coordinates(position: ndarray) Tuple[float, float][source]¶
+local_coordinates(position: ndarray) tuple[float, float][source]¶

Convert a world position to local lane coordinates.

Parameters:
@@ -814,7 +814,7 @@
-class highway_env.road.lane.PolyLane(lane_points: List[Tuple[float, float]], left_boundary_points: List[Tuple[float, float]], right_boundary_points: List[Tuple[float, float]], line_types: Tuple[LineType, LineType] | None = None, forbidden: bool = False, speed_limit: float = 20, priority: int = 0)[source]¶
+class highway_env.road.lane.PolyLane(lane_points: list[tuple[float, float]], left_boundary_points: list[tuple[float, float]], right_boundary_points: list[tuple[float, float]], line_types: tuple[LineType, LineType] | None = None, forbidden: bool = False, speed_limit: float = 20, priority: int = 0)[source]¶

A lane defined by a set of points and approximated with a 2D Hermite polynomial.

diff --git a/main/dynamics/road/regulation/index.html b/main/dynamics/road/regulation/index.html index a2c50d259..2ed5931ab 100644 --- a/main/dynamics/road/regulation/index.html +++ b/main/dynamics/road/regulation/index.html @@ -304,7 +304,7 @@

API¶

-class highway_env.road.regulation.RegulatedRoad(network: RoadNetwork | None = None, vehicles: List[Vehicle] | None = None, obstacles: List[Obstacle] | None = None, np_random: RandomState | None = None, record_history: bool = False)[source]¶
+class highway_env.road.regulation.RegulatedRoad(network: RoadNetwork | None = None, vehicles: list[Vehicle] | None = None, obstacles: list[Obstacle] | None = None, np_random: RandomState | None = None, record_history: bool = False)[source]¶

New road.

Parameters:
diff --git a/main/dynamics/road/road/index.html b/main/dynamics/road/road/index.html index 472ba8544..98a314ea8 100644 --- a/main/dynamics/road/road/index.html +++ b/main/dynamics/road/road/index.html @@ -312,7 +312,7 @@

API¶

-class highway_env.road.road.Road(network: RoadNetwork = None, vehicles: List[kinematics.Vehicle] = None, road_objects: List[objects.RoadObject] = None, np_random: RandomState = None, record_history: bool = False)[source]¶
+class highway_env.road.road.Road(network: RoadNetwork = None, vehicles: list[kinematics.Vehicle] = None, road_objects: list[objects.RoadObject] = None, np_random: np.random.RandomState = None, record_history: bool = False)[source]¶

A road is a set of lanes, and a set of vehicles driving on these lanes.

New road.

@@ -345,7 +345,7 @@
-neighbour_vehicles(vehicle: kinematics.Vehicle, lane_index: Tuple[str, str, int] = None) Tuple[kinematics.Vehicle | None, kinematics.Vehicle | None][source]¶
+neighbour_vehicles(vehicle: kinematics.Vehicle, lane_index: LaneIndex = None) tuple[kinematics.Vehicle | None, kinematics.Vehicle | None][source]¶

Find the preceding and following vehicles of a given vehicle.

Parameters:
diff --git a/main/dynamics/vehicle/behavior/index.html b/main/dynamics/vehicle/behavior/index.html index 90764b5ab..78e9e87bc 100644 --- a/main/dynamics/vehicle/behavior/index.html +++ b/main/dynamics/vehicle/behavior/index.html @@ -431,7 +431,7 @@

Lateral Behavior
-act(action: dict | str | None = None)[source]¶
+act(action: dict | str = None)[source]¶

Execute an action.

For now, no action is supported because the vehicle takes all decisions of acceleration and lane changes on its own, based on the IDM and MOBIL models.

@@ -562,7 +562,7 @@

Lateral Behavior
-act(action: dict | str | None = None)[source]¶
+act(action: dict | str = None)[source]¶

Execute an action.

For now, no action is supported because the vehicle takes all decisions of acceleration and lane changes on its own, based on the IDM and MOBIL models.

diff --git a/main/dynamics/vehicle/kinematics/index.html b/main/dynamics/vehicle/kinematics/index.html index 2e5934839..c88be8832 100644 --- a/main/dynamics/vehicle/kinematics/index.html +++ b/main/dynamics/vehicle/kinematics/index.html @@ -366,7 +366,7 @@

Kinematics
-classmethod create_random(road: Road, speed: float | None = None, lane_from: str | None = None, lane_to: str | None = None, lane_id: int | None = None, spacing: float = 1) Vehicle[source]¶
+classmethod create_random(road: Road, speed: float = None, lane_from: str | None = None, lane_to: str | None = None, lane_id: int | None = None, spacing: float = 1) Vehicle[source]¶

Create a random vehicle on the road.

The lane and /or speed are chosen randomly, while longitudinal position is chosen behind the last vehicle in the road with density based on the number of lanes.

@@ -404,7 +404,7 @@

Kinematics
-act(action: dict | str | None = None) None[source]¶
+act(action: dict | str = None) None[source]¶

Store an action to be repeated.

Parameters:
@@ -429,7 +429,7 @@

Kinematics
-predict_trajectory(actions: List, action_duration: float, trajectory_timestep: float, dt: float) List[Vehicle][source]¶
+predict_trajectory(actions: list, action_duration: float, trajectory_timestep: float, dt: float) list[Vehicle][source]¶

Predict the future trajectory of the vehicle given a sequence of actions.

Parameters:
diff --git a/main/environments/highway/index.html b/main/environments/highway/index.html index 7a4a9e9a6..72e235c37 100644 --- a/main/environments/highway/index.html +++ b/main/environments/highway/index.html @@ -354,7 +354,7 @@

Faster variant¶

-class highway_env.envs.highway_env.HighwayEnv(config: dict | None = None, render_mode: str | None = None)[source]¶
+class highway_env.envs.highway_env.HighwayEnv(config: dict = None, render_mode: str | None = None)[source]¶

A highway driving environment.

The vehicle is driving on a straight highway with several lanes, and is rewarded for reaching a high speed, staying on the rightmost lanes and avoiding collisions.

diff --git a/main/environments/intersection/index.html b/main/environments/intersection/index.html index 62df81714..ba60485fd 100644 --- a/main/environments/intersection/index.html +++ b/main/environments/intersection/index.html @@ -363,7 +363,7 @@

Default configurationAPI¶

-class highway_env.envs.intersection_env.IntersectionEnv(config: dict | None = None, render_mode: str | None = None)[source]¶
+class highway_env.envs.intersection_env.IntersectionEnv(config: dict = None, render_mode: str | None = None)[source]¶
classmethod default_config() dict[source]¶
@@ -374,7 +374,7 @@

API¶

-step(action: int) Tuple[ndarray, float, bool, bool, dict][source]¶
+step(action: int) tuple[ndarray, float, bool, bool, dict][source]¶

Perform an action and step the environment dynamics.

The action is executed by the ego-vehicle, and all other vehicles on the road performs their default behaviour for several simulation timesteps until the next decision making step.

diff --git a/main/environments/merge/index.html b/main/environments/merge/index.html index e92ebab0c..ad08ecdae 100644 --- a/main/environments/merge/index.html +++ b/main/environments/merge/index.html @@ -340,7 +340,7 @@

Default configurationAPI¶

-class highway_env.envs.merge_env.MergeEnv(config: dict | None = None, render_mode: str | None = None)[source]¶
+class highway_env.envs.merge_env.MergeEnv(config: dict = None, render_mode: str | None = None)[source]¶

A highway merge negotiation environment.

The ego-vehicle is driving on a highway and approached a merge, with some vehicles incoming on the access ramp. It is rewarded for maintaining a high speed and avoiding collisions, but also making room for merging diff --git a/main/environments/parking/index.html b/main/environments/parking/index.html index c58fc4519..ee4059c94 100644 --- a/main/environments/parking/index.html +++ b/main/environments/parking/index.html @@ -342,7 +342,7 @@

Default configurationAPI¶

-class highway_env.envs.parking_env.ParkingEnv(config: dict | None = None, render_mode: str | None = None)[source]¶
+class highway_env.envs.parking_env.ParkingEnv(config: dict = None, render_mode: str | None = None)[source]¶

A continuous control environment.

It implements a reach-type task, where the agent observes their position and speed and must control their acceleration and steering so as to reach a given goal.

diff --git a/main/environments/racetrack/index.html b/main/environments/racetrack/index.html index 8bb540588..c17c8b401 100644 --- a/main/environments/racetrack/index.html +++ b/main/environments/racetrack/index.html @@ -353,7 +353,7 @@

Default configurationAPI¶

-class highway_env.envs.racetrack_env.RacetrackEnv(config: dict | None = None, render_mode: str | None = None)[source]¶
+class highway_env.envs.racetrack_env.RacetrackEnv(config: dict = None, render_mode: str | None = None)[source]¶

A continuous control environment.

The agent needs to learn two skills: - follow the tracks diff --git a/main/environments/roundabout/index.html b/main/environments/roundabout/index.html index dd6c8ed3d..44d7a909c 100644 --- a/main/environments/roundabout/index.html +++ b/main/environments/roundabout/index.html @@ -342,7 +342,7 @@

Default configurationAPI¶

-class highway_env.envs.roundabout_env.RoundaboutEnv(config: dict | None = None, render_mode: str | None = None)[source]¶
+class highway_env.envs.roundabout_env.RoundaboutEnv(config: dict = None, render_mode: str | None = None)[source]¶
classmethod default_config() dict[source]¶
diff --git a/main/graphics/index.html b/main/graphics/index.html index 17e8b69ee..2bda14970 100644 --- a/main/graphics/index.html +++ b/main/graphics/index.html @@ -340,7 +340,7 @@

Scene graphics
-set_agent_action_sequence(actions: List[Action]) None[source]¶
+set_agent_action_sequence(actions: list[Action]) None[source]¶

Set the sequence of actions chosen by the agent, so that it can be displayed

Parameters:
@@ -384,7 +384,7 @@

Scene graphics
-class highway_env.road.graphics.WorldSurface(size: Tuple[int, int], flags: object, surf: Surface)[source]¶
+class highway_env.road.graphics.WorldSurface(size: tuple[int, int], flags: object, surf: Surface)[source]¶

A pygame Surface implementing a local coordinate system so that we can move and zoom in the displayed area.

@@ -402,7 +402,7 @@

Scene graphics
-pos2pix(x: float, y: float) Tuple[int, int][source]¶
+pos2pix(x: float, y: float) tuple[int, int][source]¶

Convert two world coordinates [m] into a position in the surface [px]

Parameters:
@@ -419,7 +419,7 @@

Scene graphics
-vec2pix(vec: Tuple[float, float] | ndarray) Tuple[int, int][source]¶
+vec2pix(vec: Tuple[float, float] | ndarray) tuple[int, int][source]¶

Convert a world position [m] into a position in the surface [px].

Parameters:
@@ -553,7 +553,7 @@

Scene graphics
-classmethod draw_stripes(lane: AbstractLane, surface: WorldSurface, starts: List[float], ends: List[float], lats: List[float]) None[source]¶
+classmethod draw_stripes(lane: AbstractLane, surface: WorldSurface, starts: list[float], ends: list[float], lats: list[float]) None[source]¶

Draw a set of stripes along a lane.

Parameters:
diff --git a/main/make_your_own/index.html b/main/make_your_own/index.html index d2cd8d9b7..e55e8e773 100644 --- a/main/make_your_own/index.html +++ b/main/make_your_own/index.html @@ -385,7 +385,7 @@

Profit¶
-class highway_env.envs.common.abstract.AbstractEnv(config: dict | None = None, render_mode: str | None = None)[source]¶
+class highway_env.envs.common.abstract.AbstractEnv(config: dict = None, render_mode: str | None = None)[source]¶

A generic environment for various tasks involving a vehicle driving on a road.

The environment contains a road populated with vehicles, and a controlled ego-vehicle that can change lane and speed. The action space is fixed, but the observation space and reward function must be defined in the @@ -432,7 +432,7 @@

Profit¶
-_rewards(action: int | ndarray) Dict[str, float][source]¶
+_rewards(action: int | ndarray) dict[str, float][source]¶

Returns a multi-objective vector of rewards.

If implemented, this reward vector should be aggregated into a scalar in _reward(). This vector value should only be returned inside the info dict.

@@ -466,7 +466,7 @@

Profit¶
-_info(obs: Observation, action: int | ndarray | None = None) dict[source]¶
+_info(obs: Observation, action: Action | None = None) dict[source]¶

Return a dictionary of additional information

Parameters:
@@ -483,7 +483,7 @@

Profit¶
-reset(*, seed: int | None = None, options: dict | None = None) Tuple[Observation, dict][source]¶
+reset(*, seed: int | None = None, options: dict | None = None) tuple[Observation, dict][source]¶

Reset the environment to it’s initial configuration

Parameters:
@@ -507,7 +507,7 @@

Profit¶
-step(action: int | ndarray) Tuple[Observation, float, bool, bool, dict][source]¶
+step(action: int | ndarray) tuple[Observation, float, bool, bool, dict][source]¶

Perform an action and step the environment dynamics.

The action is executed by the ego-vehicle, and all other vehicles on the road performs their default behaviour for several simulation timesteps until the next decision making step.

@@ -523,13 +523,13 @@

Profit¶
-_simulate(action: int | ndarray | None = None) None[source]¶
+_simulate(action: Action | None = None) None[source]¶

Perform several steps of simulation with constant action.

-render() ndarray | None[source]¶
+render() np.ndarray | None[source]¶

Render the environment.

Create a viewer if none exists, and use it to render an image.

diff --git a/main/multi_agent/index.html b/main/multi_agent/index.html index e55c1b588..70c7f0de1 100644 --- a/main/multi_agent/index.html +++ b/main/multi_agent/index.html @@ -389,11 +389,11 @@

Change the observation space -
-
[[ 1.          1.          0.12        1.          0.          1.
+
[[ 1.          1.          0.04        1.          0.          1.
    0.        ]
- [ 1.          0.21082914 -0.08       -0.10384835  0.          1.
+ [ 1.          0.21299084  0.04       -0.12162084  0.          1.
    0.        ]
- [ 1.          0.4169543  -0.12       -0.13572584  0.          1.
+ [ 1.          0.41946092  0.08       -0.18133634  0.          1.
    0.        ]
- [ 1.          0.6323433  -0.08       -0.07357486  0.          1.
+ [ 1.          0.6381537   0.04       -0.1269737   0.          1.
    0.        ]
- [ 1.          0.8549689   0.         -0.13018668  0.          1.
+ [ 1.          0.82238084  0.08       -0.16781637  0.          1.
    0.        ]
- [ 1.          1.         -0.04       -0.12933037  0.          1.
+ [ 1.          1.          0.         -0.14898224  0.          1.
    0.        ]
- [ 1.          1.         -0.08       -0.08224592  0.          1.
+ [ 1.          1.          0.04       -0.14025204  0.          1.
    0.        ]
- [ 1.          1.         -0.04       -0.16482542  0.          1.
+ [ 1.          1.          0.         -0.13829824  0.          1.
    0.        ]
- [ 1.          1.          0.         -0.14131933  0.          1.
+ [ 1.          1.          0.08       -0.0580093   0.          1.
    0.        ]
- [ 1.          1.         -0.08       -0.09829351  0.          1.
+ [ 1.          1.          0.08       -0.18420112  0.          1.
    0.        ]
  [ 0.          0.          0.          0.          0.          0.
    0.        ]
@@ -968,7 +968,7 @@ 

Example configuration

API¶

-class highway_env.envs.common.observation.GrayscaleObservation(env: AbstractEnv, observation_shape: Tuple[int, int], stack_size: int, weights: List[float], scaling: float | None = None, centering_position: List[float] | None = None, **kwargs)[source]¶
+class highway_env.envs.common.observation.GrayscaleObservation(env: AbstractEnv, observation_shape: tuple[int, int], stack_size: int, weights: list[float], scaling: float | None = None, centering_position: list[float] | None = None, **kwargs)[source]¶

An observation class that collects directly what the simulator renders.

Also stacks the collected frames as in the nature DQN. The observation shape is C x W x H.

@@ -1000,7 +1000,7 @@

Example configuration
-class highway_env.envs.common.observation.KinematicObservation(env: AbstractEnv, features: List[str] = None, vehicles_count: int = 5, features_range: Dict[str, List[float]] = None, absolute: bool = False, order: str = 'sorted', normalize: bool = True, clip: bool = True, see_behind: bool = False, observe_intentions: bool = False, include_obstacles: bool = True, **kwargs: dict)[source]¶
+class highway_env.envs.common.observation.KinematicObservation(env: AbstractEnv, features: list[str] = None, vehicles_count: int = 5, features_range: dict[str, list[float]] = None, absolute: bool = False, order: str = 'sorted', normalize: bool = True, clip: bool = True, see_behind: bool = False, observe_intentions: bool = False, include_obstacles: bool = True, **kwargs: dict)[source]¶

Observe the kinematics of nearby vehicles.

Parameters:
@@ -1042,7 +1042,7 @@

Example configuration
-class highway_env.envs.common.observation.OccupancyGridObservation(env: AbstractEnv, features: List[str] | None = None, grid_size: Tuple[Tuple[float, float], Tuple[float, float]] | None = None, grid_step: Tuple[float, float] | None = None, features_range: Dict[str, List[float]] = None, absolute: bool = False, align_to_vehicle_axes: bool = False, clip: bool = True, as_image: bool = False, **kwargs: dict)[source]¶
+class highway_env.envs.common.observation.OccupancyGridObservation(env: AbstractEnv, features: list[str] | None = None, grid_size: tuple[tuple[float, float], tuple[float, float]] | None = None, grid_step: tuple[float, float] | None = None, features_range: dict[str, list[float]] = None, absolute: bool = False, align_to_vehicle_axes: bool = False, clip: bool = True, as_image: bool = False, **kwargs: dict)[source]¶

Observe an occupancy grid of nearby vehicles.

Parameters:
@@ -1081,7 +1081,7 @@

Example configuration
-pos_to_index(position: ndarray | Sequence[float], relative: bool = False) Tuple[int, int][source]¶
+pos_to_index(position: ndarray | Sequence[float], relative: bool = False) tuple[int, int][source]¶

Convert a world position to a grid cell index

If align_to_vehicle_axes the cells are in the vehicle’s frame, otherwise in the world frame.

@@ -1125,7 +1125,7 @@

Example configuration
-class highway_env.envs.common.observation.KinematicsGoalObservation(env: AbstractEnv, scales: List[float], **kwargs: dict)[source]¶
+class highway_env.envs.common.observation.KinematicsGoalObservation(env: AbstractEnv, scales: list[float], **kwargs: dict)[source]¶
Parameters:
@@ -1158,7 +1158,7 @@

Example configuration
-class highway_env.envs.common.observation.ExitObservation(env: AbstractEnv, features: List[str] = None, vehicles_count: int = 5, features_range: Dict[str, List[float]] = None, absolute: bool = False, order: str = 'sorted', normalize: bool = True, clip: bool = True, see_behind: bool = False, observe_intentions: bool = False, include_obstacles: bool = True, **kwargs: dict)[source]¶
+class highway_env.envs.common.observation.ExitObservation(env: AbstractEnv, features: list[str] = None, vehicles_count: int = 5, features_range: dict[str, list[float]] = None, absolute: bool = False, order: str = 'sorted', normalize: bool = True, clip: bool = True, see_behind: bool = False, observe_intentions: bool = False, include_obstacles: bool = True, **kwargs: dict)[source]¶

Specific to exit_env, observe the distance to the next exit lane as part of a KinematicObservation.

Parameters:
diff --git a/main/searchindex.js b/main/searchindex.js index 3afb66b72..e5890a8b2 100644 --- a/main/searchindex.js +++ b/main/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles": {"404": [[0, null]], "API": [[1, "module-highway_env.envs.common.action"], [4, "module-highway_env.road.lane"], [5, "module-highway_env.road.regulation"], [6, "module-highway_env.road.road"], [7, "module-highway_env.vehicle.behavior"], [8, "module-highway_env.vehicle.controller"], [9, "module-highway_env.vehicle.kinematics"], [10, "api"], [12, "api"], [13, "api"], [14, "api"], [15, "api"], [16, "api"], [18, "module-highway_env.envs.common.graphics"], [21, "module-highway_env.__init__"], [23, "module-highway_env.envs.common.observation"]], "Actions": [[1, null]], "All the environments": [[24, "all-the-environments"]], "Behavior": [[7, null]], "Bibliography": [[2, null]], "Change the action space": [[22, "change-the-action-space"]], "Change the observation space": [[22, "change-the-observation-space"]], "Configuring an environment": [[24, "configuring-an-environment"]], "Continuous Actions": [[1, "continuous-actions"]], "Control": [[8, null]], "Create the scene": [[21, "create-the-scene"]], "Create the vehicles": [[21, "create-the-vehicles"]], "Default configuration": [[10, "default-configuration"], [12, "default-configuration"], [13, "default-configuration"], [14, "default-configuration"], [15, "default-configuration"], [16, "default-configuration"]], "Development version": [[20, "development-version"]], "Discrete Actions": [[1, "discrete-actions"]], "Discrete Meta-Actions": [[1, "discrete-meta-actions"]], "Dynamics": [[3, null]], "Example configuration": [[23, "example-configuration"], [23, "grayscale-example-configuration"], [23, "id4"], [23, "id5"], [23, "id6"]], "Examples on Google Colab": [[24, "examples-on-google-colab"]], "Faster variant": [[10, "faster-variant"]], "Frequently Asked Questions": [[17, null]], "Getting Started": [[24, null]], "Goal environments": [[25, "goal-environments"]], "Graphics": [[18, null]], "Grayscale Image": [[23, "grayscale-image"]], "Heading control": [[8, "heading-control"]], "Highway": [[10, null]], "How to cite this work?": [[19, "how-to-cite-this-work"]], "I try to train an agent using the Kinematics Observation and an MLP model, but the resulting policy is not optimal. Why?": [[17, "i-try-to-train-an-agent-using-the-kinematics-observation-and-an-mlp-model-but-the-resulting-policy-is-not-optimal-why"]], "Illustration of the stack mechanism": [[23, "illustration-of-the-stack-mechanism"]], "Increase the number of controlled vehicles": [[22, "increase-the-number-of-controlled-vehicles"]], "Installation": [[20, null]], "Intersection": [[12, null]], "Kinematics": [[9, null], [23, "kinematics"]], "Lane": [[4, null]], "Lateral Behavior": [[7, "lateral-behavior"]], "Lateral controller": [[8, "lateral-controller"]], "Lidar": [[23, "lidar"]], "Longitudinal Behavior": [[7, "longitudinal-behavior"]], "Longitudinal controller": [[8, "longitudinal-controller"]], "Make the environment configurable": [[21, "make-the-environment-configurable"]], "Make your own environment": [[21, null]], "Making an environment": [[24, "making-an-environment"]], "Manual control": [[1, "manual-control"]], "Merge": [[13, null]], "Most environments": [[25, "most-environments"]], "My videos are too fast / have a low framerate.": [[17, "my-videos-are-too-fast-have-a-low-framerate"]], "Observations": [[23, null]], "Occupancy grid": [[23, "occupancy-grid"]], "Page Not Found": [[0, "page-not-found"]], "Parking": [[14, null]], "Position control": [[8, "position-control"]], "Prerequisites": [[20, "prerequisites"]], "Profit": [[21, "profit"]], "Racetrack": [[15, null]], "Register the environment": [[21, "register-the-environment"]], "Rewards": [[25, null]], "Road": [[6, null]], "Road regulation": [[5, null]], "Roads": [[3, "roads"]], "Roundabout": [[16, null]], "Scene graphics": [[18, "scene-graphics"]], "Set up files": [[21, "set-up-files"]], "Stable release": [[20, "stable-release"]], "The Multi-Agent setting": [[22, null]], "The environments": [[11, null]], "Time to collision": [[23, "time-to-collision"]], "Training an agent": [[24, "training-an-agent"]], "Ubuntu": [[20, "ubuntu"]], "Usage": [[10, "usage"], [12, "usage"], [13, "usage"], [14, "usage"], [15, "usage"], [16, "usage"]], "User Guide": [[26, null]], "Vehicles": [[3, "vehicles"]], "Welcome to highway-env\u2019s documentation!": [[19, null]], "When I try to make an environment, I get an error gymnasium.error.NameNotFound: Environment highway doesn't exist.": [[17, "when-i-try-to-make-an-environment-i-get-an-error-gymnasium-error-namenotfound-environment-highway-doesn-t-exist"]], "Windows 10": [[20, "windows-10"]], "World surface": [[18, "world-surface"]], "Wrapping it up": [[22, "wrapping-it-up"]], "presence feature: one vehicle is close to the north, and one is farther to the east.": [[23, "id7"]], "the Lidar observation": [[23, "id9"]], "v_x feature: the north vehicle drives at the same speed as the ego-vehicle, and the east vehicle a bit slower": [[23, "id8"]]}, "docnames": ["404", "actions/index", "bibliography/index", "dynamics/index", "dynamics/road/lane", "dynamics/road/regulation", "dynamics/road/road", "dynamics/vehicle/behavior", "dynamics/vehicle/controller", "dynamics/vehicle/kinematics", "environments/highway", "environments/index", "environments/intersection", "environments/merge", "environments/parking", "environments/racetrack", "environments/roundabout", "faq", "graphics/index", "index", "installation", "make_your_own", "multi_agent", "observations/index", "quickstart", "rewards/index", "user_guide"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinxcontrib.bibtex": 9}, "filenames": ["404.md", "actions/index.md", "bibliography/index.md", "dynamics/index.md", "dynamics/road/lane.md", "dynamics/road/regulation.md", "dynamics/road/road.md", "dynamics/vehicle/behavior.md", "dynamics/vehicle/controller.md", "dynamics/vehicle/kinematics.md", "environments/highway.md", "environments/index.md", "environments/intersection.md", "environments/merge.md", "environments/parking.md", "environments/racetrack.md", "environments/roundabout.md", "faq.md", "graphics/index.md", "index.md", "installation.md", "make_your_own.md", "multi_agent.md", "observations/index.md", "quickstart.md", "rewards/index.md", "user_guide.md"], "indexentries": {"_automatic_rendering() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv._automatic_rendering", false]], "_info() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv._info", false]], "_is_terminated() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv._is_terminated", false]], "_is_truncated() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv._is_truncated", false]], "_register_highway_envs() (in module highway_env.__init__)": [[21, "highway_env.__init__._register_highway_envs", false]], "_reset() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv._reset", false]], "_reward() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv._reward", false]], "_rewards() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv._rewards", false]], "_simulate() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv._simulate", false]], "abstractenv (class in highway_env.envs.common.abstract)": [[21, "highway_env.envs.common.abstract.AbstractEnv", false]], "abstractlane (class in highway_env.road.lane)": [[4, "highway_env.road.lane.AbstractLane", false]], "acc_max (highway_env.vehicle.behavior.idmvehicle attribute)": [[7, "highway_env.vehicle.behavior.IDMVehicle.ACC_MAX", false]], "acceleration() (highway_env.vehicle.behavior.idmvehicle method)": [[7, "highway_env.vehicle.behavior.IDMVehicle.acceleration", false]], "acceleration() (highway_env.vehicle.behavior.linearvehicle method)": [[7, "highway_env.vehicle.behavior.LinearVehicle.acceleration", false]], "acceleration_range (highway_env.envs.common.action.continuousaction attribute)": [[1, "highway_env.envs.common.action.ContinuousAction.ACCELERATION_RANGE", false]], "act() (highway_env.envs.common.action.actiontype method)": [[1, "highway_env.envs.common.action.ActionType.act", false]], "act() (highway_env.envs.common.action.continuousaction method)": [[1, "highway_env.envs.common.action.ContinuousAction.act", false]], "act() (highway_env.envs.common.action.discreteaction method)": [[1, "highway_env.envs.common.action.DiscreteAction.act", false]], "act() (highway_env.envs.common.action.discretemetaaction method)": [[1, "highway_env.envs.common.action.DiscreteMetaAction.act", false]], "act() (highway_env.envs.common.action.multiagentaction method)": [[1, "highway_env.envs.common.action.MultiAgentAction.act", false]], "act() (highway_env.road.road.road method)": [[6, "highway_env.road.road.Road.act", false]], "act() (highway_env.vehicle.behavior.idmvehicle method)": [[7, "highway_env.vehicle.behavior.IDMVehicle.act", false]], "act() (highway_env.vehicle.behavior.linearvehicle method)": [[7, "highway_env.vehicle.behavior.LinearVehicle.act", false]], "act() (highway_env.vehicle.controller.controlledvehicle method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.act", false]], "act() (highway_env.vehicle.controller.mdpvehicle method)": [[8, "highway_env.vehicle.controller.MDPVehicle.act", false]], "act() (highway_env.vehicle.kinematics.vehicle method)": [[9, "highway_env.vehicle.kinematics.Vehicle.act", false]], "actions_all (highway_env.envs.common.action.discretemetaaction attribute)": [[1, "highway_env.envs.common.action.DiscreteMetaAction.ACTIONS_ALL", false]], "actions_lat (highway_env.envs.common.action.discretemetaaction attribute)": [[1, "highway_env.envs.common.action.DiscreteMetaAction.ACTIONS_LAT", false]], "actions_longi (highway_env.envs.common.action.discretemetaaction attribute)": [[1, "highway_env.envs.common.action.DiscreteMetaAction.ACTIONS_LONGI", false]], "actiontype (class in highway_env.envs.common.action)": [[1, "highway_env.envs.common.action.ActionType", false]], "aggressivevehicle (class in highway_env.vehicle.behavior)": [[7, "highway_env.vehicle.behavior.AggressiveVehicle", false]], "blit_rotate() (highway_env.road.graphics.roadobjectgraphics static method)": [[18, "highway_env.road.graphics.RoadObjectGraphics.blit_rotate", false]], "change_lane_policy() (highway_env.vehicle.behavior.idmvehicle method)": [[7, "highway_env.vehicle.behavior.IDMVehicle.change_lane_policy", false]], "change_vehicles() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv.change_vehicles", false]], "circularlane (class in highway_env.road.lane)": [[4, "highway_env.road.lane.CircularLane", false]], "close() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv.close", false]], "close() (highway_env.envs.common.graphics.envviewer method)": [[18, "highway_env.envs.common.graphics.EnvViewer.close", false]], "collect_data() (highway_env.vehicle.behavior.linearvehicle method)": [[7, "highway_env.vehicle.behavior.LinearVehicle.collect_data", false]], "comfort_acc_max (highway_env.vehicle.behavior.idmvehicle attribute)": [[7, "highway_env.vehicle.behavior.IDMVehicle.COMFORT_ACC_MAX", false]], "comfort_acc_min (highway_env.vehicle.behavior.idmvehicle attribute)": [[7, "highway_env.vehicle.behavior.IDMVehicle.COMFORT_ACC_MIN", false]], "compute_reward() (highway_env.envs.parking_env.parkingenv method)": [[14, "highway_env.envs.parking_env.ParkingEnv.compute_reward", false]], "continuous_curve() (highway_env.road.graphics.lanegraphics class method)": [[18, "highway_env.road.graphics.LaneGraphics.continuous_curve", false]], "continuous_line() (highway_env.road.graphics.lanegraphics class method)": [[18, "highway_env.road.graphics.LaneGraphics.continuous_line", false]], "continuousaction (class in highway_env.envs.common.action)": [[1, "highway_env.envs.common.action.ContinuousAction", false]], "controlled_vehicle (highway_env.envs.common.action.actiontype property)": [[1, "highway_env.envs.common.action.ActionType.controlled_vehicle", false]], "controlledvehicle (class in highway_env.vehicle.controller)": [[8, "highway_env.vehicle.controller.ControlledVehicle", false]], "create_from() (highway_env.vehicle.behavior.idmvehicle class method)": [[7, "highway_env.vehicle.behavior.IDMVehicle.create_from", false]], "create_from() (highway_env.vehicle.controller.controlledvehicle class method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.create_from", false]], "create_from() (highway_env.vehicle.kinematics.vehicle class method)": [[9, "highway_env.vehicle.kinematics.Vehicle.create_from", false]], "create_random() (highway_env.vehicle.kinematics.vehicle class method)": [[9, "highway_env.vehicle.kinematics.Vehicle.create_random", false]], "default_config() (highway_env.envs.common.abstract.abstractenv class method)": [[21, "highway_env.envs.common.abstract.AbstractEnv.default_config", false]], "default_config() (highway_env.envs.highway_env.highwayenv class method)": [[10, "highway_env.envs.highway_env.HighwayEnv.default_config", false]], "default_config() (highway_env.envs.intersection_env.intersectionenv class method)": [[12, "highway_env.envs.intersection_env.IntersectionEnv.default_config", false]], "default_config() (highway_env.envs.merge_env.mergeenv class method)": [[13, "highway_env.envs.merge_env.MergeEnv.default_config", false]], "default_config() (highway_env.envs.parking_env.parkingenv class method)": [[14, "highway_env.envs.parking_env.ParkingEnv.default_config", false]], "default_config() (highway_env.envs.racetrack_env.racetrackenv class method)": [[15, "highway_env.envs.racetrack_env.RacetrackEnv.default_config", false]], "default_config() (highway_env.envs.roundabout_env.roundaboutenv class method)": [[16, "highway_env.envs.roundabout_env.RoundaboutEnv.default_config", false]], "default_initial_speeds (highway_env.vehicle.kinematics.vehicle attribute)": [[9, "highway_env.vehicle.kinematics.Vehicle.DEFAULT_INITIAL_SPEEDS", false]], "defensivevehicle (class in highway_env.vehicle.behavior)": [[7, "highway_env.vehicle.behavior.DefensiveVehicle", false]], "define_spaces() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv.define_spaces", false]], "define_spaces() (highway_env.envs.parking_env.parkingenv method)": [[14, "highway_env.envs.parking_env.ParkingEnv.define_spaces", false]], "delta (highway_env.vehicle.behavior.idmvehicle attribute)": [[7, "highway_env.vehicle.behavior.IDMVehicle.DELTA", false]], "delta_range (highway_env.vehicle.behavior.idmvehicle attribute)": [[7, "highway_env.vehicle.behavior.IDMVehicle.DELTA_RANGE", false]], "desired_gap() (highway_env.vehicle.behavior.idmvehicle method)": [[7, "highway_env.vehicle.behavior.IDMVehicle.desired_gap", false]], "discreteaction (class in highway_env.envs.common.action)": [[1, "highway_env.envs.common.action.DiscreteAction", false]], "discretemetaaction (class in highway_env.envs.common.action)": [[1, "highway_env.envs.common.action.DiscreteMetaAction", false]], "display() (highway_env.envs.common.graphics.envviewer method)": [[18, "highway_env.envs.common.graphics.EnvViewer.display", false]], "display() (highway_env.road.graphics.lanegraphics class method)": [[18, "highway_env.road.graphics.LaneGraphics.display", false]], "display() (highway_env.road.graphics.roadgraphics static method)": [[18, "highway_env.road.graphics.RoadGraphics.display", false]], "display() (highway_env.road.graphics.roadobjectgraphics class method)": [[18, "highway_env.road.graphics.RoadObjectGraphics.display", false]], "display_road_objects() (highway_env.road.graphics.roadgraphics static method)": [[18, "highway_env.road.graphics.RoadGraphics.display_road_objects", false]], "display_traffic() (highway_env.road.graphics.roadgraphics static method)": [[18, "highway_env.road.graphics.RoadGraphics.display_traffic", false]], "distance() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.distance", false]], "distance_wanted (highway_env.vehicle.behavior.idmvehicle attribute)": [[7, "highway_env.vehicle.behavior.IDMVehicle.DISTANCE_WANTED", false]], "distance_with_heading() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.distance_with_heading", false]], "draw_stripes() (highway_env.road.graphics.lanegraphics class method)": [[18, "highway_env.road.graphics.LaneGraphics.draw_stripes", false]], "enforce_road_rules() (highway_env.road.regulation.regulatedroad method)": [[5, "highway_env.road.regulation.RegulatedRoad.enforce_road_rules", false]], "envviewer (class in highway_env.envs.common.graphics)": [[18, "highway_env.envs.common.graphics.EnvViewer", false]], "exitobservation (class in highway_env.envs.common.observation)": [[23, "highway_env.envs.common.observation.ExitObservation", false]], "fill_road_layer_by_cell() (highway_env.envs.common.observation.occupancygridobservation method)": [[23, "highway_env.envs.common.observation.OccupancyGridObservation.fill_road_layer_by_cell", false]], "fill_road_layer_by_lanes() (highway_env.envs.common.observation.occupancygridobservation method)": [[23, "highway_env.envs.common.observation.OccupancyGridObservation.fill_road_layer_by_lanes", false]], "follow_road() (highway_env.vehicle.controller.controlledvehicle method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.follow_road", false]], "from_config() (highway_env.road.lane.abstractlane class method)": [[4, "highway_env.road.lane.AbstractLane.from_config", false]], "from_config() (highway_env.road.lane.circularlane class method)": [[4, "highway_env.road.lane.CircularLane.from_config", false]], "from_config() (highway_env.road.lane.polylanefixedwidth class method)": [[4, "highway_env.road.lane.PolyLaneFixedWidth.from_config", false]], "from_config() (highway_env.road.lane.sinelane class method)": [[4, "highway_env.road.lane.SineLane.from_config", false]], "from_config() (highway_env.road.lane.straightlane class method)": [[4, "highway_env.road.lane.StraightLane.from_config", false]], "get_available_actions() (highway_env.envs.common.action.actiontype method)": [[1, "highway_env.envs.common.action.ActionType.get_available_actions", false]], "get_available_actions() (highway_env.envs.common.action.discretemetaaction method)": [[1, "highway_env.envs.common.action.DiscreteMetaAction.get_available_actions", false]], "get_available_actions() (highway_env.envs.common.action.multiagentaction method)": [[1, "highway_env.envs.common.action.MultiAgentAction.get_available_actions", false]], "get_image() (highway_env.envs.common.graphics.envviewer method)": [[18, "highway_env.envs.common.graphics.EnvViewer.get_image", false]], "get_routes_at_intersection() (highway_env.vehicle.controller.controlledvehicle method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.get_routes_at_intersection", false]], "grayscaleobservation (class in highway_env.envs.common.observation)": [[23, "highway_env.envs.common.observation.GrayscaleObservation", false]], "handle_event() (highway_env.road.graphics.worldsurface method)": [[18, "highway_env.road.graphics.WorldSurface.handle_event", false]], "handle_events() (highway_env.envs.common.graphics.envviewer method)": [[18, "highway_env.envs.common.graphics.EnvViewer.handle_events", false]], "heading_at() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.heading_at", false]], "heading_at() (highway_env.road.lane.circularlane method)": [[4, "highway_env.road.lane.CircularLane.heading_at", false]], "heading_at() (highway_env.road.lane.polylanefixedwidth method)": [[4, "highway_env.road.lane.PolyLaneFixedWidth.heading_at", false]], "heading_at() (highway_env.road.lane.sinelane method)": [[4, "highway_env.road.lane.SineLane.heading_at", false]], "heading_at() (highway_env.road.lane.straightlane method)": [[4, "highway_env.road.lane.StraightLane.heading_at", false]], "highway_env.__init__": [[21, "module-highway_env.__init__", false]], "highway_env.envs.common.abstract": [[21, "module-highway_env.envs.common.abstract", false]], "highway_env.envs.common.action": [[1, "module-highway_env.envs.common.action", false]], "highway_env.envs.common.graphics": [[18, "module-highway_env.envs.common.graphics", false]], "highway_env.envs.common.observation": [[23, "module-highway_env.envs.common.observation", false]], "highway_env.road.graphics": [[18, "module-highway_env.road.graphics", false]], "highway_env.road.lane": [[4, "module-highway_env.road.lane", false]], "highway_env.road.regulation": [[5, "module-highway_env.road.regulation", false]], "highway_env.road.road": [[6, "module-highway_env.road.road", false]], "highway_env.vehicle.behavior": [[7, "module-highway_env.vehicle.behavior", false]], "highway_env.vehicle.controller": [[8, "module-highway_env.vehicle.controller", false]], "highway_env.vehicle.graphics": [[18, "module-highway_env.vehicle.graphics", false]], "highway_env.vehicle.kinematics": [[9, "module-highway_env.vehicle.kinematics", false]], "highwayenv (class in highway_env.envs.highway_env)": [[10, "highway_env.envs.highway_env.HighwayEnv", false]], "history_size (highway_env.vehicle.kinematics.vehicle attribute)": [[9, "highway_env.vehicle.kinematics.Vehicle.HISTORY_SIZE", false]], "idmvehicle (class in highway_env.vehicle.behavior)": [[7, "highway_env.vehicle.behavior.IDMVehicle", false]], "index_to_speed() (highway_env.vehicle.controller.mdpvehicle method)": [[8, "highway_env.vehicle.controller.MDPVehicle.index_to_speed", false]], "intersectionenv (class in highway_env.envs.intersection_env)": [[12, "highway_env.envs.intersection_env.IntersectionEnv", false]], "is_reachable_from() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.is_reachable_from", false]], "is_visible() (highway_env.road.graphics.worldsurface method)": [[18, "highway_env.road.graphics.WorldSurface.is_visible", false]], "kinematicobservation (class in highway_env.envs.common.observation)": [[23, "highway_env.envs.common.observation.KinematicObservation", false]], "kinematicsgoalobservation (class in highway_env.envs.common.observation)": [[23, "highway_env.envs.common.observation.KinematicsGoalObservation", false]], "lanegraphics (class in highway_env.road.graphics)": [[18, "highway_env.road.graphics.LaneGraphics", false]], "length (highway_env.vehicle.kinematics.vehicle attribute)": [[9, "highway_env.vehicle.kinematics.Vehicle.LENGTH", false]], "linearvehicle (class in highway_env.vehicle.behavior)": [[7, "highway_env.vehicle.behavior.LinearVehicle", false]], "linetype (class in highway_env.road.lane)": [[4, "highway_env.road.lane.LineType", false]], "local_angle() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.local_angle", false]], "local_coordinates() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.local_coordinates", false]], "local_coordinates() (highway_env.road.lane.circularlane method)": [[4, "highway_env.road.lane.CircularLane.local_coordinates", false]], "local_coordinates() (highway_env.road.lane.polylanefixedwidth method)": [[4, "highway_env.road.lane.PolyLaneFixedWidth.local_coordinates", false]], "local_coordinates() (highway_env.road.lane.sinelane method)": [[4, "highway_env.road.lane.SineLane.local_coordinates", false]], "local_coordinates() (highway_env.road.lane.straightlane method)": [[4, "highway_env.road.lane.StraightLane.local_coordinates", false]], "max_speed (highway_env.vehicle.kinematics.vehicle attribute)": [[9, "highway_env.vehicle.kinematics.Vehicle.MAX_SPEED", false]], "mdpvehicle (class in highway_env.vehicle.controller)": [[8, "highway_env.vehicle.controller.MDPVehicle", false]], "mergeenv (class in highway_env.envs.merge_env)": [[13, "highway_env.envs.merge_env.MergeEnv", false]], "metaclass__ (highway_env.road.lane.abstractlane attribute)": [[4, "highway_env.road.lane.AbstractLane.metaclass__", false]], "min_speed (highway_env.vehicle.kinematics.vehicle attribute)": [[9, "highway_env.vehicle.kinematics.Vehicle.MIN_SPEED", false]], "mobil() (highway_env.vehicle.behavior.idmvehicle method)": [[7, "highway_env.vehicle.behavior.IDMVehicle.mobil", false]], "module": [[1, "module-highway_env.envs.common.action", false], [4, "module-highway_env.road.lane", false], [5, "module-highway_env.road.regulation", false], [6, "module-highway_env.road.road", false], [7, "module-highway_env.vehicle.behavior", false], [8, "module-highway_env.vehicle.controller", false], [9, "module-highway_env.vehicle.kinematics", false], [18, "module-highway_env.envs.common.graphics", false], [18, "module-highway_env.road.graphics", false], [18, "module-highway_env.vehicle.graphics", false], [21, "module-highway_env.__init__", false], [21, "module-highway_env.envs.common.abstract", false], [23, "module-highway_env.envs.common.observation", false]], "move_display_window_to() (highway_env.road.graphics.worldsurface method)": [[18, "highway_env.road.graphics.WorldSurface.move_display_window_to", false]], "multiagentaction (class in highway_env.envs.common.action)": [[1, "highway_env.envs.common.action.MultiAgentAction", false]], "multiagentwrapper (class in highway_env.envs.common.abstract)": [[21, "highway_env.envs.common.abstract.MultiAgentWrapper", false]], "neighbour_vehicles() (highway_env.road.road.road method)": [[6, "highway_env.road.road.Road.neighbour_vehicles", false]], "normalize() (highway_env.envs.common.observation.occupancygridobservation method)": [[23, "highway_env.envs.common.observation.OccupancyGridObservation.normalize", false]], "normalize_obs() (highway_env.envs.common.observation.kinematicobservation method)": [[23, "highway_env.envs.common.observation.KinematicObservation.normalize_obs", false]], "observe() (highway_env.envs.common.observation.exitobservation method)": [[23, "highway_env.envs.common.observation.ExitObservation.observe", false]], "observe() (highway_env.envs.common.observation.grayscaleobservation method)": [[23, "highway_env.envs.common.observation.GrayscaleObservation.observe", false]], "observe() (highway_env.envs.common.observation.kinematicobservation method)": [[23, "highway_env.envs.common.observation.KinematicObservation.observe", false]], "observe() (highway_env.envs.common.observation.kinematicsgoalobservation method)": [[23, "highway_env.envs.common.observation.KinematicsGoalObservation.observe", false]], "observe() (highway_env.envs.common.observation.occupancygridobservation method)": [[23, "highway_env.envs.common.observation.OccupancyGridObservation.observe", false]], "occupancygridobservation (class in highway_env.envs.common.observation)": [[23, "highway_env.envs.common.observation.OccupancyGridObservation", false]], "on_lane() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.on_lane", false]], "parkingenv (class in highway_env.envs.parking_env)": [[14, "highway_env.envs.parking_env.ParkingEnv", false]], "perception_distance (highway_env.envs.common.abstract.abstractenv attribute)": [[21, "highway_env.envs.common.abstract.AbstractEnv.PERCEPTION_DISTANCE", false]], "pix() (highway_env.road.graphics.worldsurface method)": [[18, "highway_env.road.graphics.WorldSurface.pix", false]], "plan_route_to() (highway_env.vehicle.controller.controlledvehicle method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.plan_route_to", false]], "polylane (class in highway_env.road.lane)": [[4, "highway_env.road.lane.PolyLane", false]], "polylanefixedwidth (class in highway_env.road.lane)": [[4, "highway_env.road.lane.PolyLaneFixedWidth", false]], "pos2pix() (highway_env.road.graphics.worldsurface method)": [[18, "highway_env.road.graphics.WorldSurface.pos2pix", false]], "pos_to_index() (highway_env.envs.common.observation.occupancygridobservation method)": [[23, "highway_env.envs.common.observation.OccupancyGridObservation.pos_to_index", false]], "position() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.position", false]], "position() (highway_env.road.lane.circularlane method)": [[4, "highway_env.road.lane.CircularLane.position", false]], "position() (highway_env.road.lane.polylanefixedwidth method)": [[4, "highway_env.road.lane.PolyLaneFixedWidth.position", false]], "position() (highway_env.road.lane.sinelane method)": [[4, "highway_env.road.lane.SineLane.position", false]], "position() (highway_env.road.lane.straightlane method)": [[4, "highway_env.road.lane.StraightLane.position", false]], "predict_trajectory() (highway_env.vehicle.controller.mdpvehicle method)": [[8, "highway_env.vehicle.controller.MDPVehicle.predict_trajectory", false]], "predict_trajectory() (highway_env.vehicle.kinematics.vehicle method)": [[9, "highway_env.vehicle.kinematics.Vehicle.predict_trajectory", false]], "predict_trajectory_constant_speed() (highway_env.vehicle.controller.controlledvehicle method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.predict_trajectory_constant_speed", false]], "racetrackenv (class in highway_env.envs.racetrack_env)": [[15, "highway_env.envs.racetrack_env.RacetrackEnv", false]], "recover_from_stop() (highway_env.vehicle.behavior.idmvehicle method)": [[7, "highway_env.vehicle.behavior.IDMVehicle.recover_from_stop", false]], "regulatedroad (class in highway_env.road.regulation)": [[5, "highway_env.road.regulation.RegulatedRoad", false]], "render() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv.render", false]], "reset() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv.reset", false]], "respect_priorities() (highway_env.road.regulation.regulatedroad static method)": [[5, "highway_env.road.regulation.RegulatedRoad.respect_priorities", false]], "road (class in highway_env.road.road)": [[6, "highway_env.road.road.Road", false]], "roadgraphics (class in highway_env.road.graphics)": [[18, "highway_env.road.graphics.RoadGraphics", false]], "roadobjectgraphics (class in highway_env.road.graphics)": [[18, "highway_env.road.graphics.RoadObjectGraphics", false]], "roundaboutenv (class in highway_env.envs.roundabout_env)": [[16, "highway_env.envs.roundabout_env.RoundaboutEnv", false]], "set_agent_action_sequence() (highway_env.envs.common.graphics.envviewer method)": [[18, "highway_env.envs.common.graphics.EnvViewer.set_agent_action_sequence", false]], "set_agent_display() (highway_env.envs.common.graphics.envviewer method)": [[18, "highway_env.envs.common.graphics.EnvViewer.set_agent_display", false]], "set_route_at_intersection() (highway_env.vehicle.controller.controlledvehicle method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.set_route_at_intersection", false]], "simplify() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv.simplify", false]], "sinelane (class in highway_env.road.lane)": [[4, "highway_env.road.lane.SineLane", false]], "space() (highway_env.envs.common.action.actiontype method)": [[1, "highway_env.envs.common.action.ActionType.space", false]], "space() (highway_env.envs.common.action.continuousaction method)": [[1, "highway_env.envs.common.action.ContinuousAction.space", false]], "space() (highway_env.envs.common.action.discreteaction method)": [[1, "highway_env.envs.common.action.DiscreteAction.space", false]], "space() (highway_env.envs.common.action.discretemetaaction method)": [[1, "highway_env.envs.common.action.DiscreteMetaAction.space", false]], "space() (highway_env.envs.common.action.multiagentaction method)": [[1, "highway_env.envs.common.action.MultiAgentAction.space", false]], "space() (highway_env.envs.common.observation.grayscaleobservation method)": [[23, "highway_env.envs.common.observation.GrayscaleObservation.space", false]], "space() (highway_env.envs.common.observation.kinematicobservation method)": [[23, "highway_env.envs.common.observation.KinematicObservation.space", false]], "space() (highway_env.envs.common.observation.kinematicsgoalobservation method)": [[23, "highway_env.envs.common.observation.KinematicsGoalObservation.space", false]], "space() (highway_env.envs.common.observation.occupancygridobservation method)": [[23, "highway_env.envs.common.observation.OccupancyGridObservation.space", false]], "speed_control() (highway_env.vehicle.controller.controlledvehicle method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.speed_control", false]], "speed_to_index() (highway_env.vehicle.controller.mdpvehicle method)": [[8, "highway_env.vehicle.controller.MDPVehicle.speed_to_index", false]], "speed_to_index_default() (highway_env.vehicle.controller.mdpvehicle class method)": [[8, "highway_env.vehicle.controller.MDPVehicle.speed_to_index_default", false]], "steering_control() (highway_env.vehicle.behavior.linearvehicle method)": [[7, "highway_env.vehicle.behavior.LinearVehicle.steering_control", false]], "steering_control() (highway_env.vehicle.controller.controlledvehicle method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.steering_control", false]], "steering_features() (highway_env.vehicle.behavior.linearvehicle method)": [[7, "highway_env.vehicle.behavior.LinearVehicle.steering_features", false]], "steering_range (highway_env.envs.common.action.continuousaction attribute)": [[1, "highway_env.envs.common.action.ContinuousAction.STEERING_RANGE", false]], "step() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv.step", false]], "step() (highway_env.envs.common.abstract.multiagentwrapper method)": [[21, "highway_env.envs.common.abstract.MultiAgentWrapper.step", false]], "step() (highway_env.envs.intersection_env.intersectionenv method)": [[12, "highway_env.envs.intersection_env.IntersectionEnv.step", false]], "step() (highway_env.road.regulation.regulatedroad method)": [[5, "highway_env.road.regulation.RegulatedRoad.step", false]], "step() (highway_env.road.road.road method)": [[6, "highway_env.road.road.Road.step", false]], "step() (highway_env.vehicle.behavior.idmvehicle method)": [[7, "highway_env.vehicle.behavior.IDMVehicle.step", false]], "step() (highway_env.vehicle.kinematics.vehicle method)": [[9, "highway_env.vehicle.kinematics.Vehicle.step", false]], "straightlane (class in highway_env.road.lane)": [[4, "highway_env.road.lane.StraightLane", false]], "stripe_length (highway_env.road.graphics.lanegraphics attribute)": [[18, "highway_env.road.graphics.LaneGraphics.STRIPE_LENGTH", false]], "stripe_spacing (highway_env.road.graphics.lanegraphics attribute)": [[18, "highway_env.road.graphics.LaneGraphics.STRIPE_SPACING", false]], "stripe_width (highway_env.road.graphics.lanegraphics attribute)": [[18, "highway_env.road.graphics.LaneGraphics.STRIPE_WIDTH", false]], "striped_line() (highway_env.road.graphics.lanegraphics class method)": [[18, "highway_env.road.graphics.LaneGraphics.striped_line", false]], "target_speed (highway_env.vehicle.controller.controlledvehicle attribute)": [[8, "highway_env.vehicle.controller.ControlledVehicle.target_speed", false]], "time_wanted (highway_env.vehicle.behavior.idmvehicle attribute)": [[7, "highway_env.vehicle.behavior.IDMVehicle.TIME_WANTED", false]], "time_wanted (highway_env.vehicle.behavior.linearvehicle attribute)": [[7, "highway_env.vehicle.behavior.LinearVehicle.TIME_WANTED", false]], "to_config() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.to_config", false]], "to_config() (highway_env.road.lane.circularlane method)": [[4, "highway_env.road.lane.CircularLane.to_config", false]], "to_config() (highway_env.road.lane.polylane method)": [[4, "highway_env.road.lane.PolyLane.to_config", false]], "to_config() (highway_env.road.lane.polylanefixedwidth method)": [[4, "highway_env.road.lane.PolyLaneFixedWidth.to_config", false]], "to_config() (highway_env.road.lane.sinelane method)": [[4, "highway_env.road.lane.SineLane.to_config", false]], "to_config() (highway_env.road.lane.straightlane method)": [[4, "highway_env.road.lane.StraightLane.to_config", false]], "vec2pix() (highway_env.road.graphics.worldsurface method)": [[18, "highway_env.road.graphics.WorldSurface.vec2pix", false]], "vehicle (class in highway_env.vehicle.kinematics)": [[9, "highway_env.vehicle.kinematics.Vehicle", false]], "vehicle (highway_env.envs.common.abstract.abstractenv property)": [[21, "highway_env.envs.common.abstract.AbstractEnv.vehicle", false]], "vehicle_class (highway_env.envs.common.action.actiontype property)": [[1, "highway_env.envs.common.action.ActionType.vehicle_class", false]], "vehicle_class (highway_env.envs.common.action.continuousaction property)": [[1, "highway_env.envs.common.action.ContinuousAction.vehicle_class", false]], "vehicle_class (highway_env.envs.common.action.discretemetaaction property)": [[1, "highway_env.envs.common.action.DiscreteMetaAction.vehicle_class", false]], "vehicle_class (highway_env.envs.common.action.multiagentaction property)": [[1, "highway_env.envs.common.action.MultiAgentAction.vehicle_class", false]], "width (highway_env.vehicle.kinematics.vehicle attribute)": [[9, "highway_env.vehicle.kinematics.Vehicle.WIDTH", false]], "width_at() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.width_at", false]], "width_at() (highway_env.road.lane.circularlane method)": [[4, "highway_env.road.lane.CircularLane.width_at", false]], "width_at() (highway_env.road.lane.polylane method)": [[4, "highway_env.road.lane.PolyLane.width_at", false]], "width_at() (highway_env.road.lane.polylanefixedwidth method)": [[4, "highway_env.road.lane.PolyLaneFixedWidth.width_at", false]], "width_at() (highway_env.road.lane.straightlane method)": [[4, "highway_env.road.lane.StraightLane.width_at", false]], "window_position() (highway_env.envs.common.graphics.envviewer method)": [[18, "highway_env.envs.common.graphics.EnvViewer.window_position", false]], "worldsurface (class in highway_env.road.graphics)": [[18, "highway_env.road.graphics.WorldSurface", false]]}, "objects": {"highway_env": [[21, 0, 0, "-", "__init__"]], "highway_env.__init__": [[21, 1, 1, "", "_register_highway_envs"]], "highway_env.envs.common": [[21, 0, 0, "-", "abstract"], [1, 0, 0, "-", "action"], [18, 0, 0, "-", "graphics"], [23, 0, 0, "-", "observation"]], "highway_env.envs.common.abstract": [[21, 2, 1, "", "AbstractEnv"], [21, 2, 1, "", "MultiAgentWrapper"]], "highway_env.envs.common.abstract.AbstractEnv": [[21, 3, 1, "", "PERCEPTION_DISTANCE"], [21, 4, 1, "", "_automatic_rendering"], [21, 4, 1, "", "_info"], [21, 4, 1, "", "_is_terminated"], [21, 4, 1, "", "_is_truncated"], [21, 4, 1, "", "_reset"], [21, 4, 1, "", "_reward"], [21, 4, 1, "", "_rewards"], [21, 4, 1, "", "_simulate"], [21, 4, 1, "", "change_vehicles"], [21, 4, 1, "", "close"], [21, 4, 1, "", "default_config"], [21, 4, 1, "", "define_spaces"], [21, 4, 1, "", "render"], [21, 4, 1, "", "reset"], [21, 4, 1, "", "simplify"], [21, 4, 1, "", "step"], [21, 5, 1, "", "vehicle"]], "highway_env.envs.common.abstract.MultiAgentWrapper": [[21, 4, 1, "", "step"]], "highway_env.envs.common.action": [[1, 2, 1, "", "ActionType"], [1, 2, 1, "", "ContinuousAction"], [1, 2, 1, "", "DiscreteAction"], [1, 2, 1, "", "DiscreteMetaAction"], [1, 2, 1, "", "MultiAgentAction"]], "highway_env.envs.common.action.ActionType": [[1, 4, 1, "", "act"], [1, 5, 1, "", "controlled_vehicle"], [1, 4, 1, "", "get_available_actions"], [1, 4, 1, "", "space"], [1, 5, 1, "", "vehicle_class"]], "highway_env.envs.common.action.ContinuousAction": [[1, 3, 1, "", "ACCELERATION_RANGE"], [1, 3, 1, "", "STEERING_RANGE"], [1, 4, 1, "", "act"], [1, 4, 1, "", "space"], [1, 5, 1, "", "vehicle_class"]], "highway_env.envs.common.action.DiscreteAction": [[1, 4, 1, "", "act"], [1, 4, 1, "", "space"]], "highway_env.envs.common.action.DiscreteMetaAction": [[1, 3, 1, "", "ACTIONS_ALL"], [1, 3, 1, "", "ACTIONS_LAT"], [1, 3, 1, "", "ACTIONS_LONGI"], [1, 4, 1, "", "act"], [1, 4, 1, "", "get_available_actions"], [1, 4, 1, "", "space"], [1, 5, 1, "", "vehicle_class"]], "highway_env.envs.common.action.MultiAgentAction": [[1, 4, 1, "", "act"], [1, 4, 1, "", "get_available_actions"], [1, 4, 1, "", "space"], [1, 5, 1, "", "vehicle_class"]], "highway_env.envs.common.graphics": [[18, 2, 1, "", "EnvViewer"]], "highway_env.envs.common.graphics.EnvViewer": [[18, 4, 1, "", "close"], [18, 4, 1, "", "display"], [18, 4, 1, "", "get_image"], [18, 4, 1, "", "handle_events"], [18, 4, 1, "", "set_agent_action_sequence"], [18, 4, 1, "", "set_agent_display"], [18, 4, 1, "", "window_position"]], "highway_env.envs.common.observation": [[23, 2, 1, "", "ExitObservation"], [23, 2, 1, "", "GrayscaleObservation"], [23, 2, 1, "", "KinematicObservation"], [23, 2, 1, "", "KinematicsGoalObservation"], [23, 2, 1, "", "OccupancyGridObservation"]], "highway_env.envs.common.observation.ExitObservation": [[23, 4, 1, "", "observe"]], "highway_env.envs.common.observation.GrayscaleObservation": [[23, 4, 1, "", "observe"], [23, 4, 1, "", "space"]], "highway_env.envs.common.observation.KinematicObservation": [[23, 4, 1, "", "normalize_obs"], [23, 4, 1, "", "observe"], [23, 4, 1, "", "space"]], "highway_env.envs.common.observation.KinematicsGoalObservation": [[23, 4, 1, "", "observe"], [23, 4, 1, "", "space"]], "highway_env.envs.common.observation.OccupancyGridObservation": [[23, 4, 1, "", "fill_road_layer_by_cell"], [23, 4, 1, "", "fill_road_layer_by_lanes"], [23, 4, 1, "", "normalize"], [23, 4, 1, "", "observe"], [23, 4, 1, "", "pos_to_index"], [23, 4, 1, "", "space"]], "highway_env.envs.highway_env": [[10, 2, 1, "", "HighwayEnv"]], "highway_env.envs.highway_env.HighwayEnv": [[10, 4, 1, "", "default_config"]], "highway_env.envs.intersection_env": [[12, 2, 1, "", "IntersectionEnv"]], "highway_env.envs.intersection_env.IntersectionEnv": [[12, 4, 1, "", "default_config"], [12, 4, 1, "", "step"]], "highway_env.envs.merge_env": [[13, 2, 1, "", "MergeEnv"]], "highway_env.envs.merge_env.MergeEnv": [[13, 4, 1, "", "default_config"]], "highway_env.envs.parking_env": [[14, 2, 1, "", "ParkingEnv"]], "highway_env.envs.parking_env.ParkingEnv": [[14, 4, 1, "", "compute_reward"], [14, 4, 1, "", "default_config"], [14, 4, 1, "", "define_spaces"]], "highway_env.envs.racetrack_env": [[15, 2, 1, "", "RacetrackEnv"]], "highway_env.envs.racetrack_env.RacetrackEnv": [[15, 4, 1, "", "default_config"]], "highway_env.envs.roundabout_env": [[16, 2, 1, "", "RoundaboutEnv"]], "highway_env.envs.roundabout_env.RoundaboutEnv": [[16, 4, 1, "", "default_config"]], "highway_env.road": [[18, 0, 0, "-", "graphics"], [4, 0, 0, "-", "lane"], [5, 0, 0, "-", "regulation"], [6, 0, 0, "-", "road"]], "highway_env.road.graphics": [[18, 2, 1, "", "LaneGraphics"], [18, 2, 1, "", "RoadGraphics"], [18, 2, 1, "", "RoadObjectGraphics"], [18, 2, 1, "", "WorldSurface"]], "highway_env.road.graphics.LaneGraphics": [[18, 3, 1, "", "STRIPE_LENGTH"], [18, 3, 1, "", "STRIPE_SPACING"], [18, 3, 1, "", "STRIPE_WIDTH"], [18, 4, 1, "", "continuous_curve"], [18, 4, 1, "", "continuous_line"], [18, 4, 1, "", "display"], [18, 4, 1, "", "draw_stripes"], [18, 4, 1, "", "striped_line"]], "highway_env.road.graphics.RoadGraphics": [[18, 4, 1, "", "display"], [18, 4, 1, "", "display_road_objects"], [18, 4, 1, "", "display_traffic"]], "highway_env.road.graphics.RoadObjectGraphics": [[18, 4, 1, "", "blit_rotate"], [18, 4, 1, "", "display"]], "highway_env.road.graphics.WorldSurface": [[18, 4, 1, "", "handle_event"], [18, 4, 1, "", "is_visible"], [18, 4, 1, "", "move_display_window_to"], [18, 4, 1, "", "pix"], [18, 4, 1, "", "pos2pix"], [18, 4, 1, "", "vec2pix"]], "highway_env.road.lane": [[4, 2, 1, "", "AbstractLane"], [4, 2, 1, "", "CircularLane"], [4, 2, 1, "", "LineType"], [4, 2, 1, "", "PolyLane"], [4, 2, 1, "", "PolyLaneFixedWidth"], [4, 2, 1, "", "SineLane"], [4, 2, 1, "", "StraightLane"]], "highway_env.road.lane.AbstractLane": [[4, 4, 1, "", "distance"], [4, 4, 1, "", "distance_with_heading"], [4, 4, 1, "", "from_config"], [4, 4, 1, "", "heading_at"], [4, 4, 1, "", "is_reachable_from"], [4, 4, 1, "", "local_angle"], [4, 4, 1, "", "local_coordinates"], [4, 3, 1, "", "metaclass__"], [4, 4, 1, "", "on_lane"], [4, 4, 1, "", "position"], [4, 4, 1, "", "to_config"], [4, 4, 1, "", "width_at"]], "highway_env.road.lane.CircularLane": [[4, 4, 1, "", "from_config"], [4, 4, 1, "", "heading_at"], [4, 4, 1, "", "local_coordinates"], [4, 4, 1, "", "position"], [4, 4, 1, "", "to_config"], [4, 4, 1, "", "width_at"]], "highway_env.road.lane.PolyLane": [[4, 4, 1, "", "to_config"], [4, 4, 1, "", "width_at"]], "highway_env.road.lane.PolyLaneFixedWidth": [[4, 4, 1, "", "from_config"], [4, 4, 1, "", "heading_at"], [4, 4, 1, "", "local_coordinates"], [4, 4, 1, "", "position"], [4, 4, 1, "", "to_config"], [4, 4, 1, "", "width_at"]], "highway_env.road.lane.SineLane": [[4, 4, 1, "", "from_config"], [4, 4, 1, "", "heading_at"], [4, 4, 1, "", "local_coordinates"], [4, 4, 1, "", "position"], [4, 4, 1, "", "to_config"]], "highway_env.road.lane.StraightLane": [[4, 4, 1, "", "from_config"], [4, 4, 1, "", "heading_at"], [4, 4, 1, "", "local_coordinates"], [4, 4, 1, "", "position"], [4, 4, 1, "", "to_config"], [4, 4, 1, "", "width_at"]], "highway_env.road.regulation": [[5, 2, 1, "", "RegulatedRoad"]], "highway_env.road.regulation.RegulatedRoad": [[5, 4, 1, "", "enforce_road_rules"], [5, 4, 1, "", "respect_priorities"], [5, 4, 1, "", "step"]], "highway_env.road.road": [[6, 2, 1, "", "Road"]], "highway_env.road.road.Road": [[6, 4, 1, "", "act"], [6, 4, 1, "", "neighbour_vehicles"], [6, 4, 1, "", "step"]], "highway_env.vehicle": [[7, 0, 0, "-", "behavior"], [8, 0, 0, "-", "controller"], [18, 0, 0, "-", "graphics"], [9, 0, 0, "-", "kinematics"]], "highway_env.vehicle.behavior": [[7, 2, 1, "", "AggressiveVehicle"], [7, 2, 1, "", "DefensiveVehicle"], [7, 2, 1, "", "IDMVehicle"], [7, 2, 1, "", "LinearVehicle"]], "highway_env.vehicle.behavior.IDMVehicle": [[7, 3, 1, "", "ACC_MAX"], [7, 3, 1, "", "COMFORT_ACC_MAX"], [7, 3, 1, "", "COMFORT_ACC_MIN"], [7, 3, 1, "", "DELTA"], [7, 3, 1, "", "DELTA_RANGE"], [7, 3, 1, "", "DISTANCE_WANTED"], [7, 3, 1, "", "TIME_WANTED"], [7, 4, 1, "", "acceleration"], [7, 4, 1, "", "act"], [7, 4, 1, "", "change_lane_policy"], [7, 4, 1, "", "create_from"], [7, 4, 1, "", "desired_gap"], [7, 4, 1, "", "mobil"], [7, 4, 1, "", "recover_from_stop"], [7, 4, 1, "", "step"]], "highway_env.vehicle.behavior.LinearVehicle": [[7, 3, 1, "", "TIME_WANTED"], [7, 4, 1, "", "acceleration"], [7, 4, 1, "", "act"], [7, 4, 1, "", "collect_data"], [7, 4, 1, "", "steering_control"], [7, 4, 1, "", "steering_features"]], "highway_env.vehicle.controller": [[8, 2, 1, "", "ControlledVehicle"], [8, 2, 1, "", "MDPVehicle"]], "highway_env.vehicle.controller.ControlledVehicle": [[8, 4, 1, "", "act"], [8, 4, 1, "", "create_from"], [8, 4, 1, "", "follow_road"], [8, 4, 1, "", "get_routes_at_intersection"], [8, 4, 1, "", "plan_route_to"], [8, 4, 1, "", "predict_trajectory_constant_speed"], [8, 4, 1, "", "set_route_at_intersection"], [8, 4, 1, "", "speed_control"], [8, 4, 1, "", "steering_control"], [8, 3, 1, "", "target_speed"]], "highway_env.vehicle.controller.MDPVehicle": [[8, 4, 1, "", "act"], [8, 4, 1, "", "index_to_speed"], [8, 4, 1, "", "predict_trajectory"], [8, 4, 1, "", "speed_to_index"], [8, 4, 1, "", "speed_to_index_default"]], "highway_env.vehicle.kinematics": [[9, 2, 1, "", "Vehicle"]], "highway_env.vehicle.kinematics.Vehicle": [[9, 3, 1, "", "DEFAULT_INITIAL_SPEEDS"], [9, 3, 1, "", "HISTORY_SIZE"], [9, 3, 1, "", "LENGTH"], [9, 3, 1, "", "MAX_SPEED"], [9, 3, 1, "", "MIN_SPEED"], [9, 3, 1, "", "WIDTH"], [9, 4, 1, "", "act"], [9, 4, 1, "", "create_from"], [9, 4, 1, "", "create_random"], [9, 4, 1, "", "predict_trajectory"], [9, 4, 1, "", "step"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "method", "Python method"], "5": ["py", "property", "Python property"]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:attribute", "4": "py:method", "5": "py:property"}, "terms": {"": [1, 5, 6, 7, 8, 9, 10, 12, 13, 16, 17, 18, 21, 22, 23, 24, 25], "0": [1, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 20, 21, 22, 23, 24, 25], "00593": 2, "01495": 2, "01773835": 22, "02322465": 22, "025": 23, "03593201": 22, "03932015": 22, "04": 23, "05": 23, "065": 23, "07357486": 23, "075": 23, "08": 23, "08224592": 23, "09829351": 23, "1": [1, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 22, 23, 24, 25], "10": [2, 7, 12, 23], "100": [12, 14, 23], "10261112": 22, "10384835": 23, "105": 23, "11": 16, "1140": 23, "12": 23, "1200x500": 23, "12250": 2, "128": 23, "12933037": 23, "13": [12, 23], "13018668": 23, "13572584": 23, "14": 24, "14131933": 23, "15": [2, 10, 12, 13, 14, 15, 16, 17, 18, 23, 24, 25], "150": [10, 13, 24], "15000": 24, "1612": 2, "16482542": 23, "17": [2, 24], "1707": 2, "172": 23, "18": [15, 23], "1805": 2, "1824": 2, "1911": 2, "1999": 2, "1d": [1, 7], "1m": 23, "1st": 9, "2": [1, 2, 7, 8, 9, 10, 20, 22, 23, 24], "20": [4, 10, 12, 23, 24], "200": [21, 24], "2000": 2, "2007": 2, "2008": 2, "2015": 2, "2017": 2, "2018": 19, "2019": [2, 24], "20265542": 22, "21082914": 23, "22": 23, "222": 23, "23": 9, "231": 15, "25": [9, 23], "256": 24, "25m": 23, "25mn": 24, "27": 23, "2989": 23, "2d": [1, 4, 7], "2e4": 24, "3": [1, 7, 10, 12, 13, 15, 18, 20, 23, 24], "30": [9, 10, 24], "300": [14, 15], "3000": 22, "30978352": 22, "3125": 22, "3141": 2, "32": 24, "33": 18, "3d": 2, "4": [1, 7, 10, 15, 18, 23, 24], "40": [9, 10, 24], "4169543": 23, "42138368": 22, "480": 18, "5": [1, 7, 9, 10, 12, 13, 14, 15, 16, 20, 22, 23, 24], "50": [10, 18, 24], "518": 2, "529": 2, "533": 2, "54714144": 18, "5870": 23, "5e": 24, "6": [2, 7, 12, 16, 23], "600": [10, 12, 13, 14, 15, 16, 24], "62": 2, "6323433": 23, "64": 23, "640": 18, "640x480": [22, 23, 24], "675": 23, "7": [14, 15], "75": [22, 23], "7540": 2, "7853981633974483": 1, "8": [2, 23, 24], "84": 23, "8549689": 23, "89899284": 22, "9": 23, "A": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 18, 21, 22, 23, 24], "As": 22, "At": 8, "But": 12, "By": 18, "For": [1, 6, 7, 17, 22, 23, 24], "If": [1, 7, 8, 9, 16, 19, 21, 23], "In": [2, 7, 10, 13, 16, 17, 21, 22, 23, 25], "It": [6, 7, 8, 9, 12, 13, 14, 16], "Its": 18, "Of": 12, "On": 5, "That": 21, "The": [1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 15, 16, 18, 19, 20, 21, 23, 24, 25, 26], "Then": 1, "There": [3, 24], "These": [9, 21, 23], "To": [20, 21, 22], "Will": 21, "_": [7, 22, 23, 24, 25], "__init__": 21, "_automatic_rend": 21, "_c": 7, "_info": 21, "_is_termin": 21, "_is_trunc": 21, "_make_road": 21, "_n": 7, "_o": 7, "_r": 8, "_register_highway_env": 21, "_reset": 21, "_reward": [21, 25], "_simul": 21, "_state": 24, "_to": 8, "a_": 7, "a_c": 7, "a_n": 7, "a_o": 7, "ab": 7, "abbeel": 2, "abcmeta": 4, "abl": [1, 8, 17, 21], "about": [7, 17, 24], "abov": 1, "absolut": [12, 23], "abstract": [4, 21], "abstractenv": [1, 18, 21, 23], "abstractlan": [4, 6, 18], "acc_max": 7, "acceler": [1, 7, 8, 9, 14], "acceleration_rang": 1, "accept": 22, "access": [1, 13, 21, 24], "accord": 7, "achiev": [12, 14, 21], "achieved_go": 14, "act": [1, 6, 7, 8, 9], "action": [6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 21, 24, 26], "action_1": 22, "action_2": 22, "action_config": [1, 22], "action_dur": [8, 9], "action_i": 22, "action_reward": 15, "action_spac": [1, 17, 21], "action_typ": [21, 23, 24], "actions_al": [1, 22], "actions_index": [23, 24], "actions_lat": 1, "actions_longi": 1, "actions_per_axi": 1, "actiontyp": 1, "actual": [1, 6, 17, 22], "ad": [12, 21], "add": [1, 21], "addit": 21, "address": [17, 25], "adequ": 25, "advanc": 2, "affect": 3, "after": [7, 22, 24], "against": 25, "agent": [1, 10, 12, 13, 14, 15, 18, 21, 23, 25, 26], "agent_displai": 18, "aggreg": 21, "aggressivevehicl": 7, "agre": 12, "alex": 2, "algorithm": 22, "alia": 4, "align": 23, "align_to_vehicle_ax": [15, 23], "all": [7, 12, 17, 21, 23], "allow": [1, 7, 8, 21], "along": [8, 18, 23], "alreadi": 23, "also": [6, 10, 13, 17, 18, 23, 24, 25], "altch": 2, "altern": 21, "alwai": [1, 18, 23], "amir": 2, "among": 8, "amplitud": 4, "an": [1, 5, 6, 7, 8, 9, 12, 18, 19, 21, 22, 23, 25], "anaconda": 20, "andr": 2, "andrea": 2, "andrei": 2, "andrychowicz": 2, "ang_": 23, "angl": [1, 4, 7, 8, 9, 18, 23], "angular": 23, "ani": [12, 14, 21, 23, 25], "anoth": 6, "ansgar": 2, "anticip": 8, "antonogl": 2, "api": 26, "appear": 9, "appli": [1, 8], "approach": [13, 16, 23], "appropri": [14, 25], "approxim": [4, 7], "apt": 20, "ar": [1, 3, 4, 5, 6, 7, 8, 9, 10, 18, 21, 22, 23, 24, 25], "arbitr": 5, "arc": 4, "architectur": [17, 24], "arcsin": 8, "area": [16, 18], "argu": 17, "arn": 2, "around": [4, 18, 23], "arrai": [7, 18, 22, 23], "arrow": 1, "arxiv": 2, "as_imag": [15, 23], "aspect": 25, "assign": 5, "associ": 21, "assum": [8, 23], "attent": [2, 24], "attribut": [5, 24], "author": 19, "automat": [1, 8, 16, 21], "autonom": [2, 19], "avail": [1, 10, 24], "avoid": [8, 10, 12, 13, 15, 16, 25], "awai": 23, "awr": [2, 24], "ax": [22, 23, 24], "ax1": 22, "ax2": 22, "axi": [1, 7, 8, 9, 23], "b": [7, 25], "b_": 7, "base": [1, 5, 7, 9, 24], "baselin": 24, "baselines3": 24, "batch_siz": 24, "beatti": 2, "becaus": [7, 17], "been": [21, 22, 25], "befor": [7, 22], "behav": [3, 5], "behavior": [3, 5, 10, 12, 13, 16, 21, 24], "behaviour": [5, 6, 7, 12, 18, 21, 25], "behind": [9, 23], "being": [7, 9, 25], "bellemar": 2, "benefici": 25, "beta": 9, "better": 24, "between": [4, 5, 7, 8, 9, 18, 23, 25], "beyond": 1, "bibtex": 19, "bicycl": [2, 9], "bin": 23, "blit_rot": 18, "block": 12, "bob": 2, "bolt": 19, "bool": [1, 4, 5, 6, 7, 12, 18, 21, 23], "both": [1, 4, 7, 22, 23], "bottom": 23, "bound": 25, "boundari": 1, "box": 1, "brake": [7, 9, 25], "brigitt": 2, "buffer_s": 24, "c": [7, 18, 23], "calcul": 9, "call": [8, 10, 12, 13, 14, 15, 16, 17, 18, 21], "callabl": [1, 18], "callback": 18, "can": [1, 4, 6, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25], "canada": 2, "candid": 7, "captur": 21, "car": 2, "cartesian": [7, 8, 9], "cascad": 8, "case": [5, 6, 17, 23], "caus": 25, "cd": 22, "cell": 23, "center": [4, 7, 8, 9, 18, 23], "centering_posit": [10, 12, 13, 14, 15, 16, 18, 23, 24], "central": [4, 12, 22], "challeng": 25, "chang": [1, 2, 4, 7, 8, 16, 17, 21, 23, 24, 26], "change_lane_polici": 7, "change_vehicl": 21, "channel": [18, 23], "charl": 2, "check": [21, 23], "choic": [21, 25], "choos": [8, 25], "chosen": [7, 9, 18], "circl": 4, "circularlan": 4, "class": [1, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 21, 22, 23], "classif": 2, "classmethod": [4, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 21], "clip": [1, 23], "clockwis": 4, "close": [7, 17, 18, 21], "closest": [8, 23], "cmap": 23, "cnn": [17, 24], "co": [9, 25], "code": [17, 22], "coeffici": [7, 25], "collect": [7, 19, 23], "collect_data": 7, "collid": [10, 23], "collis": [5, 10, 12, 13, 15, 16, 25, 26], "collision_penalti": 25, "collision_reward": [10, 12, 15, 24], "color": 18, "column": 23, "com": [15, 18, 19, 20], "combin": 8, "come": [1, 12, 23], "comfort_acc_max": 7, "comfort_acc_min": 7, "command": [7, 8, 9], "common": [1, 18, 21, 22, 23], "complet": 9, "compon": 23, "compos": [3, 6, 25], "comput": [2, 4, 7, 8, 21], "compute_reward": 14, "condit": [14, 24], "confer": 2, "config": [1, 4, 10, 12, 13, 14, 15, 16, 18, 21, 22, 23, 24], "config_kei": 21, "configur": [1, 18, 22, 25, 26], "conflict": 5, "congest": 2, "consid": [6, 19, 23], "consist": [1, 2], "constant": [8, 21, 23], "constant_st": 9, "contain": [6, 21, 22, 23], "continu": [14, 15, 18, 26], "continuous_curv": 18, "continuous_lin": 18, "continuousact": [1, 14, 15], "contribut": [12, 19], "control": [2, 3, 7, 14, 15, 16, 21, 26], "controlled_vehicl": [1, 15, 22, 24], "controlledvehicl": [7, 8], "convent": [18, 25], "convers": [4, 23], "convert": [4, 8, 18, 23], "coordin": [4, 6, 18, 23], "copi": [7, 8, 9, 17, 21], "correspond": [1, 4, 8, 14, 17, 18, 21, 23], "cos_d": 23, "cos_h": [12, 14, 23], "could": [12, 22, 25], "cours": 12, "crash": [9, 16], "creat": [1, 4, 7, 8, 9, 18, 24, 26], "create_from": [7, 8, 9], "create_random": 9, "creation": 24, "credit": [14, 15], "cross": 24, "cruis": [1, 8], "current": [1, 6, 8, 9, 20, 21, 23, 25], "curv": [4, 24], "custom": 19, "customari": 23, "customis": [1, 23], "cut": 7, "d": [2, 7], "d_0": 7, "daan": 2, "data": [7, 21, 23], "datafram": 23, "david": 2, "deceler": 7, "decelr": 1, "decemb": 2, "decentr": 12, "decid": [6, 7, 22], "decis": [2, 7, 12, 19, 21], "dedic": 18, "deep": [2, 24, 25], "def": 22, "default": [1, 7, 8, 9, 18, 21, 23, 24], "default_config": [10, 12, 13, 14, 15, 16, 21], "default_initial_spe": 9, "default_width": 4, "defensivevehicl": 7, "defin": [1, 4, 6, 10, 12, 13, 14, 15, 16, 18, 21, 23, 24, 25], "define_spac": [14, 21], "definit": 1, "delta": [1, 7, 8, 9], "delta_": 8, "delta_rang": 7, "demi": 2, "demonstr": 24, "dens": [2, 12], "densiti": 9, "depend": [9, 17, 20, 21], "deriv": 8, "describ": [3, 4, 5, 6, 10, 17, 19, 21, 22, 23], "descript": [3, 19, 23, 24], "desir": [1, 7, 8, 14, 21, 23, 25], "desired_gap": 7, "desired_go": 14, "destin": [8, 12, 23, 25], "detail": [10, 19], "detect": 23, "determin": [4, 5], "determinist": [2, 24], "dev": 20, "df": 23, "dharshan": 2, "dict": [1, 4, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 21, 23, 24], "dictat": 7, "dictionari": [6, 21, 23, 24], "did": [12, 21], "differ": [7, 17, 23], "dimens": 18, "direct": [1, 7, 8, 9, 23], "directli": [1, 23, 24, 25], "dirk": 2, "disabl": 1, "disambigu": 23, "discret": [7, 8, 26], "discreteact": 1, "discretemetaact": [1, 10, 12, 13, 16, 22, 24], "discretis": 23, "dispatch": 22, "displai": [5, 6, 9, 16, 18], "display_road_object": 18, "display_traff": 18, "distanc": [4, 7, 18, 21, 23, 25], "distance_w": 7, "distance_with_head": 4, "distant": 21, "divid": 23, "do": [7, 17, 25], "doe": [7, 17, 24], "doesn": [6, 7], "doi": 2, "done": [1, 16, 17, 18, 22, 23, 24], "dot": [7, 8, 9], "doubl": 24, "dqn": [17, 22, 23, 24], "dqnagent": 22, "draw": 18, "draw_strip": 18, "drawn": 18, "drive": [2, 5, 6, 8, 9, 10, 13, 18, 19, 21, 24, 25], "driver": 7, "dt": [5, 6, 7, 8, 9], "dtype": 22, "duel": 24, "dummi": 22, "durat": [8, 9, 10, 12, 15, 16, 24], "dure": [7, 18], "dynam": [1, 5, 6, 7, 8, 9, 12, 21, 24, 26], "e": [1, 2, 17], "each": [1, 5, 6, 8, 9, 12, 17, 18, 22, 23], "earli": 25, "edg": [1, 6], "edouard": [2, 19], "effect": 24, "ego": [1, 7, 10, 12, 13, 14, 16, 18, 21, 25], "ego_attention_2h": 22, "ego_spac": 24, "ego_vehicl": 7, "either": 1, "eleur": [15, 19, 20, 22, 24], "els": [8, 23], "emerg": 25, "empir": 2, "enabl": [1, 23], "enable_lane_chang": 7, "encod": 23, "encourag": 25, "end": [4, 6, 8, 9, 12, 18, 21, 22], "end_phas": 4, "enforc": 5, "enforce_road_rul": 5, "ensur": 4, "entiti": [5, 6], "entri": 17, "entry_point": 21, "enumer": 23, "env": [1, 10, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24], "env_multi_ag": 22, "environ": [1, 3, 10, 12, 13, 14, 15, 16, 18, 19, 22, 23, 26], "envview": 18, "episod": [12, 17, 21, 22, 24, 25], "episode_trigg": 17, "equal": 16, "equival": 1, "eras": 8, "errat": 9, "euclidean": 25, "evalu": 22, "even": [7, 18], "event": 18, "eventhandl": 1, "everi": [1, 3, 25], "exampl": [17, 21, 22], "except": 23, "execut": [1, 7, 12, 21, 22], "exist": [7, 8, 9, 21, 23], "exit": 23, "exit_env": 23, "exitobserv": 23, "expect": [12, 23, 25], "experi": [2, 22, 24], "expon": 7, "express": 16, "extens": 24, "f": 23, "fail": 12, "fals": [1, 4, 5, 6, 10, 12, 13, 14, 15, 16, 17, 18, 22, 23, 24], "faq": 24, "far": 22, "fast": [10, 16, 24], "faster": [1, 8, 23], "feasibl": 2, "featur": [7, 12, 14, 15, 25], "features_rang": [12, 23], "feel": 17, "few": 24, "fewer": 23, "ffmpeg": 20, "fidjeland": 2, "field": [21, 22, 23], "fig": 23, "figsiz": 23, "figur": [12, 22, 23, 24], "file": 26, "filip": 2, "fill": 23, "fill_road_layer_by_cel": 23, "fill_road_layer_by_lan": 23, "find": [5, 6, 8], "fine": 12, "first": [1, 5, 17, 18, 21, 22, 23], "fix": [4, 21, 23], "flag": 18, "flat": 23, "flatten": 12, "float": [1, 4, 5, 6, 7, 8, 9, 12, 14, 18, 21, 23], "float32": 22, "florent": 2, "flow": 16, "fluid": 2, "focu": 25, "follow": [1, 2, 6, 7, 8, 15, 16, 17, 18, 21, 23, 24], "follow_road": 8, "fong": 2, "forbid": 25, "forbidden": 4, "forward": [8, 9, 18], "found": [6, 25], "fp": 24, "frac": [7, 8, 9, 25], "frame": [4, 17, 18, 21, 23], "fran": 2, "free": 17, "freeli": 21, "frenet": 4, "frequenc": [7, 17, 18, 21], "friction": 1, "from": [4, 6, 7, 8, 9, 10, 14, 21, 22, 23, 24, 25], "from_config": 4, "front": [7, 8, 9, 25], "front_vehicl": 7, "full": [1, 24], "function": [21, 24, 25], "futur": [8, 9], "g": [2, 17], "gain": [7, 8], "gamma": 24, "gap": 7, "gather": 19, "gcc": 20, "gener": [2, 5, 6, 17, 21, 22, 25], "geometri": [4, 6, 21], "georg": 2, "geq": 7, "get": [1, 4, 8, 20, 22, 23], "get_available_act": 1, "get_cmap": 23, "get_imag": 18, "get_routes_at_intersect": 8, "git": 20, "github": [15, 19, 20], "give": [5, 6, 21, 23], "given": [4, 6, 7, 8, 9, 14, 17, 18, 21], "global": 4, "go": [4, 6], "goal": [14, 24, 26], "good": 12, "gradient_step": 24, "grai": 23, "graph": 6, "graphic": [20, 26], "grave": 2, "graviti": 9, "grayscal": [17, 26], "grayscaleobserv": 23, "green": 22, "grid": 26, "grid_siz": [15, 23], "grid_step": [15, 23], "guiba": 2, "guid": 19, "gym": [1, 10, 12, 13, 14, 15, 16, 17, 18, 21, 23], "gymnasium": [1, 18, 21, 22, 23, 24], "h": [18, 23], "ha": [4, 15, 16, 20, 21, 22, 23, 24, 25], "handl": [8, 16, 18], "handle_ev": 18, "handler": 8, "hao": 2, "happen": 12, "hard": 12, "hasn": 16, "hassabi": 2, "have": [6, 7, 14, 21, 25], "he": 15, "head": [4, 7, 9, 14, 23], "heading_at": 4, "heading_weight": 4, "height": 16, "helb": 2, "helen": 2, "henneck": 2, "her": 24, "here": [10, 17, 21, 22, 23, 24], "hermit": 4, "high": [8, 10, 13, 14], "high_speed_reward": [10, 24], "higher": 7, "highwai": [1, 11, 13, 15, 18, 20, 22, 23, 24], "highway_dqn": 24, "highway_env": [1, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23, 24], "highwayenv": 10, "hindsight": [2, 24], "histori": 9, "history_s": 9, "hm08": [2, 24], "hook": 21, "horizon": 23, "horizont": [7, 8, 9], "hot": 23, "how": [1, 3, 7, 22, 24], "howev": [5, 17, 24, 25], "howpublish": 19, "hren": 2, "http": [15, 18, 19, 20], "human": 2, "hz": [10, 13, 16, 17], "i": [1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 21, 22, 24, 25], "id": [9, 21], "idea": [14, 15], "ideal": 12, "identifi": 6, "idl": [1, 23, 24], "idm": 7, "idmvehicl": [7, 10, 13, 16, 21, 24], "ieee": 2, "ignor": 1, "imag": [17, 18, 21, 24, 26], "image1": 20, "implement": [1, 4, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23, 24], "import": [1, 3, 17, 21, 22, 23, 24], "impos": 7, "improv": 24, "imshow": [22, 23, 24], "incent": 7, "includ": [1, 5, 6, 22], "include_obstacl": 23, "incom": 13, "incoming_vehicle_destin": 16, "increas": [7, 23, 26], "inde": 17, "index": [1, 6, 7, 8, 23], "index_to_spe": 8, "induc": 7, "info": [12, 14, 17, 21, 22, 23, 24], "inform": [2, 14, 17, 21, 23], "infrastructur": 6, "infti": 23, "inherit": 21, "initi": [4, 8, 9, 14, 15, 18, 21, 22], "initial_lane_id": 24, "initial_spac": 10, "initial_vehicle_count": 12, "inlin": [22, 23, 24], "input": [8, 9, 18], "insid": [21, 25], "instal": [17, 18, 21], "instanc": [1, 4, 6, 7, 8, 9, 23, 24], "instead": [17, 25], "int": [1, 4, 6, 7, 8, 9, 12, 18, 21, 23, 24], "integ": 6, "integr": 9, "intellig": [2, 7], "interdisciplinari": 2, "intermedi": [17, 21], "intersect": [1, 5, 6, 8, 11, 24], "intersection_env": 12, "intersectionenv": [12, 22], "interv": 1, "invari": [17, 25], "invert": 8, "involv": 21, "ioanni": 2, "is_conflict_poss": 5, "is_reachable_from": 4, "is_vis": 18, "issu": 15, "iter": 23, "its": [1, 4, 6, 7, 8, 9, 16, 17, 22, 24], "itself": 20, "j": [2, 23], "jam": 7, "jean": 2, "joel": 2, "jojo": 14, "jona": 2, "josh": 2, "journal": 19, "json": [4, 22], "junction": 13, "k": [2, 16, 18], "k_": 8, "k_p": 8, "kaichun": 2, "kavukcuoglu": 2, "keep": [12, 25], "kei": [1, 16, 18, 23], "kest": 2, "kinemat": [1, 2, 3, 6, 8, 10, 12, 22, 24, 26], "kinematicobserv": 23, "kinematicsgo": 14, "kinematicsgoalobserv": 23, "king": 2, "known": 4, "korai": 2, "kp_a": 8, "kth07": [2, 7], "kumaran": 2, "kurtosi": 14, "kwarg": [1, 23], "l": [8, 9, 18, 23], "l1": 4, "lab": 6, "label": 1, "lambda": 17, "landmark": [5, 6], "lane": [1, 2, 3, 5, 6, 7, 8, 9, 10, 16, 17, 18, 21, 22, 23, 24], "lane_centering_cost": 15, "lane_change_max_braking_impos": 7, "lane_change_min_acc_gain": 7, "lane_change_reward": 24, "lane_from": 9, "lane_id": 9, "lane_index": [6, 7], "lane_left": 1, "lane_perception_dist": 23, "lane_point": 4, "lane_right": 1, "lane_to": 9, "lanegraph": 18, "laneindex": 6, "lanes_count": [10, 24], "laptop": 24, "larg": 23, "last": [9, 21, 23], "lat": [4, 8, 18], "lat_": 23, "later": [1, 4, 12, 15, 18, 23], "latest": 20, "layer": [1, 23], "layer_index": 23, "lead": [7, 23, 25], "learn": [2, 15, 24, 25], "learning_r": 24, "learning_start": 24, "lectur": 2, "left": [7, 8, 18, 22, 23], "left_boundary_point": 4, "legg": 2, "length": [9, 18], "leonida": 2, "leurent": [2, 19], "level": [1, 2, 4, 8, 17], "libavcodec": 20, "libavformat": 20, "libfreetype6": 20, "libportmidi": 20, "librari": 24, "libsdl": 20, "libsdl1": 20, "libsmpeg": 20, "libswscal": 20, "lidar": 26, "lidarobserv": 23, "light": 12, "like": 23, "line": [4, 8, 18], "line_typ": 4, "linear": [7, 8], "linearli": 10, "linearvehicl": 7, "linetyp": 4, "list": [1, 3, 4, 5, 6, 7, 8, 9, 17, 18, 21, 23, 24], "lm19": [2, 17, 24], "load": [21, 24], "local": [4, 6, 17, 18], "local_angl": 4, "local_coordin": 4, "locat": [18, 23], "long": 17, "long_": 23, "long_offset": 4, "longi": 4, "longitudin": [1, 4, 9, 12, 15, 16, 18, 23], "look": [6, 23], "lookahead": 8, "low": [1, 8], "lower": [7, 21], "lp": 14, "m": [1, 4, 7, 8, 9, 10, 16, 18, 21, 23], "machin": 2, "mai": [7, 23, 25], "main": [4, 13], "maintain": [7, 13], "make": [1, 2, 10, 12, 13, 14, 15, 16, 18, 19, 22, 23, 26], "maneuv": 7, "mani": [15, 18], "manual": [20, 21, 26], "manual_control": [1, 24], "map": [1, 10, 23], "marc": 2, "marcin": 2, "margin": [4, 18], "martin": 2, "matplotlib": [22, 23, 24], "matter": 12, "max": [23, 25], "max_i": 23, "max_spe": 9, "max_x": 23, "maxim": [1, 7], "maximum": [1, 7, 9, 21, 23, 25], "maximum_rang": 23, "mcgrew": 2, "mdpvehicl": 8, "meant": 21, "mechan": 1, "mercat": 2, "merg": [11, 24], "merge_env": 13, "mergeenv": 13, "meta": 26, "metaclass__": 4, "meter": 23, "method": [1, 4, 5, 7, 8, 9, 16, 21, 25], "mi": 2, "microscop": 2, "middl": 23, "might": 1, "min": [23, 25], "min_i": 23, "min_spe": 9, "min_x": 23, "minim": [1, 7], "minimum": [1, 7, 9, 25], "misc": 19, "mixer1": 20, "mk": [2, 25], "mlp": 24, "mlppolici": 24, "mnih": 2, "mo": 2, "mobil": [2, 7], "model": [2, 3, 7, 8, 9, 21, 22, 24], "modifi": [9, 21], "modul": [1, 21, 23], "modular": 21, "montreal": 2, "more": [7, 10, 12, 13, 14, 15, 16, 17, 21], "most": [1, 5, 22, 26], "move": [3, 9, 18, 23], "move_display_window_to": 18, "multi": [21, 26], "multiagentact": [1, 22], "multiagentobserv": 22, "multiagentwrapp": 21, "multilan": 10, "munir": 14, "muno": 2, "must": [1, 6, 14, 18, 20, 21, 22, 24, 25], "my": [12, 24], "n": 7, "name": [1, 23], "narrow": 25, "natur": [2, 23], "ncol": 23, "ndarrai": [1, 4, 7, 8, 9, 12, 14, 18, 21, 23], "nearbi": [7, 23], "nearest": 23, "need": [15, 17], "neg": 25, "negoti": [12, 13], "neighbour": [6, 10], "neighbour_vehicl": 6, "net_arch": 24, "network": [5, 6, 8, 21, 23], "neural": 2, "neurip": 2, "new": [4, 5, 6, 7, 8, 9, 17, 21], "next": [8, 12, 21, 23], "next_ob": 22, "next_obs_i": 22, "node": [6, 8, 9], "non": [4, 7, 8, 23], "none": [1, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 21, 23, 24], "norm": [14, 25], "normal": [14, 23, 25], "normalis": [4, 23], "normalize_ob": 23, "normalize_reward": [12, 24], "note": [2, 25], "notebook": 24, "novel": [2, 17], "now": [7, 13, 21, 22, 23], "np": [5, 6], "np_random": [5, 6], "nrow": 22, "number": [5, 6, 9, 16, 18, 23, 24, 26], "numpi": 20, "nut": 19, "o": [7, 18], "o1": 12, "ob": [17, 21, 22, 23, 24], "object": [4, 5, 6, 7, 8, 9, 10, 13, 18, 21, 23], "object_": 18, "obs_i": 22, "observ": [1, 2, 10, 12, 13, 14, 15, 16, 21, 24, 25, 26], "observation_config": 22, "observation_factori": 23, "observation_shap": 23, "observe_intent": [12, 23], "obstacl": [5, 6, 23], "obtain": [6, 24], "occup": 26, "occupancygrid": [15, 23], "occupancygridobserv": 23, "off": 23, "offroad": 23, "offroad_termin": 24, "offscreen": 18, "offscreen_rend": [10, 13, 14, 15, 16, 24], "offset": [18, 23], "often": [12, 25], "oi": 2, "old": 7, "on_lan": 4, "on_road": 15, "onc": 21, "one": [7, 8, 9, 18, 22], "ongo": 21, "onli": [1, 7, 9, 21, 22, 24, 25], "onroad": 23, "opd": 24, "openai": 24, "optim": [21, 25], "optimist": 2, "option": [4, 19, 21], "order": [1, 9, 17, 22, 23, 25], "origin": 18, "origin_po": 18, "oscil": 4, "ostrovski": 2, "other": [5, 7, 8, 9, 10, 12, 15, 21, 22, 23], "other_valu": 21, "other_vehicl": 15, "other_vehicles_typ": [10, 13, 16, 24], "otherwis": 23, "output": [7, 17], "over": 23, "overal": 7, "overload": [10, 12, 13, 14, 15, 16, 21, 25], "overrid": 7, "overridden": 9, "overwritten": 21, "own": [7, 12, 22, 26], "p": [7, 8, 14, 25], "packag": 19, "page": [2, 24], "pair": [17, 21, 23], "paltchedandrean17": [2, 9], "param": [18, 23], "paramet": [1, 4, 5, 6, 7, 8, 9, 12, 14, 18, 21, 23, 25], "parametr": [4, 24], "parametris": 7, "park": [11, 23, 24, 25], "parking_env": 14, "parkingenv": 14, "part": [21, 23], "particular": 25, "pass": [16, 22, 23], "past": 17, "path": [21, 22], "penalti": 25, "per": 23, "perception_dist": 21, "perform": [1, 7, 8, 12, 21, 23, 24], "permut": 17, "perspect": 25, "peter": 2, "petersen": 2, "phase": 4, "philip": 2, "physic": [2, 3], "piec": 19, "pieter": 2, "pilot": 8, "pip": 20, "pix": 18, "pixel": 18, "place": [7, 8, 9, 23], "placehold": 23, "plan": [2, 8, 16, 24], "plan_route_to": 8, "plasma": 2, "pleas": 19, "plt": [22, 23, 24], "po": 18, "point": [1, 2, 4], "pointnet": 2, "polack": 2, "polici": [7, 21, 22, 24, 25], "policy_frequ": [10, 13, 14, 15, 16, 23, 24], "policy_kwarg": 24, "polit": 7, "polylan": 4, "polylanefixedwidth": 4, "polynomi": 4, "popul": [10, 21], "pos2pix": 18, "pos_to_index": 23, "posit": [4, 6, 7, 9, 14, 18, 23], "possibl": [16, 17, 25], "possibli": 7, "ppo": 17, "pprint": [22, 24], "practic": 25, "pre": 1, "preced": [6, 7], "predict": [5, 8, 9, 12, 22, 23, 24], "predict_trajectori": [8, 9], "predict_trajectory_constant_spe": 8, "predition_typ": 9, "prefer": 25, "presenc": [12, 15], "present": 21, "preserv": 21, "principl": 24, "print": 23, "priorit": 24, "prioriti": [4, 5], "prng": 21, "probabl": 17, "problem": 25, "process": [1, 2], "profit": 26, "progress": 25, "project": [6, 7, 19, 20, 25], "propag": 9, "properti": [1, 7, 8, 9, 21], "proport": 8, "provid": [4, 8, 17, 18, 19, 21, 24], "proxim": 14, "pseudo": 22, "psi": [8, 9, 25], "psi_": 8, "psi_g": 25, "psi_l": 8, "psi_r": 8, "pub": 6, "publish": 19, "pull": 21, "pulsat": 4, "purpos": [12, 19], "px": [10, 13, 16, 18], "py": [21, 22], "pygam": [16, 18, 20], "pyplot": [22, 23, 24], "python": [20, 21, 22], "python3": 20, "q": 24, "qi": 2, "qsmg17": [2, 17], "quantiz": 1, "quick": [19, 24], "quickli": 25, "quit": 12, "r": [2, 7, 8, 25], "racetrack": [11, 24], "racetrack_env": 15, "racetrackenv": 15, "rachel": 2, "rad": [1, 4, 7, 8], "radian": 23, "radiu": 4, "rai": 2, "ramp": 13, "random": [5, 6, 9, 24], "randomli": [7, 9], "randomst": [5, 6], "rang": [1, 7, 8, 9, 10, 23, 24, 25], "rate": 8, "rather": [1, 25], "ratio": 9, "reach": [7, 10, 14], "reachabl": [1, 4, 9], "real": 23, "real_time_rend": 24, "realist": [7, 25], "rear_vehicl": 7, "reason": [7, 12, 17], "receiv": 10, "recent": [5, 6], "recommend": 20, "record": [2, 5, 6, 17], "record_histori": [5, 6], "recordvideo": [17, 21], "recov": 7, "recover_from_stop": 7, "rectangl": [18, 23], "refer": [8, 21], "regist": [17, 26], "register_highway_env": [17, 21], "registr": 21, "regress": 7, "regul": 3, "regularli": 23, "regulatedroad": 5, "reinforc": [2, 24, 25], "reinstal": 21, "rel": 23, "relat": 2, "remov": 21, "render": [17, 18, 21, 22, 23, 24], "render_ag": [10, 13, 14, 15, 16, 24], "render_mod": [10, 12, 13, 14, 15, 16, 21, 22, 23, 24], "repeat": 9, "replac": 25, "replai": [2, 24], "repositori": [17, 19], "repres": [6, 9, 18, 23], "request": 21, "requir": [7, 20, 21], "research": 2, "reset": [1, 17, 18, 21, 22, 23, 24], "resolut": 23, "resolv": 5, "resp": 7, "respect": [1, 7, 8, 18, 25], "respect_prior": 5, "respons": 9, "result": [12, 24], "return": [1, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 21, 22, 23, 25], "reus": 17, "revers": 7, "review": 2, "revisit": 17, "reward": [10, 12, 13, 14, 17, 21, 22, 23, 24, 26], "reward_nam": 21, "reward_speed_rang": [10, 24], "reward_valu": 21, "rgb": [18, 23], "rgb_arrai": [22, 23, 24], "riedmil": 2, "right": [4, 5, 7, 8, 10, 18, 22, 23], "right_boundary_point": 4, "right_lane_reward": 24, "rightmost": 10, "risk": 25, "rl": [22, 24], "rlss": 24, "road": [1, 4, 7, 8, 9, 10, 12, 13, 18, 21, 23, 25, 26], "road_network": 6, "road_object": [5, 6], "roadgraph": 18, "roadnetwork": [3, 5, 6, 21], "roadobject": [6, 18], "roadobjectgraph": 18, "roadsurfac": 18, "robust": 25, "room": 13, "rotat": 18, "roundabout": [11, 18, 24], "roundabout_env": 16, "roundaboutenv": 16, "rout": [7, 8, 16], "row": 23, "rudimentari": 12, "rule": 5, "run": [16, 17, 21, 22, 24], "rusu": 2, "s2": [7, 8], "s_g": 25, "sadik": 2, "safe": [7, 13, 25], "safeti": 7, "sake": 22, "same": [7, 8, 9], "sampl": [1, 17, 21], "satisfi": 25, "save": [8, 9, 24], "sb3": [17, 24], "scalar": 21, "scale": [10, 12, 13, 14, 15, 16, 18, 23, 24, 25], "scene": [17, 23, 26], "schedul": 12, "schneider": 2, "scienc": 2, "screen": 18, "screen_height": [10, 12, 13, 14, 15, 16, 18, 24], "screen_width": [10, 12, 13, 14, 15, 16, 18, 24], "script": [22, 24], "search": 8, "second": [5, 6, 16, 21, 22], "section": 3, "sector": 23, "see": [15, 17, 21, 22, 23, 24, 25], "see_behind": 23, "seed": [21, 22, 24], "segment": 2, "self": [21, 22], "send": [17, 22], "sensit": 17, "separ": [1, 18], "sequenc": [1, 4, 7, 8, 9, 18, 23], "serial": 4, "set": [1, 2, 4, 5, 6, 8, 14, 18, 23, 26], "set_agent_action_sequ": 18, "set_agent_displai": 18, "set_record_video_wrapp": 17, "set_route_at_intersect": 8, "set_titl": 22, "setpoint": 1, "setup": 21, "sever": [1, 7, 10, 12, 17, 21, 23, 24], "shane": 2, "shape": 23, "shift": 25, "should": [5, 6, 7, 17, 18, 21, 22, 23, 25], "show": [22, 23, 24], "show_rect": 18, "show_trajectori": [10, 13, 14, 15, 16, 24], "shuffl": 23, "side": [4, 10, 18], "silver": 2, "similarli": 1, "simpl": [7, 8, 12, 25], "simpli": 12, "simplifi": 21, "simul": [1, 2, 7, 8, 9, 12, 17, 18, 21, 23], "simulation_frequ": [10, 13, 14, 15, 16, 18, 24], "sin": [9, 25], "sin_d": 23, "sin_h": [12, 14, 23], "sinc": [12, 22, 23, 25], "sinelan": 4, "singl": [17, 21, 22, 25], "sinusoid": 4, "situat": 12, "size": [18, 22, 23, 24], "skill": 15, "slightli": 18, "slip": 9, "slower": [1, 8], "small": 23, "smaller": 16, "so": [1, 7, 13, 14, 17, 18, 21, 23], "social": [2, 24], "some": [1, 5, 8, 13, 25], "sometim": 12, "soon": 13, "sophist": 12, "sort": 23, "sourc": [1, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 21, 23], "south": 23, "southeast": 16, "space": [1, 7, 9, 14, 18, 21, 23, 26], "spawn": 9, "spawn_prob": 12, "specif": [10, 12, 13, 14, 15, 16, 18, 23], "specifi": [1, 8, 21, 25], "speed": [1, 7, 8, 9, 10, 13, 14, 21, 25], "speed_control": 8, "speed_limit": 4, "speed_rang": 1, "speed_to_index": 8, "speed_to_index_default": 8, "speedup": 10, "spike": 25, "sqrt": 7, "stabl": 24, "stable_baselines3": 24, "stack_siz": 23, "stackoverflow": 18, "stai": [10, 23], "standard": 22, "start": [4, 6, 9, 13, 18, 19], "start_phas": 4, "state": [2, 7, 8, 9, 17, 21, 22, 23, 25], "static": [5, 18], "statist": 2, "steer": [1, 7, 8, 9, 14], "steering_control": [7, 8], "steering_featur": 7, "steering_rang": 1, "step": [1, 5, 6, 7, 9, 12, 16, 17, 21, 22, 23, 24], "step_i": 23, "step_x": 23, "stig": 2, "still": [16, 21], "stop": [5, 7, 9], "store": [6, 7, 9], "str": [6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 21, 23], "straight": [4, 10, 23], "straightforward": 25, "straightlan": 4, "string": 6, "stripe": 18, "stripe_length": 18, "stripe_spac": 18, "stripe_width": 18, "striped_lin": 18, "stripes_count": 18, "struggl": 17, "stuck": 7, "su": 2, "sub": 17, "subclass": 1, "subplot": [22, 23], "subvers": 20, "sudo": 20, "suffer": 25, "suggest": [7, 17], "suitabl": 17, "sum": 23, "sum_i": 25, "supperted825": 15, "supplementari": [4, 14], "support": [7, 22], "surf": 18, "surfac": [7, 8, 9, 26], "switch": 8, "symposium": 2, "system": [2, 4, 9, 12, 18], "s\u00b2": 1, "t": [6, 7, 16, 23], "take": [1, 5, 7, 23, 24], "tan": 9, "target": [1, 5, 7, 8], "target_lane_index": [7, 8], "target_spe": [1, 7, 8], "target_update_interv": 24, "target_veloc": 7, "task": [10, 12, 13, 14, 16, 21, 24], "tend": 17, "tensorboard_log": 24, "term": [7, 25], "termin": [12, 21, 25], "test": [18, 24], "text": [7, 8, 25], "th": 7, "than": [1, 7, 17, 23, 25], "thank": [15, 18], "thei": [1, 5, 7, 13, 18, 23, 25], "them": [5, 18, 24, 25], "themselv": 21, "thh00": [2, 7], "thi": [1, 4, 7, 10, 12, 13, 16, 17, 20, 21, 22, 23, 24, 25], "thing": 12, "third": 2, "thirti": 2, "those": [8, 24], "though": 7, "three": 23, "throttl": [1, 8], "through": [1, 2, 3, 5, 8, 21, 25], "thu": [1, 17, 25], "tild": 7, "time": [3, 5, 7, 8, 16, 24, 25, 26], "time_w": 7, "timer": 7, "timestep": [5, 6, 7, 8, 9, 12, 21], "timetocollis": [13, 16, 23], "timetocollisionobserv": 23, "titl": [19, 22], "to_config": 4, "tobin": 2, "too": 12, "top": [1, 8, 23], "topic": 2, "topologi": [6, 21], "toward": 23, "track": [1, 8, 15], "traffic": [2, 12, 13, 16], "train": 22, "train_freq": 24, "trajectori": [2, 5, 6, 8, 9, 24, 25], "trajectory_timestep": [8, 9], "transform": 21, "transit": 22, "transpar": 18, "transport": 2, "treiber": 2, "trigger": 7, "trigonometr": 23, "true": [1, 4, 7, 10, 12, 13, 14, 15, 16, 17, 23, 24], "truncat": [12, 16, 17, 21, 22, 23, 24], "try": [5, 7], "ttf2": 20, "tupl": [1, 4, 6, 7, 8, 12, 18, 21, 22, 23], "turn": 8, "tutori": 24, "tv": 7, "two": [3, 5, 7, 8, 15, 17, 18, 22, 23, 25], "type": [1, 4, 10, 12, 13, 14, 15, 16, 21, 22, 23, 24], "typic": 17, "unavail": 1, "uncertain": 25, "under": 8, "underbrac": 7, "uniform": [1, 8, 23], "uniqu": 6, "unsaf": 7, "until": [5, 9, 12, 21], "unwrap": [17, 21, 22, 23, 24], "up": [12, 26], "updat": [8, 9, 18, 20, 22, 23], "upon": 1, "url": 19, "us": [1, 7, 8, 9, 14, 18, 19, 20, 21, 23, 24, 25], "user": 20, "usual": [5, 17], "v": [7, 8, 9, 23, 25], "v0": [1, 10, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23, 24], "v1": 5, "v2": 5, "v_": [8, 25], "v_0": 7, "v_r": 8, "v_x": 25, "v_y": [23, 25], "valu": [1, 16, 21, 23, 24], "vanilla": 24, "variabl": 16, "variat": 8, "variou": 21, "vec": 18, "vec2pix": 18, "vector": 21, "vehicl": [1, 2, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 24, 25, 26], "vehicle_class": [1, 21], "vehicle_class_path": 21, "vehiclegraph": 18, "vehicles_count": [10, 12, 22, 23, 24], "vehicles_dens": 24, "veloc": [1, 5, 7, 8, 23, 25], "veness": 2, "verbos": 24, "verg": 14, "version": 22, "video": [21, 22, 24], "video_fold": 17, "viewer": [18, 21], "visibl": 18, "visual": 18, "visualis": 22, "volodymyr": 2, "vx": [12, 14, 23], "vy": [12, 14, 23], "w": [7, 18, 23, 25], "w_i": 25, "wa": [12, 14, 18], "wai": [4, 5, 12, 17, 24], "wait": 12, "waypoint": 23, "we": [14, 17, 18, 20, 21, 23, 25], "weight": [4, 7, 14, 23, 25], "welcom": [12, 21], "welind": 2, "west": 23, "what": [22, 23], "wheel": [7, 8, 9], "when": [5, 7, 8, 10], "where": [1, 6, 7, 8, 9, 14, 15, 21, 23, 25], "whether": [1, 4, 5, 6, 7, 18, 21, 23], "which": [1, 4, 5, 6, 7, 8, 12, 14, 17, 18, 20, 21, 22, 23, 24, 25], "while": [1, 9, 10, 13, 15, 16, 17, 21, 22, 24], "who": [4, 5], "whole": 21, "whose": [6, 7], "why": 7, "width": [4, 9, 16, 18], "width_at": 4, "wierstra": 2, "window": [16, 18], "window_posit": 18, "wish": 25, "within": 23, "without": 18, "wojciech": 2, "wolski": 2, "work": 17, "workshop": 2, "world": [4, 23, 26], "worldsurfac": 18, "would": [18, 23, 25], "wrap": [17, 21, 26], "wrapper": [17, 21], "write": 4, "written": 24, "wrong": 7, "x": [1, 4, 9, 12, 14, 18, 23, 25], "x15": 10, "x_g": 25, "x_i": 25, "y": [4, 9, 12, 14, 18, 20, 23, 25], "y_g": 25, "yaw": 8, "year": 19, "yield": [5, 8, 24, 25], "you": [17, 19, 21, 23], "your": 26, "your_env": 21, "yourenv": 21, "zaremba": 2, "zero": 23, "zip": 22, "zoom": 18, "\u00e7": 2, "\u00e9": 2}, "titles": ["404", "Actions", "Bibliography", "Dynamics", "Lane", "Road regulation", "Road", "Behavior", "Control", "Kinematics", "Highway", "The environments", "Intersection", "Merge", "Parking", "Racetrack", "Roundabout", "Frequently Asked Questions", "Graphics", "Welcome to highway-env\u2019s documentation!", "Installation", "Make your own environment", "The Multi-Agent setting", "Observations", "Getting Started", "Rewards", "User Guide"], "titleterms": {"": 19, "10": 20, "404": 0, "Not": 0, "The": [11, 22], "action": [1, 22], "agent": [17, 22, 24], "all": 24, "an": [17, 24], "api": [1, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 21, 23], "ar": 17, "ask": 17, "behavior": 7, "bibliographi": 2, "bit": 23, "chang": 22, "cite": 19, "close": 23, "colab": 24, "collis": 23, "configur": [10, 12, 13, 14, 15, 16, 21, 23, 24], "continu": 1, "control": [1, 8, 22], "creat": 21, "default": [10, 12, 13, 14, 15, 16], "develop": 20, "discret": 1, "document": 19, "doesn": 17, "drive": 23, "dynam": 3, "east": 23, "ego": 23, "env": 19, "environ": [11, 17, 21, 24, 25], "error": 17, "exampl": [23, 24], "exist": 17, "farther": 23, "fast": 17, "faster": 10, "featur": 23, "file": 21, "found": 0, "framer": 17, "frequent": 17, "get": [17, 24], "goal": 25, "googl": 24, "graphic": 18, "grayscal": 23, "grid": 23, "guid": 26, "gymnasium": 17, "have": 17, "head": 8, "highwai": [10, 17, 19], "how": 19, "i": [17, 23], "illustr": 23, "imag": 23, "increas": 22, "instal": 20, "intersect": 12, "kinemat": [9, 17, 23], "lane": 4, "later": [7, 8], "lidar": 23, "longitudin": [7, 8], "low": 17, "make": [17, 21, 24], "manual": 1, "mechan": 23, "merg": 13, "meta": 1, "mlp": 17, "model": 17, "most": 25, "multi": 22, "my": 17, "namenotfound": 17, "north": 23, "number": 22, "observ": [17, 22, 23], "occup": 23, "one": 23, "optim": 17, "own": 21, "page": 0, "park": 14, "polici": 17, "posit": 8, "prerequisit": 20, "presenc": 23, "profit": 21, "question": 17, "racetrack": 15, "regist": 21, "regul": 5, "releas": 20, "result": 17, "reward": 25, "road": [3, 5, 6], "roundabout": 16, "same": 23, "scene": [18, 21], "set": [21, 22], "slower": 23, "space": 22, "speed": 23, "stabl": 20, "stack": 23, "start": 24, "surfac": 18, "t": 17, "thi": 19, "time": 23, "too": 17, "train": [17, 24], "try": 17, "ubuntu": 20, "up": [21, 22], "us": 17, "usag": [10, 12, 13, 14, 15, 16], "user": 26, "v_x": 23, "variant": 10, "vehicl": [3, 21, 22, 23], "version": 20, "video": 17, "welcom": 19, "when": 17, "why": 17, "window": 20, "work": 19, "world": 18, "wrap": 22, "your": 21}}) \ No newline at end of file +Search.setIndex({"alltitles": {"404": [[0, null]], "API": [[1, "module-highway_env.envs.common.action"], [4, "module-highway_env.road.lane"], [5, "module-highway_env.road.regulation"], [6, "module-highway_env.road.road"], [7, "module-highway_env.vehicle.behavior"], [8, "module-highway_env.vehicle.controller"], [9, "module-highway_env.vehicle.kinematics"], [10, "api"], [12, "api"], [13, "api"], [14, "api"], [15, "api"], [16, "api"], [18, "module-highway_env.envs.common.graphics"], [21, "module-highway_env.__init__"], [23, "module-highway_env.envs.common.observation"]], "Actions": [[1, null]], "All the environments": [[24, "all-the-environments"]], "Behavior": [[7, null]], "Bibliography": [[2, null]], "Change the action space": [[22, "change-the-action-space"]], "Change the observation space": [[22, "change-the-observation-space"]], "Configuring an environment": [[24, "configuring-an-environment"]], "Continuous Actions": [[1, "continuous-actions"]], "Control": [[8, null]], "Create the scene": [[21, "create-the-scene"]], "Create the vehicles": [[21, "create-the-vehicles"]], "Default configuration": [[10, "default-configuration"], [12, "default-configuration"], [13, "default-configuration"], [14, "default-configuration"], [15, "default-configuration"], [16, "default-configuration"]], "Development version": [[20, "development-version"]], "Discrete Actions": [[1, "discrete-actions"]], "Discrete Meta-Actions": [[1, "discrete-meta-actions"]], "Dynamics": [[3, null]], "Example configuration": [[23, "example-configuration"], [23, "grayscale-example-configuration"], [23, "id4"], [23, "id5"], [23, "id6"]], "Examples on Google Colab": [[24, "examples-on-google-colab"]], "Faster variant": [[10, "faster-variant"]], "Frequently Asked Questions": [[17, null]], "Getting Started": [[24, null]], "Goal environments": [[25, "goal-environments"]], "Graphics": [[18, null]], "Grayscale Image": [[23, "grayscale-image"]], "Heading control": [[8, "heading-control"]], "Highway": [[10, null]], "How to cite this work?": [[19, "how-to-cite-this-work"]], "I try to train an agent using the Kinematics Observation and an MLP model, but the resulting policy is not optimal. Why?": [[17, "i-try-to-train-an-agent-using-the-kinematics-observation-and-an-mlp-model-but-the-resulting-policy-is-not-optimal-why"]], "Illustration of the stack mechanism": [[23, "illustration-of-the-stack-mechanism"]], "Increase the number of controlled vehicles": [[22, "increase-the-number-of-controlled-vehicles"]], "Installation": [[20, null]], "Intersection": [[12, null]], "Kinematics": [[9, null], [23, "kinematics"]], "Lane": [[4, null]], "Lateral Behavior": [[7, "lateral-behavior"]], "Lateral controller": [[8, "lateral-controller"]], "Lidar": [[23, "lidar"]], "Longitudinal Behavior": [[7, "longitudinal-behavior"]], "Longitudinal controller": [[8, "longitudinal-controller"]], "Make the environment configurable": [[21, "make-the-environment-configurable"]], "Make your own environment": [[21, null]], "Making an environment": [[24, "making-an-environment"]], "Manual control": [[1, "manual-control"]], "Merge": [[13, null]], "Most environments": [[25, "most-environments"]], "My videos are too fast / have a low framerate.": [[17, "my-videos-are-too-fast-have-a-low-framerate"]], "Observations": [[23, null]], "Occupancy grid": [[23, "occupancy-grid"]], "Page Not Found": [[0, "page-not-found"]], "Parking": [[14, null]], "Position control": [[8, "position-control"]], "Prerequisites": [[20, "prerequisites"]], "Profit": [[21, "profit"]], "Racetrack": [[15, null]], "Register the environment": [[21, "register-the-environment"]], "Rewards": [[25, null]], "Road": [[6, null]], "Road regulation": [[5, null]], "Roads": [[3, "roads"]], "Roundabout": [[16, null]], "Scene graphics": [[18, "scene-graphics"]], "Set up files": [[21, "set-up-files"]], "Stable release": [[20, "stable-release"]], "The Multi-Agent setting": [[22, null]], "The environments": [[11, null]], "Time to collision": [[23, "time-to-collision"]], "Training an agent": [[24, "training-an-agent"]], "Ubuntu": [[20, "ubuntu"]], "Usage": [[10, "usage"], [12, "usage"], [13, "usage"], [14, "usage"], [15, "usage"], [16, "usage"]], "User Guide": [[26, null]], "Vehicles": [[3, "vehicles"]], "Welcome to highway-env\u2019s documentation!": [[19, null]], "When I try to make an environment, I get an error gymnasium.error.NameNotFound: Environment highway doesn't exist.": [[17, "when-i-try-to-make-an-environment-i-get-an-error-gymnasium-error-namenotfound-environment-highway-doesn-t-exist"]], "Windows 10": [[20, "windows-10"]], "World surface": [[18, "world-surface"]], "Wrapping it up": [[22, "wrapping-it-up"]], "presence feature: one vehicle is close to the north, and one is farther to the east.": [[23, "id7"]], "the Lidar observation": [[23, "id9"]], "v_x feature: the north vehicle drives at the same speed as the ego-vehicle, and the east vehicle a bit slower": [[23, "id8"]]}, "docnames": ["404", "actions/index", "bibliography/index", "dynamics/index", "dynamics/road/lane", "dynamics/road/regulation", "dynamics/road/road", "dynamics/vehicle/behavior", "dynamics/vehicle/controller", "dynamics/vehicle/kinematics", "environments/highway", "environments/index", "environments/intersection", "environments/merge", "environments/parking", "environments/racetrack", "environments/roundabout", "faq", "graphics/index", "index", "installation", "make_your_own", "multi_agent", "observations/index", "quickstart", "rewards/index", "user_guide"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinxcontrib.bibtex": 9}, "filenames": ["404.md", "actions/index.md", "bibliography/index.md", "dynamics/index.md", "dynamics/road/lane.md", "dynamics/road/regulation.md", "dynamics/road/road.md", "dynamics/vehicle/behavior.md", "dynamics/vehicle/controller.md", "dynamics/vehicle/kinematics.md", "environments/highway.md", "environments/index.md", "environments/intersection.md", "environments/merge.md", "environments/parking.md", "environments/racetrack.md", "environments/roundabout.md", "faq.md", "graphics/index.md", "index.md", "installation.md", "make_your_own.md", "multi_agent.md", "observations/index.md", "quickstart.md", "rewards/index.md", "user_guide.md"], "indexentries": {"_automatic_rendering() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv._automatic_rendering", false]], "_info() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv._info", false]], "_is_terminated() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv._is_terminated", false]], "_is_truncated() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv._is_truncated", false]], "_register_highway_envs() (in module highway_env.__init__)": [[21, "highway_env.__init__._register_highway_envs", false]], "_reset() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv._reset", false]], "_reward() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv._reward", false]], "_rewards() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv._rewards", false]], "_simulate() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv._simulate", false]], "abstractenv (class in highway_env.envs.common.abstract)": [[21, "highway_env.envs.common.abstract.AbstractEnv", false]], "abstractlane (class in highway_env.road.lane)": [[4, "highway_env.road.lane.AbstractLane", false]], "acc_max (highway_env.vehicle.behavior.idmvehicle attribute)": [[7, "highway_env.vehicle.behavior.IDMVehicle.ACC_MAX", false]], "acceleration() (highway_env.vehicle.behavior.idmvehicle method)": [[7, "highway_env.vehicle.behavior.IDMVehicle.acceleration", false]], "acceleration() (highway_env.vehicle.behavior.linearvehicle method)": [[7, "highway_env.vehicle.behavior.LinearVehicle.acceleration", false]], "acceleration_range (highway_env.envs.common.action.continuousaction attribute)": [[1, "highway_env.envs.common.action.ContinuousAction.ACCELERATION_RANGE", false]], "act() (highway_env.envs.common.action.actiontype method)": [[1, "highway_env.envs.common.action.ActionType.act", false]], "act() (highway_env.envs.common.action.continuousaction method)": [[1, "highway_env.envs.common.action.ContinuousAction.act", false]], "act() (highway_env.envs.common.action.discreteaction method)": [[1, "highway_env.envs.common.action.DiscreteAction.act", false]], "act() (highway_env.envs.common.action.discretemetaaction method)": [[1, "highway_env.envs.common.action.DiscreteMetaAction.act", false]], "act() (highway_env.envs.common.action.multiagentaction method)": [[1, "highway_env.envs.common.action.MultiAgentAction.act", false]], "act() (highway_env.road.road.road method)": [[6, "highway_env.road.road.Road.act", false]], "act() (highway_env.vehicle.behavior.idmvehicle method)": [[7, "highway_env.vehicle.behavior.IDMVehicle.act", false]], "act() (highway_env.vehicle.behavior.linearvehicle method)": [[7, "highway_env.vehicle.behavior.LinearVehicle.act", false]], "act() (highway_env.vehicle.controller.controlledvehicle method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.act", false]], "act() (highway_env.vehicle.controller.mdpvehicle method)": [[8, "highway_env.vehicle.controller.MDPVehicle.act", false]], "act() (highway_env.vehicle.kinematics.vehicle method)": [[9, "highway_env.vehicle.kinematics.Vehicle.act", false]], "actions_all (highway_env.envs.common.action.discretemetaaction attribute)": [[1, "highway_env.envs.common.action.DiscreteMetaAction.ACTIONS_ALL", false]], "actions_lat (highway_env.envs.common.action.discretemetaaction attribute)": [[1, "highway_env.envs.common.action.DiscreteMetaAction.ACTIONS_LAT", false]], "actions_longi (highway_env.envs.common.action.discretemetaaction attribute)": [[1, "highway_env.envs.common.action.DiscreteMetaAction.ACTIONS_LONGI", false]], "actiontype (class in highway_env.envs.common.action)": [[1, "highway_env.envs.common.action.ActionType", false]], "aggressivevehicle (class in highway_env.vehicle.behavior)": [[7, "highway_env.vehicle.behavior.AggressiveVehicle", false]], "blit_rotate() (highway_env.road.graphics.roadobjectgraphics static method)": [[18, "highway_env.road.graphics.RoadObjectGraphics.blit_rotate", false]], "change_lane_policy() (highway_env.vehicle.behavior.idmvehicle method)": [[7, "highway_env.vehicle.behavior.IDMVehicle.change_lane_policy", false]], "change_vehicles() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv.change_vehicles", false]], "circularlane (class in highway_env.road.lane)": [[4, "highway_env.road.lane.CircularLane", false]], "close() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv.close", false]], "close() (highway_env.envs.common.graphics.envviewer method)": [[18, "highway_env.envs.common.graphics.EnvViewer.close", false]], "collect_data() (highway_env.vehicle.behavior.linearvehicle method)": [[7, "highway_env.vehicle.behavior.LinearVehicle.collect_data", false]], "comfort_acc_max (highway_env.vehicle.behavior.idmvehicle attribute)": [[7, "highway_env.vehicle.behavior.IDMVehicle.COMFORT_ACC_MAX", false]], "comfort_acc_min (highway_env.vehicle.behavior.idmvehicle attribute)": [[7, "highway_env.vehicle.behavior.IDMVehicle.COMFORT_ACC_MIN", false]], "compute_reward() (highway_env.envs.parking_env.parkingenv method)": [[14, "highway_env.envs.parking_env.ParkingEnv.compute_reward", false]], "continuous_curve() (highway_env.road.graphics.lanegraphics class method)": [[18, "highway_env.road.graphics.LaneGraphics.continuous_curve", false]], "continuous_line() (highway_env.road.graphics.lanegraphics class method)": [[18, "highway_env.road.graphics.LaneGraphics.continuous_line", false]], "continuousaction (class in highway_env.envs.common.action)": [[1, "highway_env.envs.common.action.ContinuousAction", false]], "controlled_vehicle (highway_env.envs.common.action.actiontype property)": [[1, "highway_env.envs.common.action.ActionType.controlled_vehicle", false]], "controlledvehicle (class in highway_env.vehicle.controller)": [[8, "highway_env.vehicle.controller.ControlledVehicle", false]], "create_from() (highway_env.vehicle.behavior.idmvehicle class method)": [[7, "highway_env.vehicle.behavior.IDMVehicle.create_from", false]], "create_from() (highway_env.vehicle.controller.controlledvehicle class method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.create_from", false]], "create_from() (highway_env.vehicle.kinematics.vehicle class method)": [[9, "highway_env.vehicle.kinematics.Vehicle.create_from", false]], "create_random() (highway_env.vehicle.kinematics.vehicle class method)": [[9, "highway_env.vehicle.kinematics.Vehicle.create_random", false]], "default_config() (highway_env.envs.common.abstract.abstractenv class method)": [[21, "highway_env.envs.common.abstract.AbstractEnv.default_config", false]], "default_config() (highway_env.envs.highway_env.highwayenv class method)": [[10, "highway_env.envs.highway_env.HighwayEnv.default_config", false]], "default_config() (highway_env.envs.intersection_env.intersectionenv class method)": [[12, "highway_env.envs.intersection_env.IntersectionEnv.default_config", false]], "default_config() (highway_env.envs.merge_env.mergeenv class method)": [[13, "highway_env.envs.merge_env.MergeEnv.default_config", false]], "default_config() (highway_env.envs.parking_env.parkingenv class method)": [[14, "highway_env.envs.parking_env.ParkingEnv.default_config", false]], "default_config() (highway_env.envs.racetrack_env.racetrackenv class method)": [[15, "highway_env.envs.racetrack_env.RacetrackEnv.default_config", false]], "default_config() (highway_env.envs.roundabout_env.roundaboutenv class method)": [[16, "highway_env.envs.roundabout_env.RoundaboutEnv.default_config", false]], "default_initial_speeds (highway_env.vehicle.kinematics.vehicle attribute)": [[9, "highway_env.vehicle.kinematics.Vehicle.DEFAULT_INITIAL_SPEEDS", false]], "defensivevehicle (class in highway_env.vehicle.behavior)": [[7, "highway_env.vehicle.behavior.DefensiveVehicle", false]], "define_spaces() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv.define_spaces", false]], "define_spaces() (highway_env.envs.parking_env.parkingenv method)": [[14, "highway_env.envs.parking_env.ParkingEnv.define_spaces", false]], "delta (highway_env.vehicle.behavior.idmvehicle attribute)": [[7, "highway_env.vehicle.behavior.IDMVehicle.DELTA", false]], "delta_range (highway_env.vehicle.behavior.idmvehicle attribute)": [[7, "highway_env.vehicle.behavior.IDMVehicle.DELTA_RANGE", false]], "desired_gap() (highway_env.vehicle.behavior.idmvehicle method)": [[7, "highway_env.vehicle.behavior.IDMVehicle.desired_gap", false]], "discreteaction (class in highway_env.envs.common.action)": [[1, "highway_env.envs.common.action.DiscreteAction", false]], "discretemetaaction (class in highway_env.envs.common.action)": [[1, "highway_env.envs.common.action.DiscreteMetaAction", false]], "display() (highway_env.envs.common.graphics.envviewer method)": [[18, "highway_env.envs.common.graphics.EnvViewer.display", false]], "display() (highway_env.road.graphics.lanegraphics class method)": [[18, "highway_env.road.graphics.LaneGraphics.display", false]], "display() (highway_env.road.graphics.roadgraphics static method)": [[18, "highway_env.road.graphics.RoadGraphics.display", false]], "display() (highway_env.road.graphics.roadobjectgraphics class method)": [[18, "highway_env.road.graphics.RoadObjectGraphics.display", false]], "display_road_objects() (highway_env.road.graphics.roadgraphics static method)": [[18, "highway_env.road.graphics.RoadGraphics.display_road_objects", false]], "display_traffic() (highway_env.road.graphics.roadgraphics static method)": [[18, "highway_env.road.graphics.RoadGraphics.display_traffic", false]], "distance() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.distance", false]], "distance_wanted (highway_env.vehicle.behavior.idmvehicle attribute)": [[7, "highway_env.vehicle.behavior.IDMVehicle.DISTANCE_WANTED", false]], "distance_with_heading() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.distance_with_heading", false]], "draw_stripes() (highway_env.road.graphics.lanegraphics class method)": [[18, "highway_env.road.graphics.LaneGraphics.draw_stripes", false]], "enforce_road_rules() (highway_env.road.regulation.regulatedroad method)": [[5, "highway_env.road.regulation.RegulatedRoad.enforce_road_rules", false]], "envviewer (class in highway_env.envs.common.graphics)": [[18, "highway_env.envs.common.graphics.EnvViewer", false]], "exitobservation (class in highway_env.envs.common.observation)": [[23, "highway_env.envs.common.observation.ExitObservation", false]], "fill_road_layer_by_cell() (highway_env.envs.common.observation.occupancygridobservation method)": [[23, "highway_env.envs.common.observation.OccupancyGridObservation.fill_road_layer_by_cell", false]], "fill_road_layer_by_lanes() (highway_env.envs.common.observation.occupancygridobservation method)": [[23, "highway_env.envs.common.observation.OccupancyGridObservation.fill_road_layer_by_lanes", false]], "follow_road() (highway_env.vehicle.controller.controlledvehicle method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.follow_road", false]], "from_config() (highway_env.road.lane.abstractlane class method)": [[4, "highway_env.road.lane.AbstractLane.from_config", false]], "from_config() (highway_env.road.lane.circularlane class method)": [[4, "highway_env.road.lane.CircularLane.from_config", false]], "from_config() (highway_env.road.lane.polylanefixedwidth class method)": [[4, "highway_env.road.lane.PolyLaneFixedWidth.from_config", false]], "from_config() (highway_env.road.lane.sinelane class method)": [[4, "highway_env.road.lane.SineLane.from_config", false]], "from_config() (highway_env.road.lane.straightlane class method)": [[4, "highway_env.road.lane.StraightLane.from_config", false]], "get_available_actions() (highway_env.envs.common.action.actiontype method)": [[1, "highway_env.envs.common.action.ActionType.get_available_actions", false]], "get_available_actions() (highway_env.envs.common.action.discretemetaaction method)": [[1, "highway_env.envs.common.action.DiscreteMetaAction.get_available_actions", false]], "get_available_actions() (highway_env.envs.common.action.multiagentaction method)": [[1, "highway_env.envs.common.action.MultiAgentAction.get_available_actions", false]], "get_image() (highway_env.envs.common.graphics.envviewer method)": [[18, "highway_env.envs.common.graphics.EnvViewer.get_image", false]], "get_routes_at_intersection() (highway_env.vehicle.controller.controlledvehicle method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.get_routes_at_intersection", false]], "grayscaleobservation (class in highway_env.envs.common.observation)": [[23, "highway_env.envs.common.observation.GrayscaleObservation", false]], "handle_event() (highway_env.road.graphics.worldsurface method)": [[18, "highway_env.road.graphics.WorldSurface.handle_event", false]], "handle_events() (highway_env.envs.common.graphics.envviewer method)": [[18, "highway_env.envs.common.graphics.EnvViewer.handle_events", false]], "heading_at() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.heading_at", false]], "heading_at() (highway_env.road.lane.circularlane method)": [[4, "highway_env.road.lane.CircularLane.heading_at", false]], "heading_at() (highway_env.road.lane.polylanefixedwidth method)": [[4, "highway_env.road.lane.PolyLaneFixedWidth.heading_at", false]], "heading_at() (highway_env.road.lane.sinelane method)": [[4, "highway_env.road.lane.SineLane.heading_at", false]], "heading_at() (highway_env.road.lane.straightlane method)": [[4, "highway_env.road.lane.StraightLane.heading_at", false]], "highway_env.__init__": [[21, "module-highway_env.__init__", false]], "highway_env.envs.common.abstract": [[21, "module-highway_env.envs.common.abstract", false]], "highway_env.envs.common.action": [[1, "module-highway_env.envs.common.action", false]], "highway_env.envs.common.graphics": [[18, "module-highway_env.envs.common.graphics", false]], "highway_env.envs.common.observation": [[23, "module-highway_env.envs.common.observation", false]], "highway_env.road.graphics": [[18, "module-highway_env.road.graphics", false]], "highway_env.road.lane": [[4, "module-highway_env.road.lane", false]], "highway_env.road.regulation": [[5, "module-highway_env.road.regulation", false]], "highway_env.road.road": [[6, "module-highway_env.road.road", false]], "highway_env.vehicle.behavior": [[7, "module-highway_env.vehicle.behavior", false]], "highway_env.vehicle.controller": [[8, "module-highway_env.vehicle.controller", false]], "highway_env.vehicle.graphics": [[18, "module-highway_env.vehicle.graphics", false]], "highway_env.vehicle.kinematics": [[9, "module-highway_env.vehicle.kinematics", false]], "highwayenv (class in highway_env.envs.highway_env)": [[10, "highway_env.envs.highway_env.HighwayEnv", false]], "history_size (highway_env.vehicle.kinematics.vehicle attribute)": [[9, "highway_env.vehicle.kinematics.Vehicle.HISTORY_SIZE", false]], "idmvehicle (class in highway_env.vehicle.behavior)": [[7, "highway_env.vehicle.behavior.IDMVehicle", false]], "index_to_speed() (highway_env.vehicle.controller.mdpvehicle method)": [[8, "highway_env.vehicle.controller.MDPVehicle.index_to_speed", false]], "intersectionenv (class in highway_env.envs.intersection_env)": [[12, "highway_env.envs.intersection_env.IntersectionEnv", false]], "is_reachable_from() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.is_reachable_from", false]], "is_visible() (highway_env.road.graphics.worldsurface method)": [[18, "highway_env.road.graphics.WorldSurface.is_visible", false]], "kinematicobservation (class in highway_env.envs.common.observation)": [[23, "highway_env.envs.common.observation.KinematicObservation", false]], "kinematicsgoalobservation (class in highway_env.envs.common.observation)": [[23, "highway_env.envs.common.observation.KinematicsGoalObservation", false]], "lanegraphics (class in highway_env.road.graphics)": [[18, "highway_env.road.graphics.LaneGraphics", false]], "length (highway_env.vehicle.kinematics.vehicle attribute)": [[9, "highway_env.vehicle.kinematics.Vehicle.LENGTH", false]], "linearvehicle (class in highway_env.vehicle.behavior)": [[7, "highway_env.vehicle.behavior.LinearVehicle", false]], "linetype (class in highway_env.road.lane)": [[4, "highway_env.road.lane.LineType", false]], "local_angle() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.local_angle", false]], "local_coordinates() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.local_coordinates", false]], "local_coordinates() (highway_env.road.lane.circularlane method)": [[4, "highway_env.road.lane.CircularLane.local_coordinates", false]], "local_coordinates() (highway_env.road.lane.polylanefixedwidth method)": [[4, "highway_env.road.lane.PolyLaneFixedWidth.local_coordinates", false]], "local_coordinates() (highway_env.road.lane.sinelane method)": [[4, "highway_env.road.lane.SineLane.local_coordinates", false]], "local_coordinates() (highway_env.road.lane.straightlane method)": [[4, "highway_env.road.lane.StraightLane.local_coordinates", false]], "max_speed (highway_env.vehicle.kinematics.vehicle attribute)": [[9, "highway_env.vehicle.kinematics.Vehicle.MAX_SPEED", false]], "mdpvehicle (class in highway_env.vehicle.controller)": [[8, "highway_env.vehicle.controller.MDPVehicle", false]], "mergeenv (class in highway_env.envs.merge_env)": [[13, "highway_env.envs.merge_env.MergeEnv", false]], "metaclass__ (highway_env.road.lane.abstractlane attribute)": [[4, "highway_env.road.lane.AbstractLane.metaclass__", false]], "min_speed (highway_env.vehicle.kinematics.vehicle attribute)": [[9, "highway_env.vehicle.kinematics.Vehicle.MIN_SPEED", false]], "mobil() (highway_env.vehicle.behavior.idmvehicle method)": [[7, "highway_env.vehicle.behavior.IDMVehicle.mobil", false]], "module": [[1, "module-highway_env.envs.common.action", false], [4, "module-highway_env.road.lane", false], [5, "module-highway_env.road.regulation", false], [6, "module-highway_env.road.road", false], [7, "module-highway_env.vehicle.behavior", false], [8, "module-highway_env.vehicle.controller", false], [9, "module-highway_env.vehicle.kinematics", false], [18, "module-highway_env.envs.common.graphics", false], [18, "module-highway_env.road.graphics", false], [18, "module-highway_env.vehicle.graphics", false], [21, "module-highway_env.__init__", false], [21, "module-highway_env.envs.common.abstract", false], [23, "module-highway_env.envs.common.observation", false]], "move_display_window_to() (highway_env.road.graphics.worldsurface method)": [[18, "highway_env.road.graphics.WorldSurface.move_display_window_to", false]], "multiagentaction (class in highway_env.envs.common.action)": [[1, "highway_env.envs.common.action.MultiAgentAction", false]], "multiagentwrapper (class in highway_env.envs.common.abstract)": [[21, "highway_env.envs.common.abstract.MultiAgentWrapper", false]], "neighbour_vehicles() (highway_env.road.road.road method)": [[6, "highway_env.road.road.Road.neighbour_vehicles", false]], "normalize() (highway_env.envs.common.observation.occupancygridobservation method)": [[23, "highway_env.envs.common.observation.OccupancyGridObservation.normalize", false]], "normalize_obs() (highway_env.envs.common.observation.kinematicobservation method)": [[23, "highway_env.envs.common.observation.KinematicObservation.normalize_obs", false]], "observe() (highway_env.envs.common.observation.exitobservation method)": [[23, "highway_env.envs.common.observation.ExitObservation.observe", false]], "observe() (highway_env.envs.common.observation.grayscaleobservation method)": [[23, "highway_env.envs.common.observation.GrayscaleObservation.observe", false]], "observe() (highway_env.envs.common.observation.kinematicobservation method)": [[23, "highway_env.envs.common.observation.KinematicObservation.observe", false]], "observe() (highway_env.envs.common.observation.kinematicsgoalobservation method)": [[23, "highway_env.envs.common.observation.KinematicsGoalObservation.observe", false]], "observe() (highway_env.envs.common.observation.occupancygridobservation method)": [[23, "highway_env.envs.common.observation.OccupancyGridObservation.observe", false]], "occupancygridobservation (class in highway_env.envs.common.observation)": [[23, "highway_env.envs.common.observation.OccupancyGridObservation", false]], "on_lane() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.on_lane", false]], "parkingenv (class in highway_env.envs.parking_env)": [[14, "highway_env.envs.parking_env.ParkingEnv", false]], "perception_distance (highway_env.envs.common.abstract.abstractenv attribute)": [[21, "highway_env.envs.common.abstract.AbstractEnv.PERCEPTION_DISTANCE", false]], "pix() (highway_env.road.graphics.worldsurface method)": [[18, "highway_env.road.graphics.WorldSurface.pix", false]], "plan_route_to() (highway_env.vehicle.controller.controlledvehicle method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.plan_route_to", false]], "polylane (class in highway_env.road.lane)": [[4, "highway_env.road.lane.PolyLane", false]], "polylanefixedwidth (class in highway_env.road.lane)": [[4, "highway_env.road.lane.PolyLaneFixedWidth", false]], "pos2pix() (highway_env.road.graphics.worldsurface method)": [[18, "highway_env.road.graphics.WorldSurface.pos2pix", false]], "pos_to_index() (highway_env.envs.common.observation.occupancygridobservation method)": [[23, "highway_env.envs.common.observation.OccupancyGridObservation.pos_to_index", false]], "position() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.position", false]], "position() (highway_env.road.lane.circularlane method)": [[4, "highway_env.road.lane.CircularLane.position", false]], "position() (highway_env.road.lane.polylanefixedwidth method)": [[4, "highway_env.road.lane.PolyLaneFixedWidth.position", false]], "position() (highway_env.road.lane.sinelane method)": [[4, "highway_env.road.lane.SineLane.position", false]], "position() (highway_env.road.lane.straightlane method)": [[4, "highway_env.road.lane.StraightLane.position", false]], "predict_trajectory() (highway_env.vehicle.controller.mdpvehicle method)": [[8, "highway_env.vehicle.controller.MDPVehicle.predict_trajectory", false]], "predict_trajectory() (highway_env.vehicle.kinematics.vehicle method)": [[9, "highway_env.vehicle.kinematics.Vehicle.predict_trajectory", false]], "predict_trajectory_constant_speed() (highway_env.vehicle.controller.controlledvehicle method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.predict_trajectory_constant_speed", false]], "racetrackenv (class in highway_env.envs.racetrack_env)": [[15, "highway_env.envs.racetrack_env.RacetrackEnv", false]], "recover_from_stop() (highway_env.vehicle.behavior.idmvehicle method)": [[7, "highway_env.vehicle.behavior.IDMVehicle.recover_from_stop", false]], "regulatedroad (class in highway_env.road.regulation)": [[5, "highway_env.road.regulation.RegulatedRoad", false]], "render() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv.render", false]], "reset() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv.reset", false]], "respect_priorities() (highway_env.road.regulation.regulatedroad static method)": [[5, "highway_env.road.regulation.RegulatedRoad.respect_priorities", false]], "road (class in highway_env.road.road)": [[6, "highway_env.road.road.Road", false]], "roadgraphics (class in highway_env.road.graphics)": [[18, "highway_env.road.graphics.RoadGraphics", false]], "roadobjectgraphics (class in highway_env.road.graphics)": [[18, "highway_env.road.graphics.RoadObjectGraphics", false]], "roundaboutenv (class in highway_env.envs.roundabout_env)": [[16, "highway_env.envs.roundabout_env.RoundaboutEnv", false]], "set_agent_action_sequence() (highway_env.envs.common.graphics.envviewer method)": [[18, "highway_env.envs.common.graphics.EnvViewer.set_agent_action_sequence", false]], "set_agent_display() (highway_env.envs.common.graphics.envviewer method)": [[18, "highway_env.envs.common.graphics.EnvViewer.set_agent_display", false]], "set_route_at_intersection() (highway_env.vehicle.controller.controlledvehicle method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.set_route_at_intersection", false]], "simplify() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv.simplify", false]], "sinelane (class in highway_env.road.lane)": [[4, "highway_env.road.lane.SineLane", false]], "space() (highway_env.envs.common.action.actiontype method)": [[1, "highway_env.envs.common.action.ActionType.space", false]], "space() (highway_env.envs.common.action.continuousaction method)": [[1, "highway_env.envs.common.action.ContinuousAction.space", false]], "space() (highway_env.envs.common.action.discreteaction method)": [[1, "highway_env.envs.common.action.DiscreteAction.space", false]], "space() (highway_env.envs.common.action.discretemetaaction method)": [[1, "highway_env.envs.common.action.DiscreteMetaAction.space", false]], "space() (highway_env.envs.common.action.multiagentaction method)": [[1, "highway_env.envs.common.action.MultiAgentAction.space", false]], "space() (highway_env.envs.common.observation.grayscaleobservation method)": [[23, "highway_env.envs.common.observation.GrayscaleObservation.space", false]], "space() (highway_env.envs.common.observation.kinematicobservation method)": [[23, "highway_env.envs.common.observation.KinematicObservation.space", false]], "space() (highway_env.envs.common.observation.kinematicsgoalobservation method)": [[23, "highway_env.envs.common.observation.KinematicsGoalObservation.space", false]], "space() (highway_env.envs.common.observation.occupancygridobservation method)": [[23, "highway_env.envs.common.observation.OccupancyGridObservation.space", false]], "speed_control() (highway_env.vehicle.controller.controlledvehicle method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.speed_control", false]], "speed_to_index() (highway_env.vehicle.controller.mdpvehicle method)": [[8, "highway_env.vehicle.controller.MDPVehicle.speed_to_index", false]], "speed_to_index_default() (highway_env.vehicle.controller.mdpvehicle class method)": [[8, "highway_env.vehicle.controller.MDPVehicle.speed_to_index_default", false]], "steering_control() (highway_env.vehicle.behavior.linearvehicle method)": [[7, "highway_env.vehicle.behavior.LinearVehicle.steering_control", false]], "steering_control() (highway_env.vehicle.controller.controlledvehicle method)": [[8, "highway_env.vehicle.controller.ControlledVehicle.steering_control", false]], "steering_features() (highway_env.vehicle.behavior.linearvehicle method)": [[7, "highway_env.vehicle.behavior.LinearVehicle.steering_features", false]], "steering_range (highway_env.envs.common.action.continuousaction attribute)": [[1, "highway_env.envs.common.action.ContinuousAction.STEERING_RANGE", false]], "step() (highway_env.envs.common.abstract.abstractenv method)": [[21, "highway_env.envs.common.abstract.AbstractEnv.step", false]], "step() (highway_env.envs.common.abstract.multiagentwrapper method)": [[21, "highway_env.envs.common.abstract.MultiAgentWrapper.step", false]], "step() (highway_env.envs.intersection_env.intersectionenv method)": [[12, "highway_env.envs.intersection_env.IntersectionEnv.step", false]], "step() (highway_env.road.regulation.regulatedroad method)": [[5, "highway_env.road.regulation.RegulatedRoad.step", false]], "step() (highway_env.road.road.road method)": [[6, "highway_env.road.road.Road.step", false]], "step() (highway_env.vehicle.behavior.idmvehicle method)": [[7, "highway_env.vehicle.behavior.IDMVehicle.step", false]], "step() (highway_env.vehicle.kinematics.vehicle method)": [[9, "highway_env.vehicle.kinematics.Vehicle.step", false]], "straightlane (class in highway_env.road.lane)": [[4, "highway_env.road.lane.StraightLane", false]], "stripe_length (highway_env.road.graphics.lanegraphics attribute)": [[18, "highway_env.road.graphics.LaneGraphics.STRIPE_LENGTH", false]], "stripe_spacing (highway_env.road.graphics.lanegraphics attribute)": [[18, "highway_env.road.graphics.LaneGraphics.STRIPE_SPACING", false]], "stripe_width (highway_env.road.graphics.lanegraphics attribute)": [[18, "highway_env.road.graphics.LaneGraphics.STRIPE_WIDTH", false]], "striped_line() (highway_env.road.graphics.lanegraphics class method)": [[18, "highway_env.road.graphics.LaneGraphics.striped_line", false]], "target_speed (highway_env.vehicle.controller.controlledvehicle attribute)": [[8, "highway_env.vehicle.controller.ControlledVehicle.target_speed", false]], "time_wanted (highway_env.vehicle.behavior.idmvehicle attribute)": [[7, "highway_env.vehicle.behavior.IDMVehicle.TIME_WANTED", false]], "time_wanted (highway_env.vehicle.behavior.linearvehicle attribute)": [[7, "highway_env.vehicle.behavior.LinearVehicle.TIME_WANTED", false]], "to_config() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.to_config", false]], "to_config() (highway_env.road.lane.circularlane method)": [[4, "highway_env.road.lane.CircularLane.to_config", false]], "to_config() (highway_env.road.lane.polylane method)": [[4, "highway_env.road.lane.PolyLane.to_config", false]], "to_config() (highway_env.road.lane.polylanefixedwidth method)": [[4, "highway_env.road.lane.PolyLaneFixedWidth.to_config", false]], "to_config() (highway_env.road.lane.sinelane method)": [[4, "highway_env.road.lane.SineLane.to_config", false]], "to_config() (highway_env.road.lane.straightlane method)": [[4, "highway_env.road.lane.StraightLane.to_config", false]], "vec2pix() (highway_env.road.graphics.worldsurface method)": [[18, "highway_env.road.graphics.WorldSurface.vec2pix", false]], "vehicle (class in highway_env.vehicle.kinematics)": [[9, "highway_env.vehicle.kinematics.Vehicle", false]], "vehicle (highway_env.envs.common.abstract.abstractenv property)": [[21, "highway_env.envs.common.abstract.AbstractEnv.vehicle", false]], "vehicle_class (highway_env.envs.common.action.actiontype property)": [[1, "highway_env.envs.common.action.ActionType.vehicle_class", false]], "vehicle_class (highway_env.envs.common.action.continuousaction property)": [[1, "highway_env.envs.common.action.ContinuousAction.vehicle_class", false]], "vehicle_class (highway_env.envs.common.action.discretemetaaction property)": [[1, "highway_env.envs.common.action.DiscreteMetaAction.vehicle_class", false]], "vehicle_class (highway_env.envs.common.action.multiagentaction property)": [[1, "highway_env.envs.common.action.MultiAgentAction.vehicle_class", false]], "width (highway_env.vehicle.kinematics.vehicle attribute)": [[9, "highway_env.vehicle.kinematics.Vehicle.WIDTH", false]], "width_at() (highway_env.road.lane.abstractlane method)": [[4, "highway_env.road.lane.AbstractLane.width_at", false]], "width_at() (highway_env.road.lane.circularlane method)": [[4, "highway_env.road.lane.CircularLane.width_at", false]], "width_at() (highway_env.road.lane.polylane method)": [[4, "highway_env.road.lane.PolyLane.width_at", false]], "width_at() (highway_env.road.lane.polylanefixedwidth method)": [[4, "highway_env.road.lane.PolyLaneFixedWidth.width_at", false]], "width_at() (highway_env.road.lane.straightlane method)": [[4, "highway_env.road.lane.StraightLane.width_at", false]], "window_position() (highway_env.envs.common.graphics.envviewer method)": [[18, "highway_env.envs.common.graphics.EnvViewer.window_position", false]], "worldsurface (class in highway_env.road.graphics)": [[18, "highway_env.road.graphics.WorldSurface", false]]}, "objects": {"highway_env": [[21, 0, 0, "-", "__init__"]], "highway_env.__init__": [[21, 1, 1, "", "_register_highway_envs"]], "highway_env.envs.common": [[21, 0, 0, "-", "abstract"], [1, 0, 0, "-", "action"], [18, 0, 0, "-", "graphics"], [23, 0, 0, "-", "observation"]], "highway_env.envs.common.abstract": [[21, 2, 1, "", "AbstractEnv"], [21, 2, 1, "", "MultiAgentWrapper"]], "highway_env.envs.common.abstract.AbstractEnv": [[21, 3, 1, "", "PERCEPTION_DISTANCE"], [21, 4, 1, "", "_automatic_rendering"], [21, 4, 1, "", "_info"], [21, 4, 1, "", "_is_terminated"], [21, 4, 1, "", "_is_truncated"], [21, 4, 1, "", "_reset"], [21, 4, 1, "", "_reward"], [21, 4, 1, "", "_rewards"], [21, 4, 1, "", "_simulate"], [21, 4, 1, "", "change_vehicles"], [21, 4, 1, "", "close"], [21, 4, 1, "", "default_config"], [21, 4, 1, "", "define_spaces"], [21, 4, 1, "", "render"], [21, 4, 1, "", "reset"], [21, 4, 1, "", "simplify"], [21, 4, 1, "", "step"], [21, 5, 1, "", "vehicle"]], "highway_env.envs.common.abstract.MultiAgentWrapper": [[21, 4, 1, "", "step"]], "highway_env.envs.common.action": [[1, 2, 1, "", "ActionType"], [1, 2, 1, "", "ContinuousAction"], [1, 2, 1, "", "DiscreteAction"], [1, 2, 1, "", "DiscreteMetaAction"], [1, 2, 1, "", "MultiAgentAction"]], "highway_env.envs.common.action.ActionType": [[1, 4, 1, "", "act"], [1, 5, 1, "", "controlled_vehicle"], [1, 4, 1, "", "get_available_actions"], [1, 4, 1, "", "space"], [1, 5, 1, "", "vehicle_class"]], "highway_env.envs.common.action.ContinuousAction": [[1, 3, 1, "", "ACCELERATION_RANGE"], [1, 3, 1, "", "STEERING_RANGE"], [1, 4, 1, "", "act"], [1, 4, 1, "", "space"], [1, 5, 1, "", "vehicle_class"]], "highway_env.envs.common.action.DiscreteAction": [[1, 4, 1, "", "act"], [1, 4, 1, "", "space"]], "highway_env.envs.common.action.DiscreteMetaAction": [[1, 3, 1, "", "ACTIONS_ALL"], [1, 3, 1, "", "ACTIONS_LAT"], [1, 3, 1, "", "ACTIONS_LONGI"], [1, 4, 1, "", "act"], [1, 4, 1, "", "get_available_actions"], [1, 4, 1, "", "space"], [1, 5, 1, "", "vehicle_class"]], "highway_env.envs.common.action.MultiAgentAction": [[1, 4, 1, "", "act"], [1, 4, 1, "", "get_available_actions"], [1, 4, 1, "", "space"], [1, 5, 1, "", "vehicle_class"]], "highway_env.envs.common.graphics": [[18, 2, 1, "", "EnvViewer"]], "highway_env.envs.common.graphics.EnvViewer": [[18, 4, 1, "", "close"], [18, 4, 1, "", "display"], [18, 4, 1, "", "get_image"], [18, 4, 1, "", "handle_events"], [18, 4, 1, "", "set_agent_action_sequence"], [18, 4, 1, "", "set_agent_display"], [18, 4, 1, "", "window_position"]], "highway_env.envs.common.observation": [[23, 2, 1, "", "ExitObservation"], [23, 2, 1, "", "GrayscaleObservation"], [23, 2, 1, "", "KinematicObservation"], [23, 2, 1, "", "KinematicsGoalObservation"], [23, 2, 1, "", "OccupancyGridObservation"]], "highway_env.envs.common.observation.ExitObservation": [[23, 4, 1, "", "observe"]], "highway_env.envs.common.observation.GrayscaleObservation": [[23, 4, 1, "", "observe"], [23, 4, 1, "", "space"]], "highway_env.envs.common.observation.KinematicObservation": [[23, 4, 1, "", "normalize_obs"], [23, 4, 1, "", "observe"], [23, 4, 1, "", "space"]], "highway_env.envs.common.observation.KinematicsGoalObservation": [[23, 4, 1, "", "observe"], [23, 4, 1, "", "space"]], "highway_env.envs.common.observation.OccupancyGridObservation": [[23, 4, 1, "", "fill_road_layer_by_cell"], [23, 4, 1, "", "fill_road_layer_by_lanes"], [23, 4, 1, "", "normalize"], [23, 4, 1, "", "observe"], [23, 4, 1, "", "pos_to_index"], [23, 4, 1, "", "space"]], "highway_env.envs.highway_env": [[10, 2, 1, "", "HighwayEnv"]], "highway_env.envs.highway_env.HighwayEnv": [[10, 4, 1, "", "default_config"]], "highway_env.envs.intersection_env": [[12, 2, 1, "", "IntersectionEnv"]], "highway_env.envs.intersection_env.IntersectionEnv": [[12, 4, 1, "", "default_config"], [12, 4, 1, "", "step"]], "highway_env.envs.merge_env": [[13, 2, 1, "", "MergeEnv"]], "highway_env.envs.merge_env.MergeEnv": [[13, 4, 1, "", "default_config"]], "highway_env.envs.parking_env": [[14, 2, 1, "", "ParkingEnv"]], "highway_env.envs.parking_env.ParkingEnv": [[14, 4, 1, "", "compute_reward"], [14, 4, 1, "", "default_config"], [14, 4, 1, "", "define_spaces"]], "highway_env.envs.racetrack_env": [[15, 2, 1, "", "RacetrackEnv"]], "highway_env.envs.racetrack_env.RacetrackEnv": [[15, 4, 1, "", "default_config"]], "highway_env.envs.roundabout_env": [[16, 2, 1, "", "RoundaboutEnv"]], "highway_env.envs.roundabout_env.RoundaboutEnv": [[16, 4, 1, "", "default_config"]], "highway_env.road": [[18, 0, 0, "-", "graphics"], [4, 0, 0, "-", "lane"], [5, 0, 0, "-", "regulation"], [6, 0, 0, "-", "road"]], "highway_env.road.graphics": [[18, 2, 1, "", "LaneGraphics"], [18, 2, 1, "", "RoadGraphics"], [18, 2, 1, "", "RoadObjectGraphics"], [18, 2, 1, "", "WorldSurface"]], "highway_env.road.graphics.LaneGraphics": [[18, 3, 1, "", "STRIPE_LENGTH"], [18, 3, 1, "", "STRIPE_SPACING"], [18, 3, 1, "", "STRIPE_WIDTH"], [18, 4, 1, "", "continuous_curve"], [18, 4, 1, "", "continuous_line"], [18, 4, 1, "", "display"], [18, 4, 1, "", "draw_stripes"], [18, 4, 1, "", "striped_line"]], "highway_env.road.graphics.RoadGraphics": [[18, 4, 1, "", "display"], [18, 4, 1, "", "display_road_objects"], [18, 4, 1, "", "display_traffic"]], "highway_env.road.graphics.RoadObjectGraphics": [[18, 4, 1, "", "blit_rotate"], [18, 4, 1, "", "display"]], "highway_env.road.graphics.WorldSurface": [[18, 4, 1, "", "handle_event"], [18, 4, 1, "", "is_visible"], [18, 4, 1, "", "move_display_window_to"], [18, 4, 1, "", "pix"], [18, 4, 1, "", "pos2pix"], [18, 4, 1, "", "vec2pix"]], "highway_env.road.lane": [[4, 2, 1, "", "AbstractLane"], [4, 2, 1, "", "CircularLane"], [4, 2, 1, "", "LineType"], [4, 2, 1, "", "PolyLane"], [4, 2, 1, "", "PolyLaneFixedWidth"], [4, 2, 1, "", "SineLane"], [4, 2, 1, "", "StraightLane"]], "highway_env.road.lane.AbstractLane": [[4, 4, 1, "", "distance"], [4, 4, 1, "", "distance_with_heading"], [4, 4, 1, "", "from_config"], [4, 4, 1, "", "heading_at"], [4, 4, 1, "", "is_reachable_from"], [4, 4, 1, "", "local_angle"], [4, 4, 1, "", "local_coordinates"], [4, 3, 1, "", "metaclass__"], [4, 4, 1, "", "on_lane"], [4, 4, 1, "", "position"], [4, 4, 1, "", "to_config"], [4, 4, 1, "", "width_at"]], "highway_env.road.lane.CircularLane": [[4, 4, 1, "", "from_config"], [4, 4, 1, "", "heading_at"], [4, 4, 1, "", "local_coordinates"], [4, 4, 1, "", "position"], [4, 4, 1, "", "to_config"], [4, 4, 1, "", "width_at"]], "highway_env.road.lane.PolyLane": [[4, 4, 1, "", "to_config"], [4, 4, 1, "", "width_at"]], "highway_env.road.lane.PolyLaneFixedWidth": [[4, 4, 1, "", "from_config"], [4, 4, 1, "", "heading_at"], [4, 4, 1, "", "local_coordinates"], [4, 4, 1, "", "position"], [4, 4, 1, "", "to_config"], [4, 4, 1, "", "width_at"]], "highway_env.road.lane.SineLane": [[4, 4, 1, "", "from_config"], [4, 4, 1, "", "heading_at"], [4, 4, 1, "", "local_coordinates"], [4, 4, 1, "", "position"], [4, 4, 1, "", "to_config"]], "highway_env.road.lane.StraightLane": [[4, 4, 1, "", "from_config"], [4, 4, 1, "", "heading_at"], [4, 4, 1, "", "local_coordinates"], [4, 4, 1, "", "position"], [4, 4, 1, "", "to_config"], [4, 4, 1, "", "width_at"]], "highway_env.road.regulation": [[5, 2, 1, "", "RegulatedRoad"]], "highway_env.road.regulation.RegulatedRoad": [[5, 4, 1, "", "enforce_road_rules"], [5, 4, 1, "", "respect_priorities"], [5, 4, 1, "", "step"]], "highway_env.road.road": [[6, 2, 1, "", "Road"]], "highway_env.road.road.Road": [[6, 4, 1, "", "act"], [6, 4, 1, "", "neighbour_vehicles"], [6, 4, 1, "", "step"]], "highway_env.vehicle": [[7, 0, 0, "-", "behavior"], [8, 0, 0, "-", "controller"], [18, 0, 0, "-", "graphics"], [9, 0, 0, "-", "kinematics"]], "highway_env.vehicle.behavior": [[7, 2, 1, "", "AggressiveVehicle"], [7, 2, 1, "", "DefensiveVehicle"], [7, 2, 1, "", "IDMVehicle"], [7, 2, 1, "", "LinearVehicle"]], "highway_env.vehicle.behavior.IDMVehicle": [[7, 3, 1, "", "ACC_MAX"], [7, 3, 1, "", "COMFORT_ACC_MAX"], [7, 3, 1, "", "COMFORT_ACC_MIN"], [7, 3, 1, "", "DELTA"], [7, 3, 1, "", "DELTA_RANGE"], [7, 3, 1, "", "DISTANCE_WANTED"], [7, 3, 1, "", "TIME_WANTED"], [7, 4, 1, "", "acceleration"], [7, 4, 1, "", "act"], [7, 4, 1, "", "change_lane_policy"], [7, 4, 1, "", "create_from"], [7, 4, 1, "", "desired_gap"], [7, 4, 1, "", "mobil"], [7, 4, 1, "", "recover_from_stop"], [7, 4, 1, "", "step"]], "highway_env.vehicle.behavior.LinearVehicle": [[7, 3, 1, "", "TIME_WANTED"], [7, 4, 1, "", "acceleration"], [7, 4, 1, "", "act"], [7, 4, 1, "", "collect_data"], [7, 4, 1, "", "steering_control"], [7, 4, 1, "", "steering_features"]], "highway_env.vehicle.controller": [[8, 2, 1, "", "ControlledVehicle"], [8, 2, 1, "", "MDPVehicle"]], "highway_env.vehicle.controller.ControlledVehicle": [[8, 4, 1, "", "act"], [8, 4, 1, "", "create_from"], [8, 4, 1, "", "follow_road"], [8, 4, 1, "", "get_routes_at_intersection"], [8, 4, 1, "", "plan_route_to"], [8, 4, 1, "", "predict_trajectory_constant_speed"], [8, 4, 1, "", "set_route_at_intersection"], [8, 4, 1, "", "speed_control"], [8, 4, 1, "", "steering_control"], [8, 3, 1, "", "target_speed"]], "highway_env.vehicle.controller.MDPVehicle": [[8, 4, 1, "", "act"], [8, 4, 1, "", "index_to_speed"], [8, 4, 1, "", "predict_trajectory"], [8, 4, 1, "", "speed_to_index"], [8, 4, 1, "", "speed_to_index_default"]], "highway_env.vehicle.kinematics": [[9, 2, 1, "", "Vehicle"]], "highway_env.vehicle.kinematics.Vehicle": [[9, 3, 1, "", "DEFAULT_INITIAL_SPEEDS"], [9, 3, 1, "", "HISTORY_SIZE"], [9, 3, 1, "", "LENGTH"], [9, 3, 1, "", "MAX_SPEED"], [9, 3, 1, "", "MIN_SPEED"], [9, 3, 1, "", "WIDTH"], [9, 4, 1, "", "act"], [9, 4, 1, "", "create_from"], [9, 4, 1, "", "create_random"], [9, 4, 1, "", "predict_trajectory"], [9, 4, 1, "", "step"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "method", "Python method"], "5": ["py", "property", "Python property"]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:attribute", "4": "py:method", "5": "py:property"}, "terms": {"": [1, 5, 6, 7, 8, 9, 10, 12, 13, 16, 17, 18, 21, 22, 23, 24, 25], "0": [1, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 20, 21, 22, 23, 24, 25], "00593": 2, "01495": 2, "025": 23, "0384119": 22, "03877594": 22, "04": 23, "04334343": 22, "04502464": 22, "05": 23, "0580093": 23, "065": 23, "075": 23, "08": 23, "1": [1, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 22, 23, 24, 25], "10": [2, 7, 12, 23], "100": [12, 14, 23], "105": 23, "11": 16, "11123574": 22, "1140": 23, "12": 23, "1200x500": 23, "12162084": 23, "12250": 2, "1269737": 23, "128": 23, "13": [12, 23], "13829824": 23, "14": 24, "14025204": 23, "14898224": 23, "15": [2, 10, 12, 13, 14, 15, 16, 17, 18, 23, 24, 25], "150": [10, 13, 24], "15000": 24, "1612": 2, "16781637": 23, "17": [2, 24], "1707": 2, "172": 23, "18": [15, 23], "1805": 2, "18133634": 23, "1824": 2, "18420112": 23, "1911": 2, "1999": 2, "1d": [1, 7], "1m": 23, "1st": 9, "2": [1, 2, 7, 8, 9, 10, 20, 22, 23, 24], "20": [4, 10, 12, 23, 24], "200": [21, 24], "2000": 2, "2007": 2, "2008": 2, "2015": 2, "2017": 2, "2018": 19, "2019": [2, 24], "21299084": 23, "22": 23, "22001253": 22, "222": 23, "23": 9, "231": 15, "25": [9, 22, 23], "256": 24, "25m": 23, "25mn": 24, "27": 23, "2989": 23, "2d": [1, 4, 7], "2e4": 24, "3": [1, 7, 10, 12, 13, 15, 18, 20, 23, 24], "30": [9, 10, 24], "300": [14, 15], "3000": 22, "3125": 22, "3141": 2, "31602973": 22, "32": 24, "33": 18, "3d": 2, "4": [1, 7, 10, 15, 18, 23, 24], "40": [9, 10, 24], "41946092": 23, "42528215": 22, "480": 18, "5": [1, 7, 9, 10, 12, 13, 14, 15, 16, 20, 22, 23, 24], "50": [10, 18, 24], "518": 2, "529": 2, "533": 2, "54714144": 18, "5870": 23, "5e": 24, "6": [2, 7, 12, 16, 23], "600": [10, 12, 13, 14, 15, 16, 24], "62": 2, "6381537": 23, "64": 23, "640": 18, "640x480": [22, 23, 24], "675": 23, "7": [14, 15], "75": 23, "7540": 2, "7853981633974483": 1, "8": [2, 23, 24], "82238084": 23, "84": 23, "8879056": 22, "9": 23, "A": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 18, 21, 22, 23, 24], "As": 22, "At": 8, "But": 12, "By": 18, "For": [1, 6, 7, 17, 22, 23, 24], "If": [1, 7, 8, 9, 16, 19, 21, 23], "In": [2, 7, 10, 13, 16, 17, 21, 22, 23, 25], "It": [6, 7, 8, 9, 12, 13, 14, 16], "Its": 18, "Of": 12, "On": 5, "That": 21, "The": [1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 15, 16, 18, 19, 20, 21, 23, 24, 25, 26], "Then": 1, "There": [3, 24], "These": [9, 21, 23], "To": [20, 21, 22], "Will": 21, "_": [7, 22, 23, 24, 25], "__init__": 21, "_automatic_rend": 21, "_c": 7, "_info": 21, "_is_termin": 21, "_is_trunc": 21, "_make_road": 21, "_n": 7, "_o": 7, "_r": 8, "_register_highway_env": 21, "_reset": 21, "_reward": [21, 25], "_simul": 21, "_state": 24, "_to": 8, "a_": 7, "a_c": 7, "a_n": 7, "a_o": 7, "ab": 7, "abbeel": 2, "abcmeta": 4, "abl": [1, 8, 17, 21], "about": [7, 17, 24], "abov": 1, "absolut": [12, 23], "abstract": [4, 21], "abstractenv": [1, 18, 21, 23], "abstractlan": [4, 6, 18], "acc_max": 7, "acceler": [1, 7, 8, 9, 14], "acceleration_rang": 1, "accept": 22, "access": [1, 13, 21, 24], "accord": 7, "achiev": [12, 14, 21], "achieved_go": 14, "act": [1, 6, 7, 8, 9], "action": [6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 21, 24, 26], "action_1": 22, "action_2": 22, "action_config": [1, 22], "action_dur": [8, 9], "action_i": 22, "action_reward": 15, "action_spac": [1, 17, 21], "action_typ": [21, 23, 24], "actions_al": [1, 22], "actions_index": [23, 24], "actions_lat": 1, "actions_longi": 1, "actions_per_axi": 1, "actiontyp": 1, "actual": [1, 6, 17, 22], "ad": [12, 21], "add": [1, 21], "addit": 21, "address": [17, 25], "adequ": 25, "advanc": 2, "affect": 3, "after": [7, 22, 24], "against": 25, "agent": [1, 10, 12, 13, 14, 15, 18, 21, 23, 25, 26], "agent_displai": 18, "aggreg": 21, "aggressivevehicl": 7, "agre": 12, "alex": 2, "algorithm": 22, "alia": 4, "align": 23, "align_to_vehicle_ax": [15, 23], "all": [7, 12, 17, 21, 23], "allow": [1, 7, 8, 21], "along": [8, 18, 23], "alreadi": 23, "also": [6, 10, 13, 17, 18, 23, 24, 25], "altch": 2, "altern": 21, "alwai": [1, 18, 23], "amir": 2, "among": 8, "amplitud": 4, "an": [1, 5, 6, 7, 8, 9, 12, 18, 19, 21, 22, 23, 25], "anaconda": 20, "andr": 2, "andrea": 2, "andrei": 2, "andrychowicz": 2, "ang_": 23, "angl": [1, 4, 7, 8, 9, 18, 23], "angular": 23, "ani": [12, 14, 21, 23, 25], "anoth": 6, "ansgar": 2, "anticip": 8, "antonogl": 2, "api": 26, "appear": 9, "appli": [1, 8], "approach": [13, 16, 23], "appropri": [14, 25], "approxim": [4, 7], "apt": 20, "ar": [1, 3, 4, 5, 6, 7, 8, 9, 10, 18, 21, 22, 23, 24, 25], "arbitr": 5, "arc": 4, "architectur": [17, 24], "arcsin": 8, "area": [16, 18], "argu": 17, "arn": 2, "around": [4, 18, 23], "arrai": [7, 18, 22, 23], "arrow": 1, "arxiv": 2, "as_imag": [15, 23], "aspect": 25, "assign": 5, "associ": 21, "assum": [8, 23], "attent": [2, 24], "attribut": [5, 24], "author": 19, "automat": [1, 8, 16, 21], "autonom": [2, 19], "avail": [1, 10, 24], "avoid": [8, 10, 12, 13, 15, 16, 25], "awai": 23, "awr": [2, 24], "ax": [22, 23, 24], "ax1": 22, "ax2": 22, "axi": [1, 7, 8, 9, 23], "b": [7, 25], "b_": 7, "base": [1, 5, 7, 9, 24], "baselin": 24, "baselines3": 24, "batch_siz": 24, "beatti": 2, "becaus": [7, 17], "been": [21, 22, 25], "befor": [7, 22], "behav": [3, 5], "behavior": [3, 5, 10, 12, 13, 16, 21, 24], "behaviour": [5, 6, 7, 12, 18, 21, 25], "behind": [9, 23], "being": [7, 9, 25], "bellemar": 2, "benefici": 25, "beta": 9, "better": 24, "between": [4, 5, 7, 8, 9, 18, 23, 25], "beyond": 1, "bibtex": 19, "bicycl": [2, 9], "bin": 23, "blit_rot": 18, "block": 12, "bob": 2, "bolt": 19, "bool": [1, 4, 5, 6, 7, 12, 18, 21, 23], "both": [1, 4, 7, 22, 23], "bottom": 23, "bound": 25, "boundari": 1, "box": 1, "brake": [7, 9, 25], "brigitt": 2, "buffer_s": 24, "c": [7, 18, 23], "calcul": 9, "call": [8, 10, 12, 13, 14, 15, 16, 17, 18, 21], "callabl": [1, 18], "callback": 18, "can": [1, 4, 6, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25], "canada": 2, "candid": 7, "captur": 21, "car": 2, "cartesian": [7, 8, 9], "cascad": 8, "case": [5, 6, 17, 23], "caus": 25, "cd": 22, "cell": 23, "center": [4, 7, 8, 9, 18, 23], "centering_posit": [10, 12, 13, 14, 15, 16, 18, 23, 24], "central": [4, 12, 22], "challeng": 25, "chang": [1, 2, 4, 7, 8, 16, 17, 21, 23, 24, 26], "change_lane_polici": 7, "change_vehicl": 21, "channel": [18, 23], "charl": 2, "check": [21, 23], "choic": [21, 25], "choos": [8, 25], "chosen": [7, 9, 18], "circl": 4, "circularlan": 4, "class": [1, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 21, 22, 23], "classif": 2, "classmethod": [4, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 21], "clip": [1, 23], "clockwis": 4, "close": [7, 17, 18, 21], "closest": [8, 23], "cmap": 23, "cnn": [17, 24], "co": [9, 25], "code": [17, 22], "coeffici": [7, 25], "collect": [7, 19, 23], "collect_data": 7, "collid": [10, 23], "collis": [5, 10, 12, 13, 15, 16, 25, 26], "collision_penalti": 25, "collision_reward": [10, 12, 15, 24], "color": 18, "column": 23, "com": [15, 18, 19, 20], "combin": 8, "come": [1, 12, 23], "comfort_acc_max": 7, "comfort_acc_min": 7, "command": [7, 8, 9], "common": [1, 18, 21, 22, 23], "complet": 9, "compon": 23, "compos": [3, 6, 25], "comput": [2, 4, 7, 8, 21], "compute_reward": 14, "condit": [14, 24], "confer": 2, "config": [1, 4, 10, 12, 13, 14, 15, 16, 18, 21, 22, 23, 24], "config_kei": 21, "configur": [1, 18, 22, 25, 26], "conflict": 5, "congest": 2, "consid": [6, 19, 23], "consist": [1, 2], "constant": [8, 21, 23], "constant_st": 9, "contain": [6, 21, 22, 23], "continu": [14, 15, 18, 26], "continuous_curv": 18, "continuous_lin": 18, "continuousact": [1, 14, 15], "contribut": [12, 19], "control": [2, 3, 7, 14, 15, 16, 21, 26], "controlled_vehicl": [1, 15, 22, 24], "controlledvehicl": [7, 8], "convent": [18, 25], "convers": [4, 23], "convert": [4, 8, 18, 23], "coordin": [4, 6, 18, 23], "copi": [7, 8, 9, 17, 21], "correspond": [1, 4, 8, 14, 17, 18, 21, 23], "cos_d": 23, "cos_h": [12, 14, 23], "could": [12, 22, 25], "cours": 12, "crash": [9, 16], "creat": [1, 4, 7, 8, 9, 18, 24, 26], "create_from": [7, 8, 9], "create_random": 9, "creation": 24, "credit": [14, 15], "cross": 24, "cruis": [1, 8], "current": [1, 6, 8, 9, 20, 21, 23, 25], "curv": [4, 24], "custom": 19, "customari": 23, "customis": [1, 23], "cut": 7, "d": [2, 7], "d_0": 7, "daan": 2, "data": [7, 21, 23], "datafram": 23, "david": 2, "deceler": 7, "decelr": 1, "decemb": 2, "decentr": 12, "decid": [6, 7, 22], "decis": [2, 7, 12, 19, 21], "dedic": 18, "deep": [2, 24, 25], "def": 22, "default": [1, 7, 8, 9, 18, 21, 23, 24], "default_config": [10, 12, 13, 14, 15, 16, 21], "default_initial_spe": 9, "default_width": 4, "defensivevehicl": 7, "defin": [1, 4, 6, 10, 12, 13, 14, 15, 16, 18, 21, 23, 24, 25], "define_spac": [14, 21], "definit": 1, "delta": [1, 7, 8, 9], "delta_": 8, "delta_rang": 7, "demi": 2, "demonstr": 24, "dens": [2, 12], "densiti": 9, "depend": [9, 17, 20, 21], "deriv": 8, "describ": [3, 4, 5, 6, 10, 17, 19, 21, 22, 23], "descript": [3, 19, 23, 24], "desir": [1, 7, 8, 14, 21, 23, 25], "desired_gap": 7, "desired_go": 14, "destin": [8, 12, 23, 25], "detail": [10, 19], "detect": 23, "determin": [4, 5], "determinist": [2, 24], "dev": 20, "df": 23, "dharshan": 2, "dict": [1, 4, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 21, 23, 24], "dictat": 7, "dictionari": [6, 21, 23, 24], "did": [12, 21], "differ": [7, 17, 23], "dimens": 18, "direct": [1, 7, 8, 9, 23], "directli": [1, 23, 24, 25], "dirk": 2, "disabl": 1, "disambigu": 23, "discret": [7, 8, 26], "discreteact": 1, "discretemetaact": [1, 10, 12, 13, 16, 22, 24], "discretis": 23, "dispatch": 22, "displai": [5, 6, 9, 16, 18], "display_road_object": 18, "display_traff": 18, "distanc": [4, 7, 18, 21, 23, 25], "distance_w": 7, "distance_with_head": 4, "distant": 21, "divid": 23, "do": [7, 17, 25], "doe": [7, 17, 24], "doesn": [6, 7], "doi": 2, "done": [1, 16, 17, 18, 22, 23, 24], "dot": [7, 8, 9], "doubl": 24, "dqn": [17, 22, 23, 24], "dqnagent": 22, "draw": 18, "draw_strip": 18, "drawn": 18, "drive": [2, 5, 6, 8, 9, 10, 13, 18, 19, 21, 24, 25], "driver": 7, "dt": [5, 6, 7, 8, 9], "dtype": 22, "duel": 24, "dummi": 22, "durat": [8, 9, 10, 12, 15, 16, 24], "dure": [7, 18], "dynam": [1, 5, 6, 7, 8, 9, 12, 21, 24, 26], "e": [1, 2, 17], "each": [1, 5, 6, 8, 9, 12, 17, 18, 22, 23], "earli": 25, "edg": [1, 6], "edouard": [2, 19], "effect": 24, "ego": [1, 7, 10, 12, 13, 14, 16, 18, 21, 25], "ego_attention_2h": 22, "ego_spac": 24, "ego_vehicl": 7, "either": 1, "eleur": [15, 19, 20, 22, 24], "els": [8, 23], "emerg": 25, "empir": 2, "enabl": [1, 23], "enable_lane_chang": 7, "encod": 23, "encourag": 25, "end": [4, 6, 8, 9, 12, 18, 21, 22], "end_phas": 4, "enforc": 5, "enforce_road_rul": 5, "ensur": 4, "entiti": [5, 6], "entri": 17, "entry_point": 21, "enumer": 23, "env": [1, 10, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24], "env_multi_ag": 22, "environ": [1, 3, 10, 12, 13, 14, 15, 16, 18, 19, 22, 23, 26], "envview": 18, "episod": [12, 17, 21, 22, 24, 25], "episode_trigg": 17, "equal": 16, "equival": 1, "eras": 8, "errat": 9, "euclidean": 25, "evalu": 22, "even": [7, 18], "event": 18, "eventhandl": 1, "everi": [1, 3, 25], "exampl": [17, 21, 22], "except": 23, "execut": [1, 7, 12, 21, 22], "exist": [7, 8, 9, 21, 23], "exit": 23, "exit_env": 23, "exitobserv": 23, "expect": [12, 23, 25], "experi": [2, 22, 24], "expon": 7, "express": 16, "extens": 24, "f": 23, "fail": 12, "fals": [1, 4, 5, 6, 10, 12, 13, 14, 15, 16, 17, 18, 22, 23, 24], "faq": 24, "far": 22, "fast": [10, 16, 24], "faster": [1, 8, 23], "feasibl": 2, "featur": [7, 12, 14, 15, 25], "features_rang": [12, 23], "feel": 17, "few": 24, "fewer": 23, "ffmpeg": 20, "fidjeland": 2, "field": [21, 22, 23], "fig": 23, "figsiz": 23, "figur": [12, 22, 23, 24], "file": 26, "filip": 2, "fill": 23, "fill_road_layer_by_cel": 23, "fill_road_layer_by_lan": 23, "find": [5, 6, 8], "fine": 12, "first": [1, 5, 17, 18, 21, 22, 23], "fix": [4, 21, 23], "flag": 18, "flat": 23, "flatten": 12, "float": [1, 4, 5, 6, 7, 8, 9, 12, 14, 18, 21, 23], "float32": 22, "florent": 2, "flow": 16, "fluid": 2, "focu": 25, "follow": [1, 2, 6, 7, 8, 15, 16, 17, 18, 21, 23, 24], "follow_road": 8, "fong": 2, "forbid": 25, "forbidden": 4, "forward": [8, 9, 18], "found": [6, 25], "fp": 24, "frac": [7, 8, 9, 25], "frame": [4, 17, 18, 21, 23], "fran": 2, "free": 17, "freeli": 21, "frenet": 4, "frequenc": [7, 17, 18, 21], "friction": 1, "from": [4, 6, 7, 8, 9, 10, 14, 21, 22, 23, 24, 25], "from_config": 4, "front": [7, 8, 9, 25], "front_vehicl": 7, "full": [1, 24], "function": [21, 24, 25], "futur": [8, 9], "g": [2, 17], "gain": [7, 8], "gamma": 24, "gap": 7, "gather": 19, "gcc": 20, "gener": [2, 5, 6, 17, 21, 22, 25], "geometri": [4, 6, 21], "georg": 2, "geq": 7, "get": [1, 4, 8, 20, 22, 23], "get_available_act": 1, "get_cmap": 23, "get_imag": 18, "get_routes_at_intersect": 8, "git": 20, "github": [15, 19, 20], "give": [5, 6, 21, 23], "given": [4, 6, 7, 8, 9, 14, 17, 18, 21], "global": 4, "go": [4, 6], "goal": [14, 24, 26], "good": 12, "gradient_step": 24, "grai": 23, "graph": 6, "graphic": [20, 26], "grave": 2, "graviti": 9, "grayscal": [17, 26], "grayscaleobserv": 23, "green": 22, "grid": 26, "grid_siz": [15, 23], "grid_step": [15, 23], "guiba": 2, "guid": 19, "gym": [1, 10, 12, 13, 14, 15, 16, 17, 18, 21, 23], "gymnasium": [1, 18, 21, 22, 23, 24], "h": [18, 23], "ha": [4, 15, 16, 20, 21, 22, 23, 24, 25], "handl": [8, 16, 18], "handle_ev": 18, "handler": 8, "hao": 2, "happen": 12, "hard": 12, "hasn": 16, "hassabi": 2, "have": [6, 7, 14, 21, 25], "he": 15, "head": [4, 7, 9, 14, 23], "heading_at": 4, "heading_weight": 4, "height": 16, "helb": 2, "helen": 2, "henneck": 2, "her": 24, "here": [10, 17, 21, 22, 23, 24], "hermit": 4, "high": [8, 10, 13, 14], "high_speed_reward": [10, 24], "higher": 7, "highwai": [1, 11, 13, 15, 18, 20, 22, 23, 24], "highway_dqn": 24, "highway_env": [1, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23, 24], "highwayenv": 10, "hindsight": [2, 24], "histori": 9, "history_s": 9, "hm08": [2, 24], "hook": 21, "horizon": 23, "horizont": [7, 8, 9], "hot": 23, "how": [1, 3, 7, 22, 24], "howev": [5, 17, 24, 25], "howpublish": 19, "hren": 2, "http": [15, 18, 19, 20], "human": 2, "hz": [10, 13, 16, 17], "i": [1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 21, 22, 24, 25], "id": [9, 21], "idea": [14, 15], "ideal": 12, "identifi": 6, "idl": [1, 23, 24], "idm": 7, "idmvehicl": [7, 10, 13, 16, 21, 24], "ieee": 2, "ignor": 1, "imag": [17, 18, 21, 24, 26], "image1": 20, "implement": [1, 4, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23, 24], "import": [1, 3, 17, 21, 22, 23, 24], "impos": 7, "improv": 24, "imshow": [22, 23, 24], "incent": 7, "includ": [1, 5, 6, 22], "include_obstacl": 23, "incom": 13, "incoming_vehicle_destin": 16, "increas": [7, 23, 26], "inde": 17, "index": [1, 6, 7, 8, 23], "index_to_spe": 8, "induc": 7, "info": [12, 14, 17, 21, 22, 23, 24], "inform": [2, 14, 17, 21, 23], "infrastructur": 6, "infti": 23, "inherit": 21, "initi": [4, 8, 9, 14, 15, 18, 21, 22], "initial_lane_id": 24, "initial_spac": 10, "initial_vehicle_count": 12, "inlin": [22, 23, 24], "input": [8, 9, 18], "insid": [21, 25], "instal": [17, 18, 21], "instanc": [1, 4, 6, 7, 8, 9, 23, 24], "instead": [17, 25], "int": [1, 4, 7, 8, 9, 12, 18, 21, 23, 24], "integ": 6, "integr": 9, "intellig": [2, 7], "interdisciplinari": 2, "intermedi": [17, 21], "intersect": [1, 5, 6, 8, 11, 24], "intersection_env": 12, "intersectionenv": [12, 22], "interv": 1, "invari": [17, 25], "invert": 8, "involv": 21, "ioanni": 2, "is_conflict_poss": 5, "is_reachable_from": 4, "is_vis": 18, "issu": 15, "iter": 23, "its": [1, 4, 6, 7, 8, 9, 16, 17, 22, 24], "itself": 20, "j": [2, 23], "jam": 7, "jean": 2, "joel": 2, "jojo": 14, "jona": 2, "josh": 2, "journal": 19, "json": [4, 22], "junction": 13, "k": [2, 16, 18], "k_": 8, "k_p": 8, "kaichun": 2, "kavukcuoglu": 2, "keep": [12, 25], "kei": [1, 16, 18, 23], "kest": 2, "kinemat": [1, 2, 3, 6, 8, 10, 12, 22, 24, 26], "kinematicobserv": 23, "kinematicsgo": 14, "kinematicsgoalobserv": 23, "king": 2, "known": 4, "korai": 2, "kp_a": 8, "kth07": [2, 7], "kumaran": 2, "kurtosi": 14, "kwarg": [1, 23], "l": [8, 9, 18, 23], "l1": 4, "lab": 6, "label": 1, "lambda": 17, "landmark": [5, 6], "lane": [1, 2, 3, 5, 6, 7, 8, 9, 10, 16, 17, 18, 21, 22, 23, 24], "lane_centering_cost": 15, "lane_change_max_braking_impos": 7, "lane_change_min_acc_gain": 7, "lane_change_reward": 24, "lane_from": 9, "lane_id": 9, "lane_index": [6, 7], "lane_left": 1, "lane_perception_dist": 23, "lane_point": 4, "lane_right": 1, "lane_to": 9, "lanegraph": 18, "laneindex": 6, "lanes_count": [10, 24], "laptop": 24, "larg": 23, "last": [9, 21, 23], "lat": [4, 8, 18], "lat_": 23, "later": [1, 4, 12, 15, 18, 23], "latest": 20, "layer": [1, 23], "layer_index": 23, "lead": [7, 23, 25], "learn": [2, 15, 24, 25], "learning_r": 24, "learning_start": 24, "lectur": 2, "left": [7, 8, 18, 22, 23], "left_boundary_point": 4, "legg": 2, "length": [9, 18], "leonida": 2, "leurent": [2, 19], "level": [1, 2, 4, 8, 17], "libavcodec": 20, "libavformat": 20, "libfreetype6": 20, "libportmidi": 20, "librari": 24, "libsdl": 20, "libsdl1": 20, "libsmpeg": 20, "libswscal": 20, "lidar": 26, "lidarobserv": 23, "light": 12, "like": 23, "line": [4, 8, 18], "line_typ": 4, "linear": [7, 8], "linearli": 10, "linearvehicl": 7, "linetyp": 4, "list": [1, 3, 4, 5, 6, 7, 8, 9, 17, 18, 21, 23, 24], "lm19": [2, 17, 24], "load": [21, 24], "local": [4, 6, 17, 18], "local_angl": 4, "local_coordin": 4, "locat": [18, 23], "long": 17, "long_": 23, "long_offset": 4, "longi": 4, "longitudin": [1, 4, 9, 12, 15, 16, 18, 23], "look": [6, 23], "lookahead": 8, "low": [1, 8], "lower": [7, 21], "lp": 14, "m": [1, 4, 7, 8, 9, 10, 16, 18, 21, 23], "machin": 2, "mai": [7, 23, 25], "main": [4, 13], "maintain": [7, 13], "make": [1, 2, 10, 12, 13, 14, 15, 16, 18, 19, 22, 23, 26], "maneuv": 7, "mani": [15, 18], "manual": [20, 21, 26], "manual_control": [1, 24], "map": [1, 10, 23], "marc": 2, "marcin": 2, "margin": [4, 18], "martin": 2, "matplotlib": [22, 23, 24], "matter": 12, "max": [23, 25], "max_i": 23, "max_spe": 9, "max_x": 23, "maxim": [1, 7], "maximum": [1, 7, 9, 21, 23, 25], "maximum_rang": 23, "mcgrew": 2, "mdpvehicl": 8, "meant": 21, "mechan": 1, "mercat": 2, "merg": [11, 24], "merge_env": 13, "mergeenv": 13, "meta": 26, "metaclass__": 4, "meter": 23, "method": [1, 4, 5, 7, 8, 9, 16, 21, 25], "mi": 2, "microscop": 2, "middl": 23, "might": 1, "min": [23, 25], "min_i": 23, "min_spe": 9, "min_x": 23, "minim": [1, 7], "minimum": [1, 7, 9, 25], "misc": 19, "mixer1": 20, "mk": [2, 25], "mlp": 24, "mlppolici": 24, "mnih": 2, "mo": 2, "mobil": [2, 7], "model": [2, 3, 7, 8, 9, 21, 22, 24], "modifi": [9, 21], "modul": [1, 21, 23], "modular": 21, "montreal": 2, "more": [7, 10, 12, 13, 14, 15, 16, 17, 21], "most": [1, 5, 22, 26], "move": [3, 9, 18, 23], "move_display_window_to": 18, "multi": [21, 26], "multiagentact": [1, 22], "multiagentobserv": 22, "multiagentwrapp": 21, "multilan": 10, "munir": 14, "muno": 2, "must": [1, 6, 14, 18, 20, 21, 22, 24, 25], "my": [12, 24], "n": 7, "name": [1, 23], "narrow": 25, "natur": [2, 23], "ncol": 23, "ndarrai": [1, 4, 7, 8, 9, 12, 14, 18, 21, 23], "nearbi": [7, 23], "nearest": 23, "need": [15, 17], "neg": 25, "negoti": [12, 13], "neighbour": [6, 10], "neighbour_vehicl": 6, "net_arch": 24, "network": [5, 6, 8, 21, 23], "neural": 2, "neurip": 2, "new": [4, 5, 6, 7, 8, 9, 17, 21], "next": [8, 12, 21, 23], "next_ob": 22, "next_obs_i": 22, "node": [6, 8, 9], "non": [4, 7, 8, 23], "none": [1, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 21, 23, 24], "norm": [14, 25], "normal": [14, 23, 25], "normalis": [4, 23], "normalize_ob": 23, "normalize_reward": [12, 24], "note": [2, 25], "notebook": 24, "novel": [2, 17], "now": [7, 13, 21, 22, 23], "np": [1, 4, 5, 6, 21], "np_random": [5, 6], "nrow": 22, "number": [5, 6, 9, 16, 18, 23, 24, 26], "numpi": 20, "nut": 19, "o": [7, 18], "o1": 12, "ob": [17, 21, 22, 23, 24], "object": [4, 5, 6, 7, 8, 9, 10, 13, 18, 21, 23], "object_": 18, "obs_i": 22, "observ": [1, 2, 10, 12, 13, 14, 15, 16, 21, 24, 25, 26], "observation_config": 22, "observation_factori": 23, "observation_shap": 23, "observe_intent": [12, 23], "obstacl": [5, 6, 23], "obtain": [6, 24], "occup": 26, "occupancygrid": [15, 23], "occupancygridobserv": 23, "off": 23, "offroad": 23, "offroad_termin": 24, "offscreen": 18, "offscreen_rend": [10, 13, 14, 15, 16, 24], "offset": [18, 23], "often": [12, 25], "oi": 2, "old": 7, "on_lan": 4, "on_road": 15, "onc": 21, "one": [7, 8, 9, 18, 22], "ongo": 21, "onli": [1, 7, 9, 21, 22, 24, 25], "onroad": 23, "opd": 24, "openai": 24, "optim": [21, 25], "optimist": 2, "option": [4, 19, 21], "order": [1, 9, 17, 22, 23, 25], "origin": 18, "origin_po": 18, "oscil": 4, "ostrovski": 2, "other": [5, 7, 8, 9, 10, 12, 15, 21, 22, 23], "other_valu": 21, "other_vehicl": 15, "other_vehicles_typ": [10, 13, 16, 24], "otherwis": 23, "output": [7, 17], "over": 23, "overal": 7, "overload": [10, 12, 13, 14, 15, 16, 21, 25], "overrid": 7, "overridden": 9, "overwritten": 21, "own": [7, 12, 22, 26], "p": [7, 8, 14, 25], "packag": 19, "page": [2, 24], "pair": [17, 21, 23], "paltchedandrean17": [2, 9], "param": [18, 23], "paramet": [1, 4, 5, 6, 7, 8, 9, 12, 14, 18, 21, 23, 25], "parametr": [4, 24], "parametris": 7, "park": [11, 23, 24, 25], "parking_env": 14, "parkingenv": 14, "part": [21, 23], "particular": 25, "pass": [16, 22, 23], "past": 17, "path": [21, 22], "penalti": 25, "per": 23, "perception_dist": 21, "perform": [1, 7, 8, 12, 21, 23, 24], "permut": 17, "perspect": 25, "peter": 2, "petersen": 2, "phase": 4, "philip": 2, "physic": [2, 3], "piec": 19, "pieter": 2, "pilot": 8, "pip": 20, "pix": 18, "pixel": 18, "place": [7, 8, 9, 23], "placehold": 23, "plan": [2, 8, 16, 24], "plan_route_to": 8, "plasma": 2, "pleas": 19, "plt": [22, 23, 24], "po": 18, "point": [1, 2, 4], "pointnet": 2, "polack": 2, "polici": [7, 21, 22, 24, 25], "policy_frequ": [10, 13, 14, 15, 16, 23, 24], "policy_kwarg": 24, "polit": 7, "polylan": 4, "polylanefixedwidth": 4, "polynomi": 4, "popul": [10, 21], "pos2pix": 18, "pos_to_index": 23, "posit": [4, 6, 7, 9, 14, 18, 23], "possibl": [16, 17, 25], "possibli": 7, "ppo": 17, "pprint": [22, 24], "practic": 25, "pre": 1, "preced": [6, 7], "predict": [5, 8, 9, 12, 22, 23, 24], "predict_trajectori": [8, 9], "predict_trajectory_constant_spe": 8, "predition_typ": 9, "prefer": 25, "presenc": [12, 15], "present": 21, "preserv": 21, "principl": 24, "print": 23, "priorit": 24, "prioriti": [4, 5], "prng": 21, "probabl": 17, "problem": 25, "process": [1, 2], "profit": 26, "progress": 25, "project": [6, 7, 19, 20, 25], "propag": 9, "properti": [1, 7, 8, 9, 21], "proport": 8, "provid": [4, 8, 17, 18, 19, 21, 24], "proxim": 14, "pseudo": 22, "psi": [8, 9, 25], "psi_": 8, "psi_g": 25, "psi_l": 8, "psi_r": 8, "pub": 6, "publish": 19, "pull": 21, "pulsat": 4, "purpos": [12, 19], "px": [10, 13, 16, 18], "py": [21, 22], "pygam": [16, 18, 20], "pyplot": [22, 23, 24], "python": [20, 21, 22], "python3": 20, "q": 24, "qi": 2, "qsmg17": [2, 17], "quantiz": 1, "quick": [19, 24], "quickli": 25, "quit": 12, "r": [2, 7, 8, 25], "racetrack": [11, 24], "racetrack_env": 15, "racetrackenv": 15, "rachel": 2, "rad": [1, 4, 7, 8], "radian": 23, "radiu": 4, "rai": 2, "ramp": 13, "random": [5, 6, 9, 24], "randomli": [7, 9], "randomst": [5, 6], "rang": [1, 7, 8, 9, 10, 23, 24, 25], "rate": 8, "rather": [1, 25], "ratio": 9, "reach": [7, 10, 14], "reachabl": [1, 4, 9], "real": 23, "real_time_rend": 24, "realist": [7, 25], "rear_vehicl": 7, "reason": [7, 12, 17], "receiv": 10, "recent": [5, 6], "recommend": 20, "record": [2, 5, 6, 17], "record_histori": [5, 6], "recordvideo": [17, 21], "recov": 7, "recover_from_stop": 7, "rectangl": [18, 23], "refer": [8, 21], "regist": [17, 26], "register_highway_env": [17, 21], "registr": 21, "regress": 7, "regul": 3, "regularli": 23, "regulatedroad": 5, "reinforc": [2, 24, 25], "reinstal": 21, "rel": 23, "relat": 2, "remov": 21, "render": [17, 18, 21, 22, 23, 24], "render_ag": [10, 13, 14, 15, 16, 24], "render_mod": [10, 12, 13, 14, 15, 16, 21, 22, 23, 24], "repeat": 9, "replac": 25, "replai": [2, 24], "repositori": [17, 19], "repres": [6, 9, 18, 23], "request": 21, "requir": [7, 20, 21], "research": 2, "reset": [1, 17, 18, 21, 22, 23, 24], "resolut": 23, "resolv": 5, "resp": 7, "respect": [1, 7, 8, 18, 25], "respect_prior": 5, "respons": 9, "result": [12, 24], "return": [1, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 21, 22, 23, 25], "reus": 17, "revers": 7, "review": 2, "revisit": 17, "reward": [10, 12, 13, 14, 17, 21, 22, 23, 24, 26], "reward_nam": 21, "reward_speed_rang": [10, 24], "reward_valu": 21, "rgb": [18, 23], "rgb_arrai": [22, 23, 24], "riedmil": 2, "right": [4, 5, 7, 8, 10, 18, 22, 23], "right_boundary_point": 4, "right_lane_reward": 24, "rightmost": 10, "risk": 25, "rl": [22, 24], "rlss": 24, "road": [1, 4, 7, 8, 9, 10, 12, 13, 18, 21, 23, 25, 26], "road_network": 6, "road_object": [5, 6], "roadgraph": 18, "roadnetwork": [3, 5, 6, 21], "roadobject": [6, 18], "roadobjectgraph": 18, "roadsurfac": 18, "robust": 25, "room": 13, "rotat": 18, "roundabout": [11, 18, 24], "roundabout_env": 16, "roundaboutenv": 16, "rout": [7, 8, 16], "row": 23, "rudimentari": 12, "rule": 5, "run": [16, 17, 21, 22, 24], "rusu": 2, "s2": [7, 8], "s_g": 25, "sadik": 2, "safe": [7, 13, 25], "safeti": 7, "sake": 22, "same": [7, 8, 9], "sampl": [1, 17, 21], "satisfi": 25, "save": [8, 9, 24], "sb3": [17, 24], "scalar": 21, "scale": [10, 12, 13, 14, 15, 16, 18, 23, 24, 25], "scene": [17, 23, 26], "schedul": 12, "schneider": 2, "scienc": 2, "screen": 18, "screen_height": [10, 12, 13, 14, 15, 16, 18, 24], "screen_width": [10, 12, 13, 14, 15, 16, 18, 24], "script": [22, 24], "search": 8, "second": [5, 6, 16, 21, 22], "section": 3, "sector": 23, "see": [15, 17, 21, 22, 23, 24, 25], "see_behind": 23, "seed": [21, 22, 24], "segment": 2, "self": [21, 22], "send": [17, 22], "sensit": 17, "separ": [1, 18], "sequenc": [4, 7, 8, 9, 18, 23], "serial": 4, "set": [1, 2, 4, 5, 6, 8, 14, 18, 23, 26], "set_agent_action_sequ": 18, "set_agent_displai": 18, "set_record_video_wrapp": 17, "set_route_at_intersect": 8, "set_titl": 22, "setpoint": 1, "setup": 21, "sever": [1, 7, 10, 12, 17, 21, 23, 24], "shane": 2, "shape": 23, "shift": 25, "should": [5, 6, 7, 17, 18, 21, 22, 23, 25], "show": [22, 23, 24], "show_rect": 18, "show_trajectori": [10, 13, 14, 15, 16, 24], "shuffl": 23, "side": [4, 10, 18], "silver": 2, "similarli": 1, "simpl": [7, 8, 12, 25], "simpli": 12, "simplifi": 21, "simul": [1, 2, 7, 8, 9, 12, 17, 18, 21, 23], "simulation_frequ": [10, 13, 14, 15, 16, 18, 24], "sin": [9, 25], "sin_d": 23, "sin_h": [12, 14, 23], "sinc": [12, 22, 23, 25], "sinelan": 4, "singl": [17, 21, 22, 25], "sinusoid": 4, "situat": 12, "size": [18, 22, 23, 24], "skill": 15, "slightli": 18, "slip": 9, "slower": [1, 8], "small": 23, "smaller": 16, "so": [1, 7, 13, 14, 17, 18, 21, 23], "social": [2, 24], "some": [1, 5, 8, 13, 25], "sometim": 12, "soon": 13, "sophist": 12, "sort": 23, "sourc": [1, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 21, 23], "south": 23, "southeast": 16, "space": [1, 7, 9, 14, 18, 21, 23, 26], "spawn": 9, "spawn_prob": 12, "specif": [10, 12, 13, 14, 15, 16, 18, 23], "specifi": [1, 8, 21, 25], "speed": [1, 7, 8, 9, 10, 13, 14, 21, 25], "speed_control": 8, "speed_limit": 4, "speed_rang": 1, "speed_to_index": 8, "speed_to_index_default": 8, "speedup": 10, "spike": 25, "sqrt": 7, "stabl": 24, "stable_baselines3": 24, "stack_siz": 23, "stackoverflow": 18, "stai": [10, 23], "standard": 22, "start": [4, 6, 9, 13, 18, 19], "start_phas": 4, "state": [2, 7, 8, 9, 17, 21, 22, 23, 25], "static": [5, 18], "statist": 2, "steer": [1, 7, 8, 9, 14], "steering_control": [7, 8], "steering_featur": 7, "steering_rang": 1, "step": [1, 5, 6, 7, 9, 12, 16, 17, 21, 22, 23, 24], "step_i": 23, "step_x": 23, "stig": 2, "still": [16, 21], "stop": [5, 7, 9], "store": [6, 7, 9], "str": [7, 8, 9, 10, 12, 13, 14, 15, 16, 21, 23], "straight": [4, 10, 23], "straightforward": 25, "straightlan": 4, "string": 6, "stripe": 18, "stripe_length": 18, "stripe_spac": 18, "stripe_width": 18, "striped_lin": 18, "stripes_count": 18, "struggl": 17, "stuck": 7, "su": 2, "sub": 17, "subclass": 1, "subplot": [22, 23], "subvers": 20, "sudo": 20, "suffer": 25, "suggest": [7, 17], "suitabl": 17, "sum": 23, "sum_i": 25, "supperted825": 15, "supplementari": [4, 14], "support": [7, 22], "surf": 18, "surfac": [7, 8, 9, 26], "switch": 8, "symposium": 2, "system": [2, 4, 9, 12, 18], "s\u00b2": 1, "t": [6, 7, 16, 23], "take": [1, 5, 7, 23, 24], "tan": 9, "target": [1, 5, 7, 8], "target_lane_index": [7, 8], "target_spe": [1, 7, 8], "target_update_interv": 24, "target_veloc": 7, "task": [10, 12, 13, 14, 16, 21, 24], "tend": 17, "tensorboard_log": 24, "term": [7, 25], "termin": [12, 21, 25], "test": [18, 24], "text": [7, 8, 25], "th": 7, "than": [1, 7, 17, 23, 25], "thank": [15, 18], "thei": [1, 5, 7, 13, 18, 23, 25], "them": [5, 18, 24, 25], "themselv": 21, "thh00": [2, 7], "thi": [1, 4, 7, 10, 12, 13, 16, 17, 20, 21, 22, 23, 24, 25], "thing": 12, "third": 2, "thirti": 2, "those": [8, 24], "though": 7, "three": 23, "throttl": [1, 8], "through": [1, 2, 3, 5, 8, 21, 25], "thu": [1, 17, 25], "tild": 7, "time": [3, 5, 7, 8, 16, 24, 25, 26], "time_w": 7, "timer": 7, "timestep": [5, 6, 7, 8, 9, 12, 21], "timetocollis": [13, 16, 23], "timetocollisionobserv": 23, "titl": [19, 22], "to_config": 4, "tobin": 2, "too": 12, "top": [1, 8, 23], "topic": 2, "topologi": [6, 21], "toward": 23, "track": [1, 8, 15], "traffic": [2, 12, 13, 16], "train": 22, "train_freq": 24, "trajectori": [2, 5, 6, 8, 9, 24, 25], "trajectory_timestep": [8, 9], "transform": 21, "transit": 22, "transpar": 18, "transport": 2, "treiber": 2, "trigger": 7, "trigonometr": 23, "true": [1, 4, 7, 10, 12, 13, 14, 15, 16, 17, 23, 24], "truncat": [12, 16, 17, 21, 22, 23, 24], "try": [5, 7], "ttf2": 20, "tupl": [1, 4, 6, 7, 8, 12, 18, 21, 22, 23], "turn": 8, "tutori": 24, "tv": 7, "two": [3, 5, 7, 8, 15, 17, 18, 22, 23, 25], "type": [1, 4, 10, 12, 13, 14, 15, 16, 21, 22, 23, 24], "typic": 17, "unavail": 1, "uncertain": 25, "under": 8, "underbrac": 7, "uniform": [1, 8, 23], "uniqu": 6, "unsaf": 7, "until": [5, 9, 12, 21], "unwrap": [17, 21, 22, 23, 24], "up": [12, 26], "updat": [8, 9, 18, 20, 22, 23], "upon": 1, "url": 19, "us": [1, 7, 8, 9, 14, 18, 19, 20, 21, 23, 24, 25], "user": 20, "usual": [5, 17], "v": [7, 8, 9, 23, 25], "v0": [1, 10, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23, 24], "v1": 5, "v2": 5, "v_": [8, 25], "v_0": 7, "v_r": 8, "v_x": 25, "v_y": [23, 25], "valu": [1, 16, 21, 23, 24], "vanilla": 24, "variabl": 16, "variat": 8, "variou": 21, "vec": 18, "vec2pix": 18, "vector": [1, 21], "vehicl": [1, 2, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 24, 25, 26], "vehicle_class": [1, 21], "vehicle_class_path": 21, "vehiclegraph": 18, "vehicles_count": [10, 12, 22, 23, 24], "vehicles_dens": 24, "veloc": [1, 5, 7, 8, 23, 25], "veness": 2, "verbos": 24, "verg": 14, "version": 22, "video": [21, 22, 24], "video_fold": 17, "viewer": [18, 21], "visibl": 18, "visual": 18, "visualis": 22, "volodymyr": 2, "vx": [12, 14, 23], "vy": [12, 14, 23], "w": [7, 18, 23, 25], "w_i": 25, "wa": [12, 14, 18], "wai": [4, 5, 12, 17, 24], "wait": 12, "waypoint": 23, "we": [14, 17, 18, 20, 21, 23, 25], "weight": [4, 7, 14, 23, 25], "welcom": [12, 21], "welind": 2, "west": 23, "what": [22, 23], "wheel": [7, 8, 9], "when": [5, 7, 8, 10], "where": [1, 6, 7, 8, 9, 14, 15, 21, 23, 25], "whether": [1, 4, 5, 6, 7, 18, 21, 23], "which": [1, 4, 5, 6, 7, 8, 12, 14, 17, 18, 20, 21, 22, 23, 24, 25], "while": [1, 9, 10, 13, 15, 16, 17, 21, 22, 24], "who": [4, 5], "whole": 21, "whose": [6, 7], "why": 7, "width": [4, 9, 16, 18], "width_at": 4, "wierstra": 2, "window": [16, 18], "window_posit": 18, "wish": 25, "within": 23, "without": 18, "wojciech": 2, "wolski": 2, "work": 17, "workshop": 2, "world": [4, 23, 26], "worldsurfac": 18, "would": [18, 23, 25], "wrap": [17, 21, 26], "wrapper": [17, 21], "write": 4, "written": 24, "wrong": 7, "x": [1, 4, 9, 12, 14, 18, 23, 25], "x15": 10, "x_g": 25, "x_i": 25, "y": [4, 9, 12, 14, 18, 20, 23, 25], "y_g": 25, "yaw": 8, "year": 19, "yield": [5, 8, 24, 25], "you": [17, 19, 21, 23], "your": 26, "your_env": 21, "yourenv": 21, "zaremba": 2, "zero": 23, "zip": 22, "zoom": 18, "\u00e7": 2, "\u00e9": 2}, "titles": ["404", "Actions", "Bibliography", "Dynamics", "Lane", "Road regulation", "Road", "Behavior", "Control", "Kinematics", "Highway", "The environments", "Intersection", "Merge", "Parking", "Racetrack", "Roundabout", "Frequently Asked Questions", "Graphics", "Welcome to highway-env\u2019s documentation!", "Installation", "Make your own environment", "The Multi-Agent setting", "Observations", "Getting Started", "Rewards", "User Guide"], "titleterms": {"": 19, "10": 20, "404": 0, "Not": 0, "The": [11, 22], "action": [1, 22], "agent": [17, 22, 24], "all": 24, "an": [17, 24], "api": [1, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 21, 23], "ar": 17, "ask": 17, "behavior": 7, "bibliographi": 2, "bit": 23, "chang": 22, "cite": 19, "close": 23, "colab": 24, "collis": 23, "configur": [10, 12, 13, 14, 15, 16, 21, 23, 24], "continu": 1, "control": [1, 8, 22], "creat": 21, "default": [10, 12, 13, 14, 15, 16], "develop": 20, "discret": 1, "document": 19, "doesn": 17, "drive": 23, "dynam": 3, "east": 23, "ego": 23, "env": 19, "environ": [11, 17, 21, 24, 25], "error": 17, "exampl": [23, 24], "exist": 17, "farther": 23, "fast": 17, "faster": 10, "featur": 23, "file": 21, "found": 0, "framer": 17, "frequent": 17, "get": [17, 24], "goal": 25, "googl": 24, "graphic": 18, "grayscal": 23, "grid": 23, "guid": 26, "gymnasium": 17, "have": 17, "head": 8, "highwai": [10, 17, 19], "how": 19, "i": [17, 23], "illustr": 23, "imag": 23, "increas": 22, "instal": 20, "intersect": 12, "kinemat": [9, 17, 23], "lane": 4, "later": [7, 8], "lidar": 23, "longitudin": [7, 8], "low": 17, "make": [17, 21, 24], "manual": 1, "mechan": 23, "merg": 13, "meta": 1, "mlp": 17, "model": 17, "most": 25, "multi": 22, "my": 17, "namenotfound": 17, "north": 23, "number": 22, "observ": [17, 22, 23], "occup": 23, "one": 23, "optim": 17, "own": 21, "page": 0, "park": 14, "polici": 17, "posit": 8, "prerequisit": 20, "presenc": 23, "profit": 21, "question": 17, "racetrack": 15, "regist": 21, "regul": 5, "releas": 20, "result": 17, "reward": 25, "road": [3, 5, 6], "roundabout": 16, "same": 23, "scene": [18, 21], "set": [21, 22], "slower": 23, "space": 22, "speed": 23, "stabl": 20, "stack": 23, "start": 24, "surfac": 18, "t": 17, "thi": 19, "time": 23, "too": 17, "train": [17, 24], "try": 17, "ubuntu": 20, "up": [21, 22], "us": 17, "usag": [10, 12, 13, 14, 15, 16], "user": 26, "v_x": 23, "variant": 10, "vehicl": [3, 21, 22, 23], "version": 20, "video": 17, "welcom": 19, "when": 17, "why": 17, "window": 20, "work": 19, "world": 18, "wrap": 22, "your": 21}}) \ No newline at end of file