参数(Parameter)
Parameter 表示由 VQCircuit 管理的多维变分参数数组。数组中的每个元素都是一个占位符,可以被变分量子门引用,或通过 ParamExpression 构建算术表达式。
参数不直接由用户构造。相反,它们通过 set_Param 在 VQCircuit 上配置,并通过 VQCircuit.Param 方法访问。
概述
Parameter 对象存储:
- 维度大小 -- 参数数组的形状(例如,
[4]表示 4 个参数,[2, 3]表示 2x3 网格)。 - 维度标签 -- 每个维度的可选可读名称。
- 元素标签 -- 各个参数元素的可选名称。
- 值和梯度 -- 绑定的参数值及其计算得到的梯度。
方法
size
返回参数元素的总数(所有维度大小的乘积)。
python
param.size() -> int返回值: int -- 参数元素的总数。
ParamExpression
ParamExpression 表示由参数占位符和常量构建的算术表达式。它支持加法和乘法,使用户能够为变分量子门组合参数化值,而不仅仅是简单的单占位符引用。
例如,如果 p0 和 p1 是参数占位符,则可以构造像 p0 + 0.5 * p1 这样的表达式,并将其作为变分门的参数传递。
签名
python
ParamExpression() # 默认构造函数
ParamExpression(other: ParamExpression) # 拷贝构造函数方法
calculate_expression_val
对表达式进行数值求值。调用此方法后,使用 get_expression_val 获取结果。在求值之前必须已绑定参数值(通过 VQCircuit.__call__)。
python
expr.calculate_expression_val() -> Noneget_expression_val
返回表达式的计算值。必须在 calculate_expression_val 之后调用。
python
expr.get_expression_val() -> float返回值: float -- 表达式的数值计算结果。
calculate_gradient_val
在给定上游梯度 dg_div_df 的情况下,计算表达式对其组成占位符的梯度。
python
expr.calculate_gradient_val(dg_div_df: float) -> None| 参数 | 类型 | 描述 |
|---|---|---|
| dg_div_df | float | 上游导数(链式法则乘数)。 |
__str__
返回表达式树的字符串表示。
python
str(expr) -> str算术运算符
ParamExpression 支持以下算术运算,每种运算都产生一个新的 ParamExpression:
| 运算 | 签名 | 描述 |
|---|---|---|
| 加法(表达式 + 表达式) | expr + other | 两个表达式相加。 |
| 加法(表达式 + 标量) | expr + scalar | 表达式加上浮点常量。 |
| 反向加法(标量 + 表达式) | scalar + expr | 浮点常量加上表达式。 |
| 乘法(表达式 * 表达式) | expr * other | 两个表达式相乘。 |
| 乘法(表达式 * 标量) | expr * scalar | 表达式乘以浮点常量。 |
| 反向乘法(标量 * 表达式) | scalar * expr | 浮点常量乘以表达式。 |
返回值: ParamExpression -- 表示运算结果的新表达式。
示例
python
from pyqpanda3.vqcircuit import VQCircuit
from pyqpanda3.core import RX
vqc = VQCircuit()
vqc.set_Param([4])
# 获取各个占位符
p0 = vqc.Param([0])
p1 = vqc.Param([1])
# 构建表达式:0.5 * p0 + p1
# 注意:p0 和 p1 是由 VQCircuit.Param 返回的 ParamExpression 对象
expr = 0.5 * p0 + p1
# 在变分门中使用该表达式
vqc << RX(0, expr)
# 总参数计数仍为 4(p0, p1, p2, p3)
# 但门参数是派生表达式