Qibo API参数化电路
一些Qibo门(如旋转门)会为其自由参数接受数值。一旦此类门被添加到电路中,就可以使用qibo.models.circuit.Circuit.set_parameters()方法来更新它们的参数。例如:
In [ ]:
Copied!
from qibo import Circuit, gates
# 创建一个包含3个量子比特的量子电路
circuit = Circuit(3)
# 在第0个量子比特上添加RX门,参数theta初始为0
circuit.add(gates.RX(0, theta=0))
# 在第1个量子比特上添加RY门,参数theta初始为0
circuit.add(gates.RY(1, theta=0))
# 在第1和第2个量子比特之间添加CZ门(受控Z门)
circuit.add(gates.CZ(1, 2))
# 在第0和第2个量子比特之间添加fSim门,参数theta和phi初始为0
circuit.add(gates.fSim(0, 2, theta=0, phi=0))
# 在第2个量子比特上添加Hadamard门
circuit.add(gates.H(2))
# set new values to the circuit's parameters
params = [0.123, 0.456, (0.789, 0.321)]
circuit.set_parameters(params)
from qibo import Circuit, gates
# 创建一个包含3个量子比特的量子电路
circuit = Circuit(3)
# 在第0个量子比特上添加RX门,参数theta初始为0
circuit.add(gates.RX(0, theta=0))
# 在第1个量子比特上添加RY门,参数theta初始为0
circuit.add(gates.RY(1, theta=0))
# 在第1和第2个量子比特之间添加CZ门(受控Z门)
circuit.add(gates.CZ(1, 2))
# 在第0和第2个量子比特之间添加fSim门,参数theta和phi初始为0
circuit.add(gates.fSim(0, 2, theta=0, phi=0))
# 在第2个量子比特上添加Hadamard门
circuit.add(gates.H(2))
# set new values to the circuit's parameters
params = [0.123, 0.456, (0.789, 0.321)]
circuit.set_parameters(params)
In [2]:
Copied!
circuit.get_parameters()
circuit.get_parameters()
Out[2]:
[(0.123,), (0.456,), (0.789, 0.321)]
In [ ]:
Copied!
# 创建一个包含3个量子比特的电路
circuit = Circuit(3)
# 定义旋转门和fSim门
g0 = gates.RX(0, theta=0) # RX门,作用于第0个量子比特,初始theta为0
g1 = gates.RY(1, theta=0) # RY门,作用于第1个量子比特,初始theta为0
g2 = gates.fSim(0, 2, theta=0, phi=0) # fSim门,作用于第0和第2个量子比特,初始theta和phi为0
# 将门添加到电路中
circuit.add([g0, g1, gates.CZ(1, 2), g2, gates.H(2)])
# 使用字典设置电路参数
params = {g0: 0.123, g1: 0.456, g2: (0.789, 0.321)}
circuit.set_parameters(params)
# 等价地,可以使用列表来更新参数
params = [0.123, 0.456, (0.789, 0.321)]
circuit.set_parameters(params)
# 或者使用一个扁平化的列表来设置参数
params = [0.123, 0.456, 0.789, 0.321]
circuit.set_parameters(params)
# 创建一个包含3个量子比特的电路
circuit = Circuit(3)
# 定义旋转门和fSim门
g0 = gates.RX(0, theta=0) # RX门,作用于第0个量子比特,初始theta为0
g1 = gates.RY(1, theta=0) # RY门,作用于第1个量子比特,初始theta为0
g2 = gates.fSim(0, 2, theta=0, phi=0) # fSim门,作用于第0和第2个量子比特,初始theta和phi为0
# 将门添加到电路中
circuit.add([g0, g1, gates.CZ(1, 2), g2, gates.H(2)])
# 使用字典设置电路参数
params = {g0: 0.123, g1: 0.456, g2: (0.789, 0.321)}
circuit.set_parameters(params)
# 等价地,可以使用列表来更新参数
params = [0.123, 0.456, (0.789, 0.321)]
circuit.set_parameters(params)
# 或者使用一个扁平化的列表来设置参数
params = [0.123, 0.456, 0.789, 0.321]
circuit.set_parameters(params)
通过在创建门时设置,可以使参数化门不受qibo.models.circuit.Circuit.get_parameters()和qibo.models.circuit.Circuit.set_parameters()的影响。例如: trainable=False
In [4]:
Copied!
circuit = Circuit(3)
circuit.add(gates.RX(0, theta=0.123))
circuit.add(gates.RY(1, theta=0.456, trainable=False))
circuit.add(gates.fSim(0, 2, theta=0.789, phi=0.567))
print(circuit.get_parameters())
# prints [(0.123,), (0.789, 0.567)] ignoring the parameters of the RY gate
circuit = Circuit(3)
circuit.add(gates.RX(0, theta=0.123))
circuit.add(gates.RY(1, theta=0.456, trainable=False))
circuit.add(gates.fSim(0, 2, theta=0.789, phi=0.567))
print(circuit.get_parameters())
# prints [(0.123,), (0.789, 0.567)] ignoring the parameters of the RY gate
[(0.123,), (0.789, 0.567)]
In [ ]:
Copied!