# BatteryFastChargingSPMe 任务说明

## 1. 背景

极限快充本质上是一个受约束的最优控制问题，而不是简单的“电流越大越好”。在真实工程里，大电流虽然能缩短充电时间，但同时也会：

- 增强电解液极化，
- 提高动力学过电势，
- 把负极推向更高的析锂风险，
- 抬升温度，
- 加速类 SEI 老化。

本任务使用一个降阶的 `SPMe-T-Aging` 风格代理模型，把这些权衡显式暴露出来，同时保持足够快的计算速度，适合 benchmark 反复评测。

## 2. 任务设定

你控制的是一颗锂离子电池，其参数定义在：

- `references/battery_config.json`

当前示例配置描述的是：

- 一颗 `3.0 Ah` 电芯，
- 从 `SOC = 0.10` 充到 `SOC = 0.90`，
- 环境温度 `25 C`，
- 工作电压上限 `4.20 V`，
- 硬截止电压 `4.25 V`，
- 软温度限制 `43 C`，
- 硬温度截止 `46 C`。

评测器内部维护以下降阶状态：

- 负极平均与表面化学计量比，
- 正极平均与表面化学计量比，
- 电解液极化状态，
- 集总温度，
- 累积析锂损失与 SEI 老化代理量。

## 3. 目标

最大化综合分数。该分数偏好：

- 更短的充电时间，
- 更低的 SEI 老化损失，
- 更低的析锂损失 / 析锂裕度违规，
- 更低的热应力。

## 4. 提交格式

提交一个 Python 文件，并定义：

```python
def build_charging_policy() -> dict:
    ...
```

返回格式如下：

```python
{
  "currents_c": [5.4, 4.2, 2.8, 1.5],
  "switch_soc": [0.20, 0.48, 0.76]
}
```

说明：

- `currents_c` 是各阶段的充电倍率。
- `switch_soc` 是严格递增的 SOC 切换阈值。
- 若共有 `N` 个阶段，则 `switch_soc` 长度必须为 `N - 1`。
- 从配置中的初始 SOC 开始充电，到达配置中的目标 SOC 后停止。

## 5. 约束

格式约束：

1. 阶段数量必须落在 `references/battery_config.json` 配置范围内
2. 每个倍率必须位于配置的电流范围内
3. `switch_soc` 必须严格递增
4. 每个阈值必须位于配置的 SOC 范围内

仿真约束：

1. 端电压不能超过硬截止
2. 温度不能超过硬截止
3. 析锂裕度不能低于配置中的硬边界
4. 必须在配置的时长内到达目标 SOC

任何一条违反都判为无效。

## 6. 评测

评测器使用降阶电化学-热-老化仿真，包含：

- 正负极固相表面动力学，
- 电解液极化动态，
- 与电流相关的动力学过电势，
- 集总热模型，
- 析锂裕度与 SEI 老化代理。

所有模型系数、安全限制和评分权重均由：

- `references/battery_config.json`

控制。

输出指标包括：

- `charge_time_s`
- `max_temp_c`
- `max_voltage_v`
- `min_plating_margin_v`
- `plating_loss_ah`
- `aging_loss_ah`
- `time_score`
- `aging_score`
- `plating_score`
- `thermal_score`
- `voltage_score`
- `combined_score`
- `valid`

### 评分

最终分数由以下几项加权组成：

- 到达目标的时间，
- 老化损失，
- 析锂应力，
- 软电压越界，
- 热应力。

分数越高越好。

## 7. Benchmark 定位

这是一个降阶物理模型 benchmark：

- 比纯 ECM 任务更有物理结构，
- 比完整 P2D / DFN 电化学求解器便宜得多，
- 适合让 AI agent 对分段快充策略做迭代优化。
