691 lines
16 KiB
Markdown
691 lines
16 KiB
Markdown
# 装备成本估算系统设计方案
|
||
|
||
## 一、系统概述
|
||
|
||
本系统旨在通过装备的技术参数,利用机器学习方法对装备成本进行估算。系统采用前后端分离架构,主要包含数据预处理、特征分析、模型训练和成本预测等模块。
|
||
|
||
## 二、系统架构
|
||
|
||
### 1. 技术架构
|
||
|
||
- 前端:Vue.js + Element UI
|
||
- 后端:Python Flask
|
||
- 数据库: Mysql
|
||
- 机器学习框架:TensorFlow, Scikit-learn
|
||
|
||
### 2. 系统模块
|
||
|
||
```mermaid
|
||
graph TD
|
||
A[装备成本估算系统] --> B[数据预处理模块]
|
||
A --> C[特征分析模块]
|
||
A --> D[模型训练模块]
|
||
A --> E[成本预测模块]
|
||
A --> F[系统管理模块]
|
||
```
|
||
|
||
## 三、数据模型设计
|
||
|
||
### 1. 数据库表结构
|
||
|
||
#### 装备基本信息表(equipment)
|
||
|
||
- id: 主键
|
||
- name: 装备名称
|
||
- type: 装备类型
|
||
- manufacturer: 制造商
|
||
- created_at: 创建时间
|
||
|
||
#### 技术参数表(technical_params)
|
||
|
||
##### 尺寸参数
|
||
|
||
- length_m: 总长(m)
|
||
- width_m: 宽度(m)
|
||
- height_m: 高度(m)
|
||
- weight_standard_kg: 标准重量(kg)
|
||
- weight_combat_kg: 战斗重量(kg)
|
||
|
||
##### 火力参数
|
||
|
||
- firing_angle_horizontal: 方向射界(度)
|
||
- firing_angle_vertical: 高低射界(度)
|
||
- rocket_length_m: 火箭弹长度(m)
|
||
- rocket_diameter_mm: 弹体直径(mm)
|
||
- rocket_weight_kg: 火箭弹重量(kg)
|
||
|
||
##### 性能参数
|
||
|
||
- max_speed_ms: 最大速度(m/s)
|
||
- max_range_km: 最大射程(km)
|
||
- warhead_weight_kg: 战斗部重量(kg)
|
||
|
||
##### 其他参数
|
||
|
||
- mobility_type: 机动性类型
|
||
- wheel_arrangement: 轮式布局
|
||
- amphibious: 两栖能力
|
||
|
||
#### 成本数据表(cost_data)
|
||
|
||
- equipment_id: 装备ID
|
||
- actual_cost: 实际成本
|
||
- predicted_cost: 预测成本
|
||
- prediction_date: 预测日期
|
||
|
||
## 四、核心功能模块设计
|
||
|
||
### 1. 特征工程模块
|
||
|
||
- 数据预处理
|
||
- 数据清洗
|
||
- 缺失值处理
|
||
- 异常值检测
|
||
- 数据标准化
|
||
- 特征衍生
|
||
- 功重比(power_weight_ratio)
|
||
- 体积(volume)
|
||
- 射程速度比(range_speed_ratio)
|
||
- 战斗部比例(warhead_rocket_ratio)
|
||
- 特征选择
|
||
- 方差分析
|
||
- 相关性分析
|
||
- 互信息分析
|
||
- 一致性分析
|
||
- rwg值计算(组内一致性)
|
||
- ICC值计算(组内相关系数)
|
||
|
||
### 2. 模型训练模块
|
||
|
||
#### 2.1 集成学习模型
|
||
|
||
1. XGBoost (eXtreme Gradient Boosting)
|
||
|
||
- 特点:
|
||
- 使用二阶导数进行优化,收敛更快
|
||
- 支持自定义损失函数
|
||
- 内置正则化,防止过拟合
|
||
- 支持特征重要性评估
|
||
- 配置:
|
||
|
||
```python
|
||
XGBRegressor(
|
||
n_estimators=100, # 树的数量适中,避免过拟合
|
||
learning_rate=0.1, # 较大的学习率,加快收敛
|
||
max_depth=3, # 较小的树深度,防止过拟合
|
||
min_child_weight=3, # 控制过拟合
|
||
subsample=0.8, # 随机采样,增加模型鲁棒性
|
||
colsample_bytree=0.8, # 特征采样,防止过拟合
|
||
objective='reg:squarederror' # 回归任务
|
||
)
|
||
```
|
||
|
||
2. LightGBM (Light Gradient Boosting Machine)
|
||
|
||
- 特点:
|
||
- 基于直方图的决策树算法,训练速度快
|
||
- 支持类别特征的直接输入
|
||
- 叶子优先的生长策略
|
||
- 内存占用小
|
||
- 配置:
|
||
|
||
```python
|
||
LGBMRegressor(
|
||
n_estimators=100,
|
||
learning_rate=0.1,
|
||
max_depth=3,
|
||
num_leaves=8, # 控制树的复杂度
|
||
subsample=0.8,
|
||
colsample_bytree=0.8,
|
||
objective='regression'
|
||
)
|
||
```
|
||
|
||
3. GBDT (Gradient Boosting Decision Tree)
|
||
|
||
- 特点:
|
||
- 经典的梯度提升算法
|
||
- 较好的可解释性
|
||
- 对异常值不敏感
|
||
- 预测稳定性好
|
||
- 配置:
|
||
|
||
```python
|
||
GradientBoostingRegressor(
|
||
n_estimators=100,
|
||
learning_rate=0.1,
|
||
max_depth=3,
|
||
subsample=0.8
|
||
)
|
||
```
|
||
|
||
4. Random Forest (随机森林)
|
||
|
||
- 特点:
|
||
- Bagging集成方法
|
||
- 训练过程可并行化
|
||
- 不易过拟合
|
||
- 对特征尺度不敏感
|
||
- 配置:
|
||
|
||
```python
|
||
RandomForestRegressor(
|
||
n_estimators=100,
|
||
max_depth=3,
|
||
min_samples_split=3,
|
||
min_samples_leaf=2
|
||
)
|
||
```
|
||
|
||
#### 2.2 模型选择策略
|
||
|
||
1. 交叉验证
|
||
|
||
- 小样本数据集使用留一法(LOO)交叉验证
|
||
- 大样本数据集使用5折交叉验证
|
||
|
||
2. 模型评估指标
|
||
|
||
- R²分数:评估拟合优度
|
||
- 标准差:评估预测稳定性
|
||
- MAE:评估预测误差
|
||
- MSE:惩罚较大误差
|
||
|
||
3. 自动模型选择
|
||
|
||
- 对每个模型进行交叉验证评估
|
||
- 选择R²分数最高的模型
|
||
- 保存模型训练历史记录
|
||
|
||
#### 2.3 特征工程与模型优化
|
||
|
||
1. 特征选择
|
||
|
||
- 使用模型的特征重要性评分
|
||
- 基于互信息的特征筛选
|
||
- 相关性分析去除冗余特征
|
||
|
||
2. 参数优化
|
||
|
||
- 针对小样本:
|
||
- 减小模型复杂度(树的深度和数量)
|
||
- 增加正则化强度
|
||
- 使用较大的学习率
|
||
- 针对大样本:
|
||
- 增加模型复杂度
|
||
- 减小学习率
|
||
- 使用特征采样
|
||
|
||
3. 集成策略
|
||
|
||
- 模型投票:综合多个模型的预测结果
|
||
- 置信区间:使用bootstrap方法估计预测不确定性
|
||
- 异常检测:识别并处理异常预测值
|
||
|
||
### 3. 成本预测模块
|
||
|
||
- 数据标准化处理
|
||
- 模型预测流程
|
||
- 置信区间计算
|
||
- 预测评估指标
|
||
- MAE(平均绝对误差)
|
||
- MSE(均方误差)
|
||
- RMSE(均方根误差)
|
||
- R²(决定系数)
|
||
|
||
### 4. 数据管理模块
|
||
|
||
#### 4.1 数据查询优化
|
||
|
||
1. 特殊参数查询策略
|
||
|
||
- 使用子查询替代 JOIN 操作,避免数据重复和空值问题
|
||
- 使用 COALESCE 确保返回空数组而不是 NULL
|
||
- 在 WHERE 子句中添加条件确保只获取有效参数
|
||
- 简化查询结构,移除不必要的 GROUP BY 子句
|
||
|
||
2. 查询性能优化
|
||
|
||
- 数据结构清晰,每个装备保持单一记录
|
||
- 特殊参数组织在 JSON 数组中
|
||
- 避免空值和无效数据的显示
|
||
- 优化查询性能,减少复杂的 JOIN 和 GROUP BY 操作
|
||
|
||
#### 4.2 数据展示
|
||
|
||
1. 基本信息展示
|
||
|
||
- 装备基本参数表格展示
|
||
- 支持搜索和过滤功能
|
||
- 分类显示不同类型装备数据
|
||
|
||
2. 特殊参数展示
|
||
|
||
- 在详情页面显示装备特有参数
|
||
- 支持特殊参数的格式化显示
|
||
- 根据参数类型自动添加单位
|
||
- 区分数值类型和文本类型参数
|
||
|
||
3. 数据编辑功能
|
||
|
||
- 支持基本参数和特殊参数的编辑
|
||
- 根据参数类型提供不同的编辑控件
|
||
- 数值类型参数支持精度控制
|
||
- 保存时进行数据验证
|
||
|
||
#### 4.3 数据维护
|
||
|
||
1. 数据导入导出
|
||
|
||
- 支持 Excel 模板导入
|
||
- 提供数据模板下载
|
||
- 导入时进行数据验证和错误提示
|
||
|
||
2. 数据删除
|
||
|
||
- 级联删除相关数据
|
||
- 删除前进行确认
|
||
- 删除后自动刷新数据列表
|
||
|
||
3. 数据更新
|
||
|
||
- 支持单条记录更新
|
||
- 保存时进行数据完整性验证
|
||
- 更新后实时刷新显示
|
||
|
||
#### 4.4 扩展性设计
|
||
|
||
1. 参数管理
|
||
|
||
- 支持动态添加特殊参数
|
||
- 参数定义包含名称、单位、说明等
|
||
- 支持参数值类型定义
|
||
|
||
2. 数据结构
|
||
|
||
- 采用灵活的数据模型设计
|
||
- 支持不同类型装备的差异化参数
|
||
- 便于后续功能扩展
|
||
|
||
3. 接口设计
|
||
|
||
- RESTful API 设计
|
||
- 统一的响应格式
|
||
- 完善的错误处理机制
|
||
|
||
## 五、API接口设计
|
||
|
||
### 1. 成本预测接口
|
||
|
||
- 路径:POST /api/predict
|
||
- 必要参数:
|
||
- length_m: 总长
|
||
- width_m: 宽度
|
||
- height_m: 高度
|
||
- weight_standard_kg: 标准重量
|
||
- weight_combat_kg: 战斗重量
|
||
- max_range_km: 最大射程
|
||
- max_speed_ms: 最大速度
|
||
- 响应数据:
|
||
- predicted_cost: 预测成本
|
||
- confidence_interval: 置信区间(上下限)
|
||
|
||
### 2. 特征分析接口
|
||
|
||
- 路径:POST /api/analyze-features
|
||
- 响应数据:
|
||
- important_features: 重要特征列表
|
||
- correlation_analysis: 相关性分析结果
|
||
|
||
## 六、部署要求
|
||
|
||
### 1. 环境要求
|
||
|
||
- Python 3.8+
|
||
- PostgreSQL 12+
|
||
- Node.js 14+
|
||
|
||
### 2. 依赖包
|
||
|
||
- Flask
|
||
- NumPy
|
||
- Pandas
|
||
- Scikit-learn
|
||
- TensorFlow
|
||
- SQLAlchemy
|
||
|
||
### 3. 部署步骤
|
||
|
||
1. 数据库初始化
|
||
- 创建数据库
|
||
- 执行表结构脚本
|
||
- 导入基础数据
|
||
2. 后端服务部署
|
||
- 安装依赖包
|
||
- 配置环境变量
|
||
- 启动服务
|
||
3. 前端部署
|
||
- 安装依赖
|
||
- 构建生产版本
|
||
- 配置Nginx
|
||
|
||
## 七、后续优化建议
|
||
|
||
### 1. 特征工程优化
|
||
|
||
- 增加更多领域特征
|
||
- 火力密度指标
|
||
- 机动性综合指标
|
||
- 作战效能指标
|
||
- 优化特征选择算法
|
||
- 增强数据清洗能力
|
||
|
||
### 2. 模型优化
|
||
|
||
- 引入集成学习方法
|
||
- Random Forest
|
||
- XGBoost
|
||
- LightGBM
|
||
- 实现模型自动调优
|
||
- 增加在线学习能力
|
||
|
||
### 3. 系统优化
|
||
|
||
- 增加批量处理能力
|
||
- 实现模型版本管理
|
||
- 提升预测结果可解释性
|
||
- 优化系统性能
|
||
- 数据库索引优化
|
||
- 缓存策略
|
||
- API性能优化
|
||
|
||
### 4. 安全性优化
|
||
|
||
- 数据加密存储
|
||
- API访问认证
|
||
- 操作日志记录
|
||
- 数据备份策略
|
||
|
||
## 八、项目进度规划
|
||
|
||
### 第一阶段:基础功能开发(4周)
|
||
|
||
1. 数据库设计和实现
|
||
2. 特征工程模块开发
|
||
3. 基础API实现
|
||
|
||
### 第二阶段:模型开发(4周)
|
||
|
||
1. 数据预处理
|
||
2. 模型训练与优化
|
||
3. 预测功能实现
|
||
|
||
### 第三阶段:系统集成(3周)
|
||
|
||
1. 前端开发
|
||
2. 系统集成测试
|
||
3. 性能优化
|
||
|
||
### 第四阶段:系统测试与部署(2周)
|
||
|
||
1. 系统测试
|
||
2. 部署上线
|
||
3. 文档完善
|
||
|
||
### 2.4 数据集划分策略
|
||
|
||
#### 2.4.1 基本原则
|
||
|
||
1. 数据量分配
|
||
- 训练集:约80%的数据
|
||
- 验证集:约20%的数据
|
||
- 确保数据集大小适合模型训练
|
||
|
||
2. 数据分布均衡
|
||
- 不同价格区间的装备均匀分布
|
||
- 不同制造商的产品保持代表性
|
||
- 不同技术代际的装备都要包含
|
||
- 不同性能等级的装备要均衡
|
||
|
||
3. 特征覆盖
|
||
- 确保关键特征的取值范围覆盖完整
|
||
- 避免某些特征在验证集中出现极端值
|
||
- 保持特征分布的相似性
|
||
|
||
#### 2.4.2 具体策略
|
||
|
||
1. 价格区间分层
|
||
- 高价格装备(>500万美元)
|
||
- 中等价格装备(200-500万美元)
|
||
- 低价格装备(<200万美元)
|
||
- 每个价格区间按8:2比例分配
|
||
|
||
2. 制造商分布
|
||
- 主要制造商的产品都要在训练集和验证集中有代表
|
||
- 每个制造商至少保留一个型号在验证集中
|
||
- 系列装备要适当分散在两个数据集中
|
||
|
||
3. 技术特征考虑
|
||
- 口径分布:小口径(≤200mm)、中口径(200-300mm)、大口径(>300mm)
|
||
- 射程分布:近程、中程、远程
|
||
- 发射平台:轮式、履带式
|
||
- 制导水平:不同制导等级的均衡分布
|
||
|
||
4. 时代分布
|
||
- 新型装备和老式装备都要包含
|
||
- 不同代际的装备要保持合理比例
|
||
- 确保模型对新老装备都有良好的预测能力
|
||
|
||
#### 2.4.3 验证方法
|
||
|
||
1. 数据分布检验
|
||
- 使用统计方法验证两个数据集的分布相似性
|
||
- 检查关键特征的均值和方差
|
||
- 验证分类特征的比例分布
|
||
|
||
2. 代表性检验
|
||
- 确保每个重要类别都有足够的样本
|
||
- 验证特征空间的覆盖情况
|
||
- 检查是否存在数据偏差
|
||
|
||
3. 完整性检验
|
||
- 验证数据集的完整性
|
||
- 检查关键字段的缺失情况
|
||
- 确保数据质量满足要求
|
||
|
||
#### 2.4.4 实例说明
|
||
|
||
以火箭炮数据为例(67个型号):
|
||
|
||
1. 训练集(54个型号)
|
||
- 中国系列:7/9型号
|
||
- 俄罗斯系列:4/5型号
|
||
- 美国系列:3/4型号
|
||
- 以色列系列:3/4型号
|
||
- 韩国系列:2/3型号
|
||
- 土耳其系列:2/3型号
|
||
- 巴西系列:3/4型号
|
||
- 印度系列:3/4型号
|
||
- 波兰系列:3/4型号
|
||
- 南非系列:3/4型号
|
||
- 伊朗系列:6/7型号
|
||
- 乌克兰系列:3/4型号
|
||
- 白俄罗斯系列:2/3型号
|
||
- 阿联酋系列:2/3型号
|
||
- 新加坡系列:2/3型号
|
||
- 日本系列:2/3型号
|
||
|
||
2. 验证集(13个型号)
|
||
- 每个制造商选择1-2个代表型号
|
||
- 覆盖不同价格区间
|
||
- 包含新老装备
|
||
- 确保性能参数分布合理
|
||
|
||
这种划分方式确保了:
|
||
|
||
1. 训练集和验证集都包含各个制造商的产品
|
||
2. 不同价格区间的装备都有代表
|
||
3. 不同技术水平的装备都被覆盖
|
||
4. 特征分布保持相似性
|
||
|
||
### 2.5 火箭炮特征工程设计
|
||
|
||
#### 2.5.1 设计原则
|
||
|
||
1. 物理意义
|
||
- 特征必须具有明确的物理意义
|
||
- 反映装备的实际性能特点
|
||
- 便于专业人员理解和解释
|
||
|
||
2. 可计算性
|
||
- 基于已有参数计算得出
|
||
- 计算方法科学合理
|
||
- 避免过于复杂的计算
|
||
|
||
3. 区分度
|
||
- 能够反映不同装备间的差异
|
||
- 具有合适的数值范围
|
||
- 避免过于集中的分布
|
||
|
||
4. 完整性
|
||
- 覆盖关键性能维度
|
||
- 包含技术和战术层面
|
||
- 形成完整的评估体系
|
||
|
||
#### 2.5.2 特征设计
|
||
|
||
1. 火力密度(fire_density)
|
||
- 定义:单位面积的火力输出能力
|
||
- 计算:射速 / (火箭弹直径² / 1000000)
|
||
- 单位:发/分钟/平方米
|
||
- 意义:反映武器系统的火力集中程度
|
||
|
||
```sql
|
||
fire_density = rate_of_fire / (rocket_diameter_mm * rocket_diameter_mm / 1000000)
|
||
```
|
||
|
||
2. 射程比(range_ratio)
|
||
- 定义:最大射程与最小射程的比值
|
||
- 计算:最大射程 / 最小射程
|
||
- 意义:反映火箭炮的射程适应性
|
||
|
||
```sql
|
||
range_ratio = max_range_km / NULLIF(min_range_km, 0)
|
||
```
|
||
|
||
3. 机动性评分(mobility_score)
|
||
- 定义:基于底盘类型的机动能力评分
|
||
- 计算范围:1-10分
|
||
- 评分标准:
|
||
|
||
```sql
|
||
CASE
|
||
WHEN mobility_type = '轮式' AND structure_layout LIKE '%8x8%' THEN 9
|
||
WHEN mobility_type = '轮式' AND structure_layout LIKE '%6x6%' THEN 8
|
||
WHEN mobility_type = '轮式' AND structure_layout LIKE '%4x4%' THEN 7
|
||
WHEN mobility_type = '履带式' THEN 6
|
||
ELSE 5
|
||
END
|
||
```
|
||
|
||
4. 战备状态评分(combat_readiness_score)
|
||
- 定义:基于射速的快速反应能力评分
|
||
- 计算范围:1-10分
|
||
- 评分标准:
|
||
|
||
```sql
|
||
CASE
|
||
WHEN rate_of_fire >= 30 THEN 10
|
||
WHEN rate_of_fire >= 20 THEN 8
|
||
WHEN rate_of_fire >= 10 THEN 6
|
||
ELSE 4
|
||
END
|
||
```
|
||
|
||
5. 火箭弹功重比(rocket_power_ratio)
|
||
- 定义:火箭弹重量与长度的比值
|
||
- 计算:火箭弹重量 / 火箭弹长度
|
||
- 意义:反映火箭弹的设计效率
|
||
|
||
```sql
|
||
rocket_power_ratio = rocket_weight_kg / NULLIF(rocket_length_m, 0)
|
||
```
|
||
|
||
6. 平台效率(platform_efficiency)
|
||
- 定义:单位重量的火力输出能力
|
||
- 计算:(射速 / 战斗重量) * 1000
|
||
- 意义:反映发射平台的效率
|
||
|
||
```sql
|
||
platform_efficiency = rate_of_fire / NULLIF(combat_weight_kg, 0) * 1000
|
||
```
|
||
|
||
7. 部署评分(deployment_score)
|
||
- 定义:综合机动性和射速的部署能力评分
|
||
- 计算范围:1-10分
|
||
- 评分标准:
|
||
|
||
```sql
|
||
CASE
|
||
WHEN mobility_type = '轮式' AND rate_of_fire >= 20 THEN 9
|
||
WHEN mobility_type = '轮式' AND rate_of_fire >= 10 THEN 8
|
||
WHEN mobility_type = '履带式' AND rate_of_fire >= 20 THEN 7
|
||
WHEN mobility_type = '履带式' AND rate_of_fire >= 10 THEN 6
|
||
ELSE 5
|
||
END
|
||
```
|
||
|
||
8. 地形适应性评分(terrain_adaptability_score)
|
||
- 定义:基于底盘类型的地形适应能力评分
|
||
- 计算范围:1-10分
|
||
- 评分标准:
|
||
|
||
```sql
|
||
CASE
|
||
WHEN mobility_type = '履带式' THEN 9
|
||
WHEN mobility_type = '轮式' AND structure_layout LIKE '%8x8%' THEN 8
|
||
WHEN mobility_type = '轮式' AND structure_layout LIKE '%6x6%' THEN 7
|
||
WHEN mobility_type = '轮式' AND structure_layout LIKE '%4x4%' THEN 6
|
||
ELSE 5
|
||
END
|
||
```
|
||
|
||
#### 2.5.3 特征验证
|
||
|
||
1. 数值范围验证
|
||
- 检查特征值的合理性
|
||
- 识别异常值和极端值
|
||
- 确保计算结果在预期范围内
|
||
|
||
2. 区分度验证
|
||
- 检查特征值的分布情况
|
||
- 验证不同装备间的差异性
|
||
- 确保特征具有足够的区分能力
|
||
|
||
3. 相关性分析
|
||
- 检查特征间的相关性
|
||
- 识别冗余特征
|
||
- 确保特征集的独立性
|
||
|
||
4. 实用性验证
|
||
- 评估特征对成本预测的贡献
|
||
- 检验特征的可解释性
|
||
- 确保特征的实际应用价值
|
||
|
||
#### 2.5.4 应用建议
|
||
|
||
1. 特征选择
|
||
- 根据具体任务选择合适的特征子集
|
||
- 考虑特征的重要性排序
|
||
- 平衡特征数量和模型复杂度
|
||
|
||
2. 特征更新
|
||
- 定期评估特征的有效性
|
||
- 根据新数据调整计算参数
|
||
- 及时更新评分标准
|
||
|
||
3. 特征组合
|
||
- 考虑特征间的组合效应
|
||
- 设计复合特征
|
||
- 探索特征交互作用
|