# 算法计算引擎

<cite>
**本文引用的文件**
- `src/app/services/entropy-weight.service.ts`
- `src/app/services/algorithm-merger.service.ts`
- `src/app/utils/rd-algorithm.ts`
- `src/app/services/api/ths-api.service/ths-entropy-analysis.service.ts`
- `src/app/calculation-engine/services/financial-indicators-analysis.service.ts`
- `src/app/calculation-engine/constants/financial-indicators.constants.ts`
- `src/app/calculation-engine/types/financial-indicators-analysis-data.interface.ts`
- `src/app/calculation-engine/services/parameter-settings.service.ts`
</cite>

## 目录
1. [引言](#引言)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)

## 引言
本技术文档聚焦于 GSDJGXApp 的算法计算引擎，围绕以下目标展开：
- 深入解析熵权法实现：信息熵计算、权重分配、标准化处理流程
- 深入解析 TOPSIS 综合评价算法：理想解确定、距离计算、排序生成
- 多维度指标计算系统：指标体系设计、计算流程优化、精度控制机制
- 算法并行化处理：任务分解、并发控制、结果合并
- 算法参数调优指南、性能基准测试、错误诊断方法
- 具体计算示例、中间结果展示与结果验证机制

## 项目结构
算法计算引擎主要分布在以下模块：
- 熵权法与距离分析：entropy-weight.service.ts、ths-entropy-analysis.service.ts
- 多算法结果合并：algorithm-merger.service.ts
- 研发费用摊销算法：rd-algorithm.ts
- 财务指标分析与存储：financial-indicators-analysis.service.ts、financial-indicators-analysis-data.interface.ts、financial-indicators.constants.ts
- 参数配置与指标映射：parameter-settings.service.ts

```mermaid
graph TB
subgraph "前端服务层"
EWS["熵权法服务<br/>entropy-weight.service.ts"]
TES["熵权分析服务<br/>ths-entropy-analysis.service.ts"]
AMS["算法合并服务<br/>algorithm-merger.service.ts"]
PSS["参数设置服务<br/>parameter-settings.service.ts"]
end
subgraph "工具与常量"
FIC["财务指标常量<br/>financial-indicators.constants.ts"]
FID["分析数据接口<br/>financial-indicators-analysis-data.interface.ts"]
end
subgraph "持久化与存储"
FIAS["财务指标分析服务<br/>financial-indicators-analysis.service.ts"]
end
subgraph "后端桥接"
Tauri["Tauri invoke 调用"]
end
EWS --> Tauri
TES --> Tauri
AMS --> EWS
PSS --> FIC
FIAS --> FID
EWS --> FIC
```

图表来源
- `src/app/services/entropy-weight.service.ts#L74-L500`
- `src/app/services/api/ths-api.service/ths-entropy-analysis.service.ts#L12-L146`
- `src/app/services/algorithm-merger.service.ts#L55-L346`
- `src/app/calculation-engine/services/financial-indicators-analysis.service.ts#L75-L584`
- `src/app/calculation-engine/constants/financial-indicators.constants.ts#L45-L489`
- `src/app/calculation-engine/types/financial-indicators-analysis-data.interface.ts#L194-L396`

章节来源
- `src/app/services/entropy-weight.service.ts#L74-L500`
- `src/app/services/algorithm-merger.service.ts#L55-L346`
- `src/app/utils/rd-algorithm.ts#L28-L812`
- `src/app/services/api/ths-api.service/ths-entropy-analysis.service.ts#L12-L146`
- `src/app/calculation-engine/services/financial-indicators-analysis.service.ts#L75-L584`
- `src/app/calculation-engine/constants/financial-indicators.constants.ts#L45-L489`
- `src/app/calculation-engine/types/financial-indicators-analysis-data.interface.ts#L194-L396`
- `src/app/calculation-engine/services/parameter-settings.service.ts#L101-L800`

## 核心组件
- 熵权法服务：封装熵权法全流程，包括距离矩阵计算、权重计算、标准化、加权矩阵与排序
- 熵权分析服务：从量化接口获取基础数据，组织多日期/多指标请求
- 算法合并服务：合并快速优选与全局最优算法结果，去重与最优选择
- 研发费用摊销算法：实现研发费用摊销余额计算，支持两种摊销方式
- 财务指标分析服务：负责分析数据的持久化、查询、解析与统计
- 财务指标常量与接口：定义指标体系、方向、计算类型与数据结构
- 参数设置服务：参数配置、指标映射、查询构建与版本比较

章节来源
- `src/app/services/entropy-weight.service.ts#L74-L500`
- `src/app/services/algorithm-merger.service.ts#L55-L346`
- `src/app/utils/rd-algorithm.ts#L28-L812`
- `src/app/calculation-engine/services/financial-indicators-analysis.service.ts#L75-L584`
- `src/app/calculation-engine/constants/financial-indicators.constants.ts#L45-L489`
- `src/app/calculation-engine/types/financial-indicators-analysis-data.interface.ts#L194-L396`
- `src/app/calculation-engine/services/parameter-settings.service.ts#L101-L800`

## 架构总览
算法计算引擎采用“前端服务 + Tauri 后端桥接 + 数据持久化”的分层架构：
- 前端服务负责业务编排与数据结构转换
- 通过 invoke 调用 Rust 后端执行高性能计算（熵权法、距离矩阵、标准化）
- 分析数据通过服务层进行序列化/反序列化与持久化
- 参数配置与指标映射贯穿整个计算链路

```mermaid
sequenceDiagram
participant UI as "界面"
participant EWS as "熵权法服务"
participant Tauri as "Tauri 后端"
participant REG as "注册表/映射"
UI->>EWS : 触发熵权分析
EWS->>REG : 获取指标名称/方向映射
EWS->>Tauri : calculate_entropy_analysis(请求)
Tauri-->>EWS : 返回熵权结果 + 加权矩阵
EWS->>REG : 填充公司名称
EWS-->>UI : 返回排序后的结果
```

图表来源
- `src/app/services/entropy-weight.service.ts#L146-L180`
- `src/app/services/entropy-weight.service.ts#L354-L386`

章节来源
- `src/app/services/entropy-weight.service.ts#L74-L500`

## 详细组件分析

### 熵权法实现与标准化处理
- 信息熵计算与权重分配
  - 通过 invoke 调用后端计算熵权权重
  - 输出包含各指标熵值、信息效用与权重
- 标准化处理
  - 提供线性标准化流程，支持指标方向映射
  - 可选择是否应用负向指标反转（适用于特定场景）
- 距离矩阵与加权评分
  - 支持原始距离矩阵与标准化距离矩阵
  - 计算加权得分并进行稳定排序（分数相等时以公司代码排序）

```mermaid
flowchart TD
Start(["开始"]) --> BuildReq["构建请求<br/>指标+公司数据"]
BuildReq --> CallEntropy["invoke 计算熵权"]
CallEntropy --> BuildDistReq["构建距离矩阵请求"]
BuildDistReq --> CallDist["invoke 计算距离矩阵"]
CallDist --> Normalize["标准化处理<br/>线性/可选负向反转"]
Normalize --> Weighted["计算加权得分"]
Weighted --> Sort["稳定排序"]
Sort --> End(["结束"])
```

图表来源
- `src/app/services/entropy-weight.service.ts#L126-L180`
- `src/app/services/entropy-weight.service.ts#L286-L339`
- `src/app/services/entropy-weight.service.ts#L185-L226`

章节来源
- `src/app/services/entropy-weight.service.ts#L74-L500`

### TOPSIS 综合评价算法
- 理想解确定
  - 正向指标取最大值，负向指标取最小值
- 距离计算
  - 分别计算每个样本到正理想解与负理想解的距离
- 排序生成
  - 计算相对接近度，按降序排列

```mermaid
flowchart TD
S(["开始"]) --> Ideal["确定正/负理想解"]
Ideal --> DistPos["计算到正理想解距离"]
Ideal --> DistNeg["计算到负理想解距离"]
DistPos --> Rel["计算相对接近度"]
DistNeg --> Rel
Rel --> Rank["按接近度排序"]
Rank --> E(["结束"])
```

图表来源
- `src/app/services/entropy-weight.service.ts#L185-L226`

章节来源
- `src/app/services/entropy-weight.service.ts#L185-L226`

### 多维度指标计算系统
- 指标体系设计
  - 通过常量定义指标类别、方向、THS 字段 ID、计算类型（TTM、YOY、公式等）
  - 支持版本比较与远程/本地配置切换
- 计算流程优化
  - 参数设置服务负责构建查询、提取选中字段、按方向分组
  - 财务指标分析服务负责数据持久化、解析与统计
- 精度控制机制
  - 数值解析与容错处理（空值、格式清洗）
  - 计算步骤记录便于复核与审计

```mermaid
classDiagram
class ParameterSettingsService {
+getParameterSettings()
+createOrUpdateParameterSettings()
+parseAdjustmentParameters()
+getSelectedFinancialIndicators()
+buildIFindQuery()
}
class FinancialIndicatorsConstants {
+ADJUSTMENT_PARAMETERS
+getFlattenedAdjustmentParameters()
+compareVersions()
}
class FinancialIndicatorsAnalysisService {
+saveAnalysis()
+getAnalysis()
+parseStoredData()
+getDataStatistics()
}
class FinancialIndicatorsAnalysisDataInterface {
+IndicatorsDataStructure
+TableDataStructure
+CalculationDetailsStructure
}
ParameterSettingsService --> FinancialIndicatorsConstants : "读取/合并配置"
FinancialIndicatorsAnalysisService --> FinancialIndicatorsAnalysisDataInterface : "序列化/解析"
```

图表来源
- `src/app/calculation-engine/services/parameter-settings.service.ts#L101-L800`
- `src/app/calculation-engine/constants/financial-indicators.constants.ts#L45-L489`
- `src/app/calculation-engine/services/financial-indicators-analysis.service.ts#L75-L584`
- `src/app/calculation-engine/types/financial-indicators-analysis-data.interface.ts#L194-L396`

章节来源
- `src/app/calculation-engine/services/parameter-settings.service.ts#L101-L800`
- `src/app/calculation-engine/constants/financial-indicators.constants.ts#L45-L489`
- `src/app/calculation-engine/services/financial-indicators-analysis.service.ts#L75-L584`
- `src/app/calculation-engine/types/financial-indicators-analysis-data.interface.ts#L194-L396`

### 算法并行化处理
- 研发费用摊销算法
  - 使用 Promise.all 并发请求多个日期数据，提升吞吐
  - 对每个股票/日期进行容错处理，记录失败原因
- 熵权法与距离分析
  - 通过 invoke 并行执行后端计算（距离矩阵、熵权、标准化）
  - 前端进行稳定排序与名称填充

```mermaid
sequenceDiagram
participant RA as "RdAlgorithm"
participant THS as "同花顺API"
RA->>RA : 构建9期日期列表
RA->>THS : Promise.all 并发请求
THS-->>RA : 返回各期数据
RA->>RA : 解析数值/记录错误
RA-->>RA : 汇总计算步骤
```

图表来源
- `src/app/utils/rd-algorithm.ts#L286-L373`
- `src/app/utils/rd-algorithm.ts#L396-L523`

章节来源
- `src/app/utils/rd-algorithm.ts#L28-L812`

### 算法结果合并与去重
- 合并策略
  - 对两套算法结果分别去重，再合并，重复项标记来源
- 最优选择
  - 以“有效可比公司数量”为主要判据，数量多者胜；若相等则优先全局最优

```mermaid
flowchart TD
A["输入：快速优选 + 全局最优"] --> D1["各自去重"]
D1 --> M["合并Map(指标+公司组合)"]
M --> C{"重复？"}
C -- 是 --> B["标记来源=both"]
C -- 否 --> N["新增来源=单方"]
B --> G["生成统计与消息"]
N --> G
G --> Best["按公司数量选择最佳"]
Best --> Out["输出合并结果"]
```

图表来源
- `src/app/services/algorithm-merger.service.ts#L66-L125`
- `src/app/services/algorithm-merger.service.ts#L127-L149`
- `src/app/services/algorithm-merger.service.ts#L209-L241`

章节来源
- `src/app/services/algorithm-merger.service.ts#L55-L346`

### 熵权法分析服务（量化接口）
- 从量化接口获取基础数据，组织多指标/多日期请求
- 将响应转换为统一结构，便于后续分析

章节来源
- `src/app/services/api/ths-api.service/ths-entropy-analysis.service.ts#L12-L146`

## 依赖关系分析
- 熵权法服务依赖参数映射与公司名称注册表，通过 invoke 调用后端计算
- 参数设置服务依赖财务指标常量，负责配置解析与查询构建
- 财务指标分析服务依赖数据接口定义，负责数据持久化与统计

```mermaid
graph LR
EWS["熵权法服务"] --> PSS["参数设置服务"]
EWS --> FIC["财务指标常量"]
EWS --> Tauri["Tauri 后端"]
PSS --> FIC
FIAS["财务指标分析服务"] --> FID["分析数据接口"]
```

图表来源
- `src/app/services/entropy-weight.service.ts#L74-L500`
- `src/app/calculation-engine/services/parameter-settings.service.ts#L101-L800`
- `src/app/calculation-engine/services/financial-indicators-analysis.service.ts#L75-L584`
- `src/app/calculation-engine/types/financial-indicators-analysis-data.interface.ts#L194-L396`

章节来源
- `src/app/services/entropy-weight.service.ts#L74-L500`
- `src/app/calculation-engine/services/parameter-settings.service.ts#L101-L800`
- `src/app/calculation-engine/services/financial-indicators-analysis.service.ts#L75-L584`
- `src/app/calculation-engine/types/financial-indicators-analysis-data.interface.ts#L194-L396`

## 性能考量
- 并发请求
  - 研发费用算法使用 Promise.all 并发请求，减少总等待时间
  - 熵权法与距离分析通过 invoke 并行执行后端计算
- 排序稳定性
  - 加权排序在分数相等时以公司代码作为次要键，保证结果稳定
- 数据结构与序列化
  - 分析数据采用 JSON 结构化存储，服务层提供序列化/反序列化与校验
- 版本与配置
  - 指标配置支持远程/本地版本比较，避免因配置不一致导致的性能问题

[本节为通用指导，无需列出具体文件来源]

## 故障排查指南
- 熵权法/距离分析失败
  - 检查 invoke 调用返回的错误信息，确认请求参数与后端接口一致性
  - 核对指标方向映射与标准化参数
- 研发费用摊销异常
  - 关注并发请求的错误收集与失败日期列表
  - 校验数值解析与空值处理逻辑
- 算法合并重复与最佳选择
  - 查看去重统计与重复率，确认指标组合与可比公司集合
  - 核对“有效可比公司数量”计算逻辑

章节来源
- `src/app/services/entropy-weight.service.ts#L96-L99`
- `src/app/utils/rd-algorithm.ts#L366-L373`
- `src/app/services/algorithm-merger.service.ts#L110-L118`

## 结论
本算法计算引擎通过清晰的服务分层、严谨的数据结构与强大的并行化能力，实现了从指标配置、数据获取、计算到结果合并的全链路自动化。熵权法与 TOPSIS 的结合为综合评价提供了稳健的数学基础；参数配置与版本管理保障了系统的可维护性与可扩展性。

[本节为总结性内容，无需列出具体文件来源]

## 附录

### 算法参数调优指南
- 指标方向与类型
  - 明确正向/负向指标，确保标准化与权重计算正确
- 标准化方法
  - 线性标准化适用于量纲相近的连续变量；必要时引入范围裁剪
- 排序稳定性
  - 在分数相等时以公司代码排序，避免随机性
- 并发窗口
  - 控制并发请求数量，避免接口限流与超时

章节来源
- `src/app/services/entropy-weight.service.ts#L286-L339`
- `src/app/services/algorithm-merger.service.ts#L209-L241`

### 性能基准测试建议
- 空间复杂度
  - 距离矩阵大小约为 n×m（n 公司，m 指标），注意内存占用
- 时间复杂度
  - 标准化 O(n×m)，距离计算 O(n×m×k)（k 为指标维度），排序 O(n log n)
- 并发优化
  - 合理设置并发请求数，监控后端计算耗时与资源占用

章节来源
- `src/app/utils/rd-algorithm.ts#L286-L373`
- `src/app/services/entropy-weight.service.ts#L106-L121`

### 错误诊断方法
- 日志与错误收集
  - 记录每次请求的参数、响应与错误信息，便于回溯
- 数据校验
  - 对解析后的数值进行边界检查与一致性校验
- 结果验证
  - 通过中间步骤（如标准化前后、权重之和）进行交叉验证

章节来源
- `src/app/utils/rd-algorithm.ts#L366-L373`
- `src/app/calculation-engine/services/financial-indicators-analysis.service.ts#L250-L384`