From 8d9f4c575f026866f26a034e304112af4c458984 Mon Sep 17 00:00:00 2001 From: eleurent Date: Mon, 19 Aug 2024 21:59:38 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20Farama-F?= =?UTF-8?q?oundation/HighwayEnv@251e804926a5ffd73e31ec3a0509c52e72d6b0dd?= =?UTF-8?q?=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _images/index_1_0.png | Bin 7875 -> 7947 bytes _images/index_2_0.png | Bin 10236 -> 10342 bytes _images/index_2_1.png | Bin 12414 -> 12427 bytes _images/index_2_2.png | Bin 14060 -> 14116 bytes _images/index_3_1.png | Bin 24098 -> 25613 bytes _images/quickstart_0_0.png | Bin 8042 -> 7551 bytes _images/quickstart_2_0.png | Bin 6179 -> 6191 bytes _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 +- _modules/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 +++---- actions/index.html | 10 +-- dynamics/road/lane/index.html | 22 +++--- dynamics/road/regulation/index.html | 2 +- dynamics/road/road/index.html | 4 +- dynamics/vehicle/behavior/index.html | 4 +- dynamics/vehicle/kinematics/index.html | 6 +- environments/highway/index.html | 2 +- environments/intersection/index.html | 4 +- environments/merge/index.html | 2 +- environments/parking/index.html | 2 +- environments/racetrack/index.html | 2 +- environments/roundabout/index.html | 2 +- graphics/index.html | 10 +-- make_your_own/index.html | 14 ++-- multi_agent/index.html | 10 +-- observations/index.html | 36 ++++----- searchindex.js | 2 +- 42 files changed, 269 insertions(+), 272 deletions(-) diff --git a/_images/index_1_0.png b/_images/index_1_0.png index a08366c6299785cdc35712f1bbbc4b6e56f67323..2f1b0785d41479dd8fc13bbbdfff9c1800d2d43b 100644 GIT binary patch literal 7947 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 literal 7875 zcmds6c{o)6zn@Ynh4vzpk`~*ygzQ9wP)XK7*^Mp6kiC_XealWL`@V!MrHmSkeIF9C z&e->5?)#|ky}$eX?sJ#t_uuuT8E4L%^I6{S*LGgsQjw>pW2Qr)Q1l8nWbdF*G)?e6 zbT=*huYcfC2)qbmuWMq}Y)r6@_w9^P%J;FhmNr;R^9QGJ#&-7RHrD*S!n~KcPnlt{ zw)P@?d{+N{0{j|sV2VY%MYj=1u$+IAk~Ei)DBn(Uf(uaAzXr`W5+ zZj{EoWHeo}jJ{N}8%Bjf?KpChjLa2<@;bh z^+QllP)KlaqN?P^l{=MmQqKYm<4sQyq$bbcJ>6uDy!FbR3uk9%3k*JOcU$Z-WfroI z=2VT%`2PL-jdc;!0V%)7v5&cFa{XCo77v=fzJzvbjE-hOKN=2Q9Xv@ruQ0pf%6!?# z+k_aKiDz@+{!t+jr;7JKsbOcA_w(n^(o%tV`M+vv2WQM0rFhw=0R_=8%sBGtTbO{o#t(}ZZy1$uQ91otMeps|vj^RGrty$dxgNQ{vj2`>nX5NL+xp5}Xn6PtwTq0y)CREM zp4{!tigQ*vszv+RG@LuwFy4MLcKF$|9WTsI?dB4u%(9D!i=*LEX(=hAwjS57Kflb+ zPfT$XiLn!jL6c}bRd#PpVbZ(uo7Ci>&1C~gwEHlPS9QXkL!4%Fzv?&FTqWWJZTd2L zdwa7s9Z;t|S!l#*v}hlk6sDa#ciLv8fk0?^&BPxP6O;M!(7EyCaJ^=D#ZHwk$^Gou z=8dx3H^0w_$=hw{cuu(YzNX@S_p-FKwE0#w)zpt4b^A9cj)e~gYxsG+QB@VSmm2v4 zj882F8dm9@o)vG38Nii=Mn*D|1wG%~($~)p2?;SPet6G_DW@R|S#dL%>&zhD{{E#O zEFbl<>FDUVhd)eI(z9(9GTSS5X5{&?rxw{OgU z8F;#{w#237r8IOOKBsPq zPJL9XenH<7Fa5N@gX&%%C8YZN`E%zraxu|4`m4_|%)sa814Y~7gKIDEU;9&Af?t>n zZ(bGM{CTXh@df>f0=G3B8ryVzB%>$K*e9!U)A`7eBV(fdD-BHk#RUZ^$;n@-`90+J z0Ct(r=6kMAwRUuHojseZh6gB{cMyb@&Dm9E`e=Q5M)Agt-DQ&T=jNQtFP=Z26Ec|7 zAS*drdq%s`y}Zb(=jdNQ5Ij7iFtV?tWh|s+Y~Oo&RE#Vvi~Jv`JCnrTeLS%%-xNbC zbyyt=R=x7zi+B9mWKXebP)KO#k$X>3rEI?&&-n$VZdO@{lmtJv-8-B={`zHd2?eJl}v(1R${C5_g$ymWs!|eWR(p*2T@u&D_IRlh{Rg zc_|r7+1iDQOTG5~ii(QZ4z%N#4_`$iAix!)+WpEAm#?de%{&{fn%#9GhqsqKk{jS$ zCG6WJ14$flmgv67FU;Z>uu9W#EHg9HdC*s=)ZLrHu>OfQW8&3bpX+p5v>EvrIDJ2J znQ6&6v}Q(0i58hm4x2c1@Zc4vX@kO|qO^nr_9rpy_pYyhetk2;mF-bJ~h}%7D64pLpIGx<4UP2DQf*)v$r01W$G85HrGZO%3;X)|!XCRdmM$*h zgkw~cW5u*WLqogsO;v@kUa_yYAV=z^f`Y;xXWG@fD(}@0o^o?@+fnv;<;kBt?<|^OL&BGGNR8Z4{H?P2pE!%NXTm}mRo@uGLsA!zPSJ?^;2Q^_lrrFlk zhR{*U?Znpis&Sr$*2Ty^2SH(Q__B$MjP9&}eHpSVxnffHCf=rpmyb_FODlro0uPV! z8M)WHyFKpTPxv`FC}1~K8($dI3Uv2$7o)}Wk52$3QdQkBC%2X1@Xe`QHhz=W!0Fp5 zgLWm@<>~uqyKiR|Ra6)>dm0<#WxN;^f>;>5YF;xPnx`Aa`?0E7S!KdsiNNzaGcq$W z?wXsYa$FD=)(Y3PQ>b!QxOnkmP{%|YjQdHuVnX>Z6@6mh8TmAu{)%l&!Yh$w%RhY( z7;T3OZ=N(54Zkq4#Jw!#~bSr`S3s0x+$s(!-;%+p4E1Vsg?lI3~vGol1;FWK`5s z%G_i=G4h1c7&nE9gpzlGGJd%^}d%H<$ML|KUE?}w&Xew#U z#Kc6suTY;^UVeW4mzRg?N8&u#uyGz66Z*)lUDs#u(ildTs|K7Z(PlONCvAlB(Jzr| zZ=fNHFZF5>y#)mY(=s!aVKLMnJt|2yWEHlP1>KZgz8J~-ar(1oAz5T3?XzXnK2n+l23>i#$B)AeN5uXd8`TvYDBgTl@O5 zl%oX4rU$CGVRW>$TU%Q>5UHkJVrSf#p8$m)&QU&7bD}%vzD!j&Y%kR+oRHj4-CU9; zwx1Mpx}~hFtX+yVZ_NLx@3B!x#ofMryKy0;VuP0gyC6PS#~;?74+Q~W(Ouz&=!os@ zMTLdm24`-p;>6)A4utHIwsZ~5M0@5o44OCGRYJcpR`m!7NOtmp`_{#xqdxnpilKT! zp+d-l4X?Oq+Pee*#drIX^2OZOoz8M_$d<8Ih5fB2-t6_+k`4w3WROlop^jeKYJ1fG z;=t`6Hp9sJH=Z#vF-gmUi*%xpQ2?!d=a|%qLC^+m(dG#`1bqAIK>J zbOQhiO8W9e*4W7CJTEWr4+-9IrTY4Mgw}r!(!?#zIf>0WiEZ^auqdBF`6W4Zb#;)q z8r02=r;Deb7s=^mYrr8`_MoKKuV3e9t))grMgn@h2f!zcVQDk0%*}5rEBkU>U}u+R zVq%i+s3qfoes3f1E4kKN7qB8RtM%)(GU->f9P>z0Cu-HY)V2oP6FNXPI<2; z2>bN1sR|u7fBBa$Uux$Wz2vP}{^_}9*_C&F?=jxiL4V0CP`W!ZNX0gBY;NZT4>s{wDRQ$;e6p7z97)~K2Bc)B#Y!X^@G}< zA5YJwWo80ERu*2Tw}x%KZ8Bfq;J^6q0u&D)KCJ3C z#QQlcqirfTaE<)=fX2Xi{uC$3 ztX&%&U1sbAPX}E6WntQDAVGk5`Z0u@ysWQ}2R}Y2RL-{Ay)YMpy=U^U{>%n4U zmZt}#`|bK#Ta#e*fs|8Wd58ErW4``&)q-GMl6J8Jz=I86Q4q0?;;jopetrcUi)znNq9&e7Uu^7s`J<-t;Zk#fu?t-lQNU4Or<+ z-B>D1t^zqrdvJb=UUf8BE zAf}()!Ij-{BEheLXIbce+|RN1af^~A!9Al*i5vbxu!!v$T7Wy1tBd6HRJHeMZ{NNp zMA0@1|Lp`y`3W#8P*SF(B%6K-*DSnhzlyt@P~#<4YX+}GnUe`Dk|Ek-J;gh8y3R>R z=*`T`gvDh8ahdyOWUY;1hHS5LFEz7Hm^=7hLlbZ5+mlLS?>%$nT!o(Oc&8k->FB9; z^bw`EWEHr+0E!sOaXe6-t;wpG^bSh)S?_VrTJY+SVMq}h(OQTQAUcPReE+T}zB-y% zy3nrUfM<2o6lsTx71#|c@@N;_2-kBquj&?eSsVp@8OlM=CZ?$r&a0lSSH7Jx_nj-- zY>7hBF0#~W!bGW z<{r%nkajMMmI7CPCxf3+>w)e z0lS5(iGNfIm}=Espg;)YQLA*{*xp{T)aL@|8_Hqc`{AMUcd?L2Qy4I6i=jtOR+?=br51msnTb%3y!5z%Oqx<1jqMR??2V!5j%R(JL@jM@& zs<5!|HjIyt&q7rHI%g7pH#=h!)S#)Gjk}v$xt();`k;ByjB(PEQy{|G()+1Xl3 zb!5R={njmm3wU-nP7x?JfTHdX4-@ZY>84hDF-`y_1>y&91E#Yu$a{GzHCH{RQP2_kn!4#L*)BB{xE0m>$r8YM3X!nE)WyzR!%ztR?pMDsua6WMCzUyB($~dF z>OXq)Xftj_!{*fNKiKibXIRcvthu>)DKNPD-MdM3bvFS+z7N|uq@<>#>|Wk5ftJ5; z;R355isbV<5Jcjq$!s+lEP&lBA0IGV$w1*LAh5bWKFX)geEximRowY*Nl8hJ^eX zJI*B}6rS$6T~Ov9y!yE$_Enf?q@YzK2&9m}zyuKe+GRL0(p((oW6jB+$U0h6)!M*N zeG5K^`TFX}0dp3q<^MGG`6C*nPh=byDDG}6)Ft-b><{A%{}^r=SNx>ATI}ui^~jd? z9LW#pYd}KUQ-bB-kH&k7Z3=o&mZ=E|(qOz}lC@u$!G}M@0-~eq_R~kp=;}rf|9$K) z`(HQDa?Vy#tGWt`i*>TjUWZew9#u^&$d&D^D!TS<*Ri9BpG8%j-nt43#r@zn1^!6;ltR~tGf)N=tvo^`p3CsC1aXS>m5=dD-aS^}`2 z1*U&^XlS%WRnixyR5Ux^qRO=u{yEQ^Q3pYXMG9cTR+px-LAP0qx28fS?EL`WlyB7| zNU|gFFkdkXfbe|2L39f1)O$SfeXO%0sB!4vVk8d-j}JYWnb|f!)&lnFZ9%~mq**M? z%tmWW4@A{Iv^DAy$zu^W626*e$*SeYV8_BDT;#{nWBcEP{bt1`T;cleCEyX(dltz( z8~*h%q8d|`)Qa{jbb6*v@%Zx0U@5t%=WVCed^A{5h#XsHhY7^h<)E`l1(scx%V)oH zb(gyo^M3fT9m!r0xfwau@_qs^3rN|&;I}qXW)z>l>$ zgF2wP>ASBa2O8lhy_0f8(EsjRGgL{rL7MkY+upIe?* zi-BH?B9_;?Q2WrV_TfkjpKwvzKRw&H$j9e@M`JM{Kwy&rCKX=JqyRC_tp3v|F! zm=y3t3|=w-^Q?>a>4{i7@$Kb(fU*JxRh|s~=Qugjz(i(@2nQHW)Y^5NA_Pi@!6u=f zayyFKS+WXKm`9ZS4keOM*Bo1vg;s2krz0RMn1KdCF(!i8kk92uB|s#*l{3rx9iY>R zd8wkRs&VbwXC{r(^puoaCMG5!rFoT5v}otCWJsUxn3%i+uLAa4q&4S-sYnUiV?CRQ zhzL_%r^NDdH2832K!ekP$Zpi0A`F}%46qZ>{w!YbZ^ZRmZsrTK|N1e>d7Oz2Jw5$J zUfz56?uBvQd=n2Ln1g2ZZ(a%!5Uck-a3&-oqU(MpgsG4Zk@eGidv&3*$fU9k{d{A> z(G^z-*dnY8G1n9B$L-~{wG$_`7#OuE&O=vShpvi^DElS48Rxf@gX*jq!$!iwBlR`c zD8m>5vsBa5VR@5d@ym!uGU)7iN+H6!Cn&2fHU1%B-4E##j0 zrbM>js3;5wkHlUFtdkg<8b}0qrt+F&?xzo5(d z$=X)uISh3k@1bw1IX(wUJPN!Cvsd+fB*sEwTXLA?@M4dR5I|AQfbAQw!BIUnm88Q* zj;x%tv9P#|zj_GMlCTUW@E{IZ zEYNLzhmRh`U6q3z1O^ugrXd@Q#U;?c*)vXJx19uYpR??eN6N5CChRF7Mj#*t{!<`S zXzrzlHOE`rM#{I6A#Zfi>Q+jNLg9YL#{b$Q)PH&mJ5Sx1uHB@V_#Q>*S>d{hY}Pe{ GC;tXCyg1DO diff --git a/_images/index_2_0.png b/_images/index_2_0.png index 75d91b10589b3cf63c0102f7644a99a9a9a3991b..d2e9b23c307b2d51e07259b6c1eda48df5783a22 100644 GIT binary patch literal 10342 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 literal 10236 zcmd6NcT^PHx+jQYKtV-Cl%Pihm2}89SwRp8rPom1NJHx^jw)jO>iuLunN< zGKvoPJ^TbE{BL;9Jq&)JoE~U7soI%2xjuC?B~yIrWN&TfWNrEEnv1C;+S1OJj|;`c z%W=)Z$;loq%*}1{KThDXb2R6^u0+uf7ddJFP#aA~M)MT;CQp+{wIm~Bvy_v*r{)$j zKkVtIwjSHCtjuNN_u>87hezJ%KB%RNxOx7T-AGx8XF4_4^PHRkSdE8PD!#~Z;;%T#Jy;g4SKQEaYu1&(5@z1yU@&X zVW@nd&^-9fY5Iiav4+{T>8@-CS27)P6y?D2g45FCj;CKm+%gWZoDMfLHJzS_wj;3T zR{kNk;!*Xpv9UdXo^NffOZm7SVRk(uFYocmlPBN3d-r_$Gx@w9k4#Tb&rC<6e?p?} zq%XF)DL*%kgW|<&Ph1m^k+PL}B&kVqmWs6@pVNEt%$YL-Ri332Esv&W7d`*N@|tLvd9SrHZ=pKFy=K%P{v2O+3yX>x7~kmbR$~;JU~ijK?DVg9A3l6&zcYJA zu;IKmC6{cO$+ilLNz^Ux*|TRlrU8_)3KnjGa1lv$f=laC!<_N9P%8$)Z9 zKr?1|+Ud@X8#i9vIP!<=T}JE!+=~gS2oA$L4Lm$Nl}nV?*P12A3lHC;s-kj%mNpTK z#j=)0goWMWU)RxDM`lm&*P1Vldtv{bWO8j~S%UtA1gFo$%d)b&XPCwH zt_oT&jZUn46hEz_47?(ck-SJP$$sr$7PIS)KN=q;Ag`LD@Wjk4MJC|#=Lka|ZF78F z&r2HdzALWBKVAG_{K*>`&W#31H_LF=oe|GPbxX_iIL`&tMLIgGsrJu1Q;ES`cdsAu zU3w7oV&eq|MMy9M#qVVGYPKE6yRk|)Z{B?EaamG2Eh9q(CMeC{;fV=-9=BfMT=R0? z)4IF#=g#^zj6HF25!9yqL+ekJ?Y7;^<48Gwiv91X>;Lbsk@6{O3TkT#_J_v(`+i?s z7jqVUHY?jGOy z8P48Q<>@*CW*D z(sn%Q$)iW_Y%7;#S|j;ni;IgR^!%HN*sf`7NAmWPM&7gAjXdq*A55?99V=$r@iNHO zR2E%+B@@h)ebuhA1GBqXy(zZ7Fsv))vDRMgz02>pVNDz#pHjx`bUo-TH2Qj^HD02o z9O^vsU#`U~O>eA#z7!*96Gh0@P0iLVor!`yZ8BURc-6Uq(RFI7BXOr*sM_J{qCQuI z9#;hEOV_lTjEoHW%~3svjEs!1k00H%XQ8O4^lfpvA`NwK&ZsIVC=@mvFLGrHmhJEF zH=+NB(bw@ZZO;VEN@%>r{6O(Qr8~OTS6)R!1IMDzJ5KE{MeU!6`Y$7MJlZ3D)tKM7 z{xsmDOuWxd`p(9@Re8%umFG>l>FMd#E7yE+vVf$$I8@x9PyGOBqxlqmy?bnEm^(K& zXT~Xyd$Dv@A?T%W%x;G)b5FEgb^7Lrr!ocQ>7~)Qu&|^cMv*&0LYj8f+bIXj%%ms! z6)rul+$C7NQKj#}Vj zlv1&wp-sGJzxp*fJXUm4Q|o?UXPE!&wa?N^=35dHhMS|9n(Dn3`B*Ve4SIU|sJjjc zaqbiJgD;4$g^Uc*(G~>&?Gq;Doanv%MU0_?gTuW*nldauKmSyq&EWpp7mXeZkQTEM4f(qLu zD^8P0jyj#pc&*c9WY^ALyl^2cA>o^gcdAmX)2R1mdQy_Kh|8SCj}Y<`l-e@4I;1Jc zeA(aC{citoUFrfOBV*pe*7DdLZtmVVG0*Py_I8;>3L`pgnY8x96CYVyXYum#UbuR7 z%k;6fcI3~WKh?Cf+?w#&M@}#n1U&wXu&HL)z<^G+eg&bRZQiB%x4p&Q*0QkoPLa#} zKo8~raygl2&k~3RnX4!U>Wh~yL3w3dls$G$%Y^>3H0>EOvYgAqU!18tBC9+%OZFtm z^e(|CoZ7qXg&-W+uZB3F@U!i|zPr+156P<+ixE0mX6ZBGKEA;bk~Wz@q(Hvy|BT_wUu!)L7&mDJf};R(o?c z#D|6^PEA>?FOH5DXkcM8P&0|9!L(#}ZZ42p4cnGdGYXHB76$LVq=ajV|KbJa|JmH! zRorWk`Rdgx-(mp)0b$4Sf3V!<;!=7^d8R-#b2(i#Rn5R42i}q{1KT>935$)FBQO-)NmvO7CfVuhU_sn`!{ z7#k;2p1ES8?fKXDli?8&@>msB)t*GzVBd8>nd8(9k6~FnHWwK42$vJ<{An_)s|~Q- zrFMol+1QTjrR3x&`O`3K$jH1=QBmP&;FbfHy2HgqsC_{}w7+|VfQyKj{r;8~+vdIA z>)fkvUVcznDGHjzvi;LN9KH?;Q3Xga2`zhC5B44TtoNW^LlC2l7>)c_8#GshJaTaz zohTR+w{~xP`=_}%Yu!z5S~IAQ02VI2vc57kb@kW61rgG?a{GMD$zG0KM?GzA%SwaA zV-b6MUg&1d(vQ7{nEiyBnm$v|3})Z|an1}@6jvNAWG5II8Oh4W*ENL3i=|Xok2ppe z9;`%6=#K8-($muNvi8?=G4qC`x&A`VSypnUbUsJFVlQ}eaP*)gJtwC` z&usaxABXRONy8P}RW855?DLtmq&|SFjG2gf$%Cs4$P0&zR zj}%#~>@qPki#m5h<|B9Y);GsUPTi7^EiDSGO>FU61g5+8wE>rTz9FYPt$Xvp35T!g z?&*m{=hSpoS7E`ib!k4)gnf~@^9X3`Wh9;B#E zHfCpS+N?844(i4{-kVT!kSrgeLlB8o;(Pk-D4*+sUh}}4Hq^Gt(c_`}Z$C}Q6drh@J zYglIgIorneukUXs(o^FK_T4rYhOKz{_*!=tYwWZ=_qH7PJk~4A2$x*Y8d;?{I(eDxGl2jGy+K#|=3&U#@L+cJFW zKnOiaz*yoD4 zms_oeaX^X9UyM`G$CfR+QWP_?v%^^c477a?$|@`M;=MN_-%v9? zFYoP`T>4!n?6X&9TeYs?JlDr#WMg0uN6m2en%pBfxsJw=8=Sp0#tqcvdR&3@eDy2t zH$+4RF&BOyK=*>;IAxZdwRJbBsW2=y;j@%KW!Ab!)j)yi`;5%Yn{ogkrK0Z=GBO_N zmRNTH#ifaR?;OoqM|rHJ1u>u!c#P|{m>fdDTtHdh$2zU|XwF8D?xmO>0AD1}%sdZd z6w!e7CAZpK99%@*fq-KW`h>4&iv)7yXWm=ZE6C6PlLODB#NfoUBb}X{-7pw!<7XhFg2vPInpLWGm$AZ84}DxxH4icI^8$ z;v%jK*4tt^Ko5XA{6fDfl^G68hROX-XQfGUa0Zq_!sL?RJxH6rO#38#PE=kf7z-(tgf zJZw=NMiH0OzNeATW7o{-es__bMec@dQ1{;UDh0u_%0LX<9bidUGk1-3zwe{Yx3p|)?NT(BE8|U3 z{FW-U11l?zVoS9Y896x`Fw{$&I!QkJJID0Qz=lUjV5)r%R^zRB%?D;&Go(y%J66;77%cWmmksF`@=%7^={Tvl_WgkGU z#5##3y{t?N{AvdP;d&zT{w*ULMa4iSw_oI>tH*1$esDY0oe?^!X9jE>CFWUT)*6)z zoAYQ^Yg1DPOzXa#hqRx(>9!YeG>!Pyr&Fg+vB;q(S~^;VMj7lQ0g^211L&i`S}atq zD(M;nPx>SZSP`beH4UD?9Z(RecNZ#j3QXRzOs7QKcINu5vp26xY>$U#z{WkCNSoR1 z$@pHlQx3T=vpE%OjW>diW=VK%WThxXCj74Rw}PTPR9;LzTTh`l6tIYVANH8dCXYaY z((>6GW8RH7oZqTrKKO)iv`(d4KIqjWgdE*cB`P|uFcwgAhPjn1?})4Ye0b4BkS3gl z)k7iV$jsP`Ar!7jJ0tKD<227< znMw%GOTX^9R~gv!<=r#%**2{m7;6aL#pD290nHn4Kf4P?1!VrtYCOrhoNak;7mvr6 zdY!JW(gh&Ysq!e!7E6VF&09b9p1V4a!P5p9TlpWovpt|?=$fm_WrLZ*SrFzcFE0m; z87tf~UVX5ZDxtj)35)pz^xp`E>bWmLM@Kg}z^Vjd6lgu$plW~+eg3O8 zsIlf6*C$v(>%LE*n2+jBAi6HeX0QaHw$X7eq+3!xqHSe+$hP$P^XGfLLN)_Qm6esg z%@;0RdW01x?V(YzPzWec3jOe7|2_TA0J2)NrX&a)hwLCnHVjil8` zK68Kr#O|b|$ShXx<~%c|DE%-gK}VdJ&}j>?i)O!dD{sH%djuY`xgkv0w`4U9ji0mY z&q)XS%KpAJx`uv z0{t;T)K^mr!_d?W)6M;6>1$w@V-$9Jtfr>+Ud$l4ArVw-!D)WgJXBCn5VE@~4eZ`m zMP5`0>PMVSd(ef87q=zkZDsZJVsKpgaI<&z4>oJ;euNYU&CJZOdY+$m`|B;6(`u`b z6-Y+K4GjtlPk>)oS#>F?m-D8S)C_4z^bzYi(y=gHq3hs8C;Ru6%Z67Qa%q3xm&Lp!WAz zpE1?;1StTxod%hhiJc!}70HVDfPi*7f_+TfWtN<03DZ@ZBV7=Ja7suqEgV3o(ZBNj zDO8Y7(3ix++65zhkp;8I@w<-`Z?FG2M@L;{e0nHv>n75T}?Bt=xg#)q?O z>MXqFx_uh~ZUmOVG)zO7W&y*lEVk->4qA)c%8RXK#~-tGe1CX!KlWhBU!sxdSo~wj zmntkG;`rXw17KC6+_!;H*xBHxtjMhbc)*=#1T%@P^%)0Sf))gQWpp)g$?lNa2SWP# zw0_jr&w$D)nHhul7KbB@pZ*rY!pbTGQ3WKR2f3!FzW=trb@S!}OH0d=wmj-0984S( zM>=pBo!IYao(aFY@UE^d*pnB#-D&=KQTO|?x3_mFpa1dBaz?*+xmAs@a%1OWwtki# z7(Gu$`ybt{W=EYJb>rIb+k6(l1Nn2wOMPf=Ns8e{CD}%CLSCNo_;~!*mYehZfO>_?{PP0N z?TJ;x1EL|nS<7X)PEdzy#0bNgLcF-@WLqrv$5Nv>-Dtk}YSgKX#hxpxw~v*!_Gh1& zX#M_aQ+m|C?u-tYoly<@5lOSQm~MhZl7f;eb-@Uaw}JmyNDOXCPBvV z95y|UJI?^K?>s+Lt}2h?$QR{XN4f{#*W|Hb&|^rA^SEPF#UoQ_j@JMbiNhRh`xc9X zOzLcjKbbO`&YZv&4YA&00Qwe)sN_Tqo!v0i#-9-{v_;OOXxGlt&m_o&s0h4T6m&b~k9{NurEE zx}}AM#Y)I4NO`AICHB)@7KYN5#kZw9%kj#xva(i?A6^l5O7qy5>o;LU_(vmKCmGQc zkk6jDn-X|c==pSKGB)X8f7j}(-!WX^CT6bzGd126if9zmu6^)4GP8v2P^SeJpJ36I zhqXIE#jP_cAM=ttm03tQ^ zYM{iyl?gk~IDMT5RSw-I1cIt}X4oN4yL~$ZI2V?c6HydIQu*i4_hf?@@`uJi{oe*! z85+`SrUiwDt|y_vt`LovV#gamocmO!D#znkz`AR5sp{(wCtVkDUr8eVeh2Cs+twPc zE)^3Wzep<2&wqkkPn4qw7z@H=(4nf@+S;`P!2KjVn5L46G!O`gFan^l7U(#XKxvhg zLyr6Ks^SI*adJ{u@KiNzD5QxxIi$V$RmayzJ%RrM%|qIO^o^r%e6R#mxs5q!KfU_P zFb7$3m$>UAZZsW~sO##ogXjYhuVt&Nlv>zSmPJ_fWP(%}SIiWg+GH@1knl&dDMZ8< z=;%_@(r%FihdxUkhg>YPs7MWzOD|+B(HyE88mzg!nTV*v-^bjp7JBFvOhm$=78wxS zB=^3V))q)kStWGEM(XQj{!Vb~H#Ww0nV*?QueJvEtSx+{+K5_NSwRpI ziYXI317y^6UJ=@$@j_iis%@csVK^&>ZXIWe#Q$zq7STZLFM5x$O$_oO5*~Jv23!#` z#BB9Ujda*EtygN1jci5WAUSUskY@+~YcFPL^1Otyqhmo%#ey)Sm~|;& zr$MDwM@Pq($vDp_FM3hmrTc&Pfe+h!Y-zb= DBRpsR5J~L6CJr}imQPTz*fE%x^ zaNej1D+k|Nu1WTsfg{?KS;YgIdWR{5{Y|PFds{Lxd!qYvazuAIdh#(1#R*;T)nE2E z2BpMK%bU=b6&WEB2N~IsM-LzVdM$KT5`;jSzY!I*TRA^6bRjvuZ;DcEMxT}eFImK2 zE)`N@M|B%{?Jd8Kf4o2rFN!iLr}>k;Dt_4XFe!lc#A~CKuWx@K*~kA?3i5Bk3B)44 zxqS7nJWfb{KQUSPYPHYTo;JsQIk0(b`IQ@sq}!_LE2s+gj|~3$wEFt`j5F8C&Lw{N zqH{P!^$$Y+vk3zE8P)Pb-$tabZqC;5gtcXacNH4rU{lw74Rav^zRAk^#^d3+ABU~t zm*rM(9!7~62S9!TDL2gnS^vpY-o_Q;+oXA(A?eN`q&2<_f7!ra14ALi4bIMz2K)1J zXgYqaqb3>YCD@hjVvAl^=QJf{d*10#30A8ZJZSXvoX&i-rB8Zb*O`-MjL!Yr=RT z3f`&RV!q1b+S)KwEILuN{jp-gDi=-X!gdMtH}rJ$UK5ed2Yh`yhlpqR5-LKdh(5Bf!&k6n|sBfTJ}tin@+< zXTEflkfmM755e+$f1#|@o6{X2C!Im4Jf`8y8Uo=3nb?XU#F{gtVMN`0JgKGTCV z?M_iqId2ZT`r8+MMsLh%pP}cKh8wP!TBL(K1$4_4)I@JvtVj<8LxIc^20$MNQ830? z=vVA)jRhCG%pXRo2B>)_%jIM!=uLX255(&Q3A=R6=W9&g9(X=0=7eUZAPob zUfrOQfR%XyW9`m0lu(Ql)rPP+j0I^}Lms9$VgIZ4#Y|5o9ePW^-Q69Wk}a<$Y&f8& z6?_jw&*3pKSNudTok6%#e(7>3{h%K0*>%9nO~=rPKx1%-Xi}CgsEs z7j~Ju{Oz#g`Ja#11Q@;QiJJ-w zy8u>5&pxFBA~f*GuPxMmb3UZNe-G8Gl#fd-J*koaWOsH#8;3*goZ&tjTz!H$ZuHk#qo+PS)num4XwGy-)x&;~o zTViQd-WE%rzzyr!nu>LY1*?ElAl7ehZ zL}7)7hIW}SnzzO9gt98~!Uhn0`}XYwKoCC!6xZGOLtg*yuuTwo_H4km1~KGhWFhQX p;s`NA-f=hazu~d7e|tP<2Xl`o_2j1U{a46`$URV!&be>o_a9`)Gf)5k diff --git a/_images/index_2_1.png b/_images/index_2_1.png index cd8ac29c9282a01b2dd1badc0620f512815207bf..9d763b2586a26a559376496c418cbe25cfd2e90b 100644 GIT binary patch literal 12427 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 UG1&p%SVL}Hy`zwO+3@lI0D_N*-~a#s literal 14060 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⪙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 bT**AtaDF&b=uwBh_9;8II&a}__KEoqJ0^pk diff --git a/_images/quickstart_0_0.png b/_images/quickstart_0_0.png index 8c053c27bc02beb26a9f2bbfa873d134b12104cf..6187b17bd466c73b8079276ce9947697b8febc37 100644 GIT binary patch literal 7551 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

jw6AE2gE6CM|K`0t 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 V$XQM#1HlEsA8I^6EBy89-vA5%^?d*U literal 6179 zcmdT|XH=8fpMF8bil8XcK?M<{3?MLqp$G~ADN>{c1|mUP=)GDH89~NSL+>^84njuh z5Q=mHL6P1?2tBYjGkg9!d-lVg-A}tYCpVCj_r3T1-RJj|8>+3TLVu3!90Wo1a8+d; z2%^0W{>Gi51LKo&155C6&+Vb1o310u&C|lg3evD}bFz1Iv$wJ2@vw4nwQ)pCh};tq z7vg#D=H}!oBP#0fuOEmwx>$=|*E}%>ZgSR1)yNfs7%Zr7nq2uD8wk4g2V7ZE&nt12 zJ%%u1Wp35EoWYP0+LFWrXUHY#G24VA~s?@oOk(dfK9 z(%kmLPnCIN-tTZ~x|-wQYD(|DHdL4xEd-S?`r`P(GJhDIyaGYL-TR-8V)VD|hH+oo zKirH?OcW{}DL8TZVzY}31pRr#l3Dv`yBeRDnW=ooplHx{y&>oG=LZ^C@rPtGxitPV znEZ?hPK0@Z?Bm`G+gYf_Qwn(nSS|?i^Q&mV$WbxECLW|Vx>t(+KRfu<)YT)qQOgmF zv`~;}J4;4P46~KBbr%|c)uIlXUENTCM60k=( z>Z5GV_ZFn4rkc-z9ZxUF&VF?BQCJN+CGKRDmOModfk1S&x1X`=ZEx@Eh~%#)n^)RK zn|VzIqgTsO-I%7S8jH=75cGxV%t<|CiesYmEt;(27*X>g313b>8-Sb7=fs8;n`No>gUKrOo6= z@4rjFGed&@iHQp;dlJ3I2MXrPg-$I3#L6Eg%&_*mAdR@KxPwzRaACQ^5t zr>Nxw1PO%%fq(uFjr?N6OuIK$JnC0G#KF2ZQbkk7q>y2?FI;P{$0sDrdeoCYo#wtR zEG#@cKm$Pyef|CEUoun*^77y!vCDP-)BEgE*UbH%TnxE6JOB{gzt;XxvL3J_YxV4z zvacZYT~9?Nq$j!XLwe1bNmS%xgV>)xe@4ZzjQCc+F!@ZsC(J30PMq{vE<8R?IV_fb z#eKZnMyzs3F!NoNtR{wv~c(CQ+!hwR~#{ARVe%hFd0E!RExs8*E55%uE z>`bzYaYD}RsPYb!*4utV3~cI{0`Z7U{2_TeM>9#s!=nmazbe&@l~A$nO^)W(fBG~( zBSY!o!-r{&$hPiqj!+abYP(psM|KR-Wl zfX<0&vs&GKzWC@okDRjqwcf!zT_yPlZh14aVgqk)Z(@Z_q>hfx4K~-kpRv@u#zcJ{Wb0=wS?d>lt>lzr0OvgvtC2HoFiWrR2 zLq1)zA6m6A{S&3hXM-l|rf9M%EA_bpcGJqr%BX$C$H$k4!wFS1)YTbN3(-4Y|3#O^ z={(Y3h|!!12&{GTm#xKt=-AjCExA1^Rp~u=@DkOVEL=TaxVJf90QhThanYsL)MqI# z2lVEzFHbA51d`h7cIB7T#h<#C4aykW!aOxkU?MZbZw0a6S)!SpsCA8p`BsS_>N3-m zLY9sW)<=#g2a;|J+VKA30P>x&RgdmCv70N(4v>?ErDgh?d$j$b)knVbX0|airDIWl zFeWL*(o7gS`%6x@aR(;8J4FjI^3%Qul0r|678J0$3IqE1&us1N5AQuZ^n-1WBK-qQ zH8jGj&?KS*&N1*{{8IPykEteNwWGP=cqTk@hU{~bZM|FitDd{NyWx0+&A?WcsDEBB zvVlBoBIEpBxq5p&@c4k#voOw{m6cWJwP9Jk{qP<0!;0M>JNV-U+7}9j4?1AeZL+| zy7zjz!KfWE+ZEeHWEL{y$r%`%FRcSFVS<*LTL0(Z^EcV-R*9ASD>{v!?6$)=BY&=9 z&`0dj=#^nPj}=4z&4jNjn_k@hTOX<%#+iqu0K$MGW%VNA{Vz_O)_d~g(y+%@|DDCP z`t|qEKRS$8EoMZ>owM_u`JfV&kT5=9TIKk)Xdp++(=J8YF`4cn$LRdV(c!%Ovi$L$ zmSF-3J(B+L-LvIsvE^2lLPY&jpe$)p3EkPCd>ve$uGWj1H{#rvKSwyJtE&$%1pIg< z7r_Ug?@bw*>rQAQK6=lQw>Xfaa@R~>KN?hoeOL-?$DW^DWmVPoF55cXR1`z`5)qL3 z>DB3-y$w!IPEyf)WK`6ZjkDj1Ol$jByCwMe9_HocT?!xR@9$q#k_B{`e(FhB8;Gn=hys;X}n7=nt5iqQOJ zQANo(aSX$l0#9m8OiYPXNK+aRT2LPZ<+qP6vucJWwzjs-)@LK;d=Xkm_y@eE+eVN%rh!z&S2yBK0t0UCQvwNWFQsSqW#yj<6SZdQO|Cy^mO3B}$OQr{oBQ|xBad(!Sk>bLA6ca!qR z9^--Qqvy|hs-5KwJ@?4!F4XX0fh+sPDf947!{kpo+pGN@2IkRnbQ9z9?g^Wyn*#sW{SgV6sg}Yo`4tXJUh)o`?hkfwV=AIP)8=k&-sP^1FEpKe^3z3 zoP}?%&DWn`kL~ItC1}M?sPs@82b01{MeZ(D;DB zZPZO?Z&SXzLHi=tuPg5F!iJ8wLvzCnLx)mjiU&XR0&$PQx15F{|AlQ)+<6$af(~LDY1u zDVS|qCUpg<(LW@9>qy8OrwFc#QBwHt$AS5vGV5M0jTAY=*w|Rvm_4!1-EPza8TJ%s zmE|}I7gtL=avWh`cm(?&b80FbWCqN2h?Wk;6Qnx1#IBN{e2E?B9W+PXqYQ$ zH@sCtnU_DVeOhc*Xkh03@aom8Y`^>#l>Hc+zP-JzodWK$Fj|Tv*1G1H1ybBs$I4aC zGYh>vG=iX@gx|YakT(KKy0e8%susSea7Vk5$0Ju(?1d3^dcF5I!+1e2!&zBbi6s`V zP~GuaO#GU;si_L58Mp?ULz(yxu$wD@zTMU)?g6s(JP14tz#j$#E(Ex`mb}w5Y9~vCwjqP$LH9kSSa+xEr4h;|I=jPrXob#xkCHv@`nTfy!MMY!V zrq2d5!36~cF(kABa10UCMaGqC=xSNFu8xk-xe6L6s6|;ab#QoC4I?ft{+TEtF8*K~ zSWij&(UOwY(9lpdEiDG}9u6=y@Mi*UVEFgTnp;|ElQeS@HLd^J?R~f&Ua^Bfh~ga@ z8Var)0YjA)3YFj3C}-~r=!cDs?SVf)c%g7U4WGQcIdB4kckZ08l$4e(NKbztm!gFM ziaaSg@>+1tsu$D6-c{ z1_-JlZ{17fka1J}y4x!KU`Jg|jTi1Z-!t@vo_%Yjyf?qFPy_6*HWHb!hCdFVnx~GA zjn$S__3#xu=cw;(9By2u}Ge!zj}N?6noeRt1uEfHYU z5=IX}j4$Hj*}_@GzSsGG7f(I;N>Sgy0K_!~Nl8iIyGoOFCT!8@r<$4<-NR^YSz&|X zGP%et?XHDiTB&Z7+REd__)cCC&yCSl4|;AnQ_PG@tyifsje8i^KYlOTv+A*v&;9Nh z0Prj|s0Gb7J198IBpKJbWc>xn%Oii^I4$OjB4=h$qe03Z@hRq&aaXWk8FoWDBp4C|I9!hE-%?{6)3_VmPbqXvcxO`59MkrkFL z=d7%(1b|wDmyG+8o?*(HH*{3DE)uKG6`=z1s)3!IoxI$;Q4^3w0X(^Y6|)&FvGCdY zqN0yLa1Q4*G$7tx6CM8c>6N6@HwEA)m4KhK@b5{66@+jH7y{~Gld_Ks_!*g!3xrKR zMeQ-wkxaKmFeC*J%x~HpY_F!R4*udI+OUPOmr95cGP-P=k=(F(xY^rLzUO2o zYH}h8&Dj2a9gtHADMwrUt}CNro6SsGED>$UrKKfHn54S*bhtF3H(*<$92mBn9rj~o zeD(+Gq7Ba`(A8sg?ge`z_#>;v&7}1>U{GCWJEOHzLb!a|uP`&mQx0|#8hm%+#~tw` zLNcsAB?WE|3|R}#96!kc^BL6B*T>onWMd~LOb3WWwxx2XsRxmfkx0<)1Yq$9AP3ns z?hh5esq*yjh?iaeIB@0aRcuoTLxS|ASJMSn@n#|O#{0}#0=JI#dIRHup~EuB?f$7} zV2}VFCg+xbKnHai7A5+d?%)2Tk#Lz&l?XWW+T0q@3L)lMuj7EL3S*b=2w7kxp-_-f3^GW}5L$B(7}j9?KL$O8Y81AOn8An=8}a1e_ynVp?#?rv_c zhg^U%cXoHv7tA6&Nm*fGVcIDIy4kt4wMK34IhWhUOq2`^V!<&E(41Q-y(;uKD?l}2 zhd-Ju+#|g-wuka`a{vPuj-%@}T;~X1#>%bvo~Yb;3&Kv|{$dV5+Bsh_Rh>tV-e@M@ zXU#BbNg)!A;Y+3ON21 zUXv;I!oKqd+pWn;_T?Edo2El2Qp0;*se!igXs0wH`pY?_vw;$g=p~u1E zl1G-Q{C*c486aw$6h%M&c**7UjfNBE6D4D;V0!8bPYkoD87@O5!uD&Ue`&IsDVqc; z48)ni!NE-YF=aho*0acCeUfw8rX>kb9gMOyKs5vyfMi%wjgL(45C{a8Zowndf+6x!92T3mzrSCynv|4e`}}zg zpB(}y)rff@!VyoYdKAWT$+nk3(BokQYJ@aA?j0`6F*YCfC~*3fqmHsYE(zjsArSW9 z;NX37ai9kM0TmYDaIWrPtv)&~F1NW^d3CbEq`;u~Dafcm>2s}L-{*>W6v0&pBG6`C zMNrMT+ZRKWm~K7RHZn5G6=u1RkHbBdOA&n|@lF)TYA1nkp#TZY2=EdQ+_(1pK!(=? zyqDWsgs8uAfex6C1OJ{<%P^`kR@slGQw3aJUf%xT^;srRfh$kDmX>UjV7^kg7?t-N zXV3e|dagxv&FUyBDjwgzbp9OOE0AjjOCo@(;=q39g6(rl_|-Xmj(}y_$ND_V{*S`| zFNCoo&R}s{-^L~nP(G^Z4gK8i#x&~F%TuiY7=`JrLsySN7`UaVZwx^+a8KQJ_lLzM zh{EG6uH;{kfbWhrA_C)fz6O51|Fiujj0<%bUF_GQr>7U^f3S^xlJSV-62dCKHxt>q z>XG0%>CL~Q-P{!`8nQ2BTGKZ(Hx~~c533Y%ku{~)+E32>`9Y=9B|N#%5et@Gj%>Rq z;kM9cvZUQ?)fIy!)q5sLSoi!jn~+HrVboq~b1uP=4VgQ2jf{`@F80P}d$>PKy&G^I zvM2E#a?*bXp{u9&?9ByM%cbSzaIrzL;qM};EJ%W5z$SZSLV_K~#SknwLL9>f2I6v_ z-J@dU!{Dlv=b9;!Fr*Zo;=6V)^1}xUaI}KG?_HKxRCJMj8q9#&UKvAu`}0NXtP9qA za}Eo_8O!~I(Z#$s7{WezS;-$HPfKQD<7agAY|nIbb-O+B2ME`x&%q_ma!0#J2_SBf z7>p%#T`?jETi~bm_r{ug7y@^dB4cB%!Kzqg+;YK`F1Hf_594!t>8>n|$%2Q!3qaL6 z!^eP diff --git a/_modules/highway_env/__init__/index.html b/_modules/highway_env/__init__/index.html index f3790bf8b..b0d24ff42 100644 --- a/_modules/highway_env/__init__/index.html +++ b/_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__ = "1.10.1"
 
 try:
     from farama_notifications import notifications
diff --git a/_modules/highway_env/envs/common/abstract/index.html b/_modules/highway_env/envs/common/abstract/index.html
index f809c24b7..df2252a62 100644
--- a/_modules/highway_env/envs/common/abstract/index.html
+++ b/_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/_modules/highway_env/envs/common/action/index.html b/_modules/highway_env/envs/common/action/index.html index ad14f4c67..6c091d984 100644 --- a/_modules/highway_env/envs/common/action/index.html +++ b/_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/_modules/highway_env/envs/common/graphics/index.html b/_modules/highway_env/envs/common/graphics/index.html index 361740f51..4653e5781 100644 --- a/_modules/highway_env/envs/common/graphics/index.html +++ b/_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/_modules/highway_env/envs/common/observation/index.html b/_modules/highway_env/envs/common/observation/index.html index 59a45f30e..921038a9d 100644 --- a/_modules/highway_env/envs/common/observation/index.html +++ b/_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/_modules/highway_env/envs/highway_env/index.html b/_modules/highway_env/envs/highway_env/index.html index 734631e06..bffae67d0 100644 --- a/_modules/highway_env/envs/highway_env/index.html +++ b/_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/_modules/highway_env/envs/intersection_env/index.html b/_modules/highway_env/envs/intersection_env/index.html
index 946c15432..0755f0ad7 100644
--- a/_modules/highway_env/envs/intersection_env/index.html
+++ b/_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/_modules/highway_env/envs/merge_env/index.html b/_modules/highway_env/envs/merge_env/index.html index e0cd99d97..ed35c13bb 100644 --- a/_modules/highway_env/envs/merge_env/index.html +++ b/_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/_modules/highway_env/envs/parking_env/index.html b/_modules/highway_env/envs/parking_env/index.html
index cbf59982c..f1ee4a1ab 100644
--- a/_modules/highway_env/envs/parking_env/index.html
+++ b/_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/_modules/highway_env/envs/racetrack_env/index.html b/_modules/highway_env/envs/racetrack_env/index.html
index af57a7fa9..edd70d9d6 100644
--- a/_modules/highway_env/envs/racetrack_env/index.html
+++ b/_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/_modules/highway_env/envs/roundabout_env/index.html b/_modules/highway_env/envs/roundabout_env/index.html index 49ade235e..3fe3cc605 100644 --- a/_modules/highway_env/envs/roundabout_env/index.html +++ b/_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/_modules/highway_env/road/graphics/index.html b/_modules/highway_env/road/graphics/index.html index c8cafe886..233dc187f 100644 --- a/_modules/highway_env/road/graphics/index.html +++ b/_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/_modules/highway_env/road/lane/index.html b/_modules/highway_env/road/lane/index.html
index 296fe1976..b8a493d54 100644
--- a/_modules/highway_env/road/lane/index.html
+++ b/_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/_modules/highway_env/road/regulation/index.html b/_modules/highway_env/road/regulation/index.html
index 2f1ec9df4..9b41134e9 100644
--- a/_modules/highway_env/road/regulation/index.html
+++ b/_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/_modules/highway_env/road/road/index.html b/_modules/highway_env/road/road/index.html index a2f2f3ddb..0cfe7344b 100644 --- a/_modules/highway_env/road/road/index.html +++ b/_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/_modules/highway_env/vehicle/behavior/index.html b/_modules/highway_env/vehicle/behavior/index.html index 093b8f8cd..24ba841d1 100644 --- a/_modules/highway_env/vehicle/behavior/index.html +++ b/_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/_modules/highway_env/vehicle/controller/index.html b/_modules/highway_env/vehicle/controller/index.html index 594eb226c..524c17f34 100644 --- a/_modules/highway_env/vehicle/controller/index.html +++ b/_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/_modules/highway_env/vehicle/kinematics/index.html b/_modules/highway_env/vehicle/kinematics/index.html index 485bedcb6..3b177b899 100644 --- a/_modules/highway_env/vehicle/kinematics/index.html +++ b/_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/actions/index.html b/actions/index.html index 7f884579c..90c0717cc 100644 --- a/actions/index.html +++ b/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/dynamics/road/lane/index.html b/dynamics/road/lane/index.html index d8fb88c63..86f5fb115 100644 --- a/dynamics/road/lane/index.html +++ b/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/dynamics/road/regulation/index.html b/dynamics/road/regulation/index.html index a2c50d259..2ed5931ab 100644 --- a/dynamics/road/regulation/index.html +++ b/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/dynamics/road/road/index.html b/dynamics/road/road/index.html index 472ba8544..98a314ea8 100644 --- a/dynamics/road/road/index.html +++ b/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/dynamics/vehicle/behavior/index.html b/dynamics/vehicle/behavior/index.html index 90764b5ab..78e9e87bc 100644 --- a/dynamics/vehicle/behavior/index.html +++ b/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/dynamics/vehicle/kinematics/index.html b/dynamics/vehicle/kinematics/index.html index 2e5934839..c88be8832 100644 --- a/dynamics/vehicle/kinematics/index.html +++ b/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/environments/highway/index.html b/environments/highway/index.html index 7a4a9e9a6..72e235c37 100644 --- a/environments/highway/index.html +++ b/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/environments/intersection/index.html b/environments/intersection/index.html index 62df81714..ba60485fd 100644 --- a/environments/intersection/index.html +++ b/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/environments/merge/index.html b/environments/merge/index.html index e92ebab0c..ad08ecdae 100644 --- a/environments/merge/index.html +++ b/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/environments/parking/index.html b/environments/parking/index.html index c58fc4519..ee4059c94 100644 --- a/environments/parking/index.html +++ b/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/environments/racetrack/index.html b/environments/racetrack/index.html index 8bb540588..c17c8b401 100644 --- a/environments/racetrack/index.html +++ b/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/environments/roundabout/index.html b/environments/roundabout/index.html index dd6c8ed3d..44d7a909c 100644 --- a/environments/roundabout/index.html +++ b/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/graphics/index.html b/graphics/index.html index 17e8b69ee..2bda14970 100644 --- a/graphics/index.html +++ b/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/make_your_own/index.html b/make_your_own/index.html index d2cd8d9b7..e55e8e773 100644 --- a/make_your_own/index.html +++ b/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/multi_agent/index.html b/multi_agent/index.html index 0ac6eed9f..127ad4201 100644 --- a/multi_agent/index.html +++ b/multi_agent/index.html @@ -389,11 +389,11 @@

Change the observation space -
-
[[ 1.          1.          0.04        1.          0.          1.
+
[[ 1.          1.          0.12        1.          0.          1.
    0.        ]
- [ 1.          0.22449204  0.08       -0.15941963  0.          1.
+ [ 1.          0.20796539  0.         -0.07930574  0.          1.
    0.        ]
- [ 1.          0.42466983  0.         -0.09338507  0.          1.
+ [ 1.          0.43728748  0.         -0.10441518  0.          1.
    0.        ]
- [ 1.          0.6268542   0.04       -0.09212964  0.          1.
+ [ 1.          0.63276297  0.         -0.16635698  0.          1.
    0.        ]
- [ 1.          0.8136069   0.         -0.14503604  0.          1.
+ [ 1.          0.8445503  -0.12       -0.10898441  0.          1.
    0.        ]
- [ 1.          1.          0.         -0.08288387  0.          1.
+ [ 1.          1.         -0.12       -0.12598878  0.          1.
    0.        ]
- [ 1.          1.          0.         -0.12427282  0.          1.
+ [ 1.          1.         -0.04       -0.07915984  0.          1.
    0.        ]
- [ 1.          1.          0.04       -0.19778234  0.          1.
+ [ 1.          1.         -0.12       -0.1142595   0.          1.
    0.        ]
- [ 1.          1.         -0.04       -0.10740223  0.          1.
+ [ 1.          1.         -0.08       -0.11307526  0.          1.
    0.        ]
- [ 1.          1.          0.04       -0.12799524  0.          1.
+ [ 1.          1.         -0.04       -0.16392277  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/searchindex.js b/searchindex.js index 76be2f5da..6e25b26f2 100644 --- a/searchindex.js +++ b/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, "01630961": 22, "025": 23, "03792438": 22, "03897353": 22, "04": 23, "04146585": 22, "05": 23, "065": 23, "075": 23, "08": 23, "08288387": 23, "09212964": 23, "09338507": 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, "10664026": 22, "10740223": 23, "11": 16, "1140": 23, "12": 23, "1200x500": 23, "12250": 2, "12427282": 23, "12799524": 23, "128": 23, "13": [12, 23], "14": 24, "14503604": 23, "15": [2, 10, 12, 13, 14, 15, 16, 17, 18, 23, 24, 25], "150": [10, 13, 24], "15000": 24, "15941963": 23, "1612": 2, "17": [2, 24], "1707": 2, "172": 23, "18": [15, 23], "1805": 2, "1824": 2, "1911": 2, "19778234": 23, "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], "21115574": 22, "22": 23, "222": 23, "22449204": 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, "3167825": 22, "32": 24, "33": 18, "3d": 2, "4": [1, 7, 10, 15, 18, 23, 24], "40": [9, 10, 24], "4123537": 22, "42466983": 23, "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, "6268542": 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], "8136069": 23, "84": 23, "9": 23, "90945333": 22, "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, "01421973": 22, "01495": 2, "025": 23, "03215877": 22, "04": 23, "04366685": 22, "0468663": 22, "05": 23, "065": 23, "075": 23, "07915984": 23, "07930574": 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], "10232993": 22, "10441518": 23, "105": 23, "10898441": 23, "11": 16, "11307526": 23, "1140": 23, "1142595": 23, "12": 23, "1200x500": 23, "12250": 2, "12598878": 23, "128": 23, "13": [12, 23], "14": 24, "15": [2, 10, 12, 13, 14, 15, 16, 17, 18, 23, 24, 25], "150": [10, 13, 24], "15000": 24, "1612": 2, "16392277": 23, "16635698": 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], "20796539": 23, "21085131": 22, "22": 23, "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, "31743756": 22, "32": 24, "33": 18, "3d": 2, "4": [1, 7, 10, 15, 18, 23, 24], "40": [9, 10, 24], "42866647": 22, "43728748": 23, "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, "63276297": 23, "64": 23, "640": 18, "640x480": [22, 23, 24], "675": 23, "7": [14, 15], "75": 23, "7540": 2, "7853981633974483": 1, "8": [2, 23, 24], "84": 23, "8445503": 23, "8907947": 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