Skip to content

优化

使用多种计算后端进行结构弛豫和能量计算,并支持实时进度流式输出。

Source: src/lib/api/compute.ts, src/lib/structure/OptimizationPane.svelte, server/routers/

可用计算器

计算器方法说明适用场景
EMT有效介质理论快速经验势金属(Al、Cu、Ag、Au、Ni、Pd、Pt)
xTB GFN2半经验 DFT含色散校正的紧束缚方法有机分子、分子晶体
xTB GFN1半经验 DFT比 GFN2 更快但精度较低大型有机体系
xTB GFN0半经验方法最快的 xTB 变体筛选、预优化
xTB GFN-FF力场xTB 参数化力场非常快速的预弛豫
MACE机器学习等变神经网络势通用、高精度
CHGNet机器学习晶体 Hamilton 图网络无机材料
M3GNet机器学习材料三体图网络无机材料
UFF力场(WASM)通用力场浏览器内快速优化

核心函数

客户端(TypeScript)

typescript
// List available calculators and their status
fetchCalculators(): Promise<Calculator[]>

// Check if server is running
check_server_available(): Promise<boolean>

// HTTP-based optimization (returns final result)
optimize_structure(structure, calculator, options): Promise<OptimizationResult>

// WebSocket streaming (real-time step-by-step updates)
optimize_structure_ws(structure, calculator, options, onStep): Promise<OptimizationResult>

// In-browser UFF optimization via WASM (no server needed)
wasm_optimize_structure(structure): Structure

服务器端(Python)

FastAPI 服务器暴露以下端点:

  • GET /api/optimize/calculators — 列出可用计算器
  • POST /api/optimize/structure — 优化结构(HTTP)
  • GET /api/optimize/ws — WebSocket 流式优化
  • GET /api/optimize/energy — 单点能计算

优化器方法

除了选择计算器(能量/力引擎),还可以选择驱动搜索过程的优化算法

优化器类型说明适用场景
BFGS极小化器拟 Newton 局部极小化器(ASE 默认)寻找稳定结构(局部极小值)
Sella Minimize极小化器信赖半径极小化器(Sella order=0BFGS 的替代方案,有时更稳健
Sella TS Search鞍点过渡态搜索器(Sella order=1寻找反应能垒和过渡态
IRC反应路径内禀反应坐标(Sella从过渡态追踪最低能量路径

什么是过渡态?

过渡态(TS)是反应物到产物最低能量路径上的最高能点。它给出活化能,即体系发生反应必须跨越的能垒。Sella 的 TS Search 会在势能面上寻找这些鞍点。

Sella 参数

使用 Sella Minimize 或 Sella TS Search 时:

参数说明默认值
delta0(信赖半径)用于步长控制的初始信赖半径自动(Sella 默认)

使用 IRC 时:

参数说明默认值
dx(步长)IRC 步长,单位 Angstrom自动(Sella 默认)

安装 Sella

Sella 是可选依赖。没有它服务器也能工作,BFGS 始终可用。若要启用 Sella 优化器:

bash
# Python 3.13+ requires setuptools-scm first
pip install setuptools-scm

# Install Sella (use --no-build-isolation on Python 3.13+)
pip install --no-build-isolation sella

如果未安装 Sella 却选择了 Sella 优化器,服务器会返回包含安装说明的明确错误信息。

更多细节见 Sella GitHub 仓库

优化选项

选项类型说明
calculatorstring计算器名称(如 "mace"、"xtb_gfn2")
optimizerstring优化算法:bfgssella_minsella_tsirc
fmaxnumber力收敛判据(eV/A)
max_stepsnumber最大优化步数
optimize_cellboolean同时弛豫晶胞形状/体积
frozen_atomsnumber[]需要固定的原子 index

实时进度

WebSocket 优化会流式返回逐步更新:

typescript
interface OptimizationStep {
  step: number          // Current step number
  energy: number        // Total energy (eV)
  fmax: number          // Maximum force (eV/A)
  structure: Structure  // Current atomic positions
  converged: boolean    // Whether fmax < threshold
}

UI 会显示:

  • 能量收敛曲线
  • 最大力(fmax)收敛曲线
  • 每一步实时更新三维结构
  • 步数计数器和状态

Frozen Atoms

原子可以标记为“固定”,从优化中排除:

  • 环形标记 — 固定原子周围的圆环
  • 交叉阴影 — 图案化叠层
  • 变暗 — 降低不透明度

固定原子会以 index 数组传递给优化器。

组件

组件说明
OptimizationPane.svelte计算器选择、选项、运行/停止控制
能量/力收敛图优化过程中的实时折线图

架构

Browser                          Server
┌──────────────┐    HTTP/WS     ┌───────────────────────────┐
│ Optimization │ ──────────────→│ FastAPI Server             │
│ Pane         │                │  ├── Calculators (energy)  │
│              │←────────────── │  │   ├── EMT               │
│ (real-time   │   step data    │  │   ├── xTB               │
│  updates)    │                │  │   ├── MACE              │
└──────────────┘                │  │   ├── CHGNet            │
                                │  │   └── M3GNet            │
                                │  └── Optimizers (search)   │
                                │      ├── BFGS (default)    │
                                │      ├── Sella Minimize    │
                                │      ├── Sella TS Search   │
                                │      └── IRC               │
┌──────────────┐                └───────────────────────────┘
│ WASM (UFF)   │ ← no server needed
└──────────────┘

基于 AGPL-3.0-or-later 许可证发布。