修改了特征图表的显示和巡飞弹数据载入文件
This commit is contained in:
parent
092398c6df
commit
04e43760ae
31
.cursorrules
31
.cursorrules
@ -1,4 +1,3 @@
|
||||
|
||||
# 代码修改最佳实践
|
||||
|
||||
1. 修改前的准备
|
||||
@ -56,3 +55,33 @@
|
||||
- 处理异常情况
|
||||
- 保护敏感信息
|
||||
- 添加访问控制
|
||||
|
||||
9. 中文处理规则
|
||||
|
||||
- 不修改任何包含中文的注释行
|
||||
- 使用 `// ... existing code ...` 跳过包含中文的代码块
|
||||
- 如需修改中文附近的代码,应完整保留原有中文内容
|
||||
|
||||
示例:
|
||||
```
|
||||
// ... existing code ...
|
||||
// 这是中文注释,保持不变
|
||||
newCode = value;
|
||||
// ... existing code ...
|
||||
```
|
||||
|
||||
10. 编码规则
|
||||
|
||||
- 所有文件统一使用 UTF-8 编码
|
||||
- 不使用 BOM 头
|
||||
- 换行符统一使用 LF (\n)
|
||||
- 文件末尾保留一个换行符
|
||||
- 代码注释中的中文必须使用 UTF-8 编码
|
||||
|
||||
配置示例:
|
||||
```json
|
||||
{
|
||||
"charset": "utf-8",
|
||||
"end_of_line": "lf",
|
||||
"insert_final_newline": true
|
||||
}
|
||||
@ -26,10 +26,10 @@
|
||||
- Windows 操作系统 (推荐 Windows 10+)
|
||||
|
||||
- Python 3.12 及相关组件
|
||||
参考:https://www.python.org/downloads/
|
||||
参考:<https://www.python.org/downloads/>
|
||||
|
||||
- Node.js 14+ 及 npm
|
||||
参考:https://learn.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-windows
|
||||
参考:<https://learn.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-windows>
|
||||
|
||||
```bash
|
||||
# 设置执行策略
|
||||
@ -45,7 +45,7 @@ set-executionpolicy remotesigned
|
||||
sudo apt install libmysqlclient-dev
|
||||
```
|
||||
|
||||
Windows 参考:https://dev.mysql.com/downloads/installer/
|
||||
Windows 参考:<https://dev.mysql.com/downloads/installer/>
|
||||
|
||||
### 3. Python包依赖
|
||||
|
||||
@ -88,18 +88,19 @@ pip install -r requirements.txt --trusted-host pypi.tuna.tsinghua.edu.cn
|
||||
```
|
||||
|
||||
### 4. 科学计算相关
|
||||
|
||||
sudo apt install libatlas-base-dev # numpy依赖
|
||||
sudo apt install libopenblas-dev # 线性代数库
|
||||
sudo apt install liblapack-dev # 线性代数包
|
||||
sudo apt install gfortran # Fortran编译器(scipy依赖)
|
||||
|
||||
# XML处理相关(用于Excel文件处理)
|
||||
## XML处理相关(用于Excel文件处理)
|
||||
|
||||
```bash
|
||||
sudo apt install libxml2-dev
|
||||
sudo apt install libxslt1-dev
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 二、部署运行
|
||||
|
||||
### 1. 安装服务
|
||||
|
||||
@ -22,7 +22,8 @@ cd cost-prediction
|
||||
cd frontend
|
||||
|
||||
# 安装依赖
|
||||
npm install
|
||||
npm install 22
|
||||
nvm use 22
|
||||
|
||||
# 构建生产版本
|
||||
npm run build
|
||||
@ -48,13 +49,9 @@ pip install -e .
|
||||
|
||||
```powershell
|
||||
# 确保 MySQL 服务已启动
|
||||
net start MySQL80
|
||||
|
||||
# 初始化数据库和导入数据
|
||||
.\scripts\init_db.ps1
|
||||
|
||||
# 运行数据库配置脚本
|
||||
.\scripts\setup_env.ps1
|
||||
```
|
||||
|
||||
6. 运行测试
|
||||
|
||||
2368
frontend/package-lock.json
generated
2368
frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -406,13 +406,12 @@ const renderCharts = () => {
|
||||
const importanceOption = {
|
||||
title: { text: '特征重要性排序' },
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
trigger: 'item',
|
||||
axisPointer: {
|
||||
type: 'shadow'
|
||||
},
|
||||
formatter: function(params) {
|
||||
const data = params[0]
|
||||
return `${data.name}: ${data.value.toFixed(4)}`
|
||||
return `${params.name}: ${params.value.toFixed(1)}`
|
||||
}
|
||||
},
|
||||
xAxis: {
|
||||
|
||||
@ -795,38 +795,6 @@ onMounted(() => {
|
||||
loadData()
|
||||
})
|
||||
|
||||
// 判断是否为数值类型输入字段
|
||||
const isNumberInput = (key) => {
|
||||
const numberFields = [
|
||||
'length_m',
|
||||
'width_m',
|
||||
'height_m',
|
||||
'weight_kg',
|
||||
'max_range_km',
|
||||
'firing_angle_horizontal',
|
||||
'firing_angle_vertical',
|
||||
'rocket_length_m',
|
||||
'rocket_diameter_mm',
|
||||
'rocket_weight_kg',
|
||||
'rate_of_fire',
|
||||
'combat_weight_kg',
|
||||
'speed_kmh',
|
||||
'min_range_km',
|
||||
'power_hp',
|
||||
'travel_range_km',
|
||||
'max_speed_ms',
|
||||
'cruise_speed_kmh',
|
||||
'flight_time_min',
|
||||
'folded_length_mm',
|
||||
'folded_width_mm',
|
||||
'folded_height_mm',
|
||||
'actual_cost',
|
||||
'predicted_cost'
|
||||
]
|
||||
|
||||
return numberFields.includes(key)
|
||||
}
|
||||
|
||||
// 获取下拉选项
|
||||
const getSelectOptions = (field) => {
|
||||
switch (field) {
|
||||
|
||||
@ -285,7 +285,7 @@ INSERT INTO loitering_munition_params (
|
||||
(24, 2.8, 8.0, 70, 180, 240, 50, 10.0, 4000, 25, '破片杀伤/破甲双用战斗部', '箱式发射', '活塞发动机', 'GPS/INS/光电/数据链/AI辅助'),
|
||||
(25, 3.0, 9.0, 75, 190, 270, 60, 11.0, 4500, 30, '破片杀伤/破甲双用战斗部', '箱式发射', '活塞发动机', 'GPS/INS/光电/数据链/AI辅助'),
|
||||
(26, 3.2, 10.0, 80, 200, 300, 70, 12.0, 5000, 35, '模块化战斗部', '箱式发射', '活塞发动机', 'GPS/INS/光电/数据链/AI辅助/红外'),
|
||||
(27, 3.5, 15.0, 85, 220, 360, 100, 18.0, 6000, 50, '模块化战斗部', '箱式发射', '活塞发动机', 'GPS/INS/光电/数据链/AI辅助/红<EFBFBD><EFBFBD><EFBFBD>'),
|
||||
(27, 3.5, 15.0, 85, 220, 360, 100, 18.0, 6000, 50, '模块化战斗部', '箱式发射', '活塞发动机', 'GPS/INS/光电/数据链/AI辅助/红外/卫通'),
|
||||
(28, 3.6, 16.0, 90, 230, 400, 120, 20.0, 6500, 60, '模块化战斗部', '箱式发射', '活塞发动机', 'GPS/INS/光电/数据链/AI辅助/红外/卫通'),
|
||||
(29, 1.2, 1.0, 40, 90, 30, 5, 1.5, 1500, 3, '破片杀伤战斗部', '垂直起降', '电动机', 'GPS/INS/光电/AI辅助'),
|
||||
(30, 1.3, 1.2, 45, 100, 40, 8, 2.0, 2000, 4, '破片杀伤战斗部', '垂直起降', '电动机', 'GPS/INS/光电/AI辅助'),
|
||||
@ -338,7 +338,7 @@ INSERT INTO loitering_munition_params (
|
||||
(77, 2.8, 40.0, 250, 200, 120, 180, 50.0, 5500, 90, '破甲战斗部', '空中发射', '涡轮喷气', 'GPS/INS/光电/数据链/AI辅助'), -- SmartGlider Light
|
||||
(78, 3.2, 80.0, 230, 180, 150, 200, 100.0, 6000, 100, '破甲战斗部', '空中发射', '涡轮喷气', 'GPS/INS/光电/数据链/AI辅助'), -- SmartGlider Heavy
|
||||
(79, 1.5, 3.5, 160, 140, 60, 50, 5.0, 3500, 25, '破片杀伤战斗部', '箱式发射', '电动机', 'GPS/INS/光电/AI辅助'), -- Taifun
|
||||
(80, 1.8, 4.5, 180, 150, 80, 70, 6.0, 4000, 35, '破片杀伤战斗部', '箱式发射', '电<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>', 'GPS/INS/光电/AI辅助/红外'), -- Taifun-K
|
||||
(80, 1.8, 4.5, 180, 150, 80, 70, 6.0, 4000, 35, '破片杀伤战斗部', '箱式发射', '电动机', 'GPS/INS/光电/AI辅助/红外'), -- Taifun-K
|
||||
(81, 1.5, 3.0, 120, 100, 60, 40, 4.0, 3000, 20, '破片杀伤战斗部', '箱式发射', '电动机', 'GPS/INS/光电/数据链/AI辅助'), -- HERO-ES
|
||||
(82, 2.0, 5.0, 140, 120, 90, 60, 6.0, 4000, 30, '破片杀伤/破甲双用战斗部', '箱式发射', '电动机', 'GPS/INS/光电/数据链/AI辅助'), -- HERO-ER
|
||||
(83, 2.5, 8.0, 160, 140, 120, 80, 10.0, 5000, 40, '破片杀伤/破甲双用战斗部', '箱式发射', '活塞发动机', 'GPS/INS/光电/数据链/AI辅助/红外'), -- HERO-XL
|
||||
@ -574,8 +574,8 @@ SET description = '包含20个巡飞弹型号,覆盖所有主要制造国,
|
||||
WHERE id = 2;
|
||||
|
||||
-- 更新巡飞弹特征工程字段
|
||||
UPDATE loitering_munition_params l
|
||||
JOIN common_params c ON l.equipment_id = c.equipment_id
|
||||
-- 第一步:更新基于common_params的特征
|
||||
UPDATE loitering_munition_params l, common_params c, equipments e
|
||||
SET
|
||||
-- 长宽比(反映气动布局特点)
|
||||
l.length_width_ratio = c.length_m / NULLIF(c.width_m, 0),
|
||||
@ -586,61 +586,6 @@ SET
|
||||
-- 速度重量比(反映动力性能,m/s/kg)
|
||||
l.speed_weight_ratio = l.max_speed_ms / NULLIF(c.weight_kg, 0),
|
||||
|
||||
-- 制导系统评分(1-10)
|
||||
l.guidance_system_score =
|
||||
CASE
|
||||
WHEN l.guidance_system LIKE '%卫通%' THEN 10
|
||||
WHEN l.guidance_system LIKE '%AI辅助%' AND l.guidance_system LIKE '%红外%' THEN 9
|
||||
WHEN l.guidance_system LIKE '%AI辅助%' THEN 8
|
||||
WHEN l.guidance_system LIKE '%数据链%' AND l.guidance_system LIKE '%光电%' THEN 7
|
||||
WHEN l.guidance_system LIKE '%数据链%' THEN 6
|
||||
WHEN l.guidance_system LIKE '%光电%' THEN 5
|
||||
WHEN l.guidance_system LIKE '%GPS/INS%' THEN 4
|
||||
ELSE 3
|
||||
END,
|
||||
|
||||
-- 战斗部威力评分(1-10)
|
||||
l.warhead_power_score =
|
||||
CASE
|
||||
-- 大型战斗部(>30kg)
|
||||
WHEN l.warhead_weight_kg > 30 AND l.warhead_type LIKE '%模块化%' THEN 10
|
||||
WHEN l.warhead_weight_kg > 30 AND l.warhead_type LIKE '%破甲%' THEN 9
|
||||
WHEN l.warhead_weight_kg > 30 AND l.warhead_type LIKE '%破片%' THEN 8
|
||||
|
||||
-- 中型战斗部(10-30kg)
|
||||
WHEN l.warhead_weight_kg > 10 AND l.warhead_type LIKE '%模块化%' THEN 8
|
||||
WHEN l.warhead_weight_kg > 10 AND l.warhead_type LIKE '%破甲%' THEN 7
|
||||
WHEN l.warhead_weight_kg > 10 AND l.warhead_type LIKE '%破片%' THEN 6
|
||||
|
||||
-- 小型战斗部(3-10kg)
|
||||
WHEN l.warhead_weight_kg > 3 AND l.warhead_type LIKE '%模块化%' THEN 6
|
||||
WHEN l.warhead_weight_kg > 3 AND l.warhead_type LIKE '%破甲%' THEN 5
|
||||
WHEN l.warhead_weight_kg > 3 AND l.warhead_type LIKE '%破片%' THEN 4
|
||||
|
||||
-- 微型战斗部(<3kg)
|
||||
WHEN l.warhead_type LIKE '%破甲%' THEN 3
|
||||
WHEN l.warhead_type LIKE '%破片%' THEN 2
|
||||
ELSE 1
|
||||
END,
|
||||
|
||||
-- 发动机功率(kW,根据重量估算)
|
||||
l.engine_power_kw =
|
||||
CASE
|
||||
WHEN l.power_system = '电动机' THEN c.weight_kg * 0.15
|
||||
WHEN l.power_system = '活塞发动机' THEN c.weight_kg * 0.25
|
||||
WHEN l.power_system = '涡轮喷气' THEN c.weight_kg * 0.35
|
||||
ELSE c.weight_kg * 0.2
|
||||
END,
|
||||
|
||||
-- 发动机推力(N,根据重量估算)
|
||||
l.engine_thrust_n =
|
||||
CASE
|
||||
WHEN l.power_system = '电动机' THEN c.weight_kg * 9.8 * 0.3
|
||||
WHEN l.power_system = '活塞发动机' THEN c.weight_kg * 9.8 * 0.4
|
||||
WHEN l.power_system = '涡轮喷气' THEN c.weight_kg * 9.8 * 0.5
|
||||
ELSE c.weight_kg * 9.8 * 0.35
|
||||
END,
|
||||
|
||||
-- 最小作战高度(m,根据体型和任务类型估算)
|
||||
l.min_altitude_m =
|
||||
CASE
|
||||
@ -660,18 +605,102 @@ SET
|
||||
ELSE 30
|
||||
END,
|
||||
|
||||
-- 最大作战高度(m,根据航程估算)
|
||||
l.max_altitude_m =
|
||||
-- 发动机功率(kW,根据重量估算)
|
||||
l.engine_power_kw =
|
||||
CASE
|
||||
WHEN l.max_range_km > 500 THEN 5000
|
||||
WHEN l.max_range_km > 100 THEN 3000
|
||||
WHEN power_system = '电动机' THEN c.weight_kg * 0.15
|
||||
WHEN power_system = '活塞发动机' THEN c.weight_kg * 0.25
|
||||
WHEN power_system = '涡轮喷气' THEN c.weight_kg * 0.35
|
||||
ELSE c.weight_kg * 0.2
|
||||
END,
|
||||
|
||||
-- 发动机推力(N,根据重量估算)
|
||||
l.engine_thrust_n =
|
||||
CASE
|
||||
WHEN power_system = '电动机' THEN c.weight_kg * 9.8 * 0.3
|
||||
WHEN power_system = '活塞发动机' THEN c.weight_kg * 9.8 * 0.4
|
||||
WHEN power_system = '涡轮喷气' THEN c.weight_kg * 9.8 * 0.5
|
||||
ELSE c.weight_kg * 9.8 * 0.35
|
||||
END
|
||||
|
||||
WHERE
|
||||
l.equipment_id = c.equipment_id
|
||||
AND l.equipment_id = e.id
|
||||
AND e.type = '巡飞弹';
|
||||
|
||||
-- 第二步:更新基于自身参数的特征
|
||||
UPDATE loitering_munition_params
|
||||
SET
|
||||
-- 制导系统评分(1-10)
|
||||
guidance_system_score =
|
||||
CASE
|
||||
WHEN guidance_system LIKE '%卫通%' THEN 10
|
||||
WHEN guidance_system LIKE '%AI辅助%' AND guidance_system LIKE '%红外%' THEN 9
|
||||
WHEN guidance_system LIKE '%AI辅助%' THEN 8
|
||||
WHEN guidance_system LIKE '%数据链%' AND guidance_system LIKE '%光电%' THEN 7
|
||||
WHEN guidance_system LIKE '%数据链%' THEN 6
|
||||
WHEN guidance_system LIKE '%光电%' THEN 5
|
||||
WHEN guidance_system LIKE '%GPS/INS%' THEN 4
|
||||
ELSE 3
|
||||
END,
|
||||
|
||||
-- 战斗部威力评分(1-10)
|
||||
warhead_power_score =
|
||||
CASE
|
||||
-- 大型战斗部(>30kg)
|
||||
WHEN warhead_weight_kg > 30 AND warhead_type LIKE '%模块化%' THEN 10
|
||||
WHEN warhead_weight_kg > 30 AND warhead_type LIKE '%破甲%' THEN 9
|
||||
WHEN warhead_weight_kg > 30 AND warhead_type LIKE '%破片%' THEN 8
|
||||
|
||||
-- 中型战斗部(10-30kg)
|
||||
WHEN warhead_weight_kg > 10 AND warhead_type LIKE '%模块化%' THEN 8
|
||||
WHEN warhead_weight_kg > 10 AND warhead_type LIKE '%破甲%' THEN 7
|
||||
WHEN warhead_weight_kg > 10 AND warhead_type LIKE '%破片%' THEN 6
|
||||
|
||||
-- 小型战斗部(3-10kg)
|
||||
WHEN warhead_weight_kg > 3 AND warhead_type LIKE '%模块化%' THEN 6
|
||||
WHEN warhead_weight_kg > 3 AND warhead_type LIKE '%破甲%' THEN 5
|
||||
WHEN warhead_weight_kg > 3 AND warhead_type LIKE '%破片%' THEN 4
|
||||
|
||||
-- 微型战斗部(<3kg)
|
||||
WHEN warhead_type LIKE '%破甲%' THEN 3
|
||||
WHEN warhead_type LIKE '%破片%' THEN 2
|
||||
ELSE 1
|
||||
END,
|
||||
|
||||
-- 数据链范围(km)
|
||||
datalink_range_km =
|
||||
CASE
|
||||
-- 大型巡飞弹(通常具有卫星通信能力)
|
||||
WHEN guidance_system LIKE '%卫通%' THEN max_range_km
|
||||
|
||||
-- 中大型巡飞弹(具有较强数据链能力)
|
||||
WHEN guidance_system LIKE '%数据链%' AND max_range_km > 100 THEN LEAST(max_range_km, 200)
|
||||
|
||||
-- 中型巡飞弹
|
||||
WHEN guidance_system LIKE '%数据链%' AND max_range_km > 50 THEN LEAST(max_range_km, 100)
|
||||
|
||||
-- 小型巡飞弹
|
||||
WHEN guidance_system LIKE '%数据链%' THEN LEAST(max_range_km, 50)
|
||||
|
||||
-- 无数据链的情况(使用光电或其他制导方式)
|
||||
ELSE LEAST(max_range_km * 0.5, 30)
|
||||
END,
|
||||
|
||||
-- 最大作战高度(m,根据航程估算)
|
||||
max_altitude_m =
|
||||
CASE
|
||||
WHEN max_range_km > 500 THEN 5000
|
||||
WHEN max_range_km > 100 THEN 3000
|
||||
ELSE 1500
|
||||
END;
|
||||
|
||||
END
|
||||
|
||||
WHERE equipment_id IN (
|
||||
SELECT id FROM equipments WHERE type = '巡飞弹'
|
||||
);
|
||||
|
||||
-- 更新巡飞弹的制导精度
|
||||
UPDATE loitering_munition_params l
|
||||
UPDATE loitering_munition_params
|
||||
SET guidance_accuracy_m =
|
||||
CASE
|
||||
-- 基础精度(根据制导系统类型)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user