# -*- 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()