# 自定义指标开发指南 ## 概述 本系统支持用户自定义评估指标,您可以通过编写Python脚本来实现自己的指标计算逻辑,并将其集成到评估系统中。 ## 快速开始 1. 复制 `custom_metric_template.py` 模板文件 2. 根据您的需求修改指标计算逻辑 3. 将您的自定义指标脚本放置在指定目录中 4. 在运行评估时,使用 `--customMetricsPath` 参数指定自定义指标目录 ## 自定义指标规范 ### 必要条件 1. 每个指标类必须继承 `BaseMetric` 基类 2. 必须实现 `calculate()` 方法 3. 必须在文件中定义 `METRIC_CATEGORY` 变量,指定指标类别 ### 指标类别 可选的指标类别包括: - safety: 安全性指标 - comfort: 舒适性指标 - traffic: 交通规则指标 - efficient: 效率指标 - function: 功能指标 - custom: 自定义类别 ### 返回值格式 `calculate()` 方法应返回一个字典,包含以下字段: - value: 指标计算值 - score: 评分(0-100) - details: 详细信息(可选) ## 示例 ```python from modules.lib.metric_registry import BaseMetric METRIC_CATEGORY = "custom" class MyCustomMetric(BaseMetric): def __init__(self, data): super().__init__(data) def calculate(self): # 实现您的计算逻辑 return { "value": 42.0, "score": 85, "details": {"max": 100, "min": 0} } python evaluator.py --configPath config.yaml --dataPath data_dir --reportPath report_dir --logPath logs --customMetricsPath custom_metrics ## 架构说明 新的架构设计主要包括以下几个部分: 1. **指标注册系统**:通过 `MetricRegistry` 类实现,负责管理所有可用的指标(内置和自定义)。 2. **指标基类**:所有指标都继承自 `BaseMetric` 基类,确保接口一致性。 3. **动态指标选择**:通过配置文件中的指标定义,系统只会运行被选中的指标,提高效率。 4. **自定义指标加载**:支持从指定目录加载用户自定义的指标脚本,扩展系统功能。 5. **兼容性保证**:保留了原有的 `safety.py`、`comfort.py` 等模块,确保系统向后兼容。 这种设计使系统更加灵活,既能满足选择性运行指标的需求,又能支持用户自定义指标,同时保持了原有代码结构的稳定性。 ├── scripts/ │ └── evaluator.py # 评估引擎主程序 ├── modules/ │ ├── lib/ │ │ ├── metric_registry.py # 指标注册系统 │ │ ├── data_process.py # 数据处理模块 │ │ └── log_manager.py # 日志管理模块 │ └── metric/ │ ├── safety.py # 安全性指标模块 │ ├── comfort.py # 舒适性指标模块 │ ├── traffic.py # 交通规则指标模块 │ ├── efficient.py # 效率指标模块 │ └── function.py # 功能指标模块 ├── templates/ │ ├── custom_metric_template.py # 自定义指标模板 │ └── README.md # 自定义指标开发指南 └── custom_metrics/ # 用户自定义指标目录 ## 工作流程 1. 初始化阶段 - 加载配置文件 - 注册内置指标模块 - 加载自定义指标脚本 - 提取启用的指标列表 2. 评估阶段 - 加载和预处理数据 - 创建启用指标的实例 - 并行执行指标计算 - 收集和组织结果 3. 报告阶段 - 生成结构化评估报告 - 输出到指定目录 ## 扩展性设计 1. 新增内置指标 - 在对应类别模块中添加新方法 - 系统会自动注册和识别 2. 添加自定义指标 - 基于模板创建新的指标脚本 - 放置在自定义指标目录 - 无需修改核心代码 3. 新增指标类别 - 创建新的类别模块 - 在注册系统中添加类别支持 ## 优势 1. 灵活性 :可以根据配置选择性运行指标,提高效率 2. 可扩展性 :支持用户自定义指标,无需修改核心代码 3. 兼容性 :保留原有模块结构,确保向后兼容 4. 并行处理 :利用多线程提高评估效率 5. 模块化 :清晰的职责分离,便于维护和扩展 这个架构设计满足了您的需求,既支持从配置文件中选择性运行指标,又允许用户通过自定义脚本扩展系统功能,同时保留了原有的模块化结构。