Skip to content

变分门 — VQGate ​

已弃用: VariationalGate 类已从 pyqpanda3 中移除。变分门现在通过 VQCircuit 和 VQGate 创建。请参阅 VQCircuit 了解当前 API。

用于变分量子线路(VQA, Variational Quantum Algorithms)的参数化(变分)门变体的 API 参考。这些门与标准门的不同之处在于,其旋转参数是对 Parameter 数组的符号引用(ParamExpression),而非固定的数值。

VQGate ​

变分量子门的基类。VQGate 对象由变分门工厂函数(即标准门函数接受 ParamExpression 而非 float 的重载版本)创建,可以追加到 VQCircuit。

签名 ​

python
class VQGate

VQGate 实例持有门类型以及对 Parameter 数组的 ParamExpression 引用。在线路执行时,通过 VQCircuit.__call__() 绑定具体值。

ParamExpression 和 Parameter 定义在 pyqpanda3.vqcircuit 模块中;ParamExpression 实例由 VQCircuit.Param(...) 生成。

变分门工厂函数 ​

每个函数返回一个 VQGate。类型为 ParamExpression 的 param 参数引用 Parameter 数组中提供旋转角度的位置。

单量子比特变分门 ​

P(变分) ​

python
P(qbit_idx: int, param: ParamExpression) -> VQGate
参数类型说明
qbit_idxint目标量子比特索引
paramParamExpression对 Parameter 数组的符号引用

返回变分 P 门。

RX(变分) ​

python
RX(qbit_idx: int, param: ParamExpression) -> VQGate

返回变分 RX 门。

RY(变分) ​

python
RY(qbit_idx: int, param: ParamExpression) -> VQGate

返回变分 RY 门。

RZ(变分) ​

python
RZ(qbit_idx: int, param: ParamExpression) -> VQGate

返回变分 RZ 门。

U1(变分) ​

python
U1(qbit_idx: int, param: ParamExpression) -> VQGate

返回变分 U1 门。

IDLE(变分) ​

python
IDLE(qbit_idx: int, param: ParamExpression) -> VQGate

返回变分 IDLE 门。

双参数变分门 ​

U2(变分,重载 1) ​

python
U2(qbit_idx: int, param1: ParamExpression, param2: Union[float, ParamExpression]) -> VQGate
参数类型说明
qbit_idxint目标量子比特索引
param1ParamExpression第一个角度的可变参数索引
param2Union[float, ParamExpression]第二个角度的固定值或可变参数索引

U2(变分,重载 2) ​

python
U2(qbit_idx: int, param1: float, param2: ParamExpression) -> VQGate
参数类型说明
qbit_idxint目标量子比特索引
param1float第一个角度的固定值
param2ParamExpression第二个角度的可变参数索引

RPhi(变分,重载 1) ​

python
RPhi(qbit_idx: int, param1: ParamExpression, param2: Union[float, ParamExpression]) -> VQGate
参数类型说明
qbit_idxint目标量子比特索引
param1ParamExpressiontheta 的可变参数索引
param2Union[float, ParamExpression]phi 的固定值或可变参数索引

RPhi(变分,重载 2) ​

python
RPhi(qbit_idx: int, param1: float, param2: ParamExpression) -> VQGate
参数类型说明
qbit_idxint目标量子比特索引
param1floattheta 的固定值
param2ParamExpressionphi 的可变参数索引

三参数变分门 ​

U3(变分,重载 1) ​

python
U3(qbit_idx: int, param1: ParamExpression, param2: Union[float, ParamExpression], param3: Union[float, ParamExpression]) -> VQGate
参数类型说明
qbit_idxint目标量子比特索引
param1ParamExpression第一个角度的可变参数索引
param2Union[float, ParamExpression]第二个角度的固定值或可变参数索引
param3Union[float, ParamExpression]第三个角度的固定值或可变参数索引

U3(变分,重载 2) ​

python
U3(qbit_idx: int, param1: float, param2: ParamExpression, param3: Union[float, ParamExpression]) -> VQGate
参数类型说明
qbit_idxint目标量子比特索引
param1float第一个角度的固定值
param2ParamExpression第二个角度的可变参数索引
param3Union[float, ParamExpression]第三个角度的固定值或可变参数索引

U3(变分,重载 3) ​

python
U3(qbit_idx: int, param1: float, param2: float, param3: ParamExpression) -> VQGate
参数类型说明
qbit_idxint目标量子比特索引
param1float第一个角度的固定值
param2float第二个角度的固定值
param3ParamExpression第三个角度的可变参数索引

四参数变分门 ​

U4(变分,重载 1) ​

python
U4(qbit_idx: int, param1: ParamExpression, param2: Union[float, ParamExpression], param3: Union[float, ParamExpression], param4: Union[float, ParamExpression]) -> VQGate
参数类型说明
qbit_idxint目标量子比特索引
param1ParamExpression第一个角度的可变参数索引
param2Union[float, ParamExpression]第二个角度的固定值或可变参数索引
param3Union[float, ParamExpression]第三个角度的固定值或可变参数索引
param4Union[float, ParamExpression]第四个角度的固定值或可变参数索引

U4(变分,重载 2) ​

python
U4(qbit_idx: int, param1: float, param2: ParamExpression, param3: Union[float, ParamExpression], param4: Union[float, ParamExpression]) -> VQGate
参数类型说明
qbit_idxint目标量子比特索引
param1float第一个角度的固定值
param2ParamExpression第二个角度的可变参数索引
param3Union[float, ParamExpression]第三个角度的固定值或可变参数索引
param4Union[float, ParamExpression]第四个角度的固定值或可变参数索引

U4(变分,重载 3) ​

python
U4(qbit_idx: int, param1: float, param2: float, param3: ParamExpression, param4: Union[float, ParamExpression]) -> VQGate
参数类型说明
qbit_idxint目标量子比特索引
param1float第一个角度的固定值
param2float第二个角度的固定值
param3ParamExpression第三个角度的可变参数索引
param4Union[float, ParamExpression]第四个角度的固定值或可变参数索引

U4(变分,重载 4) ​

python
U4(qbit_idx: int, param1: float, param2: float, param3: float, param4: ParamExpression) -> VQGate
参数类型说明
qbit_idxint目标量子比特索引
param1float第一个角度的固定值
param2float第二个角度的固定值
param3float第三个角度的固定值
param4ParamExpression第四个角度的可变参数索引

双量子比特变分门 ​

CU(变分,重载 1) ​

python
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_idxint控制量子比特索引
target_qbit_idxint目标量子比特索引
param1ParamExpression第一个角度的可变参数索引
param2Union[float, ParamExpression]第二个角度的固定值或可变参数索引
param3Union[float, ParamExpression]第三个角度的固定值或可变参数索引
param4Union[float, ParamExpression]第四个角度的固定值或可变参数索引

CU(变分,重载 2-4) ​

其他重载遵循与 U4 相同的模式,每个重载多一个固定值。每个重载的前两个参数为 control_qbit_idx 和 target_qbit_idx。

CP(变分) ​

python
CP(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
参数类型说明
control_qbit_idxint控制量子比特索引
target_qbit_idxint目标量子比特索引
paramParamExpression可变参数索引

CRX(变分) ​

python
CRX(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
参数类型说明
control_qbit_idxint控制量子比特索引
target_qbit_idxint目标量子比特索引
paramParamExpression可变参数索引

CRY(变分) ​

python
CRY(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
参数类型说明
control_qbit_idxint控制量子比特索引
target_qbit_idxint目标量子比特索引
paramParamExpression可变参数索引

CRZ(变分) ​

python
CRZ(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
参数类型说明
control_qbit_idxint控制量子比特索引
target_qbit_idxint目标量子比特索引
paramParamExpression可变参数索引

CR(变分,CP 的别名) ​

python
CR(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
参数类型说明
control_qbit_idxint控制量子比特索引
target_qbit_idxint目标量子比特索引
paramParamExpression可变参数索引

RXX(变分) ​

python
RXX(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
参数类型说明
control_qbit_idxint控制量子比特索引
target_qbit_idxint目标量子比特索引
paramParamExpression可变参数索引

RYY(变分) ​

python
RYY(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
参数类型说明
control_qbit_idxint控制量子比特索引
target_qbit_idxint目标量子比特索引
paramParamExpression可变参数索引

RZZ(变分) ​

python
RZZ(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
参数类型说明
control_qbit_idxint控制量子比特索引
target_qbit_idxint目标量子比特索引
paramParamExpression可变参数索引

RZX(变分) ​

python
RZX(control_qbit_idx: int, target_qbit_idx: int, param: ParamExpression) -> VQGate
参数类型说明
control_qbit_idxint控制量子比特索引
target_qbit_idxint目标量子比特索引
paramParamExpression可变参数索引

与 VQCircuit 配合使用 ​

变分门是 VQCircuit 的构建块。由 VQCircuit.Param(...) 生成的 ParamExpression 引用 Parameter 数组中的位置:

python
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

另见 ​

Released under the MIT License.