# 論文 [Reinforcement Learning-based Placement of Charging Stations in Urban Road Networks](https://dl.acm.org/doi/abs/10.1145/3534678.3539154) 筆記 ## Abstract & Introduction 如何理想地設置充電站需要決定兩個性質: 1. 各充電站的所需產能 (capacity) 2. 各充電站的設置位置 而這樣的決策需要考慮到兩個問題: 1. 許多因素會影響到決策結果如:路網拓樸 (road network topology)、既有的充電設施、交通模式、與充電時間。 2. 充電的需求通常遍布整個路網,因此許多地區性的最佳化設置方法 (僅考慮獨立的匯集點 (junctions) 或停車場) 並不適用。 既有的貪婪 (greedy) 充電站部署演算法並不能夠滿足真實世界的需求。它們往往會淪於將充電站集中鬧區,這將會增加駕駛前往充電站時的所需時間。 我們提出了一個新的公式來衡量充電站的部署效益,這將將基本的充電供應與對駕駛的方便性一同列入考量。我們還引入的一個新的考量要素——居家充電,這項因素在先前一直被忽略,但卻將降低公共充電設施的負擔。 更進一步地,我們將整個最佳化充電站部署轉為一個基於 DQN (Deep Q Network algorithm) 的強化學習問題 PCRL (the Placement of Charging stations task as a Reinforcement Learning problem)。我們使用了四個真實世界的資料集實驗以展示我們的系統性地自動部署充電站方法是可行且略勝於既有的許多充電站部署策略。而在最後,我們將會來討論應用此方法前所需的前置作業。 ## [Source Code](https://github.com/ashusao/pcrl) ### 執行所需要的環境/程式語言 * 測試作業系統:WSL on Windows11 * 並未找到作者說明其所使用之作業系統 * 實測直接使用 Windows 進行測試安裝會有相容性問題 * 測試環境: * python 3.8.10 * 直接以 ```bash $ git clone https://github.com/ashusao/PCRL.git $ cd PCRL $ pip install -r final_requirements.txt ``` 安裝依賴項。 ### 跑完一遍要多久時間 不到一小時。 ### 跑出來的結果有沒有跟論文內所附的相符 沒有。 因為未附與論文相同之資料集,無法重現結果。相反地,原始碼中僅有一範例資料 (Toy_Example) 用以驗證訓練與使用功能正常。 #### Preprocessing 分兩段程式碼: 1. `load_graph.py` 2. `nodes_preparation.py` 其中僅 `load_graph.py` 能夠以範例資料運行。目前看來 `nodes_preparation.py` 依據程式碼,除了要將 `Graph/Toy_Example` 所含移至 `Graph` 底下,再將 `demand_Toy_Example.pkl` 和 `grid_density_Toy_Example.pkl` 移至 `Graph/Pickle` 底下以外,尚缺少: 1. `Graph/Pickle/privCS_Toy_Example.pkl` 2. `Graph/Pickle/estateprice_Toy_Example.pkl` 以使正常運行。 不過這並不影響下一階段的運行,README 表示這個範例資料已經預處理 (preprocessed) 過了。 #### Training & Evaluation 這邊要用到專案目錄下的幾個程式: * `env_plus.py` 實測未有輸出,為變數設置用。 * `reinforcement.py` 原程式碼並未先行創建資料夾,因此需要 ```bash $ mkdir tmp_Toy_Example ``` 並且 ```bash $ touch tmp_Toy_Example/.monitor.csv ``` 實測 `tmp_Toy_Example/.monitor.csv` 並未含任何輸出,但沒有創建程式就無法執行,應為 bug。 此程式為訓練模型,耗時約半小時左右。 * `model_eval.py` 原程式碼並未先行創建資料夾,因此需要 ```bash $ mkdir -p Results/Toy_Example ``` 此程式將會使模型生成一個「部署計畫 (Charging Plans)」。 * `test_solution.py` 使用部署計畫進行以 `evaluation_framework.py` 內所描述之模型實際評估測試,測試輸出為: ``` Number of already existing charging stations: 2 The score is 100.0 Benefit: 100.0 Waiting time: 100.0, Travel time: 100.0, Charging time: 100.0 19.529337531796813 0.007598250608151897 Used budget: 0.0 Reinforcement Learning Number of charging stations: 10 The score is 491.92176870748267 Benefit: 282.89682539682525 Waiting time: 100.0, Travel time: 100.0, Charging time: 100.0 19.529337531796813 0.007598250608151897 Used budget: 29.360000000000003 ``` * `Visualisierung/visualise.py` 原程式碼並未先行創建資料夾,因此需要 ```bash $ mkdir -p Images/Result_Plots/Toy_Example ``` 再 ```bash $ cd Visualisierung $ python3 visualise.py ``` 測試所生圖片為: ![](https://hackmd.io/_uploads/S1bXAPdyp.png) 可以見得與原文相比,簡化許多。