Skip to content

参数(Parameter)

Parameter 表示由 VQCircuit 管理的多维变分参数数组。数组中的每个元素都是一个占位符,可以被变分量子门引用,或通过 ParamExpression 构建算术表达式。

参数不直接由用户构造。相反,它们通过 set_ParamVQCircuit 上配置,并通过 VQCircuit.Param 方法访问。

概述

Parameter 对象存储:

  • 维度大小 -- 参数数组的形状(例如,[4] 表示 4 个参数,[2, 3] 表示 2x3 网格)。
  • 维度标签 -- 每个维度的可选可读名称。
  • 元素标签 -- 各个参数元素的可选名称。
  • 值和梯度 -- 绑定的参数值及其计算得到的梯度。

方法

size

返回参数元素的总数(所有维度大小的乘积)。

python
param.size() -> int

返回值: int -- 参数元素的总数。


ParamExpression

ParamExpression 表示由参数占位符和常量构建的算术表达式。它支持加法和乘法,使用户能够为变分量子门组合参数化值,而不仅仅是简单的单占位符引用。

例如,如果 p0p1 是参数占位符,则可以构造像 p0 + 0.5 * p1 这样的表达式,并将其作为变分门的参数传递。

签名

python
ParamExpression()                  # 默认构造函数
ParamExpression(other: ParamExpression)  # 拷贝构造函数

方法

calculate_expression_val

对表达式进行数值求值。调用此方法后,使用 get_expression_val 获取结果。在求值之前必须已绑定参数值(通过 VQCircuit.__call__)。

python
expr.calculate_expression_val() -> None

get_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_dffloat上游导数(链式法则乘数)。

__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)
# 但门参数是派生表达式

另见

Released under the MIT License.