Skip to content

参数(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()                  # default constructor
ParamExpression(param_expression: ParamExpression)  # copy constructor

方法 ​

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

算术运算符 ​

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
import numpy as np

vqc = VQCircuit()
vqc.set_Param([4])

# Get individual placeholders
p0 = vqc.Param([0])
p1 = vqc.Param([1])

# Build an expression: 0.5 * p0 + p1
# Note: p0 and p1 are ParamExpression objects returned by VQCircuit.Param
expr = 0.5 * p0 + p1

# Print the expression string representation
print("Expression:", str(expr))

# Use the expression in a variational gate
vqc << RX(0, expr)

# Bind parameters and evaluate the expression
vqc(np.array([1.0, 2.0, 0.0, 0.0]))
expr.calculate_expression_val()
print("Value with params [1.0, 2.0, 0.0, 0.0]:", expr.get_expression_val())

# The total parameter count is still 4 (p0, p1, p2, p3)
# but the gate parameter is a derived expression

运行结果:

Expression: (0.5*Param([0])+Param([1]))
Value with params [1.0, 2.0, 0.0, 0.0]: 2.5

另见 ​

Released under the MIT License.