云平台
在使用“天衍”量子计算云平台进行量子计算任务之前,用户需要注册账号并获取对应的访问密钥。

1. 云平台
设备列表
import os
from cqlib import TianYanPlatform
# 手动设置登录密钥
login_key = os.getenv("LOGIN_KEY", '')
pf = TianYanPlatform(login_key=login_key)
#获取可用量子设备列表
computers = pf.query_quantum_computer_list()
print('Computers:')
print('------------------')
print(f"{'ID':<20}{'费用':<8}{'运行状态':<12}{'代码':<1}")
for item in computers:
print(f"{str(item[0]):<20}{item[1]:<10}{item[2]:<15}{item[3]:<15}")
Computers:
------------------
ID 费用 运行状态 代码
3 free running tianyan_sw
4 free running tianyan_s
7 free running tianyan_tn
8 free running tianyan_tnn
9 free running tianyan_sa
10 free running tianyan_swn
1764555284795101186 free calibration tianyan176
1764555284795101187 free running tianyan176-2
1764555284795101188 free running tianyan24
1882266438434926594 paid running tianyan504
1.1 选择设备
pf = TianYanPlatform(login_key=login_key, machine_name="tianyan176-2")
也可以通过以下方式切换当前设备:
pf.set_machine("tianyan176")
1.2 任务管理
用于创建量子线路、提交任务至云平台并获取运行结果。
(1)创建线路
from cqlib import Circuit, TianYanPlatform
circuit = Circuit([0,7])
circuit.h(0)
circuit.cx(0, 7)
circuit.measure_all()
print(f'线路:\n{circuit.draw()}')
线路:
Q0: ───H──■──M─
│
Q7: ──────X──M─
(2)实例化平台连接
pf = TianYanPlatform(login_key=login_key, machine_name="tianyan176-2")
(3)提交任务
query_id = pf.submit_experiment(circuit.qcis, num_shots=10)
print(f'query_id: {query_id}')
query_id: ['1913123896338644993']
此外,Cqlib还支持批量提交实验任务,适用于线路结构基本一致、测量比特一致,仅部分参数不同的场景。每次提交任务的数量上限为 50 个。
query_ids = pf.submit_experiment([circuit.qcis, circuit.qcis], num_shots=1000)
print(f'query_ids: {query_ids}')
result: {'code': 0, 'message': None, 'data': {'query_ids': ['1913049815773839361',
'1913049816117772290']}, 'success': True}
query_ids: ['1913049815773839361', '1913049816117772290']
(4)查询结果
data = pf.query_experiment(query_id)
for item in data:
print(f"task: \t{item['experimentTaskId']}: \t\n"
f"概率:\t{item['probability']}\t\n"
f"采样数据:\t{item['resultStatus']}\t")
task: 1913125668021043201:
概率: {"1110":0.065,"1011":0.055,"1000":0.06,"1010":0.08,"0010":0.06,
"0101":0.06,"0000":0.07,"1101":0.05,"0011":0.055,"0110":0.035,"1001":0.075,
"0111":0.06,"1100":0.065,"1111":0.085,"0100":0.065,"0001":0.06}
采样数据:[[0, 1, 2, 3], [0, 1, 0, 1], [1, 0, 0, 1], [0, 1, 1, 1], [0, 1, 0, 0], [1, 1, 1, 0], [1, 0, 1, 0], [0, 0, 1, 1], [1, 0, 1, 0], [0, 1, 0, 1], [1, 0, 0, 1], [0, 0, 0, 0], [1, 1, 1, 1], [1, 1, 0, 1], [1, 0, 1, 1], [0, 1, 0, 0], [0, 0, 1, 0], [1, 1, 1, 0], [0, 0, 0, 0], [1, 1, 0, 0], [1, 1, 1, 1], [1, 0, 1, 0], [0, 0, 1, 0], [1, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 1], [0, 1, 0, 0], [1, 0, 1, 1], [1, 1, 0, 1], [0, 1, 0, 1], [1, 0, 0, 1], [0, 1, 1, 0], [0, 0, 1, 1], [1, 0, 0, 0], [0, 0, 1, 0], [1, 0, 0, 1], [1, 0, 1, 1], [0, 0, 0, 1], [0, 1, 0, 1], [1, 1, 1, 0], [1, 1, 1, 1], [1, 1, 0, 0], [0, 0, 0, 0], [0, 1, 0, 1], [1, 0, 0, 0], [0, 1, 0, 0], [1, 0, 0, 1], [0, 1, 0, 1], [1, 1, 0, 0], [1, 1, 0, 0], [0, 0, 0, 0], [1, 0, 0, 1], [0, 0, 0, 0], [1, 0, 0, 0], [0, 1, 1, 0], [1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1], [1, 0, 0, 0], [1, 1, 0, 1], [1, 1, 0, 0], [1, 0, 0, 1], [1, 0, 1, 1], [0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 1], [1, 0, 1, 1], [0, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 0, 0, 0], [1, 1, 0, 0], [1, 0, 1, 0], [1, 1, 0, 0], [0, 1, 0, 0], [1, 1, 1, 0], [0, 0, 0, 0], [0, 1, 0, 1], [0, 0, 1, 1], [0, 1, 1, 1], [1, 1, 0, 1], [1, 1, 1, 1], [0, 1, 0, 1], [0, 0, 1, 1], [0, 1, 1, 1], [0, 0, 0, 1], [1, 0, 1, 1], [0, 1, 1, 1], [0, 1, 1, 0], [1, 1, 1, 0], [0, 0, 0, 1], [0, 0, 0, 1], [1, 0, 1, 0], [1, 0, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0], [0, 1, 1, 1], [0, 0, 1, 0], [0, 0, 0, 1], [1, 0, 0, 1], [1, 1, 1, 0], [0, 1, 1, 0], [1, 1, 1, 1], [1, 1, 0, 1], [1, 0, 1, 1], [0, 0, 0, 0], [0, 1, 1, 1], [1, 0, 0, 1], [0, 1, 0, 0], [1, 1, 1, 1], [0, 1, 0, 1], [1, 1, 0, 0], [0, 0, 1, 1], [0, 0, 1, 1], [0, 0, 1, 1], [1, 0, 1, 0], [0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 1], [1, 1, 0, 1], [1, 0, 0, 1], [1, 0, 1, 1], [1, 1, 1, 0], [0, 1, 0, 1], [0, 1, 0, 0], [0, 1, 0, 0], [1, 1, 0, 1], [1, 0, 1, 1], [1, 1, 1, 1], [1, 1, 1, 0], [0, 1, 0, 0], [0, 0, 1, 0], [1, 0, 1, 0], [0, 1, 0, 0], [0, 1, 0, 1], [0, 0, 1, 0], [1, 0, 0, 1], [0, 1, 1, 1], [1, 0, 1, 0], [1, 0, 1, 1], [0, 1, 1, 1], [0, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1], [0, 1, 1, 0], [0, 0, 0, 0], [1, 0, 0, 0], [0, 0, 1, 1], [0, 0, 1, 0], [0, 0, 0, 1], [1, 0, 0, 1], [0, 1, 1, 0], [0, 0, 1, 1], [1, 1, 0, 1], [1, 1, 0, 0], [0, 0, 1, 0], [0, 0, 1, 1], [1, 0, 0, 0], [0, 1, 0, 1], [1, 0, 0, 0], [1, 1, 1, 1], [0, 1, 1, 1], [0, 1, 1, 0], [1, 1, 1, 1], [1, 1, 1, 0], [1, 0, 0, 0], [1, 1, 0, 1], [1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 1], [0, 1, 1, 1], [1, 1, 0, 1], [0, 0, 0, 1], [1, 0, 1, 0], [0, 1, 1, 1], [0, 1, 0, 0], [0, 0, 1, 1], [1, 1, 1, 0], [0, 0, 0, 0], [1, 0, 0, 0], [1, 1, 0, 1], [0, 0, 1, 0], [1, 1, 0, 0], [1, 1, 1, 1], [0, 1, 0, 1], [1, 1, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 1, 1], [0, 1, 0, 0], [0, 0, 0, 1], [0, 1, 1, 1], [1, 0, 1, 0], [1, 0, 0, 1], [0, 0, 0, 1], [1, 1, 1, 1], [0, 0, 1, 0], [0, 0, 0, 0], [1, 1, 1, 0], [0, 1, 0, 1], [1, 1, 1, 0]]
注意: 采样结果中的第一位表示数据比特的编号。
1.3 物理机配置信息
天衍量子计算云平台提供了查询物理量子计算机配置信息的接口,用户可以通过 Cqlib 获取包括:
- 校准时间
- 拓扑结构
- 量子门保真度
- 测量误差率
- 其他等关键指标。
config = pf.download_config()
print(f'config: {config.keys()}')
config: dict_keys(['calibrationTime', 'computerId', 'disabledCouplers',
'disabledQubits', 'overview', 'qubit', 'readout', 'status', 'twoQubitGate'])
1.4 读取误差校正(适用于物理机)
对于真实的量子计算设备(不适用于仿真机),Cqlib 支持读取校正功能:根据物理设备的配置对实验测量结果进行概率调整,以获得更接近真实的输出分布。
data = pf.query_experiment(query_id, readout_calibration=True)
for item in data:
print(f"task {item['experimentTaskId']}: {item['probability']}")
task 1913049815102750722: {'00': np.float64(0.47132960618731773),
'01': np.float64(0.0017436971693695477), '10': np.float64(0.022971022341498705),
'11': np.float64(0.5039556743018141)}
当 readout_calibration = True
时,系统会自动下载当前设备的配置文件,这将会增加一定的网络开销。建议提前手动加载配置文件以提升效率。
config = pf.download_config()
data = pf.query_experiment(query_id, readout_calibration=True, machine_config=config)
for item in data:
print(f"task {item['experimentTaskId']}: {item['probability']}")
task 1913049815102750722: {'00': np.float64(0.47132960618731773),
'01': np.float64(0.0017436971693695477), '10': np.float64(0.022971022341498705),
'11': np.float64(0.5039556743018141)}
2. 量子计算机
量子计算真机基于量子叠加、纠缠等原理构建的物理系统,能直接操控量子比特(Qubit)执行运算。相较经典计算机具有潜在的指数级加速能力。
目前云平台部署了 4 台量子计算机,分别是 天衍-176
,、天衍-176-Ⅱ
、天衍-24
、天衍-504
。
设备 | 代码 | 数据比特数 | 耦合比特数 | 平均 T1 (μs) | 平均 T2(μs) |
---|---|---|---|---|---|
天衍-176 | tianyan176 | 66 | 110 | 33.14 | 3.67 |
天衍-176-Ⅱ | tianyan176-2 | 66 | 110 | 23.4 | 3.38 |
天衍-24 | tianyan24 | 24 | 34 | 44.65 | 14.13 |
天衍-504 | tianyan504 | 504 | 503 | 63.2 | 14.33 |
其中,综合性能最优的是 天衍-176-Ⅱ
。
注意:云平台每 30 分钟进行一次设备校准。校准期间可正常提交任务,但任务需等待校准完成后才可开始执行。
3. 仿真机
量子计算仿真机是基于经典计算资源,用于模拟量子系统行为和量子算法运行的工具。它广泛应用于:
- 探索量子计算基本原理
- 验证和调试量子算法
- 支撑量子芯片设计优化
目前天衍量子计算云平台共开放了 6 种高性能仿真机,分别适配于不同的仿真需求场景。
名称 | 代码 | 最大比特数 | 描述 |
---|---|---|---|
天衍-全振幅 | tianyan_sw | 36 | 全振幅状态向量仿真机 |
天衍-稳定子 | tianyan_s | 5000 | 稳定子仿真机 |
天衍-张量网络 | tianyan_tn | 30 | 张量网络仿真机 |
天衍-张量网络带噪声 | tianyan_tnn | 15 | 张量网络带噪声仿真机 |
天衍-单振幅 | tianyan_sa | 200 | 单振幅仿真机 |
天衍-密度矩阵带噪声 | tianyan_swn | 18 | 密度矩阵带噪声仿真机 |
当前,全振幅仿真机已支持最多 30 个数据比特的任务调用。如需要模拟超过 30 比特的量子线路,请联系 “天衍”量子计算云平台 tianyan@chinatelecom.cn 。
3.1 全振幅仿真机
全振幅状态向量仿真机是一种高精度模拟方法,它通过显式储存并演化一个包含2ⁿ个复数的量子态向量,精确再现n比特系统中每一步的量子演化过程。
“天衍-全振幅”仿真机支持 QCIS 指令集中的全部量子门,适用于各类通用量子线路的模拟需求。 示例代码:
pf.set_machine("tianyan_sw")
query_id = pf.submit_experiment(circuit.qcis, num_shots=200)
data = pf.query_experiment(query_id)
item = data[0]
print(f"task {item['experimentTaskId']}: \n"
f"概率: {item['probability']}\n"
f"采样数据:{item['resultStatus']}")
task 1913124561366515714:
概率: {"00":0.53,"11":0.47}
采样数据:[[0, 7], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1]]
3.2 稳定子仿真机
稳定子仿真机是一种面向Clifford电路(如量子纠错码、量子保密传输等)的高效模拟方法。它通过稳定子群来表示和追踪量子态,将计算复杂度从指数级降至多项式级。
“天衍-稳定子” 仿真机支持 H
、X
、Y
、Z
、S
、SD
、CX
、CZ
、M
量子门。 示例代码:
c2 = Circuit(2)
c2.h(0)
c2.h(1)
c2.cz(0, 1)
c2.h(1)
c2.measure_all()
pf.set_machine("tianyan_s")
query_id = pf.submit_experiment(c2.qcis, num_shots=200)
data = pf.query_experiment(query_id)
item = data[0]
print(f"task {item['experimentTaskId']}: \n"
f"概率: {item['probability']}\n"
f"采样数据:{item['resultStatus']}")
task 1913124637853843458:
概率: {"00":0.49,"11":0.51}
采样数据:[[0, 1], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0]]
3.3 张量网络仿真机
张量网络仿真机是一种基于经典计算的量子电路模拟方法,通过将量子态重构为可分解的张量网络,并利用其稀疏性特征,能够高效模拟具有特定结构的量子电路,尤其适用于低纠缠量子系统的近似模拟。
“天衍-张量网络”仿真机支持 QCIS 指令集定义的全部量子门。
pf.set_machine("tianyan_tn")
query_id = pf.submit_experiment(circuit.qcis, num_shots=200)
data = pf.query_experiment(query_id)
item = data[0]
print(f"task {item['experimentTaskId']}: \n"
f"概率: {item['probability']}\n"
f"采样数据:{item['resultStatus']}")
task 1913124742157795330:
概率: {"00":0.48,"11":0.52}
采样数据:[[0, 7], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0]]
3.4 张量网络带噪声仿真机
张量网络噪声仿真机在高效张量网络模拟基础上,引入了多种噪声模型(如退相干、比特翻转等),可在经典计算机上逼真还原中等规模含噪量子系统的实际行为。
天衍-张量网络带噪声”仿真机支持 QCIS 指令集定义的所有量子门。
噪声模型:
名称 | 公式 | 参数 | 默认值 | 示例 |
---|---|---|---|---|
比特翻转 | | bit-flip | 0.1 | {'noise_type': "bit-flip", 'params': [0.2]} |
相位翻转 | phase-flip | 0.1 | {'noise_type': "phase-flip", 'params': [0.2]} | |
去极化 | depolarizing | 0.1 | {'noise_type': "depolarizing", 'params': [0.3]} | |
退相干 | decoherence | 操作时间 0.5 相干时间 200 退相干时间 30 | {'noise_type': "decoherence", 'params': [0.3, 200, 30]} |
注意:每次仿真仅可配置一种噪声类型。虽然接口使用参数列表格式,但不支持同时叠加多种噪声模型,此设计仅为兼容性考虑。
pf.set_machine("tianyan_tnn")
query_id = pf.submit_experiment(circuit.qcis, num_shots=200, noise=[{'noise_type': "bit-flip", 'params': [0.2]}])
data = pf.query_experiment(query_id)
item = data[0]
print(f"Task: {item['experimentTaskId']}\n"
f"概率: {item['probability']}\n"
f"采样数据:{item['resultStatus']}")
Task: 1913124789578596354
概率: {"00":0.275,"11":0.335,"01":0.185,"10":0.205}
采样数据:[[0, 7], [0, 0], [0, 0], [1, 1], [0, 1], [1, 0], [0, 0], [0, 1], [0, 0], [1, 1], [0, 1], [1, 1], [1, 1], [1, 1], [0, 0], [1, 0], [0, 1], [0, 1], [1, 1], [1, 1], [0, 1], [1, 0], [0, 1], [1, 1], [1, 1], [1, 1], [0, 1], [1, 1], [1, 0], [0, 0], [1, 1], [1, 0], [0, 1], [1, 0], [1, 0], [1, 1], [1, 0], [1, 1], [1, 0], [1, 0], [1, 1], [1, 1], [1, 1], [0, 1], [0, 1], [1, 0], [0, 0], [1, 0], [1, 0], [0, 0], [1, 1], [1, 1], [0, 0], [1, 0], [0, 1], [0, 1], [1, 0], [1, 1], [1, 0], [1, 1], [1, 0], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 0], [1, 1], [0, 0], [0, 1], [0, 0], [1, 1], [0, 1], [0, 1], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [0, 1], [0, 1], [1, 1], [1, 1], [0, 1], [1, 1], [1, 1], [1, 0], [1, 1], [1, 1], [1, 1], [0, 1], [1, 1], [1, 0], [0, 1], [1, 0], [0, 0], [0, 0], [0, 0], [0, 0], [1, 0], [0, 1], [0, 1], [0, 1], [1, 1], [0, 1], [1, 0], [1, 0], [0, 0], [0, 0], [0, 0], [0, 1], [0, 0], [0, 0], [0, 1], [1, 0], [1, 1], [0, 0], [1, 1], [1, 0], [0, 0], [1, 0], [1, 0], [0, 0], [1, 1], [1, 1], [1, 1], [0, 1], [0, 0], [0, 0], [0, 1], [0, 0], [1, 1], [0, 1], [1, 0], [1, 1], [0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [1, 0], [1, 0], [0, 0], [1, 1], [1, 0], [0, 1], [1, 0], [1, 0], [1, 1], [1, 1], [1, 0], [0, 0], [0, 1], [1, 0], [1, 1], [1, 1], [0, 0], [1, 1], [1, 1], [0, 0], [0, 0], [1, 1], [0, 1], [1, 1], [0, 1], [1, 1], [0, 0], [1, 1], [0, 0], [0, 0], [1, 0], [1, 1], [1, 1], [0, 0], [0, 0], [0, 1], [0, 0], [1, 0], [1, 1], [0, 0], [1, 0], [0, 1], [0, 0], [0, 0], [0, 0], [1, 1], [1, 1], [1, 0], [1, 1], [1, 0], [1, 1], [1, 1], [0, 0], [0, 0], [1, 1], [0, 1], [1, 1], [0, 0], [1, 0]]
3.5 单振幅仿真机
单振幅仿真机是一种资源优化型量子模拟方法,支持对某一目标量子态的单个概率振幅进行动态计算,而非存储完整的量子态向量。这种方式通过以时间换空间,显著降低内存占用,适用于:
- 稀疏输出量子线路
- 特定态概率提取任务 由于该方法仅关注单一振幅,因此无法提供全局量子态信息,也不支持测量门操作。
“天衍-单振幅”仿真机支持 QCIS 定义的所有量子门(除测量门外),目标量子态需以整数形式给出,取值范围为[0,
pf.set_machine("tianyan_sa")
c5 = Circuit(5)
for i in range(5):
c5.h(i)
query_id = pf.submit_experiment(c5.qcis, quantum_state=1)
data = pf.query_experiment(query_id)
item = data[0]
print(f"Task: {item['experimentTaskId']}\n"
f"量子态: {item['phase']}")
Task: 1913124982445277186
量子态: 0.1767766952966368 + 0.0i
3.6 密度矩阵带噪声仿真机
密度矩阵噪声仿真机是一种基于密度矩阵形式的量子模拟方法,结合了多种常见噪声模型(如退相干、门误差等),能够精确模拟量子混合态的演化过程。该模型适用于评估含噪量子硬件的实际表现,以及验证量子纠错策略的有效性。
“天衍-密度矩阵带噪声”仿真机支持 QCIS 指令集中定义的全部量子门操作。
噪声定义:
名称 | 公式 | 参数 | 范围 | 应用规则 | 示例 |
---|---|---|---|---|---|
比特翻转 | | bitflip | [0, 1] | 0,1 | {"id":0, "noise_type":"bitflip","data":{"prob":0.1}} |
相位翻转 | phaseflip | [0, 1] | 0,1 | {"id":0, "noise_type":"phaseflip", "data":{"prob":0.1}} | |
比特相位翻转 | phasebitflip | [0, 1] | 0,1 | {"id":0, "noise_type":"phasebitflip", "data":{"prob":0.1}} | |
退极化信道 | depolarizing | [0, 1] | 0,1 | {"id":0, "noise_type":"depolarizing", "data":{"prob":0.1,"num_qubits":2}} | |
泡利噪声 | pauli | 1. 可以作用于单比特或者双比特,num_qubits 属于 {1,2} 2. 可以指定一个或者多个量子门(X/Y/Z/I),以及概率。 3. 每个概率为 [0, 1] 内的浮点数,最多三位小数;所有概率之和为1 | 0,1 | {"id":0, "noise_type":"pauli", "data":{ "num_qubits":1, "ops":[["x",0.1],["yz",0.9]]}} | |
阻尼 | 振幅阻尼 相位阻尼 | damping | 振幅概率(amplitude_prob): [0, 1] 相位概率(phase_prob): [0, 1] 损耗状态(dissipation_state): [0, 1] | 0,1 | {"id":0, "noise_type":"damping", "data":{"amplitude_prob":0.1, "phase_prob":0.1, "dissipation_state":0}} |
读取 | readout | $ 2^n * 2^n$ 的矩阵,英文逗号分割,n为比特数量,n >= 1,矩阵内元素均为 >= 0 且 <= 1的浮点数,最多3位小数,矩阵每行之和为1。 例如:[[0.2, 0.7],[0.1, 0.9]] | 2 | {"id":0, "noise_type":"readout", "data":{"prob": "[[0.8, 0.2], [0.2, 0.8]]"}} |
注:
- 每个噪声必须有一个独立不重复的 id,该编号在后续应用规则中将被引用。
- 参数 num_qubits 表示噪声适用的比特数:单比特噪声用 1 表示, 双比特噪声用 2 表示。
噪声应用规则:
名称 | 类型 | 说明 | 示例 |
---|---|---|---|
指定量子门和量子比特 | 0 | 指定量子门和量子比特列表 | {"noise_id":0,"add_type":0,"gates":["h"],"qubits":[1,2]} |
针对所有比特位的指定量子门 | 1 | 只要指定量子门,作用与所有比特。 | {"noise_id":0,"add_type":1,"gates":["h","x"]} |
针对某些比特位 | 2 | 指定某些比特 | {"noise_id":0,"add_type":2,"qubits":[1,2]} |
使用示例:
# 定义噪声模型
noise = [{
"id": 0,
"noise_type": "bitflip",
"data": {"prob": 0.1}
},{
"id": 1,
"noise_type": "phaseflip",
"data": {"prob": 0.1}
}]
# 定义噪声应用规则
rules = [
{
"noise_id": 0,
"add_type": 0,
"gates": ["h", "x"],
"qubits": [1, 2]
},
{
"noise_id": 1,
"add_type": 0,
"gates": ["x"],
"qubits": [2]
}
]
#构建并提交任务
pf.set_machine("tianyan_swn")
c6 = Circuit(4)
for i in range(4):
c6.h(i)
c6.x(i)
c6.measure_all()
query_id = pf.submit_experiment(c6.qcis, num_shots=200, noise=noise, rules=rules)
data = pf.query_experiment(query_id)
item = data[0]
print(f"Task: {item['experimentTaskId']}\n"
f"概率: {item['probability']}\n"
f"采样数据:{item['resultStatus']}")
Task: 1913125668021043201
概率: {"1110":0.065,"1011":0.055,"1000":0.06,"1010":0.08,
"0010":0.06,"0101":0.06,"0000":0.07,"1101":0.05,"0011":0.055,
"0110":0.035,"1001":0.075,"0111":0.06,"1100":0.065,"1111":0.085,
"0100":0.065,"0001":0.06}
采样数据:[[0, 1, 2, 3], [0, 1, 0, 1], [1, 0, 0, 1], [0, 1, 1, 1], [0, 1, 0, 0], [1, 1, 1, 0], [1, 0, 1, 0], [0, 0, 1, 1], [1, 0, 1, 0], [0, 1, 0, 1], [1, 0, 0, 1], [0, 0, 0, 0], [1, 1, 1, 1], [1, 1, 0, 1], [1, 0, 1, 1], [0, 1, 0, 0], [0, 0, 1, 0], [1, 1, 1, 0], [0, 0, 0, 0], [1, 1, 0, 0], [1, 1, 1, 1], [1, 0, 1, 0], [0, 0, 1, 0], [1, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 1], [0, 1, 0, 0], [1, 0, 1, 1], [1, 1, 0, 1], [0, 1, 0, 1], [1, 0, 0, 1], [0, 1, 1, 0], [0, 0, 1, 1], [1, 0, 0, 0], [0, 0, 1, 0], [1, 0, 0, 1], [1, 0, 1, 1], [0, 0, 0, 1], [0, 1, 0, 1], [1, 1, 1, 0], [1, 1, 1, 1], [1, 1, 0, 0], [0, 0, 0, 0], [0, 1, 0, 1], [1, 0, 0, 0], [0, 1, 0, 0], [1, 0, 0, 1], [0, 1, 0, 1], [1, 1, 0, 0], [1, 1, 0, 0], [0, 0, 0, 0], [1, 0, 0, 1], [0, 0, 0, 0], [1, 0, 0, 0], [0, 1, 1, 0], [1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1], [1, 0, 0, 0], [1, 1, 0, 1], [1, 1, 0, 0], [1, 0, 0, 1], [1, 0, 1, 1], [0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 1], [1, 0, 1, 1], [0, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 0, 0, 0], [1, 1, 0, 0], [1, 0, 1, 0], [1, 1, 0, 0], [0, 1, 0, 0], [1, 1, 1, 0], [0, 0, 0, 0], [0, 1, 0, 1], [0, 0, 1, 1], [0, 1, 1, 1], [1, 1, 0, 1], [1, 1, 1, 1], [0, 1, 0, 1], [0, 0, 1, 1], [0, 1, 1, 1], [0, 0, 0, 1], [1, 0, 1, 1], [0, 1, 1, 1], [0, 1, 1, 0], [1, 1, 1, 0], [0, 0, 0, 1], [0, 0, 0, 1], [1, 0, 1, 0], [1, 0, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0], [0, 1, 1, 1], [0, 0, 1, 0], [0, 0, 0, 1], [1, 0, 0, 1], [1, 1, 1, 0], [0, 1, 1, 0], [1, 1, 1, 1], [1, 1, 0, 1], [1, 0, 1, 1], [0, 0, 0, 0], [0, 1, 1, 1], [1, 0, 0, 1], [0, 1, 0, 0], [1, 1, 1, 1], [0, 1, 0, 1], [1, 1, 0, 0], [0, 0, 1, 1], [0, 0, 1, 1], [0, 0, 1, 1], [1, 0, 1, 0], [0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 1], [1, 1, 0, 1], [1, 0, 0, 1], [1, 0, 1, 1], [1, 1, 1, 0], [0, 1, 0, 1], [0, 1, 0, 0], [0, 1, 0, 0], [1, 1, 0, 1], [1, 0, 1, 1], [1, 1, 1, 1], [1, 1, 1, 0], [0, 1, 0, 0], [0, 0, 1, 0], [1, 0, 1, 0], [0, 1, 0, 0], [0, 1, 0, 1], [0, 0, 1, 0], [1, 0, 0, 1], [0, 1, 1, 1], [1, 0, 1, 0], [1, 0, 1, 1], [0, 1, 1, 1], [0, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1], [0, 1, 1, 0], [0, 0, 0, 0], [1, 0, 0, 0], [0, 0, 1, 1], [0, 0, 1, 0], [0, 0, 0, 1], [1, 0, 0, 1], [0, 1, 1, 0], [0, 0, 1, 1], [1, 1, 0, 1], [1, 1, 0, 0], [0, 0, 1, 0], [0, 0, 1, 1], [1, 0, 0, 0], [0, 1, 0, 1], [1, 0, 0, 0], [1, 1, 1, 1], [0, 1, 1, 1], [0, 1, 1, 0], [1, 1, 1, 1], [1, 1, 1, 0], [1, 0, 0, 0], [1, 1, 0, 1], [1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 1], [0, 1, 1, 1], [1, 1, 0, 1], [0, 0, 0, 1], [1, 0, 1, 0], [0, 1, 1, 1], [0, 1, 0, 0], [0, 0, 1, 1], [1, 1, 1, 0], [0, 0, 0, 0], [1, 0, 0, 0], [1, 1, 0, 1], [0, 0, 1, 0], [1, 1, 0, 0], [1, 1, 1, 1], [0, 1, 0, 1], [1, 1, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 1, 1], [0, 1, 0, 0], [0, 0, 0, 1], [0, 1, 1, 1], [1, 0, 1, 0], [1, 0, 0, 1], [0, 0, 0, 1], [1, 1, 1, 1], [0, 0, 1, 0], [0, 0, 0, 0], [1, 1, 1, 0], [0, 1, 0, 1], [1, 1, 1, 0]]