Bladeren bron

feat:增加了兰考和安镇的模型

junc_WHU 3 weken geleden
bovenliggende
commit
eb67737d9c

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


+ 221 - 0
models/uf-rl/anzhen/data_to_rl_config.yaml

@@ -0,0 +1,221 @@
+# ============================================================
+# 项目级路径配置
+# ============================================================
+
+Paths:
+  project_root: "E:/Greentech"
+  __comment__: >
+    项目根目录,所有路径均相对于该目录展开。
+    不同工程师只需修改这一项即可迁移环境。
+
+  raw_data:
+    filtered_cycles_dir: "models/uf-rl/datasets/UF_longting_data/processed/filter_segments"
+    cycle_file_pattern: "UF{unit}_filtered_cycles.csv"
+
+    enabled_units: [1, 2]
+    disabled_units: None
+
+    __comment__: >
+      已完成清洗与周期切分的真实工厂数据。
+      每个 CSV 对应一个机组,文件内每一行是一个【物理周期】。
+      data_to_rl 阶段会:
+        - 读取 enabled_units 中所有机组
+        - 合并为统一数据集
+        - 机组编号仅用于筛选,不进入状态空间
+
+  data_to_rl:
+    output_dir: "models/uf-rl/datasets/UF_longting_data/rl_ready/output"
+    cache_dir: "models/uf-rl/datasets/UF_longting_data/rl_ready/cache"
+
+    __comment__: >
+      data_to_rl 模块输出内容:
+        - 全机组合并后的状态空间范围
+        - reset 初始状态分布
+        - reward 统计量
+
+
+# ============================================================
+# 数据层级定义(非常重要)
+# ============================================================
+
+DataHierarchy:
+
+  physical_cycle:
+    id_column: "seg_id"
+    time_columns:
+      start: "start_time"
+      end: "end_time"
+    __comment__: >
+      物理周期是最细粒度的数据层级:
+      - 用于物理模型验证
+      - 用于环境内部子步模拟
+      - 不直接暴露给强化学习算法
+
+  chemical_cycle:
+    id_column: "chem_cycle_id"
+    validity_column: "chem_cycle_valid"
+    step_definition: "one_rl_step_per_chemical_cycle"
+    __comment__: >
+      化学周期是强化学习的【唯一 step 单位】。
+      强化学习中:
+        - 一个 step = 一个化学周期
+        - 一个状态 = 一个化学周期的整体状态
+
+# ============================================================
+# 强化学习状态定义(工程师重点关注)
+# ============================================================
+
+RLState:
+  level: chemical_cycle
+  dimension: 8
+  __comment__: >
+    强化学习 observation 的定义。
+    所有变量在一个 step(化学周期)内保持不变。
+
+  variables:
+
+    q_UF:
+      source: "flow_mean"
+      aggregation: "mean_within_cycle"
+      unit: "m3_per_h"
+      description: "化学周期代表性进水流量"
+      __comment__: >
+        原始数据在物理周期层级变化,
+        这里使用化学周期内的平均值作为状态。
+
+    temp:
+      source: "temp_mean"
+      aggregation: "mean_within_cycle"
+      unit: "celsius"
+      description: "化学周期代表性水温"
+
+    TMP:
+      source: "tmp_start"
+      selection: "first_physical_cycle"
+      unit: "MPa"
+      description: "化学周期起始跨膜压差"
+      __comment__: >
+        虽然 TMP 在物理周期内会变化,
+        但强化学习只关心化学周期开始时的状态。
+
+    R:
+      source: "R_scaled_start"
+      selection: "first_physical_cycle"
+      unit: "scaled_resistance"
+      description: "化学周期起始膜阻力"
+
+    nuK:
+      source: "cycle_nuK"
+      unit: "scaled"
+      description: "短期污染增长系数"
+      __comment__: >
+        在同一化学周期内视为常数,
+        后续 step (下一化学周期)中根据动作进行经验性更新。
+
+    slope:
+      source: "cycle_long_a"
+      unit: "scaled"
+      description: "长期不可逆污染幂律系数 a"
+
+    power:
+      source: "cycle_long_b"
+      unit: "dimensionless"
+      description: "长期不可逆污染幂律指数 b"
+
+    ceb_removal:
+      source: "cycle_R_removed"
+      unit: "scaled"
+      description: "CEB 可去除的膜阻力"
+
+# ============================================================
+# 状态空间范围提取(reset 使用)
+# ============================================================
+
+StateSpaceExtraction:
+  enabled: true
+  level: chemical_cycle
+  include_only_valid_cycles: true
+
+  __comment__: >
+    用真实工厂数据统计【合理状态空间范围】,
+    用于:
+      - reset 初始状态采样
+      - 状态边界 sanity check
+
+  statistics:
+    method: "empirical"
+    percentiles: [1, 5, 50, 95, 99]
+    __comment__: >
+      使用经验分布统计,避免假设正态分布。
+
+  output:
+    save_csv: true
+    filename: "state_space_bounds.csv"
+
+# ============================================================
+# 物理周期层级的用途声明
+# ============================================================
+
+PhysicalCycleUsage:
+  enabled: true
+
+  purposes:
+    - internal_simulation
+    - parameter_sanity_check
+    - post_training_validation
+
+  variables_available:
+    - R_scaled_start
+    - R_scaled_end
+    - tmp_start
+    - tmp_end
+    - flow_mean
+    - flow_std
+    - temp_mean
+    - temp_std
+
+  __comment__: >
+    物理周期数据:
+      ✔ 可用于环境内部计算
+      ✔ 可用于训练后验证
+      ✘ 不可作为 RL observation
+
+# ============================================================
+# 真实数据在强化学习中的角色(工程边界声明)
+# ============================================================
+
+RealDataUsagePolicy:
+
+  reset_initialization:
+    enabled: true
+    source: "chemical_cycle_state_distribution"
+    __comment__: >
+      reset 时从真实化学周期状态分布中采样,
+      确保训练从“现实可达状态”开始。
+
+  training:
+    use_real_transitions: false
+    __comment__: >
+      真实数据不用于:
+        - 动力学拟合
+        - 监督策略
+      强化学习仍在模拟环境中进行。
+
+  validation:
+    enabled: true
+    compare_with_real_cycles: true
+    __comment__: >
+      训练完成后:
+        - 将策略运行结果
+        - 与真实化学周期统计特性进行对比
+      用于评估策略的现实可行性与安全性。
+
+# ============================================================
+# 方法论与工程风险声明
+# ============================================================
+
+MethodologyNotes:
+  - "强化学习的 step 定义严格等同于一个化学周期"
+  - "所有 RL 状态变量在一个 step 内视为常数"
+  - "物理周期层级仅用于环境内部模拟"
+  - "真实数据用于分布约束与验证,而非动力学建模"

+ 26 - 0
models/uf-rl/anzhen/dqn_config.yaml

@@ -0,0 +1,26 @@
+# ============================================================
+# DQN 超参数配置
+# ============================================================
+# 神经网络参数
+learning_rate: 0.0001           # 学习率 1e-4
+
+# 经验回放参数
+buffer_size: 100000              # 经验回放缓冲区大小
+learning_starts: 10000           # 开始训练前收集的步数
+batch_size: 32                   # 训练批次大小
+
+# 强化学习参数
+gamma: 0.95                      # 折扣因子
+train_freq: 4                    # 训练频率(步数)
+
+# 目标网络参数
+target_update_interval: 1        # 目标网络更新间隔
+tau: 0.005                       # 软更新系数
+
+# 探索策略参数
+exploration_initial_eps: 1.0     # 初始探索率
+exploration_fraction: 0.3        # 探索率衰减比例
+exploration_final_eps: 0.02      # 最终探索率
+
+# 日志参数
+remark: "uf_dqn_real_reset"      # 实验备注

+ 139 - 0
models/uf-rl/anzhen/env_config.yaml

@@ -0,0 +1,139 @@
+UFState:
+  # ===== 膜动态运行参数 =====
+  q_UF: 150.0
+  TMP: 0.02
+  temp: 20.0
+  R: 200.0
+
+  # ===== 膜阻力模型参数 =====
+  nuK: 170.0
+  slope: 2.0
+  power: 1.1
+  ceb_removal: 200.0
+
+
+UFPhysicsParams:
+  # ===== TMP 全局约束 =====
+  global_TMP_hard_limit: 0.08 # 跨膜压差硬上限
+  global_TMP_soft_limit: 0.06 # 跨膜压差软上限
+
+  # ===== 物理反洗参数 =====
+  tau_bw_s: 20.0
+  gamma_t: 1.0
+  q_bw_m3ph: 700.0
+
+  # ===== CEB 化学反洗参数 =====
+  T_ceb_interval_h: 48.0
+  v_ceb_m3: 20.0
+  t_ceb_s: 1800.0
+
+  # ===== 膜组件参数 =====
+  A: 3200.0
+
+  # ===== 吨水电耗查找表 =====
+  energy_lookup:
+    2700: 0.1088
+    2760: 0.1083
+    2820: 0.1078
+    2880: 0.1074
+    2940: 0.1070
+    3000: 0.1066
+    3060: 0.1062
+    3120: 0.1059
+    3180: 0.1055
+    3240: 0.1052
+    3300: 0.1049
+    3360: 0.1045
+    3420: 0.1042
+    3480: 0.1039
+    3540: 0.1036
+    3600: 0.1034
+    3660: 0.1031
+    3720: 0.1029
+    3780: 0.1026
+    3840: 0.1023
+    3900: 0.1021
+    3960: 0.1019
+    4020: 0.1017
+    4080: 0.1015
+    4140: 0.1012
+    4200: 0.1011
+    4260: 0.1008
+    4320: 0.1007
+    4380: 0.1005
+    4440: 0.1003
+    4500: 0.1001
+    4560: 0.0999
+    4620: 0.0998
+    4680: 0.0996
+    4740: 0.0995
+    4800: 0.0993
+
+  p_feed_kw: 9.0
+  p_bw_kw: 30.0
+  dose_min: 0.05
+  dose_max: 0.15
+
+
+UFActionSpec:
+  # ===== 动作空间范围 =====
+  L_min_s: 3600.0
+  L_max_s: 4800.0
+  t_bw_min_s: 50.0
+  t_bw_max_s: 70.0
+
+  # ===== 动作离散化步长 =====
+  L_step_s: 60.0
+  t_bw_step_s: 5.0
+
+
+UFRewardParams:
+  # ===== TMP 安全与惩罚 =====
+  global_TMP_hard_limit: 0.08
+  global_TMP_soft_limit: 0.06
+  w_tmp_hard: 5.0
+  w_tmp: 1.5
+  p: 3.0
+  w_trend: 1.0
+
+  # ===== 经济成本 =====
+  k_cost: 3.0
+  chemical_price: 13.0
+  energy_price: 0.667
+  cost_low: 0.08
+  cost_high:  0.20
+  w_cost: 1.0
+
+  # ===== 残余污染 =====
+  k_res: 3.0
+  residual_ref_ratio: null
+  w_res: 1.0
+
+
+UFStateBounds:
+  # ===== 流量初始化约束 =====
+  q_UF_min: 150.0
+  q_UF_max: 200.0
+
+  # ===== 温度初始化约束 =====
+  temp_min: 9.0
+  temp_max: 25.0
+
+  # ===== TMP 初始化约束 =====
+  TMP0_min: 0.01
+  TMP0_max: 0.04
+  global_TMP_hard_limit: 0.08
+
+  # ===== 短期污染参数 =====
+  nuK_min: 100.0
+  nuK_max: 250.0
+
+  # ===== 长期污染参数 =====
+  slope_min: 1.28
+  slope_max: 150
+  power_min: 0.25
+  power_max: 2.5
+
+  # ===== CEB 去除能力 =====
+  ceb_removal_min: 150.0
+  ceb_removal_max: 350.0

+ 49 - 0
models/uf-rl/anzhen/uf_analyze_config.yaml

@@ -0,0 +1,49 @@
+UF:
+  units: [ "1", "2" ]
+  area_m2: 128 * 40
+
+  inlet_codes: [215.0, 301.0]
+  stable_codes: [220.0, 260.0]
+
+  physical_bw_code: [301.0, 340.0]
+  chemical_bw_code: [400.0, 660.0]
+
+  # 列名
+  column_formats:
+    flow_col: "AR.{unit}#UF_JSFLOW_O"
+    tmp_col: "AR.UF{unit}_SSD_KMYC"
+    press_col: "AR.{unit}#UF_JSPRESS_O"
+    ctrl_col: "AR.UF{unit}_STEP"
+    temp_col: "AR.ZJS_TEMP_O"
+    orp_col: "AR.RO_JSORP_O"
+    ph_col: "AR.RO_JSPH_O"
+
+
+Params:
+  # 稳定段提取
+  min_stable_points: 30
+  initial_points: 10
+
+  # 阻力趋势计算
+  segment_head_n: 5
+  segment_tail_n: 5
+
+  scale_factor: 1e10
+
+
+Plot:
+  figsize: [12, 6]
+  dpi: 120
+  color_inlet: "#1f77b4"
+  color_bw_phys: "#ff7f0e"
+  color_bw_chem: "#d62728"
+
+Paths:
+  project_root: "E:/Greentech" # 请根据项目根目录修改相应路径
+
+  raw_data_path: "models/uf-rl/datasets/UF_anzhen_data/raw"
+  output_path: "models/uf-rl/datasets/UF_anzhen_data/processed/segments"
+  filter_output_path: "models/uf-rl/datasets/UF_anzhen_data/processed/filter_segments"
+
+  output_format: "csv"
+

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

@@ -30,7 +30,7 @@ def main():
     # --------------------------------------------------------
     # 配置文件路径(统一入口)
     # --------------------------------------------------------
-    config_path = UF_RL_ROOT / "longting" / "data_to_rl_config.yaml"
+    config_path = UF_RL_ROOT / "lankao" / "data_to_rl_config.yaml"
 
     print(f" 配置文件: {config_path}")
     print("======================================================\n")

+ 8 - 6
models/uf-rl/env/env_params.py

@@ -270,12 +270,13 @@ class UFPhysicsParams:
     })
 
     # 实际吨水电耗计算指标
-    p_feed_kw: float = 18.0
-    p_bw_kw: float = 20.0
+    p_feed_kw: float = 19.0
+    p_bw_kw: float = 15.0
 
     # 实际吨水药耗计算指标
     dose_min: float = 0.10
-    dose_max: float = 0.20
+    dose_max: float = 0.30
+    dose_area: float = 0.56
 
 
 @dataclass(frozen=True)
@@ -314,10 +315,11 @@ class UFRewardParams:
 
     # 经济成本
     k_cost: float = 3.0
-    cost_low: float = 0.10
-    cost_high: float = 0.16
+    chemical_price: float = 13.0
+    energy_price: float = 0.667
+    cost_low: float = 0.08
+    cost_high: float = 0.20
     w_cost: float = 1.0
-    alpha_chemical: float = 5.0
 
     # 残余污染
     k_res: float = 3.0

+ 1 - 1
models/uf-rl/env/env_visual.py

@@ -88,7 +88,7 @@ class UFTrainingCallback(BaseCallback):
                 if self.verbose:
                     print(f"[Step {self.num_timesteps}] 动作={step_action}, 奖励={step_reward:.3f}, Done={step_done}, L_s={L_s}, t_bw_s={t_bw_s},"
                           f"residual_ratio = {residual_ratio:.4f}, res_penalty = {res_penalty:.4f},"
-                          f",recovery = {recovery:.4f},econ_reward  = {econ_reward :.4f}"
+                          f"recovery = {recovery:.4f},econ_reward  = {econ_reward :.4f},"
                           f"initial_tmp = {initial_tmp:.4f}, tmp_after_ceb = {tmp_after_ceb:.4f}, max_TMP_during_filtration ={max_TMP_during_filtration:.4f}, tmp_penalty = {tmp_penalty:.4f}")
 
                 # 记录数据

+ 6 - 5
models/uf-rl/env/uf_env.py

@@ -98,13 +98,13 @@ class UFSuperCycleEnv(gym.Env):
 
         self.L_values = np.arange(
             self.action_spec.L_min_s,
-            self.action_spec.L_max_s + self.action_spec.L_step_s,
+            self.action_spec.L_max_s ,
             self.action_spec.L_step_s,
         )
 
         self.t_bw_values = np.arange(
             self.action_spec.t_bw_min_s,
-            self.action_spec.t_bw_max_s + self.action_spec.t_bw_step_s,
+            self.action_spec.t_bw_max_s,
             self.action_spec.t_bw_step_s,
         )
 
@@ -195,7 +195,7 @@ class UFSuperCycleEnv(gym.Env):
         """
         return min(1.0, self.current_step / self.max_episode_steps )
 
-    def reset(self, seed=None, options=None, max_attempts: int = 1000):
+    def reset(self, seed=None, options=None, max_attempts: int = 10000):
         super().reset(seed=seed)
 
         progress = self._get_training_progress()
@@ -434,9 +434,10 @@ class UFSuperCycleEnv(gym.Env):
         energy = info["ton_water_energy"]
         chemical = info["ton_water_chem"]
 
-        alpha = self.reward_params.alpha_chemical
+        chemical_price = self.reward_params.chemical_price
+        energy_price =self.reward_params.energy_price
 
-        cost = energy + alpha * chemical
+        cost = energy * energy_price + chemical * chemical_price * 100
 
         # 成本归一化范围
         cost_low = self.reward_params.cost_low

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


+ 3 - 3
models/uf-rl/lankao/data_to_rl_config.yaml

@@ -9,7 +9,7 @@ Paths:
     不同工程师只需修改这一项即可迁移环境。
 
   raw_data:
-    filtered_cycles_dir: "models/uf-rl/datasets/UF_longting_data/processed/filter_segments"
+    filtered_cycles_dir: "models/uf-rl/datasets/UF_lankao_data/processed/filter_segments"
     cycle_file_pattern: "UF{unit}_filtered_cycles.csv"
 
     enabled_units: [1, 2]
@@ -24,8 +24,8 @@ Paths:
         - 机组编号仅用于筛选,不进入状态空间
 
   data_to_rl:
-    output_dir: "models/uf-rl/datasets/UF_longting_data/rl_ready/output"
-    cache_dir: "models/uf-rl/datasets/UF_longting_data/rl_ready/cache"
+    output_dir: "models/uf-rl/datasets/UF_lankao_data/rl_ready/output"
+    cache_dir: "models/uf-rl/datasets/UF_lankao_data/rl_ready/cache"
 
     __comment__: >
       data_to_rl 模块输出内容:

+ 25 - 25
models/uf-rl/lankao/env_config.yaml

@@ -20,15 +20,15 @@ UFPhysicsParams:
   # ===== 物理反洗参数 =====
   tau_bw_s: 20.0
   gamma_t: 1.0
-  q_bw_m3ph: 1000.0
+  q_bw_m3ph: 500.0
 
   # ===== CEB 化学反洗参数 =====
   T_ceb_interval_h: 48.0
   v_ceb_m3: 20.0
-  t_ceb_s: 2400.0   # 40 * 60
+  t_ceb_s: 1800.0
 
   # ===== 膜组件参数 =====
-  A: 5120.0   # 128 * 40
+  A: 3200.0
 
   # ===== 吨水电耗查找表 =====
   energy_lookup:
@@ -69,13 +69,18 @@ UFPhysicsParams:
     4740: 0.0995
     4800: 0.0993
 
+  p_feed_kw: 15.0
+  p_bw_kw: 25.0
+  dose_min: 0.10
+  dose_max: 0.20
+
 
 UFActionSpec:
   # ===== 动作空间范围 =====
-  L_min_s: 3000.0
+  L_min_s: 2400.0
   L_max_s: 3800.0
-  t_bw_min_s: 50.0
-  t_bw_max_s: 70.0
+  t_bw_min_s: 40.0
+  t_bw_max_s: 60.0
 
   # ===== 动作离散化步长 =====
   L_step_s: 60.0
@@ -91,33 +96,28 @@ UFRewardParams:
   p: 3.0
   w_trend: 1.0
 
-  # ===== 回收率 =====
-  k_rec: 1.0
-  rec_low: 0.85
-  rec_high: 0.95
-  w_rec: 2.0
+  # ===== 经济成本 =====
+  k_cost: 3.0
+  chemical_price: 13.0
+  energy_price: 0.667
+  cost_low: 0.08
+  cost_high:  0.20
+  w_cost: 1.0
 
   # ===== 残余污染 =====
-  k_res: 2.0
+  k_res: 3.0
   residual_ref_ratio: null
-  w_res: 2.0
-
-  # ===== 吨水电耗 =====
-  k_energy: 1.0
-  energy_low: 0.1023
-  energy_high: 0.1066
-  energy_ref: 0.1044
-  w_energy: 1.0
+  w_res: 1.0
 
 
 UFStateBounds:
   # ===== 流量初始化约束 =====
-  q_UF_min: 130.0
-  q_UF_max: 170.0
+  q_UF_min: 140.0
+  q_UF_max: 210.0
 
   # ===== 温度初始化约束 =====
-  temp_min: 14.0
-  temp_max: 32.0
+  temp_min: 15.0
+  temp_max: 25.0
 
   # ===== TMP 初始化约束 =====
   TMP0_min: 0.01
@@ -136,4 +136,4 @@ UFStateBounds:
 
   # ===== CEB 去除能力 =====
   ceb_removal_min: 150.0
-  ceb_removal_max: 300.0
+  ceb_removal_max: 350.0

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

@@ -1,8 +1,8 @@
 UF:
   units: [ "1", "2" ]
-  area_m2: 128 * 40
+  area_m2: 3200
 
-  inlet_codes: [215.0, 301.0]
+  inlet_codes: [220.0, 301.0]
   stable_codes: [220.0, 260.0]
 
   physical_bw_code: [301.0, 340.0]

+ 4 - 3
models/uf-rl/longting/env_config.yaml

@@ -100,10 +100,11 @@ UFRewardParams:
 
   # ===== 经济成本 =====
   k_cost: 3.0
-  cost_low: 0.10
-  cost_high:  0.16
+  chemical_price: 13.0
+  energy_price: 0.667
+  cost_low: 0.06
+  cost_high:  0.10
   w_cost: 1.0
-  alpha_chemical: 5.0
 
   # ===== 残余污染 =====
   k_res: 3.0

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

@@ -54,7 +54,7 @@ class DQNTrainer:
 
         # 4️⃣ 固定日志存放位置:PROJECT_ROOT/model_result/uf_dqn_tensorboard
         # 假设在 run_dqn_train.py 中定义了 PROJECT_ROOT = "models/uf-rl"
-        base_dir = os.path.join(self.PROJECT_ROOT, "model_result", "uf_dqn_tensorboard")
+        base_dir = os.path.join(self.PROJECT_ROOT, "model_result", "uf_dqn_tensorboard","anzhen48h")
         os.makedirs(base_dir, exist_ok=True)
 
         # 5️⃣ 完整日志目录路径

+ 3 - 3
models/uf-rl/rl_model/DQN/uf_train/run_dqn_train.py

@@ -292,10 +292,10 @@ if __name__ == "__main__":
 
     RESET_STATE_CSV = (
             PROJECT_ROOT
-            / "datasets/UF_longting_data/rl_ready/output/reset_state_pool.csv"
+            / "datasets/UF_anzhen_data/rl_ready/output/reset_state_pool.csv"
     )
 
-    ENV_CONFIG_PATH = PROJECT_ROOT / "longting" / "env_config.yaml"
-    MODEL_CONFIG_PATH = PROJECT_ROOT / "longting" / "dqn_config.yaml"
+    ENV_CONFIG_PATH = PROJECT_ROOT / "anzhen" / "env_config.yaml"
+    MODEL_CONFIG_PATH = PROJECT_ROOT / "anzhen" / "dqn_config.yaml"
 
     main()

+ 1 - 1
models/uf-rl/uf_data_process/pipeline.py

@@ -157,7 +157,7 @@ class UFAnalysisPipeline:
             df["time"] = pd.to_datetime(df["time"])
 
         # 只保留 2025-06-11 及之后的数据
-        start_date = pd.Timestamp("2025-06-11")
+        start_date = pd.Timestamp("2025-06-10")
         df = df[df["time"] >= start_date].reset_index(drop=True)
 
         # 逐机组处理

+ 1 - 1
models/uf-rl/uf_data_process/run_ufdata_pipeline.py

@@ -30,5 +30,5 @@ def main():
 
 
 if __name__ == "__main__":
-    CONFIG_PATH = UF_RL_ROOT / "longting" / "uf_analyze_config.yaml"
+    CONFIG_PATH = UF_RL_ROOT / "anzhen" / "uf_analyze_config.yaml"
     main()

+ 2 - 2
models/uf-rl/uf_data_process/水厂变量名称记录.md

@@ -42,7 +42,7 @@ SYSTEM_VARIABLES = [
 > 
 > **数据库id**:1451
 > 
-> **数据开始时间**:2025-08-17
+> **数据开始时间**:2025-09-04
 
 ### UF机组变量
 ```python
@@ -74,7 +74,7 @@ SYSTEM_VARIABLES = [
 > 
 > **数据库id**:1181
 > 
-> **数据开始时间**:
+> **数据开始时间**:2025-06-10
 
 ### UF机组变量
 ```python