跳转至

OptimizerConfig

from cascaqit import OptimizerConfig

OptimizerConfig

OptimizerConfig(
    method: OptimizerMethod = "COBYLA",
    max_iterations: int = 80,
    max_evaluations: int | None = None,
    max_backend_executions: int | None = None,
    starts: int = 1,
    initialization: InitializationStrategy = "random",
    tolerance: float = 1e-06,
    seed: int | None = None,
    bounds: tuple[tuple[float, float], ...] = (),
    options: Mapping[str, bool | int | float] = dict(),
    gradient: GradientConfig | None = None,
    spsa: SPSAConfig | None = None,
    adam: AdamConfig | None = None,
    schema_version: str = ALGORITHM_SCHEMA_VERSION,
)

配置一次变分优化使用的方法、初值策略与预算。传给 VQE.run() 或 QAOA.run() 的 optimizer 参数;构造配置不会求解问题。

参数 当前规则
method COBYLA、Nelder-Mead、Powell、L-BFGS-B、SPSA、ADAM,区分大小写
max_iterations 正整数;COBYLA 将它作为函数求值上限,其他方法按自身迭代规则使用
max_evaluations 可选正整数目标求值预算;重复估计也消耗求值次数
max_backend_executions 可选正整数,限制优化过程的后端执行成本;一次目标或梯度求值可能多次调用后端
starts 正整数多初值次数;每个初值使用配置预算,不能把单个初值预算当作整个实验上限
initialization random 或 layerwise;layerwise 还需兼容的前一层参数映射
tolerance 正数,供优化方法使用;不是解与真实基态能量的误差保证
seed 非负整数或 None,控制优化随机过程;后端采样还有独立种子
bounds 按算法参数顺序给出有限的 (lower, upper),lower 必须小于 upper;运行时检查维数
options SciPy 方法附加数值/布尔选项;maxiter、maxfev、maxfun 由专用预算字段管理,不能重复填写

L-BFGS-B 和 ADAM 必须提供 cascaqit.algorithms.GradientConfig。SPSA 使用 spsa,ADAM 使用 adam,省略时分别补默认配置;其他方法不接受这些专用配置。SPSA/ADAM 不接受 SciPy options。停止条件要求的最少迭代数不能超过 max_iterations。

优化预算不包括后续候选确认与最终采样的全部成本。查看结果中的实际计数与终止原因;达到预算、局部更新变小和找到基态是不同结论。

from cascaqit import HamiltonianTerm, OptimizerConfig, PauliHamiltonian, PauliZ, VQE

hamiltonian = PauliHamiltonian("z", (HamiltonianTerm("z", 1.0, PauliZ("q0")),),
                               logical_order=("q0",))
config = OptimizerConfig(method="Nelder-Mead", max_iterations=4,
                         max_evaluations=8, seed=7)
result = VQE(hamiltonian, layers=1).run(optimizer=config, final_shots=16)
assert 1 <= len(result.evaluations) <= 8
assert sum(result.final_result.counts.values()) == 16
assert OptimizerConfig.from_json(config.to_json()) == config

完整流程见 VQE 实验。

from_dict

from_dict(data: Mapping[str, Any]) -> OptimizerConfig

从字典还原 OptimizerConfig。省略字段使用默认值,嵌套配置还原后重新校验。 缺少必需字段或字段不合法时可能抛出 KeyError、TypeError 或 ValueError。

from_json

from_json(text: str) -> OptimizerConfig

解析 JSON 对象并调用 from_dict(),返回 OptimizerConfig。非法 JSON 会抛出解析错误;顶层不是对象时抛出 TypeError。

to_dict

to_dict() -> dict[str, Any]

未启用 Adam 时省略 adam 字段。 返回可写入 JSON 的字典,嵌套对象一并序列化。元组转成数组;这个字典是保存的声明,不是执行结果。

to_json

to_json(*, indent: int | None = None) -> str

返回 JSON 字符串,不写文件。indent=None 使用紧凑格式;提供缩进宽度可便于阅读。

stable_hash

stable_hash() -> str

返回规范 JSON 的 SHA-256 十六进制摘要。字段、标识或元数据变化都可能改变摘要;它用于比较保存内容,不判断两个声明在物理上是否等价。