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