Qibo量子计算模拟器入门¶
这个notebook演示了如何使用Qibo创建和模拟量子电路。
In [1]:
Copied!
import qibo
from qibo import models, gates
import numpy as np
import matplotlib.pyplot as plt
print(f"Qibo版本: {qibo.__version__}")
import qibo
from qibo import models, gates
import numpy as np
import matplotlib.pyplot as plt
print(f"Qibo版本: {qibo.__version__}")
Qibo版本: 0.2.20
创建一个Bell态¶
下面我们创建一个简单的量子电路来生成Bell态 $\frac{|00⟩ + |11⟩}{\sqrt{2}}$
In [2]:
Copied!
# 创建一个2量子比特的电路
circuit = models.Circuit(2)
# 添加Hadamard门到第一个量子比特
circuit.add(gates.H(0))
# 添加CNOT门,控制比特为0,目标比特为1
circuit.add(gates.CNOT(0, 1))
# 打印电路
circuit.draw()
# 创建一个2量子比特的电路
circuit = models.Circuit(2)
# 添加Hadamard门到第一个量子比特
circuit.add(gates.H(0))
# 添加CNOT门,控制比特为0,目标比特为1
circuit.add(gates.CNOT(0, 1))
# 打印电路
circuit.draw()
0: ─H─o─ 1: ───X─
执行电路并分析结果¶
In [3]:
Copied!
# 执行电路
result = circuit.execute()
# 计算测量结果的概率
probabilities = result.probabilities()
# 显示概率分布
for i, prob in enumerate(probabilities):
print(f"|{i:02b}>: {prob:.4f}")
# 绘制概率分布图
plt.figure(figsize=(10, 6))
plt.bar([f"{i:02b}" for i in range(len(probabilities))], probabilities)
plt.xlabel('量子态')
plt.ylabel('概率')
plt.title('Bell态的概率分布')
plt.show()
# 执行电路
result = circuit.execute()
# 计算测量结果的概率
probabilities = result.probabilities()
# 显示概率分布
for i, prob in enumerate(probabilities):
print(f"|{i:02b}>: {prob:.4f}")
# 绘制概率分布图
plt.figure(figsize=(10, 6))
plt.bar([f"{i:02b}" for i in range(len(probabilities))], probabilities)
plt.xlabel('量子态')
plt.ylabel('概率')
plt.title('Bell态的概率分布')
plt.show()
[Qibo 0.2.20|INFO|2025-09-02 10:58:58]: Using numpy backend on /CPU:0
|00>: 0.5000 |01>: 0.0000 |10>: 0.0000 |11>: 0.5000
e:\quantum computing\量子算法\qibo_env\Lib\site-packages\IPython\core\pylabtools.py:170: UserWarning: Glyph 27010 (\N{CJK UNIFIED IDEOGRAPH-6982}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
e:\quantum computing\量子算法\qibo_env\Lib\site-packages\IPython\core\pylabtools.py:170: UserWarning: Glyph 29575 (\N{CJK UNIFIED IDEOGRAPH-7387}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
e:\quantum computing\量子算法\qibo_env\Lib\site-packages\IPython\core\pylabtools.py:170: UserWarning: Glyph 24577 (\N{CJK UNIFIED IDEOGRAPH-6001}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
e:\quantum computing\量子算法\qibo_env\Lib\site-packages\IPython\core\pylabtools.py:170: UserWarning: Glyph 30340 (\N{CJK UNIFIED IDEOGRAPH-7684}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
e:\quantum computing\量子算法\qibo_env\Lib\site-packages\IPython\core\pylabtools.py:170: UserWarning: Glyph 20998 (\N{CJK UNIFIED IDEOGRAPH-5206}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
e:\quantum computing\量子算法\qibo_env\Lib\site-packages\IPython\core\pylabtools.py:170: UserWarning: Glyph 24067 (\N{CJK UNIFIED IDEOGRAPH-5E03}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
e:\quantum computing\量子算法\qibo_env\Lib\site-packages\IPython\core\pylabtools.py:170: UserWarning: Glyph 37327 (\N{CJK UNIFIED IDEOGRAPH-91CF}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
e:\quantum computing\量子算法\qibo_env\Lib\site-packages\IPython\core\pylabtools.py:170: UserWarning: Glyph 23376 (\N{CJK UNIFIED IDEOGRAPH-5B50}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
创建更复杂的量子电路¶
下面我们创建一个3量子比特的GHZ态 $\frac{|000⟩ + |111⟩}{\sqrt{2}}$
In [ ]:
Copied!
# 创建一个3量子比特的电路
ghz_circuit = models.Circuit(3)
# 添加Hadamard门到第一个量子比特
ghz_circuit.add(gates.H(0))
# 添加CNOT门,从第一个量子比特到第二个
ghz_circuit.add(gates.CNOT(0, 1))
# 添加CNOT门,从第二个量子比特到第三个
ghz_circuit.add(gates.CNOT(1, 2))
# 打印电路
ghz_circuit.draw()
# 执行电路
ghz_result = ghz_circuit.execute()
# 计算测量结果的概率
ghz_probabilities = ghz_result.probabilities()
# 显示概率分布
for i, prob in enumerate(ghz_probabilities):
if prob > 1e-10: # 只显示非零概率
print(f"|{i:03b}>: {prob:.4f}")
# 绘制概率分布图
plt.figure(figsize=(10, 6))
plt.bar([f"{i:03b}" for i in range(len(ghz_probabilities))], ghz_probabilities)
plt.xlabel('量子态')
plt.ylabel('概率')
plt.title('GHZ态的概率分布')
plt.show()
# 创建一个3量子比特的电路
ghz_circuit = models.Circuit(3)
# 添加Hadamard门到第一个量子比特
ghz_circuit.add(gates.H(0))
# 添加CNOT门,从第一个量子比特到第二个
ghz_circuit.add(gates.CNOT(0, 1))
# 添加CNOT门,从第二个量子比特到第三个
ghz_circuit.add(gates.CNOT(1, 2))
# 打印电路
ghz_circuit.draw()
# 执行电路
ghz_result = ghz_circuit.execute()
# 计算测量结果的概率
ghz_probabilities = ghz_result.probabilities()
# 显示概率分布
for i, prob in enumerate(ghz_probabilities):
if prob > 1e-10: # 只显示非零概率
print(f"|{i:03b}>: {prob:.4f}")
# 绘制概率分布图
plt.figure(figsize=(10, 6))
plt.bar([f"{i:03b}" for i in range(len(ghz_probabilities))], ghz_probabilities)
plt.xlabel('量子态')
plt.ylabel('概率')
plt.title('GHZ态的概率分布')
plt.show()