diff --git a/docs/reward_function_core.tex b/docs/reward_function_core.tex new file mode 100644 index 0000000..ebdca49 --- /dev/null +++ b/docs/reward_function_core.tex @@ -0,0 +1,172 @@ +\documentclass[12pt]{article} +\usepackage[a4paper,margin=1in]{geometry} +\usepackage{amsmath,amssymb} +\usepackage{booktabs} +\usepackage{hyperref} +\usepackage{CJKutf8} + +\hypersetup{colorlinks=true,linkcolor=black,urlcolor=blue,citecolor=black} + +\title{TCA-MAPPO 实验奖励函数说明} +\author{} +\date{\today} + +\begin{document} +\begin{CJK}{UTF8}{gbsn} +\maketitle + +\section{设计思想} + +当前奖励函数采用同轮次 no-control 反事实基准下的``平均通行时间--TTC 风险改善''结构。它不再直接奖励某个绝对交通状态,而是比较模型控制与 no-control 在同一 episode、同一随机种子、同一控制步下的差异。 + +这样做的核心原因是:交通需求、车辆生成随机性和事故场景随机性会造成不同 episode 的绝对运行状态天然波动。使用同步 no-control 作为反事实基准后,奖励可以更直接地表示可变限速控制策略相对于不控制策略的边际贡献。 + +\section{通行能力指标:主线平均通行时间} + +设 episode $e$ 中第 $t$ 个控制步结束时,模型 $\pi$ 下已经完成主线通行的车辆集合为 $\mathcal{A}_{\pi}^{(e)}(t)$。车辆 $i$ 的主线进入时刻为 $t_i^{\mathrm{dep}}$,离开时刻为 $t_i^{\mathrm{arr}}$,则其主线通行时间为 +\begin{equation} +T_i=t_i^{\mathrm{arr}}-t_i^{\mathrm{dep}}. +\end{equation} + +当前实现采用累计主线平均通行时间: +\begin{equation} +\bar{T}_{\pi}^{(e)}(t)= +\begin{cases} +\dfrac{1}{|\mathcal{A}_{\pi}^{(e)}(t)|} +\sum_{i\in\mathcal{A}_{\pi}^{(e)}(t)}T_i, & |\mathcal{A}_{\pi}^{(e)}(t)|>0,\\[10pt] +\mathrm{NaN}, & |\mathcal{A}_{\pi}^{(e)}(t)|=0. +\end{cases} +\end{equation} + +代码中该指标对应 \texttt{mainline\_travel\_time\_cumulative\_mean\_s}。使用累计均值而不是单步区间均值,是因为较短控制步内可能没有主线车辆完成通行,累计均值可以降低稀疏完成事件导致的奖励缺失。 + +设 no-control 在同一 episode、同一 seed、同一控制步下的累计主线平均通行时间为 $\bar{T}_{0}^{(e)}(t)$。通行时间改善量定义为 +\begin{equation} +\Delta_T^{(e)}(t)= +\mathrm{clip}\!\left( +\frac{\bar{T}_{0}^{(e)}(t)-\bar{T}_{\pi}^{(e)}(t)} +{\max\!\left(\bar{T}_{0}^{(e)}(t),T_{\min}\right)},-1,1 +\right). +\end{equation} + +当前配置中,最小分母为 +\begin{equation} +T_{\min}=60\ \mathrm{s}. +\end{equation} + +该形式表示相对于 no-control 的通行时间比例改善,而不是固定秒数尺度下的绝对改善。因此,在高流量阶段和低流量阶段,通行时间项的量纲更加一致;同时 $T_{\min}$ 可以避免早期基准通行时间过小导致比例项异常放大。 + +当模型降低平均通行时间时,$\Delta_T^{(e)}(t)>0$;当模型增加平均通行时间时,$\Delta_T^{(e)}(t)<0$。若当前模型或 no-control 尚无完成车辆导致累计通行时间不可用,则当前实现令 $\Delta_T^{(e)}(t)=0$。 + +\section{安全指标:TTC 风险} + +安全项采用基于 TTC(Time To Collision)的追尾风险代理。对受控走廊内车辆 $i$,设其速度为 $v_i(t)$,前车速度为 $v_i^{\mathrm{lead}}(t)$,与前车净间距为 $g_i(t)$。正向闭合速度定义为 +\begin{equation} +\Delta v_i^+(t)=\max\!\left(v_i(t)-v_i^{\mathrm{lead}}(t),0\right). +\end{equation} + +若 $\Delta v_i^+(t)>0$,则 +\begin{equation} +\mathrm{TTC}_i(t)=\frac{g_i(t)}{\Delta v_i^+(t)}. +\end{equation} +若车辆没有前车、前车不在受控走廊内,或 $\Delta v_i^+(t)=0$,则该车辆在当前步的 TTC 风险贡献记为 $0$。 + +设 TTC 阈值为 $\tau_{\mathrm{ttc}}$,当前配置为 +\begin{equation} +\tau_{\mathrm{ttc}}=2.3\ \mathrm{s}. +\end{equation} + +单车风险贡献为 +\begin{equation} +\rho_i(t)= +\begin{cases} +\max\!\left(0,1-\dfrac{\mathrm{TTC}_i(t)}{\tau_{\mathrm{ttc}}}\right), & \mathrm{TTC}_i(t)>0,\\[10pt] +0, & \mathrm{TTC}_i(t)=0. +\end{cases} +\end{equation} + +控制步 $t$ 的总体 TTC 风险为 +\begin{equation} +S_{\pi}^{(e)}(t)= +\begin{cases} +\dfrac{1}{N_{\pi}^{(e)}(t)}\sum_{i=1}^{N_{\pi}^{(e)}(t)}\rho_i(t), & N_{\pi}^{(e)}(t)>0,\\[10pt] +0, & N_{\pi}^{(e)}(t)=0. +\end{cases} +\end{equation} + +设同一 episode、同一 seed、同一控制步下 no-control 的 TTC 风险为 $S_0^{(e)}(t)$。安全改善量定义为 +\begin{equation} +\Delta_S^{(e)}(t)= +\mathrm{clip}\!\left(S_0^{(e)}(t)-S_{\pi}^{(e)}(t),-1,1\right). +\end{equation} + +当模型降低 TTC 风险时,$\Delta_S^{(e)}(t)>0$;当模型提高 TTC 风险时,$\Delta_S^{(e)}(t)<0$。 + +\section{最终奖励函数} + +当前训练默认采用 \texttt{paired\_no\_control} 模式。设基础随机种子为 $z_0$,episode $e$ 使用的 SUMO 随机种子为 +\begin{equation} +z_e=z_0+e. +\end{equation} +no-control 基准进程与其它模型使用相同的 $z_e$ 运行同一个 episode。 + +最终奖励定义为通行时间改善与 TTC 风险改善的线性组合: +\begin{equation} +R_{\pi}^{(e)}(t)= +w_T\Delta_T^{(e)}(t)+w_S\Delta_S^{(e)}(t). +\end{equation} + +当前配置为 +\begin{equation} +w_T=0.5,\qquad w_S=0.5. +\end{equation} + +若模型在同一 seed、同一控制步下与 no-control 的累计主线平均通行时间和 TTC 风险完全一致,则 $R_{\pi}^{(e)}(t)=0$。若模型降低通行时间或降低 TTC 风险,则对应项为正;若模型增加通行时间或提高 TTC 风险,则对应项为负。 + +\section{同步 no-control 基准机制} + +no-control runner 在每个 episode 内按 step 写出基准过程数据: +\begin{equation} +\texttt{runs//reward\_baseline/episode\_XXXX.csv}. +\end{equation} + +其它模型在 episode $e$ 的第 $t$ 个控制步计算奖励前,会等待对应 CSV 文件中第 $t$ 行出现,然后读取 no-control 的 $\bar{T}_{0}^{(e)}(t)$ 与 $S_0^{(e)}(t)$。若基准文件不存在或当前 step 尚未写出,其它模型会阻塞等待。等待时间由 \texttt{baseline\_wait\_timeout\_s} 控制;轮询间隔由 \texttt{baseline\_poll\_interval\_s} 控制。 + +\section{代码变量对应关系} + +\begin{table}[h] +\centering +\begin{tabular}{lll} +\toprule +数学符号 & 代码变量 & 含义 \\ +\midrule +$R_{\pi}^{(e)}(t)$ & \texttt{reward}, \texttt{r\_improvement} & 最终训练奖励 \\ +$\Delta_T^{(e)}(t)$ & \texttt{r\_travel\_time\_improvement} & 主线平均通行时间改善量 \\ +$\Delta_S^{(e)}(t)$ & \texttt{r\_ttc\_improvement} & TTC 风险改善量 \\ +$\bar{T}_{\pi}^{(e)}(t)$ & \texttt{mainline\_travel\_time\_cumulative\_mean\_s} & 当前模型累计主线平均通行时间 \\ +$\bar{T}_{0}^{(e)}(t)$ & \texttt{baseline\_mainline\_travel\_time\_cumulative\_mean\_s} & no-control 累计主线平均通行时间 \\ +$S_{\pi}^{(e)}(t)$ & \texttt{ttc\_risk\_rate} & 当前模型 TTC 风险 \\ +$S_0^{(e)}(t)$ & \texttt{baseline\_ttc\_risk\_rate} & no-control TTC 风险 \\ +$T_{\min}$ & \texttt{travel\_time\_min\_denominator\_s} & 通行时间相对改善最小分母 \\ +$w_T$ & \texttt{travel\_time\_weight} & 通行时间改善权重 \\ +$w_S$ & \texttt{ttc\_weight} & TTC 风险改善权重 \\ +$\tau_{\mathrm{ttc}}$ & \texttt{ttc\_threshold\_s} & TTC 风险阈值 \\ +$\rho_i(t)$ & \texttt{ttc\_risk\_samples[i]} & 单车 TTC 风险贡献 \\ +$\mathrm{TTC}_i(t)$ & \texttt{ttc\_samples[i]} & 单车 TTC \\ +\bottomrule +\end{tabular} +\caption{奖励函数数学符号与代码变量对应关系} +\end{table} + +\section{运行要求} + +使用 \texttt{paired\_no\_control} 奖励时,no-control runner 与其它模型必须使用相同的 \texttt{run\_timestamp}。推荐先启动 no-control,再启动其它模型;若并行启动,其它模型会自动在 step 级别等待 no-control 写出对应基准行。 + +\section*{参考文献} +\begin{enumerate} + \item Wang, Q., et al. Assessing the Transferability of Time-to-Collision and Other Car-Following Safety Measures in Real-Time Rear-End Crash Risk Prediction. \textit{Accident Analysis \& Prevention}, 2024, 197: 107640. + \item Jin, Q., Abdel-Aty, M., Ugan, J., Islam, Z., Zheng, O. Identifying the Threshold Discrepancy of Rear-End Conflicts under Clear and Rainy Weather Conditions Using Trajectory Data. \textit{Transportation Research Record}, 2025, 2679(4): 952--968. +\end{enumerate} + +\end{CJK} +\end{document} diff --git a/sumo_resource/speed.csv b/sumo_resource/speed.csv new file mode 100644 index 0000000..f827aa6 --- /dev/null +++ b/sumo_resource/speed.csv @@ -0,0 +1,338 @@ +时间,整体平均通行速度 +2023/9/29 0:00,39.72924853 +2023/9/29 0:30,23.93869502 +2023/9/29 1:00,20.12169479 +2023/9/29 1:30,22.82279974 +2023/9/29 2:00,35.64931132 +2023/9/29 2:30,79.45280165 +2023/9/29 3:00,97.98164707 +2023/9/29 3:30,94.21935324 +2023/9/29 4:00,97.67070299 +2023/9/29 4:30,97.79686423 +2023/9/29 5:00,98.46381991 +2023/9/29 5:30,96.18703688 +2023/9/29 6:00,97.43414885 +2023/9/29 6:30,92.36651857 +2023/9/29 7:00,73.998521 +2023/9/29 7:30,62.17000839 +2023/9/29 8:00,47.77817891 +2023/9/29 8:30,35.40479758 +2023/9/29 9:00,28.07752106 +2023/9/29 9:30,23.73410594 +2023/9/29 10:00,21.08155924 +2023/9/29 10:30,20.58955406 +2023/9/29 11:00,20.56069352 +2023/9/29 11:30,19.83084787 +2023/9/29 12:00,17.67770456 +2023/9/29 12:30,16.89453669 +2023/9/29 13:00,16.29016426 +2023/9/29 13:30,19.63367999 +2023/9/29 14:00,24.99341988 +2023/9/29 14:30,31.03368271 +2023/9/29 15:00,25.23062764 +2023/9/29 15:30,51.51078952 +2023/9/29 16:00,78.93674384 +2023/9/29 16:30,50.67266384 +2023/9/29 17:00,43.99015486 +2023/9/29 17:30,59.63159768 +2023/9/29 18:00,92.95402389 +2023/9/29 18:30,93.80904548 +2023/9/29 19:00,95.82182995 +2023/9/29 19:30,92.86165527 +2023/9/29 20:00,89.00020012 +2023/9/29 20:30,94.9392069 +2023/9/29 21:00,97.11333414 +2023/9/29 21:30,94.61300718 +2023/9/29 22:00,89.080915 +2023/9/29 22:30,96.11108024 +2023/9/29 23:00,97.3238152 +2023/9/29 23:30,96.91342636 +2023/9/30 0:00,95.2854676 +2023/9/30 0:30,94.82708101 +2023/9/30 1:00,90.55216898 +2023/9/30 1:30,92.38862494 +2023/9/30 2:00,99.440891 +2023/9/30 2:30,89.19739717 +2023/9/30 3:00,99.19009918 +2023/9/30 3:30,94.01229131 +2023/9/30 4:00,100.4861154 +2023/9/30 4:30,94.16474968 +2023/9/30 5:00,103.5615282 +2023/9/30 5:30,103.338265 +2023/9/30 6:00,98.59024657 +2023/9/30 6:30,100.2136001 +2023/9/30 7:00,100.4371182 +2023/9/30 7:30,96.61478926 +2023/9/30 8:00,93.93790438 +2023/9/30 8:30,83.11760496 +2023/9/30 9:00,62.15990099 +2023/9/30 9:30,43.9723505 +2023/9/30 10:00,35.00744214 +2023/9/30 10:30,29.71189201 +2023/9/30 11:00,30.34881825 +2023/9/30 11:30,35.67407755 +2023/9/30 12:00,49.21657288 +2023/9/30 12:30,70.43670043 +2023/9/30 13:00,84.9882178 +2023/9/30 13:30,88.22434413 +2023/9/30 14:00,83.80149533 +2023/9/30 14:30,81.13305031 +2023/9/30 15:00,68.65534228 +2023/9/30 15:30,66.25314189 +2023/9/30 16:00,56.82177464 +2023/9/30 16:30,53.87454603 +2023/9/30 17:00,75.89190795 +2023/9/30 17:30,94.25549398 +2023/9/30 18:00,93.29729417 +2023/9/30 18:30,89.03453953 +2023/9/30 19:00,88.90090011 +2023/9/30 19:30,90.75154639 +2023/9/30 20:00,91.74480997 +2023/9/30 20:30,91.81361761 +2023/9/30 21:00,96.018731 +2023/9/30 21:30,94.30778764 +2023/9/30 22:00,93.9208318 +2023/9/30 22:30,94.79673956 +2023/9/30 23:00,94.34804313 +2023/9/30 23:30,92.37517591 +2023/10/1 0:00,95.70438268 +2023/10/1 0:30,96.84652701 +2023/10/1 1:00,95.46339263 +2023/10/1 1:30,86.95606544 +2023/10/1 2:00,95.37366208 +2023/10/1 2:30,92.94608604 +2023/10/1 3:00,95.23062835 +2023/10/1 3:30,82.52083522 +2023/10/1 4:00,85.42612711 +2023/10/1 4:30,89.83988015 +2023/10/1 5:00,94.67710616 +2023/10/1 5:30,91.29952203 +2023/10/1 6:00,102.090648 +2023/10/1 6:30,95.77602153 +2023/10/1 7:00,98.64218131 +2023/10/1 7:30,95.31672751 +2023/10/1 8:00,91.89298041 +2023/10/1 8:30,77.773542 +2023/10/1 9:00,57.42606877 +2023/10/1 9:30,39.65240753 +2023/10/1 10:00,31.00995924 +2023/10/1 10:30,30.52157284 +2023/10/1 11:00,34.9241971 +2023/10/1 11:30,43.68458602 +2023/10/1 12:00,54.07301405 +2023/10/1 12:30,91.18097214 +2023/10/1 13:00,93.86937133 +2023/10/1 13:30,77.32259339 +2023/10/1 14:00,46.26674547 +2023/10/1 14:30,61.20350656 +2023/10/1 15:00,87.89014557 +2023/10/1 15:30,89.07212849 +2023/10/1 16:00,86.87276862 +2023/10/1 16:30,78.81546612 +2023/10/1 17:00,91.06549239 +2023/10/1 17:30,91.92351234 +2023/10/1 18:00,92.08125757 +2023/10/1 18:30,90.05054879 +2023/10/1 19:00,95.58843697 +2023/10/1 19:30,92.35687372 +2023/10/1 20:00,92.05876316 +2023/10/1 20:30,95.63032509 +2023/10/1 21:00,91.56096727 +2023/10/1 21:30,99.4117834 +2023/10/1 22:00,93.65299357 +2023/10/1 22:30,97.42313518 +2023/10/1 23:00,97.25786483 +2023/10/1 23:30,104.6156361 +2023/10/2 0:00,94.39114701 +2023/10/2 0:30,90.12056321 +2023/10/2 1:00,92.93092297 +2023/10/2 1:30,101.9197079 +2023/10/2 2:00,101.9169242 +2023/10/2 2:30,84.00276319 +2023/10/2 3:00,94.31853809 +2023/10/2 3:30,89.62150861 +2023/10/2 4:00,94.67171464 +2023/10/2 4:30,83.96806504 +2023/10/2 5:00,90.02052664 +2023/10/2 5:30,96.71888253 +2023/10/2 6:00,98.95693262 +2023/10/2 6:30,97.50135485 +2023/10/2 7:00,101.6070994 +2023/10/2 7:30,98.08488622 +2023/10/2 8:00,93.91792471 +2023/10/2 8:30,74.8618313 +2023/10/2 9:00,50.4885369 +2023/10/2 9:30,42.50818675 +2023/10/2 10:00,30.06486806 +2023/10/2 10:30,29.35970871 +2023/10/2 11:00,32.24892543 +2023/10/2 11:30,47.64723602 +2023/10/2 12:00,82.42684763 +2023/10/2 12:30,91.18162378 +2023/10/2 13:00,92.30107449 +2023/10/2 13:30,59.57147985 +2023/10/2 14:00,40.55175279 +2023/10/2 14:30,52.46514705 +2023/10/2 15:00,49.8132542 +2023/10/2 15:30,67.5671994 +2023/10/2 16:00,89.23048239 +2023/10/2 16:30,84.51244604 +2023/10/2 17:00,87.79178426 +2023/10/2 17:30,85.41612538 +2023/10/2 18:00,93.63838241 +2023/10/2 18:30,90.34100796 +2023/10/2 19:00,91.7891082 +2023/10/2 19:30,91.74926772 +2023/10/2 20:00,91.04644489 +2023/10/2 20:30,85.25703171 +2023/10/2 21:00,91.16563132 +2023/10/2 21:30,92.76209434 +2023/10/2 22:00,87.93458082 +2023/10/2 22:30,96.44126019 +2023/10/2 23:00,95.64079052 +2023/10/2 23:30,95.06116763 +2023/10/3 0:00,94.00332783 +2023/10/3 0:30,90.09422673 +2023/10/3 1:00,94.80075999 +2023/10/3 1:30,92.81881216 +2023/10/3 2:00,83.9436516 +2023/10/3 2:30,91.43421331 +2023/10/3 3:00,84.74746566 +2023/10/3 3:30,86.14291449 +2023/10/3 4:00,93.12777753 +2023/10/3 4:30,90.00601715 +2023/10/3 5:00,95.53480493 +2023/10/3 5:30,97.05813577 +2023/10/3 6:00,91.91240039 +2023/10/3 6:30,97.83575656 +2023/10/3 7:00,99.1732245 +2023/10/3 7:30,97.2944553 +2023/10/3 8:00,95.69641327 +2023/10/3 8:30,87.22601678 +2023/10/3 9:00,64.67405643 +2023/10/3 9:30,40.52169265 +2023/10/3 10:00,40.28903489 +2023/10/3 10:30,36.94982832 +2023/10/3 11:00,33.5733054 +2023/10/3 11:30,29.44687455 +2023/10/3 12:00,28.09541434 +2023/10/3 12:30,33.86948488 +2023/10/3 13:00,85.15431574 +2023/10/3 13:30,90.56479621 +2023/10/3 14:00,76.68642375 +2023/10/3 14:30,54.08248973 +2023/10/3 15:00,41.34094955 +2023/10/3 15:30,48.05893742 +2023/10/3 16:00,50.84836666 +2023/10/3 16:30,47.63965508 +2023/10/3 17:00,92.15038005 +2023/10/3 17:30,92.92050098 +2023/10/3 18:00,89.98178002 +2023/10/3 18:30,89.81553177 +2023/10/3 19:00,86.92104105 +2023/10/3 19:30,92.41639347 +2023/10/3 20:00,92.15764426 +2023/10/3 20:30,92.7320025 +2023/10/3 21:00,91.22235923 +2023/10/3 21:30,93.57193356 +2023/10/3 22:00,93.62447533 +2023/10/3 22:30,94.63321979 +2023/10/3 23:00,95.66595037 +2023/10/3 23:30,93.11224726 +2023/10/4 0:00,101.996437 +2023/10/4 0:30,97.77955968 +2023/10/4 1:00,93.65821611 +2023/10/4 1:30,95.05513595 +2023/10/4 2:00,89.92516772 +2023/10/4 2:30,90.13285201 +2023/10/4 3:00,91.85790079 +2023/10/4 3:30,87.669047 +2023/10/4 4:00,96.12084316 +2023/10/4 4:30,83.423702 +2023/10/4 5:00,97.13000625 +2023/10/4 5:30,88.87644797 +2023/10/4 6:00,93.93141953 +2023/10/4 6:30,97.02007663 +2023/10/4 7:00,99.63088785 +2023/10/4 7:30,98.93668812 +2023/10/4 8:00,96.43422639 +2023/10/4 8:30,87.9997234 +2023/10/4 9:00,93.18056607 +2023/10/4 9:30,77.52445733 +2023/10/4 10:00,75.70321431 +2023/10/4 10:30,76.8782646 +2023/10/4 11:00,66.75946515 +2023/10/4 11:30,79.75933337 +2023/10/4 12:00,89.18601603 +2023/10/4 12:30,75.52097936 +2023/10/4 13:00,89.79353556 +2023/10/4 13:30,93.46213184 +2023/10/4 14:00,88.68606835 +2023/10/4 14:30,74.81843723 +2023/10/4 15:00,55.34354425 +2023/10/4 15:30,47.85085416 +2023/10/4 16:00,73.39265747 +2023/10/4 16:30,93.42329041 +2023/10/4 17:00,91.35007853 +2023/10/4 17:30,83.43511165 +2023/10/4 18:00,90.20029617 +2023/10/4 18:30,89.85785297 +2023/10/4 19:00,88.84569855 +2023/10/4 19:30,91.84693769 +2023/10/4 20:00,88.11576459 +2023/10/4 20:30,89.58100636 +2023/10/4 21:00,89.07447198 +2023/10/4 21:30,92.05620697 +2023/10/4 22:00,96.35190062 +2023/10/4 22:30,94.28262157 +2023/10/4 23:00,97.62504458 +2023/10/4 23:30,87.4979202 +2023/10/5 0:00,96.10473162 +2023/10/5 0:30,95.12614858 +2023/10/5 1:00,94.15989489 +2023/10/5 1:30,93.53650596 +2023/10/5 2:00,89.73188241 +2023/10/5 2:30,96.79797064 +2023/10/5 3:00,81.14490883 +2023/10/5 3:30,87.11916904 +2023/10/5 4:00,87.13324286 +2023/10/5 4:30,89.29418554 +2023/10/5 5:00,94.54657489 +2023/10/5 5:30,89.06289171 +2023/10/5 6:00,93.17376035 +2023/10/5 6:30,94.62712561 +2023/10/5 7:00,100.9056615 +2023/10/5 7:30,95.93582439 +2023/10/5 8:00,95.26957468 +2023/10/5 8:30,93.6940014 +2023/10/5 9:00,90.8886047 +2023/10/5 9:30,91.58053161 +2023/10/5 10:00,81.0851534 +2023/10/5 10:30,74.10790544 +2023/10/5 11:00,63.70608578 +2023/10/5 11:30,85.34254554 +2023/10/5 12:00,92.78352155 +2023/10/5 12:30,95.7586794 +2023/10/5 13:00,91.36531497 +2023/10/5 13:30,93.75065896 +2023/10/5 14:00,87.37894275 +2023/10/5 14:30,87.00492742 +2023/10/5 15:00,86.54020511 +2023/10/5 15:30,87.7937062 +2023/10/5 16:00,90.18618263 +2023/10/5 16:30,90.07498892 +2023/10/5 17:00,90.57314908 +2023/10/5 17:30,90.79560141 +2023/10/5 18:00,92.96035215 +2023/10/5 18:30,91.92219397 +2023/10/5 19:00,92.85895588 +2023/10/5 19:30,93.15673292 +2023/10/5 20:00,92.41340737 +2023/10/5 20:30,91.85979586 +2023/10/5 21:00,91.42995914 +2023/10/5 21:30,91.84401797 +2023/10/5 22:00,96.24300916 +2023/10/5 22:30,93.21448626 +2023/10/5 23:00,94.42493656 +2023/10/5 23:30,98.84922312 +2023/10/6 0:00,97.47127994