QODE 问题对象与协议(QODE Problem and Protocol)¶
English · 简体中文
类别 C2 · 模块
oracq.algorithms.qode.ode· 阶段 V2
概述¶
本模块不实现具体求解算法,而是为自治齐次线性 ODE
定义三个可组合构件:问题对象 QODEProblem(生成元、初态、耗散声明与证据说明)、可替换协议 QODEProtocol(契约检查与声明透传),以及通用入口 linear_qode,把 \(G\) 路由到 LCHS、CBMD 或 Schrödingerization 等具体方法。另提供 make_euler_history_qode,把隐式 Euler 时间推进写成一次量子线性系统求解。
设计立场是"声明优先":dissipative 是数学声明 \(\mathrm{Hermitian}(G)\le 0\),不是语言证明;evidence 字段强制记录声明来源。用户向的完整流程(输入范式适配、分批绑定)见微分方程章。
接口与输入模型¶
QODEProblem(generator, initial, dissipative=None, initial_norm=None,
evidence="caller_declared_unverified")
linear_qode(method, *, hamiltonian_function=taylor_hamiltonian, **options)
make_euler_history_qode(qlss, *, steps=2)
API 入口:QODEProblem、linear_qode、make_euler_history_qode
generator:\(G\) 的BlockEncoding(input model 为 BE),需具备 adjoint/controlled 能力。initial:StatePreparation(SP),零输入、干净 work,宽度与generator相同。dissipative/initial_norm:bool | None耗散声明与非负初值范数。evidence:非空字符串,声明来源说明。method:"lchs"/"cbmd"/"schrodingerization";options仅接受plan,类型须匹配所选方法。qlss:可调用的线性系统求解器(如qlss.py的 Costa 路线),签名(matrix, rhs)。
linear_qode 返回 QODEProtocol(字段 name、kernel、requires_dissipative,其中 lchs/cbmd 为 True)。协议方法:
方法 |
行为 |
|---|---|
|
契约报告:BE/SP 能力、同宽、时间非负、耗散前提 |
|
兼容入口:check 通过后生成,返回 |
|
问题级入口:校验 |
solve 返回的 StateOracle(target/signal,宽度等于 generator.width)在方法自带属性之外透传问题声明:
属性 |
含义 |
|---|---|
|
问题对象的 |
|
声明的 |
|
声明的初值范数(仅当非 None) |
实现要点¶
QODEProtocol.contract 在共享的 operator_state_contract 之上按方法附加假设:lchs/cbmd 追加 "Hermitian(G)<=0;问题级 solve 必须声明 dissipative=True",schrodingerization 追加辅助窗口、Fourier 约定与恢复区域的应用层验证责任。_generate 强制输出为 StateOracle、宽度与输入一致且保持 adjoint/controlled 能力,违例在生成期抛 ContractError。lchs/cbmd 路线内部先构造 LinearODE(HermitianParts.from_operator(scale(-1, generator)), initial),即 \(A=-G\) 的 \(L+iH\) 分解;schrodingerization 直接消费 \(G\)。Hermitian/半正定性质均由调用方承担。
make_euler_history_qode 的历史态布局:时间寄存器 nt = steps.bit_length() 位在高位,物理寄存器在低位。系统矩阵为 LCU 符号和
其中 q = projector(nt, range(1, steps + 1)) 把 \(G\) 限制在时间槽 \(1..\text{steps}\),S = truncated_shift(nt, steps) 是槽间提升移位;展开后每个槽的方程恰为隐式 Euler \((I-\Delta t\,G)\,u_k = u_{k-1}\),槽 0 由 extend_initial 填入初态。qlss(c, rhs) 求解后经 select_subspace 选出时间槽 steps 的快照,选择条件并入 signal。
未实现部分:非齐次 \(u'=Gu+f\)、时间依赖 \(G(t)\) 与统一的物理范数恢复对象都没有现成接口;solve 只保存声明来源,不添加虚构的范数恢复能力。
验证方案¶
类别 C2(近似连续语义,判定准则见 ../development/validation-plan.md §2)。本页覆盖组装与契约层,具体方法的数值见证见各方法页。三层证据:
结构:
tests/core/test_differential.py:DifferentialStructureTests.test_four_methods_keep_input_oracles——三种linear_qode方法在抽象 BE/SP 输入下生成后开放槽(input_A/input_b)原样保留、algorithm属性正确、RIR 序列化往返。数值:
tests/core/test_sde.py:SolverContractTests.test_qode_problem_accepted_by_lchs——4 点 OU 网格的QODEProblem经check().require()与solve,输出宽度、qode_dissipative_promise透传与程序序列化往返均正确。绑定:同类注册与契约检查;
make_euler_history_qode的组装经 catalog 的 QHAM m=1 案例(applications/catalog.py,steps=1接 Costa QLSS)进入tests/core/test_workloads.py:WorkloadTests.test_every_catalog_case_has_a_closed_description的目录级往返、闭合与导出检查。
已知缺口与计划阶段¶
统一的"解析可解 ODE 族"收敛基准缺失(同一解析可解问题过全部求解器的批量对拍未建立),归入阶段 V2 的收敛性扫描框架;与 validation-coverage.md 的 ode.py 行一致。
数值验证¶
论文级数值实验见 tests/verification/verify_ode.py(ode 组,本文件覆盖 ode.py 与 ode_models.py 的部分)。QODEProtocol/linear_qode 路由与 QODEProblem.solve 的数值行为通过各方法端到端案例验证(详见 LCHS、CBMD、Schrödingerization、Carleman 线性化 的数值验证节)。
实验设计:(a) linear_qode("lchs") 路由——五种输入模型的端到端对拍(HermitianParts.from_operator(scale(-1, G)) 的 \(A=-G\) 对齐由独立 numpy 仿真确认);(b) QODEProblem.solve——4 点 OU 零通量 Fokker–Planck 问题(dissipative=True、evidence 透传)经 check().require() 与 solve,输出宽度、qode_dissipative_promise 透传与数值解同时验证;(c) 声明透传——qode_input_evidence/qode_dissipative_promise 属性按声明出现在输出模块属性中。
关键指标:
案例 |
规模 |
路径 |
指标 |
数值 |
|---|---|---|---|---|
lchs-given-be-scalar-decay |
7 量子位 |
四路径 |
实现误差(路由+组装对独立仿真) |
1.2e-16 |
lchs-fokker-planck-ou |
16 量子位 |
reference、originir |
实现误差 / 经典参考互证 / |
1.1e-16 / 1.1e-16 / True 透传 |
cbmd-parts-noncommuting |
15 量子位 |
reference、originir |
实现误差(CBMD 路由) |
1.1e-16 |
schrodingerization-* |
21 量子位 |
reference、originir(decay-grid)/ reference(其余) |
组装保真度(Schrödingerization 路由) |
8.7e-19 |
make_euler_history_qode 的隐式 Euler 历史组装(LCU 符号和 \(C=I-\Delta t(q\otimes G)-(S\otimes I)\))由 catalog 的 QHAM m=1 案例结构测试覆盖,本组未对其做数值端到端验证(需要完整 QLSS 内核,超出本组范围)。
复现:
PYTHONPATH=src /home/agony/projects/qcfd-dev/quantum-cfd-software/.venv/bin/python tests/verification/verify_ode.py
产物:out/verification/ode.json。
相关链接¶
源码:
src/oracq/algorithms/qode/ode.pyAPI 参考:QODE 组装接口
同组算法页:LCHS · CBMD · Schrödingerization · Carleman 线性化 · Fokker–Planck 输入模型
验证矩阵:验证覆盖矩阵