变分门 — VQGate
已弃用:
VariationalGate类已从 pyqpanda3 中移除。变分门现在通过VQCircuit和VQGate创建。请参阅 VQCircuit 了解当前 API。
用于变分量子线路(VQA, Variational Quantum Algorithms)的参数化(变分)门变体的 API 参考。这些门与标准门的不同之处在于,其旋转参数是对 Parameter 数组的符号引用(ParamExpression),而非固定的数值。
VQGate
变分量子门的基类。VQGate 对象由变分门工厂函数(即标准门函数接受 ParamExpression 而非 float 的重载版本)创建,可以追加到 VQCircuit。
签名
class VQGateVQGate 实例持有门类型以及对 Parameter 数组的 ParamExpression 引用。在线路执行时,通过 VQCircuit.__call__() 绑定具体值。
ParamExpression 和 Parameter 定义在 pyqpanda3.vqcircuit 模块中;ParamExpression 实例由 VQCircuit.Param(...) 生成。
变分门工厂函数
每个函数返回一个 VQGate。类型为 ParamExpression 的 param 参数引用 Parameter 数组中提供旋转角度的位置。
单量子比特变分门
P(变分)
P(qbit_idx: int, param: ParamExpression) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param | ParamExpression | 对 Parameter 数组的符号引用 |
返回变分 P 门。
RX(变分)
RX(qbit_idx: int, param: ParamExpression) -> VQGate返回变分
RY(变分)
RY(qbit_idx: int, param: ParamExpression) -> VQGate返回变分
RZ(变分)
RZ(qbit_idx: int, param: ParamExpression) -> VQGate返回变分
U1(变分)
U1(qbit_idx: int, param: ParamExpression) -> VQGate返回变分 U1 门。
IDLE(变分)
IDLE(qbit_idx: int, param: ParamExpression) -> VQGate返回变分 IDLE 门。
双参数变分门
U2(变分,重载 1)
U2(qbit_idx: int, param1: ParamExpression, param2: Union[float, ParamExpression]) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | ParamExpression | 第一个角度的可变参数索引 |
| param2 | Union[float, ParamExpression] | 第二个角度的固定值或可变参数索引 |
U2(变分,重载 2)
U2(qbit_idx: int, param1: float, param2: ParamExpression) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | float | 第一个角度的固定值 |
| param2 | ParamExpression | 第二个角度的可变参数索引 |
RPhi(变分,重载 1)
RPhi(qbit_idx: int, param1: ParamExpression, param2: Union[float, ParamExpression]) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | ParamExpression | theta 的可变参数索引 |
| param2 | Union[float, ParamExpression] | phi 的固定值或可变参数索引 |
RPhi(变分,重载 2)
RPhi(qbit_idx: int, param1: float, param2: ParamExpression) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | float | theta 的固定值 |
| param2 | ParamExpression | phi 的可变参数索引 |
三参数变分门
U3(变分,重载 1)
U3(qbit_idx: int, param1: ParamExpression, param2: Union[float, ParamExpression], param3: Union[float, ParamExpression]) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | ParamExpression | 第一个角度的可变参数索引 |
| param2 | Union[float, ParamExpression] | 第二个角度的固定值或可变参数索引 |
| param3 | Union[float, ParamExpression] | 第三个角度的固定值或可变参数索引 |
U3(变分,重载 2)
U3(qbit_idx: int, param1: float, param2: ParamExpression, param3: Union[float, ParamExpression]) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | float | 第一个角度的固定值 |
| param2 | ParamExpression | 第二个角度的可变参数索引 |
| param3 | Union[float, ParamExpression] | 第三个角度的固定值或可变参数索引 |
U3(变分,重载 3)
U3(qbit_idx: int, param1: float, param2: float, param3: ParamExpression) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | float | 第一个角度的固定值 |
| param2 | float | 第二个角度的固定值 |
| param3 | ParamExpression | 第三个角度的可变参数索引 |
四参数变分门
U4(变分,重载 1)
U4(qbit_idx: int, param1: ParamExpression, param2: Union[float, ParamExpression], param3: Union[float, ParamExpression], param4: Union[float, ParamExpression]) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | ParamExpression | 第一个角度的可变参数索引 |
| param2 | Union[float, ParamExpression] | 第二个角度的固定值或可变参数索引 |
| param3 | Union[float, ParamExpression] | 第三个角度的固定值或可变参数索引 |
| param4 | Union[float, ParamExpression] | 第四个角度的固定值或可变参数索引 |
U4(变分,重载 2)
U4(qbit_idx: int, param1: float, param2: ParamExpression, param3: Union[float, ParamExpression], param4: Union[float, ParamExpression]) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | float | 第一个角度的固定值 |
| param2 | ParamExpression | 第二个角度的可变参数索引 |
| param3 | Union[float, ParamExpression] | 第三个角度的固定值或可变参数索引 |
| param4 | Union[float, ParamExpression] | 第四个角度的固定值或可变参数索引 |
U4(变分,重载 3)
U4(qbit_idx: int, param1: float, param2: float, param3: ParamExpression, param4: Union[float, ParamExpression]) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | float | 第一个角度的固定值 |
| param2 | float | 第二个角度的固定值 |
| param3 | ParamExpression | 第三个角度的可变参数索引 |
| param4 | Union[float, ParamExpression] | 第四个角度的固定值或可变参数索引 |
U4(变分,重载 4)
U4(qbit_idx: int, param1: float, param2: float, param3: float, param4: ParamExpression) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | float | 第一个角度的固定值 |
| param2 | float | 第二个角度的固定值 |
| param3 | float | 第三个角度的固定值 |
| param4 | ParamExpression | 第四个角度的可变参数索引 |
双量子比特变分门
CU(变分,重载 1)
CU(control_qbit_idx: int, target_qbit_idx: int, param1: ParamExpression, param2: Union[float, ParamExpression], param3: Union[float, ParamExpression], param4: Union[float, ParamExpression]) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| control_qbit_idx | int | 控制量子比特索引 |
| target_qbit_idx | int | 目标量子比特索引 |
| param1 | ParamExpression | 第一个角度的可变参数索引 |
| param2 | Union[float, ParamExpression] | 第二个角度的固定值或可变参数索引 |
| param3 | Union[float, ParamExpression] | 第三个角度的固定值或可变参数索引 |
| param4 | Union[float, ParamExpression] | 第四个角度的固定值或可变参数索引 |
CU(变分,重载 2-4)
其他重载遵循与 U4 相同的模式,每个重载多一个固定值。每个重载的前两个参数为 control_qbit_idx 和 target_qbit_idx。
CP(变分)
CP(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| control_qbit_idx | int | 控制量子比特索引 |
| target_qbit_idx | int | 目标量子比特索引 |
| param | ParamExpression | 可变参数索引 |
CRX(变分)
CRX(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| control_qbit_idx | int | 控制量子比特索引 |
| target_qbit_idx | int | 目标量子比特索引 |
| param | ParamExpression | 可变参数索引 |
CRY(变分)
CRY(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| control_qbit_idx | int | 控制量子比特索引 |
| target_qbit_idx | int | 目标量子比特索引 |
| param | ParamExpression | 可变参数索引 |
CRZ(变分)
CRZ(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| control_qbit_idx | int | 控制量子比特索引 |
| target_qbit_idx | int | 目标量子比特索引 |
| param | ParamExpression | 可变参数索引 |
CR(变分,CP 的别名)
CR(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| control_qbit_idx | int | 控制量子比特索引 |
| target_qbit_idx | int | 目标量子比特索引 |
| param | ParamExpression | 可变参数索引 |
RXX(变分)
RXX(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| control_qbit_idx | int | 控制量子比特索引 |
| target_qbit_idx | int | 目标量子比特索引 |
| param | ParamExpression | 可变参数索引 |
RYY(变分)
RYY(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| control_qbit_idx | int | 控制量子比特索引 |
| target_qbit_idx | int | 目标量子比特索引 |
| param | ParamExpression | 可变参数索引 |
RZZ(变分)
RZZ(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| control_qbit_idx | int | 控制量子比特索引 |
| target_qbit_idx | int | 目标量子比特索引 |
| param | ParamExpression | 可变参数索引 |
RZX(变分)
RZX(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| control_qbit_idx | int | 控制量子比特索引 |
| target_qbit_idx | int | 目标量子比特索引 |
| param | ParamExpression | 可变参数索引 |
与 VQCircuit 配合使用
变分门是 VQCircuit 的构建块。由 VQCircuit.Param(...) 生成的 ParamExpression 引用 Parameter 数组中的位置:
from pyqpanda3.vqcircuit import VQCircuit
from pyqpanda3.core import RX, CP
# Create a variational circuit
vqc = VQCircuit()
# Initialize the parameter array: 1D with 3 elements, dimension label "params"
vqc.set_Param([3], ["params"])
# Create parameter placeholders at specific indices with element labels
p0 = vqc.Param([0], "rx0") # parameter for first RX
p1 = vqc.Param([1], "rx1") # parameter for second RX
p2 = vqc.Param([2], "cp") # parameter for controlled-phase
# Add variational gates using parameter indices
vqc << RX(0, p0) # RX on qubit 0, angle from p0
vqc << RX(1, p1) # RX on qubit 1, angle from p1
vqc << CP(0, 1, p2) # Controlled-Phase using p2
vqc << RX(0, p2) # RX on qubit 0, angle from p2
# Get parameter values and bind concrete values
import numpy as np
theta = np.array([0.5, 0.3, 0.1])
result = vqc(theta) # pass concrete values
print(type(result).__name__)运行结果:
VQCResult