变分门 — VQGate
用于变分量子线路(VQA, Variational Quantum Algorithms)的参数化(变分)门变体的 API 参考。这些门与标准门的不同之处在于,其旋转参数是对 Parameter 矢量的符号引用,而非固定的数值。
VQGate
变分量子门的基类。VQGate 对象由变分门工厂函数创建,可以追加到 VQCircuit。
签名
python
class VQGateVQGate 实例持有门类型和对 Parameter 矢量中可变参数位置的引用。在线路执行时,通过 VQCircuit.__call__() 绑定具体值。
变分门工厂函数
每个函数返回一个 VQGate(即 VariationalQuantumGate)。param 参数指定 Parameter 矢量中提供旋转角度的索引。
单量子比特变分门
P(变分)
python
P(qbit_idx: int, param: MutableParamType) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param | MutableParamType | Parameter 矢量中的索引 |
返回变分 P 门。
RX(变分)
python
RX(qbit_idx: int, param: MutableParamType) -> VQGate返回变分
RY(变分)
python
RY(qbit_idx: int, param: MutableParamType) -> VQGate返回变分
RZ(变分)
python
RZ(qbit_idx: int, param: MutableParamType) -> VQGate返回变分
U1(变分)
python
U1(qbit_idx: int, param: MutableParamType) -> VQGate返回变分 U1 门。
IDLE(变分)
python
IDLE(qbit_idx: int, param: MutableParamType) -> VQGate返回变分 IDLE 门。
双参数变分门
U2(变分,重载 1)
python
U2(qbit_idx: int, param1: MutableParamType, param2: Union[float, MutableParamType]) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | MutableParamType | 第一个角度的可变参数索引 |
| param2 | Union[float, MutableParamType] | 第二个角度的固定值或可变参数索引 |
U2(变分,重载 2)
python
U2(qbit_idx: int, param1: float, param2: MutableParamType) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | float | 第一个角度的固定值 |
| param2 | MutableParamType | 第二个角度的可变参数索引 |
RPhi(变分,重载 1)
python
RPhi(qbit_idx: int, param1: MutableParamType, param2: Union[float, MutableParamType]) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | MutableParamType | theta 的可变参数索引 |
| param2 | Union[float, MutableParamType] | phi 的固定值或可变参数索引 |
RPhi(变分,重载 2)
python
RPhi(qbit_idx: int, param1: float, param2: MutableParamType) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | float | theta 的固定值 |
| param2 | MutableParamType | phi 的可变参数索引 |
三参数变分门
U3(变分,重载 1)
python
U3(qbit_idx: int, param1: MutableParamType, param2: Union[float, MutableParamType], param3: Union[float, MutableParamType]) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | MutableParamType | 第一个角度的可变参数索引 |
| param2 | Union[float, MutableParamType] | 第二个角度的固定值或可变参数索引 |
| param3 | Union[float, MutableParamType] | 第三个角度的固定值或可变参数索引 |
U3(变分,重载 2)
python
U3(qbit_idx: int, param1: float, param2: MutableParamType, param3: Union[float, MutableParamType]) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | float | 第一个角度的固定值 |
| param2 | MutableParamType | 第二个角度的可变参数索引 |
| param3 | Union[float, MutableParamType] | 第三个角度的固定值或可变参数索引 |
U3(变分,重载 3)
python
U3(qbit_idx: int, param1: float, param2: float, param3: MutableParamType) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | float | 第一个角度的固定值 |
| param2 | float | 第二个角度的固定值 |
| param3 | MutableParamType | 第三个角度的可变参数索引 |
四参数变分门
U4(变分,重载 1)
python
U4(qbit_idx: int, param1: MutableParamType, param2: Union[float, MutableParamType], param3: Union[float, MutableParamType], param4: Union[float, MutableParamType]) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | MutableParamType | 第一个角度的可变参数索引 |
| param2 | Union[float, MutableParamType] | 第二个角度的固定值或可变参数索引 |
| param3 | Union[float, MutableParamType] | 第三个角度的固定值或可变参数索引 |
| param4 | Union[float, MutableParamType] | 第四个角度的固定值或可变参数索引 |
U4(变分,重载 2)
python
U4(qbit_idx: int, param1: float, param2: MutableParamType, param3: Union[float, MutableParamType], param4: Union[float, MutableParamType]) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | float | 第一个角度的固定值 |
| param2 | MutableParamType | 第二个角度的可变参数索引 |
| param3 | Union[float, MutableParamType] | 第三个角度的固定值或可变参数索引 |
| param4 | Union[float, MutableParamType] | 第四个角度的固定值或可变参数索引 |
U4(变分,重载 3)
python
U4(qbit_idx: int, param1: float, param2: float, param3: MutableParamType, param4: Union[float, MutableParamType]) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | float | 第一个角度的固定值 |
| param2 | float | 第二个角度的固定值 |
| param3 | MutableParamType | 第三个角度的可变参数索引 |
| param4 | Union[float, MutableParamType] | 第四个角度的固定值或可变参数索引 |
U4(变分,重载 4)
python
U4(qbit_idx: int, param1: float, param2: float, param3: float, param4: MutableParamType) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| qbit_idx | int | 目标量子比特索引 |
| param1 | float | 第一个角度的固定值 |
| param2 | float | 第二个角度的固定值 |
| param3 | float | 第三个角度的固定值 |
| param4 | MutableParamType | 第四个角度的可变参数索引 |
双量子比特变分门
CU(变分,重载 1)
python
CU(control_qbit_idx: int, target_qbit_idx: int, param1: MutableParamType, param2: Union[float, MutableParamType], param3: Union[float, MutableParamType], param4: Union[float, MutableParamType]) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| control_qbit_idx | int | 控制量子比特索引 |
| target_qbit_idx | int | 目标量子比特索引 |
| param1 | MutableParamType | 第一个角度的可变参数索引 |
| param2 | Union[float, MutableParamType] | 第二个角度的固定值或可变参数索引 |
| param3 | Union[float, MutableParamType] | 第三个角度的固定值或可变参数索引 |
| param4 | Union[float, MutableParamType] | 第四个角度的固定值或可变参数索引 |
CU(变分,重载 2-4)
其他重载遵循与 U4 相同的模式,每个重载多一个固定值。每个重载的前两个参数为 control_qbit_idx 和 target_qbit_idx。
CP(变分)
python
CP(control_qbit_idx: int, target_qbit_idx: int, param: MutableParamType) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| control_qbit_idx | int | 控制量子比特索引 |
| target_qbit_idx | int | 目标量子比特索引 |
| param | MutableParamType | 可变参数索引 |
CRX(变分)
python
CRX(control_qbit_idx: int, target_qbit_idx: int, param: MutableParamType) -> VQGate| 参数 | 类型 | 说明 |
|---|---|---|
| control_qbit_idx | int | 控制量子比特索引 |
| target_qbit_idx | int | 目标量子比特索引 |
| param | MutableParamType | 可变参数索引 |
CRY(变分)
python
CRY(control_qbit_idx: int, target_qbit_idx: int, param: MutableParamType) -> VQGateCRZ(变分)
python
CRZ(control_qbit_idx: int, target_qbit_idx: int, param: MutableParamType) -> VQGateCR(变分,CP 的别名)
python
CR(control_qbit_idx: int, target_qbit_idx: int, param: MutableParamType) -> VQGateRXX(变分)
python
RXX(control_qbit_idx: int, target_qbit_idx: int, param: MutableParamType) -> VQGateRYY(变分)
python
RYY(control_qbit_idx: int, target_qbit_idx: int, param: MutableParamType) -> VQGateRZZ(变分)
python
RZZ(control_qbit_idx: int, target_qbit_idx: int, param: MutableParamType) -> VQGateRZX(变分)
python
RZX(control_qbit_idx: int, target_qbit_idx: int, param: MutableParamType) -> VQGate与 VQCircuit 配合使用
变分门是 VQCircuit 的构建块。param 参数引用 Parameter 矢量中的位置:
python
from pyqpanda3.vqcircuit import VQCircuit
from pyqpanda3.core import RX, CP
# 创建变分线路
vqc = VQCircuit()
# 创建参数占位符(返回索引位置)
p0 = vqc.Param("rx0") # 第一个 RX 的参数
p1 = vqc.Param("rx1") # 第二个 RX 的参数
p2 = vqc.Param("cp") # 受控相位的参数
# 添加变分门
vqc << RX(0, p0) # 量子比特 0 上的 RX,角度来自 p0
vqc << RX(1, p1) # 量子比特 1 上的 RX,角度来自 p1
vqc << CP(0, 1, p2) # 使用 p2 的受控相位
vqc << RX(0, p2) # 量子比特 0 上的 RX,角度来自 p2
# 绑定参数并执行
import numpy as np
theta = np.array([0.5, 0.3, 0.1])
result = vqc(theta) # 传入具体值