Skip to content

【代码贡献】修复并加速 QAOA 的 CVaR/Gibbs 风险目标函数 - #40

Open
zsszyx wants to merge 1 commit into
OriginQ:developfrom
zsszyx:agent/fix-qaoa-risk-objectives
Open

【代码贡献】修复并加速 QAOA 的 CVaR/Gibbs 风险目标函数#40
zsszyx wants to merge 1 commit into
OriginQ:developfrom
zsszyx:agent/fix-qaoa-risk-objectives

Conversation

@zsszyx

@zsszyx zsszyx commented Aug 9, 2026

Copy link
Copy Markdown

参赛说明

问题

QAOA 的两个风险敏感目标函数存在正确性和数值稳定性问题:

  • CVaR 按测量概率排序,而非按能量升序选取最低能量尾部;返回值也缺少 1 / alpha 归一化。
  • Gibbs 目标直接计算指数加权和,在小温度或大能量幅值下容易溢出,且温度为 0 时会触发除零错误。
  • 符号目标的 calculate_energy 每次调用都重复执行 sympy.lambdify

修复内容

  • CVaR 改为按能量升序累积概率,正确处理 alpha 边界的部分概率并完成归一化。
  • alphatemperature 严格校验 (0, 1],防止零值、布尔值、NaN 和无穷值进入计算。
  • Gibbs 改用 log-sum-exp 计算,保持原有数学定义并避免上溢/下溢。
  • 在 QAOA 初始化时缓存符号函数及变量顺序,能量评估复用已编译函数。
  • 更新 CVaR 参数范围、归一化公式和状态排序说明。

验证

  • python -m pytest test/QAOA -q:24 passed
  • python -m pytest test -q:38 passed
  • 新增 20 个回归用例,覆盖 CVaR 排序/归一化、alpha=1、非法参数、Gibbs 普通数值/极端能量、空权重及符号函数缓存。
  • 8 变量符号目标的本地微基准(Python 3.12):单次能量评估由约 477.087 us 降至 0.161 us(约 2966x,主要收益来自避免重复 lambdify)。

@zsszyx
zsszyx marked this pull request as ready for review August 9, 2026 10:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant