Sfoglia il codice sorgente

feat:为reset添加物理限制

junc_WHU 4 mesi fa
parent
commit
703acb7c03

+ 8 - 8
models/uf-rl/超滤训练源码/DQN_env.py

@@ -69,7 +69,7 @@ class UFParams:
     # ========== 膜阻力模型参数 ==========
     # 这些参数描述膜污染的物理化学特性,基于历史数据拟合得到
     
-    nuK: float = 4.92e+01 
+    nuK: float = 6.92e+01
     # 过滤阶段膜阻力增长系数(缩放后单位)
     # 说明:反映水质污染特性,nuK 越大表示水质越差、膜污染越快
     # 物理意义:单位膜通量、单位时间的阻力增长速率
@@ -118,18 +118,18 @@ class UFParams:
     temp_min: float = 10.0   # 温度下限(℃)
     
     # --- 短期污染模型参数约束 ---
-    nuK_max: float = 6e+01   # 阻力增长系数上限
-    nuK_min: float = 3e+01   # 阻力增长系数下限
+    nuK_max: float = 9e+01   # 阻力增长系数上限
+    nuK_min: float = 6e+01   # 阻力增长系数下限
     
     # --- 长期污染模型参数约束 ---
     slope_max: float = 10    # 不可逆污染斜率上限
     slope_min: float = 0.1   # 不可逆污染斜率下限
-    power_max: float = 1.3   # 不可逆污染幂次上限
+    power_max: float = 2.0   # 不可逆污染幂次上限
     power_min: float = 0.8   # 不可逆污染幂次下限
     
     # --- CEB去除能力约束 ---
-    ceb_removal_max: float = 150  # CEB去除阻力上限(缩放后)
-    ceb_removal_min: float = 100  # CEB去除阻力下限(缩放后)
+    ceb_removal_max: float = 100  # CEB去除阻力上限(缩放后)
+    ceb_removal_min: float = 50  # CEB去除阻力下限(缩放后)
 
     # ========== 反洗参数(固定配置) ==========
     q_bw_m3ph: float = 1000.0
@@ -141,7 +141,7 @@ class UFParams:
     # CEB 间隔时间(小时)
     # 说明:每运行约 60 小时执行一次化学增强反洗
 
-    v_ceb_m3: float = 30.0
+    v_ceb_m3: float = 20.0
     # CEB 用水体积(m³)
 
     t_ceb_s: float = 40 * 60.0
@@ -730,7 +730,7 @@ def check_pollution_dead_initial_state(p: UFParams, L_s: float = 4900, t_bw_s: f
             reversible_R = phi_bw_of(p, R0, d_R, L_h_start, L_h_next_start, t_bw_s)
 
             if reversible_R == 0.0: #  说明原始选择的阻力组合中长期污染增长曲线上升比短期的总污染曲线还要快,该组合不符合物理常识
-                return False  # 即死状态
+                return False  # 即死状态 #TODO:改为斜率的硬限制
         return True
 
     except Exception:

+ 9 - 16
models/uf-rl/超滤训练源码/UF_resistance_models.py

@@ -95,7 +95,7 @@ class ResistanceDecreaseModel(torch.nn.Module):
         """初始化膜阻力下降模型(无需训练参数)"""
         super().__init__()
 
-    def forward(self, p, R0, R_end, L_h_start, L_h_next_start, t_bw_s):
+    def forward(self, p, R0, R_end, L_h_next_start, t_bw_s):
         """
         前向传播:计算物理反洗能够去除的膜阻力
         
@@ -115,31 +115,20 @@ class ResistanceDecreaseModel(torch.nn.Module):
         
         计算步骤:
             1. 基于长期污染模型计算本周期的不可逆污染增量
-            2. 计算可逆污染量 = 总增长 - 不可逆增量
+            2. 计算可逆污染量 = 当前总污染 - 不可逆污染
             3. 应用时间因子(反洗时长的影响)
             4. 返回实际去除的阻力(不超过可逆污染量)
         """
         # ========== 步骤1:计算不可逆污染累积 ==========
         # 使用幂律模型描述长期不可逆污染的累积
         # R_irr(t) = R0 + slope × t^power
-        
-        # 本小周期开始时的理论膜阻力(包含之前累积的不可逆污染)
-        R_start = R0 + p.slope * (L_h_start ** p.power)
+
         
         # 下一小周期开始时的理论膜阻力
         R_next_start = R0 + p.slope * (L_h_next_start ** p.power)
-        
-        # 本周期新增的不可逆污染(反洗后会残留)
-        # 这部分污染无法通过物理反洗去除
-        irreversible_R = max(R_next_start - R_start, 0.0)
-        
-        # ========== 步骤2:计算可逆污染量 ==========
-        # 本周期过滤阶段总的膜阻力增长
-        total_increase = max(R_end - R_start, 0.0)
-        
-        # 可逆污染 = 总增长 - 不可逆污染
+
         # 这部分污染可以通过物理反洗去除
-        reversible_R = max(total_increase - irreversible_R, 0.0)
+        reversible_R = max(R_end - R_next_start, 0.0)
         
         # ========== 步骤3:计算反洗时间效率因子 ==========
         # 使用指数衰减模型:time_gain = 1 - exp(-t_bw / τ)
@@ -147,6 +136,10 @@ class ResistanceDecreaseModel(torch.nn.Module):
         # - 反洗时间 t_bw = 0 时,time_gain = 0(无去除效果)
         # - 反洗时间 t_bw → ∞ 时,time_gain → 1(达到最大效率)
         # - 反洗时间 t_bw = τ 时,time_gain ≈ 0.632(去除63.2%)
+        # τ参考计算: 以60s去除效率高于95%的要求推算得τ取20s
+        # 该取值下:
+        # - 反洗时间 t_bw = 40s 时,time_gain ≈ 0.865(去除86.5%)
+        # - 反洗时间 t_bw = 60s 时,time_gain ≈ 0.950(去除95.0%)
         time_gain = 1.0 - np.exp(- (t_bw_s / p.tau_bw_s))
         
         # ========== 步骤4:计算实际去除的膜阻力 ==========