config.py 4.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. # -*- coding: utf-8 -*-
  2. """config.py: 参数文件"""
  3. import os
  4. class Config:
  5. # ---------------- 路径配置 ----------------
  6. # 项目根目录
  7. BASE_DIR = os.path.dirname(os.path.abspath(__file__))
  8. # 传感器时序数据文件存放目录
  9. DATASET_SENSOR_DIR = os.path.join(BASE_DIR, "datasets_xishan")
  10. # 训练好的模型权重保存目录
  11. MODEL_SAVE_DIR = os.path.join(BASE_DIR, "models")
  12. # 最终结果报表保存目录
  13. RESULT_SAVE_DIR = os.path.join(BASE_DIR, "results")
  14. # 阈值配置文件名 (包含传感器阈值、层级One_layer、设备Device等元数据)
  15. THRESHOLD_FILENAME = "sensor_threshold.xlsx"
  16. # 专家知识库文件名 (包含已知的历史异常链路)
  17. ABNORMAL_LINK_FILENAME = "abnormal_link.xlsx"
  18. # 传感器数据文件的命名前缀 (如 data_process_1.csv)
  19. SENSOR_FILE_PREFIX = "data_process_"
  20. # 最终生成的测试评估报告文件名
  21. TEST_RESULT_FILENAME = "Final_Test_Report.xlsx"
  22. # Excel中用于识别关键列的关键字
  23. KEYWORD_LAYER = 'One_layer' # 用于构建因果图层级的列名关键字
  24. KEYWORD_DEVICE = 'Device' # 用于设备一致性约束的列名关键字
  25. # ---------------- 数据处理参数 ----------------
  26. # 要读取的文件编号范围 (例如读取 data_process_1 到 data_process_119)
  27. SENSOR_FILE_NUM_RANGE = (1, 119)
  28. # 原始数据的采样间隔 (秒)
  29. ORIGINAL_SAMPLE_INTERVAL = 4
  30. # 降采样后的目标间隔 (秒),用于减少数据量加速计算
  31. TARGET_SAMPLE_INTERVAL = 20
  32. # 一个检测窗口的时间长度 (分钟)
  33. WINDOW_DURATION_MIN = 40
  34. # 每个窗口包含的数据点数 = (40分钟 * 60秒) / 20秒 = 120点
  35. POINTS_PER_WINDOW = int((WINDOW_DURATION_MIN * 60) / TARGET_SAMPLE_INTERVAL)
  36. # 滑动窗口的步长 (点数),设为窗口的一半以增加样本覆盖率
  37. WINDOW_STEP = POINTS_PER_WINDOW // 2
  38. # 窗口有效性阈值:窗口内非空数据比例需超过此值(60%)才会被处理,否则视为无效窗口
  39. VALID_DATA_RATIO = 0.6
  40. # 窗口异常判定阈值 (用于判断根因节点的异常程度是否足够高)
  41. WINDOW_ANOMALY_THRESHOLD = 0.2
  42. # 训练集与测试集的划分比例 (0.8 表示前80%的时间段用于训练,后20%用于测试)
  43. TRAIN_TEST_SPLIT = 0.8
  44. # 诱发变量的触发阈值
  45. TRIGGER_SCORE_THRESH = 0.5
  46. # ---------------- 异常量化得分权重与动态MAD参数 ----------------
  47. # 绝对阈值异常得分权重
  48. ABSOLUTE_SCORE_WEIGHT = 0.6
  49. # 动态MAD异常得分权重
  50. DYNAMIC_SCORE_WEIGHT = 0.4
  51. # 动态MAD滚动窗口大小 (360 = 2小时)
  52. MAD_HISTORY_WINDOW = 360
  53. # 动态MAD判定阈值
  54. MAD_THRESHOLD = 3.0
  55. # ---------------- 诱发变量列表 ----------------
  56. # 定义哪些传感器是“诱发变量”
  57. TRIGGER_SENSORS = [
  58. "UF1Per", "UF2Per", "UF3Per", "UF4Per",
  59. "C.M.RO1_DB@DPT_1", "C.M.RO2_DB@DPT_1", "C.M.RO3_DB@DPT_1", "C.M.RO4_DB@DPT_1",
  60. "C.M.RO1_DB@DPT_2", "C.M.RO2_DB@DPT_2", "C.M.RO3_DB@DPT_2", "C.M.RO4_DB@DPT_2",
  61. "RO1_CSFlow", "RO2_CSFlow", "RO3_CSFlow", "RO4_CSFlow",
  62. "RO1HSL", "RO2HSL", "RO3HSL", "RO4HSL",
  63. "RO1_TYL", "RO2_TYL", "RO3_TYL", "RO4_TYL"
  64. ]
  65. # ---------------- 强化学习核心参数 ----------------
  66. # 生成的异常链路最小长度限制 (防止路径过短)
  67. MIN_PATH_LENGTH = 3
  68. # 生成的异常链路最大长度限制 (防止路径过长发散)
  69. MAX_PATH_LENGTH = 6
  70. # 网络结构参数
  71. EMBEDDING_DIM = 64 # 节点的嵌入向量维度
  72. HIDDEN_DIM = 256 # 隐藏层维度
  73. # PPO (Proximal Policy Optimization) 算法超参数
  74. PPO_LR = 3e-4 # 学习率
  75. PPO_GAMMA = 0.90 # 折扣因子
  76. PPO_EPS_CLIP = 0.2 # PPO更新时的截断范围,防止策略更新幅度过大
  77. PPO_K_EPOCHS = 10 # 每次数据采集后,网络更新的循环次数
  78. PPO_BATCH_SIZE = 64 # 训练批次大小
  79. # 训练轮次设置
  80. BC_EPOCHS = 50000 # 行为克隆 (Behavior Cloning) 轮次
  81. RL_EPISODES = 5000 # 强化学习 (PPO) 轮次
  82. # 自动创建所需的目录结构
  83. for d in [MODEL_SAVE_DIR, DATASET_SENSOR_DIR, RESULT_SAVE_DIR]:
  84. os.makedirs(d, exist_ok=True)
  85. config = Config()