Browse Source

拆分模型训练/调用文件夹

junc_WHU 1 tháng trước cách đây
mục cha
commit
1680beca39
42 tập tin đã thay đổi với 84 bổ sung87 xóa
  1. 0 0
      models/uf-rl/data_to_rl/__init__.py
  2. 0 0
      models/uf-rl/data_to_rl/data_splitter.py
  3. 0 0
      models/uf-rl/data_to_rl/get_reset_pool.py
  4. 0 0
      models/uf-rl/data_to_rl/loader.py
  5. 1 1
      models/uf-rl/data_to_rl/run_data_to_rl_pipeline.py
  6. 0 0
      models/uf-rl/data_to_rl/state_construction.py
  7. 0 0
      models/uf-rl/data_to_rl/state_space_bounds.py
  8. 0 0
      models/uf-rl/env/__init__.py
  9. 2 3
      models/uf-rl/env/env_config_loader.py
  10. 0 0
      models/uf-rl/env/env_params.py
  11. 10 5
      models/uf-rl/env/env_reset.py
  12. 0 0
      models/uf-rl/env/env_visual.py
  13. 0 0
      models/uf-rl/env/reset_plot.py
  14. 0 0
      models/uf-rl/env/resistance_model_bw.pth
  15. 0 0
      models/uf-rl/env/resistance_model_fp.pth
  16. 3 5
      models/uf-rl/env/uf_env.py
  17. 1 1
      models/uf-rl/env/uf_physics.py
  18. 1 1
      models/uf-rl/env/uf_resistance_models_define.py
  19. 1 2
      models/uf-rl/env/uf_resistance_models_load.py
  20. BIN
      models/uf-rl/longting/48h_dqn_model.zip
  21. 18 18
      models/uf-rl/longting/env_config.yaml
  22. 2 2
      models/uf-rl/longting/uf_analyze_config.yaml
  23. 0 0
      models/uf-rl/rl_model/DQN/README.md
  24. 0 0
      models/uf-rl/rl_model/DQN/UF_RL_架构问题与优化方案.md
  25. 0 0
      models/uf-rl/rl_model/DQN/UF_RL_训练与预测流程详解.md
  26. 0 0
      models/uf-rl/rl_model/DQN/UF_RL_详细技术文档.md
  27. 0 0
      models/uf-rl/rl_model/DQN/__init__.py
  28. 0 0
      models/uf-rl/rl_model/DQN/dqn_model/__init__.py
  29. 2 3
      models/uf-rl/rl_model/DQN/dqn_model/dqn_config_loader.py
  30. 0 0
      models/uf-rl/rl_model/DQN/dqn_model/dqn_params.py
  31. 4 9
      models/uf-rl/rl_model/DQN/dqn_model/dqn_statebuilder.py
  32. 0 0
      models/uf-rl/rl_model/DQN/test_online_datasets/UF1_init_cycle.csv
  33. 0 0
      models/uf-rl/rl_model/DQN/test_online_datasets/UF1_prev_cycle.csv
  34. 0 0
      models/uf-rl/rl_model/DQN/uf_decide/__init__.py
  35. 3 6
      models/uf-rl/rl_model/DQN/uf_decide/dqn_decider.py
  36. 5 6
      models/uf-rl/rl_model/DQN/uf_decide/run_dqn_decide.py
  37. 5 6
      models/uf-rl/rl_model/DQN/uf_decide/run_dqn_deicde_totalstate.py
  38. 0 0
      models/uf-rl/rl_model/DQN/uf_train/__init__.py
  39. 0 0
      models/uf-rl/rl_model/DQN/uf_train/dqn_trainer.py
  40. 14 17
      models/uf-rl/rl_model/DQN/uf_train/run_dqn_train.py
  41. 0 0
      models/uf-rl/rl_model/__init__.py
  42. 12 2
      models/uf-rl/uf_data_process/label.py

+ 0 - 0
models/uf-rl/uf_train/__init__.py → models/uf-rl/data_to_rl/__init__.py


+ 0 - 0
models/uf-rl/uf_train/data_to_rl/data_splitter.py → models/uf-rl/data_to_rl/data_splitter.py


+ 0 - 0
models/uf-rl/uf_train/data_to_rl/get_reset_pool.py → models/uf-rl/data_to_rl/get_reset_pool.py


+ 0 - 0
models/uf-rl/uf_train/data_to_rl/loader.py → models/uf-rl/data_to_rl/loader.py


+ 1 - 1
models/uf-rl/uf_train/data_to_rl/run_data_to_rl_pipeline.py → models/uf-rl/data_to_rl/run_data_to_rl_pipeline.py

@@ -24,7 +24,7 @@ from state_space_bounds import extract_state_space_bounds
 from get_reset_pool import generate_reset_state_pool
 
 THIS_FILE = Path(__file__).resolve()
-UF_RL_ROOT = THIS_FILE.parents[2]
+UF_RL_ROOT = THIS_FILE.parents[1]
 
 def main():
     # --------------------------------------------------------

+ 0 - 0
models/uf-rl/uf_train/data_to_rl/state_construction.py → models/uf-rl/data_to_rl/state_construction.py


+ 0 - 0
models/uf-rl/uf_train/data_to_rl/state_space_bounds.py → models/uf-rl/data_to_rl/state_space_bounds.py


+ 0 - 0
models/uf-rl/uf_train/data_to_rl/__init__.py → models/uf-rl/env/__init__.py


+ 2 - 3
models/uf-rl/uf_train/env/env_config_loader.py → models/uf-rl/env/env_config_loader.py

@@ -6,10 +6,10 @@ env_config_loader.py
 
 import yaml
 from pathlib import Path
-from typing import Dict, Any, Union, Optional, Type, TypeVar
+from typing import Dict, Any, Union, Type, TypeVar
 
 # 改为绝对导入
-from uf_train.env.env_params import (
+from env.env_params import (
     UFState,
     UFPhysicsParams,
     UFActionSpec,
@@ -210,7 +210,6 @@ def create_env_params_from_yaml(config_path: Union[str, Path]) -> tuple:
 # ========== 测试 ==========
 if __name__ == "__main__":
     # 测试配置加载
-    import sys
     from pathlib import Path
 
     # 假设配置文件在当前目录的上一级config文件夹中

+ 0 - 0
models/uf-rl/uf_train/env/env_params.py → models/uf-rl/env/env_params.py


+ 10 - 5
models/uf-rl/uf_train/env/env_reset.py → models/uf-rl/env/env_reset.py

@@ -169,13 +169,18 @@ class ResetSampler:
         # -------------------------
         # 阶段权重设计(非线性 + 提高虚拟工况)
         # -------------------------
-        w_real = (1.0 - progress) ** 1.2  # 历史工况逐渐衰减
-        w_perturb = 0.5 * progress  # 周边扰动按线性增加
-        w_virtual = 0.3 * progress ** 1.5  # 虚拟工况加快增长,后期最大约 0.3
+        # w_real = (1.0 - progress) ** 1.2  # 历史工况逐渐衰减
+        # w_perturb = 0.5 * progress  # 周边扰动按线性增加
+        # w_virtual = 0.3 * progress ** 1.5  # 虚拟工况加快增长,后期最大约 0.3
+        #
+        # # perturb 扰动幅度
+        # perturb_scale = 0.02 + 0.04 * progress
+        w_real = 0.0
+        w_perturb = 0.0
+        w_virtual = 1.0
 
         # perturb 扰动幅度
-        perturb_scale = 0.02 + 0.04 * progress
-
+        perturb_scale = 0.0
         return dict(
             w_real=w_real,
             w_perturb=w_perturb,

+ 0 - 0
models/uf-rl/uf_train/env/env_visual.py → models/uf-rl/env/env_visual.py


+ 0 - 0
models/uf-rl/uf_train/env/reset_plot.py → models/uf-rl/env/reset_plot.py


+ 0 - 0
models/uf-rl/uf_train/env/resistance_model_bw.pth → models/uf-rl/env/resistance_model_bw.pth


+ 0 - 0
models/uf-rl/uf_train/env/resistance_model_fp.pth → models/uf-rl/env/resistance_model_fp.pth


+ 3 - 5
models/uf-rl/uf_train/env/uf_env.py → models/uf-rl/env/uf_env.py

@@ -15,14 +15,12 @@
 - 强化学习智能体通过优化过滤时长和反洗时长来最大化回收率并控制污染累积
 """
 
-import os
-import torch
 import numpy as np
 import gymnasium as gym
 from gymnasium import spaces
-from uf_train.env.env_params import UFState, UFPhysicsParams, UFStateBounds, UFRewardParams, UFActionSpec
-from uf_train.env.uf_physics import UFPhysicsModel
-from uf_train.env.env_reset import ResetSampler
+from env.env_params import UFState, UFStateBounds, UFRewardParams, UFActionSpec
+from env.uf_physics import UFPhysicsModel
+from env.env_reset import ResetSampler
 import copy
 
 

+ 1 - 1
models/uf-rl/uf_train/env/uf_physics.py → models/uf-rl/env/uf_physics.py

@@ -22,7 +22,7 @@ uf_physics_48h.py
 
 import numpy as np
 import copy
-from uf_train.env.env_params import UFState, UFPhysicsParams
+from env.env_params import UFState, UFPhysicsParams
 
 
 class UFPhysicsModel:

+ 1 - 1
models/uf-rl/uf_train/env/uf_resistance_models_define.py → models/uf-rl/env/uf_resistance_models_define.py

@@ -10,7 +10,7 @@
 
 import torch
 import numpy as np
-from uf_train.env.env_params import UFState, UFPhysicsParams
+from env.env_params import UFState, UFPhysicsParams
 
 
 # ==================== 膜阻力上升模型 ====================

+ 1 - 2
models/uf-rl/uf_train/env/uf_resistance_models_load.py → models/uf-rl/env/uf_resistance_models_load.py

@@ -1,7 +1,6 @@
-import os
 import torch
 from pathlib import Path
-from uf_train.env.uf_resistance_models_define import ResistanceDecreaseModel, ResistanceIncreaseModel
+from env.uf_resistance_models_define import ResistanceDecreaseModel, ResistanceIncreaseModel
 
 
 # ==================== 膜阻力模型加载函数 ====================

BIN
models/uf-rl/longting/48h_dqn_model.zip


+ 18 - 18
models/uf-rl/longting/env_config.yaml

@@ -1,15 +1,15 @@
 UFState:
   # ===== 膜动态运行参数 =====
-  q_UF: 360.0
-  TMP: 0.03
-  temp: 25.0
+  q_UF: 150.0
+  TMP: 0.02
+  temp: 20.0
   R: 200.0
 
   # ===== 膜阻力模型参数 =====
   nuK: 170.0
   slope: 2.0
-  power: 1.032
-  ceb_removal: 100.0
+  power: 1.1
+  ceb_removal: 200.0
 
 
 UFPhysicsParams:
@@ -93,9 +93,9 @@ UFRewardParams:
 
   # ===== 回收率 =====
   k_rec: 5.0
-  rec_low: 0.92
-  rec_high: 0.99
-  w_rec: 1.0
+  rec_low: 0.85
+  rec_high: 0.95
+  w_rec: 2.0
 
   # ===== 残余污染 =====
   k_res: 10.0
@@ -104,9 +104,9 @@ UFRewardParams:
 
   # ===== 吨水电耗 =====
   k_energy: 5.0
-  energy_low: 0.0993
-  energy_high: 0.1034
-  energy_ref: 0.1011
+  energy_low: 0.1023
+  energy_high: 0.1066
+  energy_ref: 0.1044
   w_energy: 1.0
 
 
@@ -121,19 +121,19 @@ UFStateBounds:
 
   # ===== TMP 初始化约束 =====
   TMP0_min: 0.01
-  TMP0_max: 0.045
+  TMP0_max: 0.04
   global_TMP_hard_limit: 0.08
 
   # ===== 短期污染参数 =====
-  nuK_min: 40.0
-  nuK_max: 260.0
+  nuK_min: 100.0
+  nuK_max: 250.0
 
   # ===== 长期污染参数 =====
   slope_min: 1.28
   slope_max: 150
-  power_min: 0.18
-  power_max: 2.2
+  power_min: 0.25
+  power_max: 2.5
 
   # ===== CEB 去除能力 =====
-  ceb_removal_min: 40.0
-  ceb_removal_max: 250.0
+  ceb_removal_min: 150.0
+  ceb_removal_max: 300.0

+ 2 - 2
models/uf-rl/longting/uf_analyze_config.yaml

@@ -2,10 +2,10 @@ UF:
   units: [ "1", "2" ]
   area_m2: 128 * 40
 
-  inlet_codes: [215.0, 260.0]
+  inlet_codes: [215.0, 301.0]
   stable_codes: [220.0, 260.0]
 
-  physical_bw_code: [300.0, 340.0]
+  physical_bw_code: [301.0, 340.0]
   chemical_bw_code: [400.0, 660.0]
 
   # 列名

+ 0 - 0
models/uf-rl/uf_train/README.md → models/uf-rl/rl_model/DQN/README.md


+ 0 - 0
models/uf-rl/uf_train/UF_RL_架构问题与优化方案.md → models/uf-rl/rl_model/DQN/UF_RL_架构问题与优化方案.md


+ 0 - 0
models/uf-rl/uf_train/UF_RL_训练与预测流程详解.md → models/uf-rl/rl_model/DQN/UF_RL_训练与预测流程详解.md


+ 0 - 0
models/uf-rl/uf_train/UF_RL_详细技术文档.md → models/uf-rl/rl_model/DQN/UF_RL_详细技术文档.md


+ 0 - 0
models/uf-rl/uf_train/env/__init__.py → models/uf-rl/rl_model/DQN/__init__.py


+ 0 - 0
models/uf-rl/uf_train/rl_model/DQN/__init__.py → models/uf-rl/rl_model/DQN/dqn_model/__init__.py


+ 2 - 3
models/uf-rl/uf_train/rl_model/DQN/dqn_config_loader.py → models/uf-rl/rl_model/DQN/dqn_model/dqn_config_loader.py

@@ -7,8 +7,8 @@ DQN 配置加载器,负责从YAML文件加载DQN超参数。
 
 import yaml
 from pathlib import Path
-from typing import Dict, Any, Union, Optional
-from uf_train.rl_model.DQN.dqn_params import DQNParams
+from typing import Dict, Any, Union
+from rl_model.DQN.dqn_model.dqn_params import DQNParams
 
 
 
@@ -150,7 +150,6 @@ def load_dqn_config_with_validation(config_path: Union[str, Path]) -> DQNParams:
 # ========== 测试代码 ==========
 if __name__ == "__main__":
     # 测试配置加载
-    import sys
     from pathlib import Path
 
     # 假设配置文件在项目根目录的config文件夹中

+ 0 - 0
models/uf-rl/uf_train/rl_model/DQN/dqn_params.py → models/uf-rl/rl_model/DQN/dqn_model/dqn_params.py


+ 4 - 9
models/uf-rl/uf_train/rl_model/DQN/dqn_statebuilder.py → models/uf-rl/rl_model/DQN/dqn_model/dqn_statebuilder.py

@@ -1,22 +1,17 @@
-import re
-from pathlib import Path
-from typing import Dict, Any
-import yaml
-import numpy as np
+from typing import Dict
 import pandas as pd
-from oauthlib.uri_validate import segment
 
 # -------------------------------
 # 引入环境状态模板(最终输出)
 # -------------------------------
-from uf_train.env.env_params import UFState
+from env.env_params import UFState
 
 # -------------------------------
 # 引入分析类
 # -------------------------------
 from uf_data_process.load import UFConfigLoader
-from uf_data_process.label import UFEventClassifier, PostBackwashInletMarker
-from uf_data_process.filter import ConstantFlowFilter, EventQualityFilter, InletSegmentFilter
+from uf_data_process.label import UFEventClassifier
+from uf_data_process.filter import EventQualityFilter, InletSegmentFilter
 from uf_data_process.calculate import UFResistanceCalculator, UFResistanceAnalyzer
 from uf_data_process.fit import ShortTermCycleFoulingFitter, LongTermFoulingFitter
 

+ 0 - 0
models/uf-rl/uf_train/rl_model/DQN/online_datasets/UF1_init_cycle.csv → models/uf-rl/rl_model/DQN/test_online_datasets/UF1_init_cycle.csv


+ 0 - 0
models/uf-rl/uf_train/rl_model/DQN/online_datasets/UF1_prev_cycle.csv → models/uf-rl/rl_model/DQN/test_online_datasets/UF1_prev_cycle.csv


+ 0 - 0
models/uf-rl/uf_train/rl_model/__init__.py → models/uf-rl/rl_model/DQN/uf_decide/__init__.py


+ 3 - 6
models/uf-rl/uf_train/rl_model/DQN/dqn_decider.py → models/uf-rl/rl_model/DQN/uf_decide/dqn_decider.py

@@ -19,11 +19,8 @@ import numpy as np
 # ============================================================
 # 1. UF 环境与物理模型
 # ============================================================
-from uf_train.env.uf_env import UFSuperCycleEnv
-from uf_train.env.uf_physics import UFPhysicsModel
-from uf_train.env.uf_resistance_models_load import load_resistance_models
-from uf_train.env.env_params import (
-    UFPhysicsParams,
+from env.uf_env import UFSuperCycleEnv
+from env.env_params import (
     UFRewardParams,
     UFActionSpec,
     UFStateBounds,
@@ -142,7 +139,7 @@ class UFDQNDecider:
 # ============================================================
 if __name__ == "__main__":
 
-    from uf_train.data_to_rl.data_splitter import ResetStatePoolLoader
+    from data_to_rl import ResetStatePoolLoader
 
     # --------------------------------------------------------
     # 模型路径(来自 Trainer.save())

+ 5 - 6
models/uf-rl/uf_train/rl_model/DQN/run_dqn_decide.py → models/uf-rl/rl_model/DQN/uf_decide/run_dqn_decide.py

@@ -13,7 +13,6 @@ UF 超滤 DQN 决策主入口(Inference / Online Assist)
 """
 
 from pathlib import Path
-import numpy as np
 
 # ============================================================
 # 1. 导入模块
@@ -23,13 +22,13 @@ CURRENT_DIR = Path(__file__).resolve().parent
 PROJECT_ROOT = CURRENT_DIR.parents[2]     # uf_train  # uf-rl
 
 # ========== 参数 / 物理 ==========
-from uf_train.env.uf_resistance_models_load import load_resistance_models
-from uf_train.env.uf_physics import UFPhysicsModel
-from uf_train.env.env_params import UFState, UFPhysicsParams, UFStateBounds, UFRewardParams, UFActionSpec
-from uf_train.env.env_config_loader import EnvConfigLoader, create_env_params_from_yaml
+from env.uf_resistance_models_load import load_resistance_models
+from env.uf_physics import UFPhysicsModel
+from env.env_params import UFState, UFActionSpec
+from env.env_config_loader import EnvConfigLoader, create_env_params_from_yaml
 
 # ========== 决策器 ==========
-from uf_train.rl_model.DQN.dqn_decider import UFDQNDecider
+from rl_model.DQN.uf_decide.dqn_decider import UFDQNDecider
 
 
 def build_physics(IS_TIMES, phys_params):

+ 5 - 6
models/uf-rl/uf_train/rl_model/DQN/run_dqn_deicde_totalstate.py → models/uf-rl/rl_model/DQN/uf_decide/run_dqn_deicde_totalstate.py

@@ -17,18 +17,17 @@ run_dqn_decide_totalstate.py
 """
 
 from pathlib import Path
-import numpy as np
 
 # ========== 参数 / 物理 ==========
-from uf_train.env.uf_resistance_models_load import load_resistance_models
-from uf_train.env.uf_physics import UFPhysicsModel
-from uf_train.env.env_params import UFState, UFPhysicsParams, UFStateBounds, UFRewardParams, UFActionSpec
+from env.uf_resistance_models_load import load_resistance_models
+from env.uf_physics import UFPhysicsModel
+from env.env_params import UFState, UFPhysicsParams, UFActionSpec
 
 
 # ========== 决策器 ==========
-from uf_train.rl_model.DQN.dqn_decider import UFDQNDecider
+from rl_model.DQN.uf_decide.dqn_decider import UFDQNDecider
 # ========== 决策状态构建器 ==========
-from uf_train.rl_model.DQN.dqn_statebuilder import DQNStateBuilder
+from rl_model.DQN.dqn_model.dqn_statebuilder import DQNStateBuilder
 
 
 

+ 0 - 0
models/uf-rl/rl_model/DQN/uf_train/__init__.py


+ 0 - 0
models/uf-rl/uf_train/rl_model/DQN/dqn_trainer.py → models/uf-rl/rl_model/DQN/uf_train/dqn_trainer.py


+ 14 - 17
models/uf-rl/uf_train/rl_model/DQN/run_dqn_train.py → models/uf-rl/rl_model/DQN/uf_train/run_dqn_train.py

@@ -2,8 +2,6 @@
 DQN 超滤强化学习训练与测试主脚本(工程化优化版)
 """
 
-import os
-import sys
 import random
 from pathlib import Path
 import numpy as np
@@ -14,26 +12,25 @@ import torch
 # ============================================================
 CURRENT_DIR = Path(__file__).resolve().parent
 
-PROJECT_ROOT = CURRENT_DIR.parents[2]     # uf_train  # uf-rl
+PROJECT_ROOT = CURRENT_DIR.parents[2]      # uf-rl
 
 
 # ---------- 数据 ----------
-from uf_train.data_to_rl.data_splitter import ResetStatePoolLoader
+from data_to_rl.data_splitter import ResetStatePoolLoader
 
 # ---------- 阻力模型 ----------
-from uf_train.env.uf_resistance_models_load import load_resistance_models
-from uf_train.env.uf_physics import UFPhysicsModel
+from env.uf_resistance_models_load import load_resistance_models
+from env.uf_physics import UFPhysicsModel
 
 # ---------- 强化学习环境 ----------
-from uf_train.env.env_params import (UFState,UFPhysicsParams,UFActionSpec,UFRewardParams,UFStateBounds)
-from uf_train.env.env_config_loader import EnvConfigLoader, create_env_params_from_yaml
-from uf_train.env.uf_env import UFSuperCycleEnv
+from env.env_params import (UFActionSpec, UFRewardParams, UFStateBounds)
+from env.env_config_loader import EnvConfigLoader, create_env_params_from_yaml
+from env.uf_env import UFSuperCycleEnv
 
-from uf_train.env.env_visual import UFEpisodeRecorder, UFTrainingCallback
+from env.env_visual import UFEpisodeRecorder, UFTrainingCallback
 
-from uf_train.rl_model.DQN.dqn_params import DQNParams
-from uf_train.rl_model.DQN.dqn_config_loader import DQNConfigLoader, load_dqn_config_with_validation
-from uf_train.rl_model.DQN.dqn_trainer import DQNTrainer
+from rl_model.DQN.dqn_model.dqn_config_loader import DQNConfigLoader
+from rl_model.DQN.uf_train.dqn_trainer import DQNTrainer
 
 
 # ---------- SB3 ----------
@@ -290,14 +287,14 @@ if __name__ == "__main__":
     # ============================================================
     RANDOM_SEED = 2025
     TOTAL_TIMESTEPS = 300000
-    IS_TIMES = True
+    IS_TIMES = False
 
     RESET_STATE_CSV = (
             PROJECT_ROOT
-            / "datasets/UF_xishan_data/rl_ready/output/reset_state_pool.csv"
+            / "datasets/UF_longting_data/rl_ready/output/reset_state_pool.csv"
     )
 
-    ENV_CONFIG_PATH = PROJECT_ROOT / "xishan" / "env_config.yaml"
-    MODEL_CONFIG_PATH = PROJECT_ROOT / "xishan" / "dqn_config.yaml"
+    ENV_CONFIG_PATH = PROJECT_ROOT / "longting" / "env_config.yaml"
+    MODEL_CONFIG_PATH = PROJECT_ROOT / "longting" / "dqn_config.yaml"
 
     main()

+ 0 - 0
models/uf-rl/rl_model/__init__.py


+ 12 - 2
models/uf-rl/uf_data_process/label.py

@@ -22,14 +22,24 @@ class UFEventClassifier:
 
         return df
 
-    def segment(self, df):
+    def segment(self, df, inlet_types=None):
+        """
+        将连续的事件划分为段
+
+        Args:
+            df: 输入数据框
+            inlet_types: 被视为进水的事件类型列表,默认为 ["inlet", "other"]
+        """
+        if inlet_types is None:
+            inlet_types = ["inlet", "other"]  # 默认包括inlet和other
+
         df = df.copy()
         df["segment_id"] = np.nan
         seg_id = 0
         in_inlet = False
 
         for i, evt in enumerate(df["event_type"]):
-            if evt == "inlet":
+            if evt in inlet_types:  # 使用可配置的事件类型列表
                 if not in_inlet:
                     seg_id += 1
                     in_inlet = True