Skip to content
分享链接
回到顶部

云平台

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

1. 云平台

设备列表

python
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 选择设备

python
pf = TianYanPlatform(login_key=login_key, machine_name="tianyan176-2")

也可以通过以下方式切换当前设备:

python
pf.set_machine("tianyan176")

1.2 任务管理

用于创建量子线路、提交任务至云平台并获取运行结果。

(1)创建线路

python
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)实例化平台连接

python
pf = TianYanPlatform(login_key=login_key, machine_name="tianyan176-2")

(3)提交任务

python
query_id = pf.submit_experiment(circuit.qcis, num_shots=10)

print(f'query_id: {query_id}')
query_id: ['1913123896338644993']

此外,Cqlib还支持批量提交实验任务,适用于线路结构基本一致、测量比特一致,仅部分参数不同的场景。每次提交任务的数量上限为 50 个。

python
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)查询结果

python
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 获取包括:

  • 校准时间
  • 拓扑结构
  • 量子门保真度
  • 测量误差率
  • 其他等关键指标。
python
config = pf.download_config()
print(f'config: {config.keys()}')
config: dict_keys(['calibrationTime', 'computerId', 'disabledCouplers',
 'disabledQubits', 'overview', 'qubit', 'readout', 'status', 'twoQubitGate'])

1.4 读取误差校正(适用于物理机)

对于真实的量子计算设备(不适用于仿真机),Cqlib 支持读取校正功能:根据物理设备的配置对实验测量结果进行概率调整,以获得更接近真实的输出分布。

python
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 时,系统会自动下载当前设备的配置文件,这将会增加一定的网络开销。建议提前手动加载配置文件以提升效率。

python
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)
天衍-176tianyan1766611033.143.67
天衍-176-Ⅱtianyan176-26611023.43.38
天衍-24tianyan24243444.6514.13
天衍-504tianyan50450450363.214.33

其中,综合性能最优的是 天衍-176-Ⅱ

注意:云平台每 30 分钟进行一次设备校准。校准期间可正常提交任务,但任务需等待校准完成后才可开始执行。

3. 仿真机

量子计算仿真机是基于经典计算资源,用于模拟量子系统行为和量子算法运行的工具。它广泛应用于:

  • 探索量子计算基本原理
  • 验证和调试量子算法
  • 支撑量子芯片设计优化

目前天衍量子计算云平台共开放了 6 种高性能仿真机,分别适配于不同的仿真需求场景。

名称代码最大比特数描述
天衍-全振幅tianyan_sw36全振幅状态向量仿真机
天衍-稳定子tianyan_s5000稳定子仿真机
天衍-张量网络tianyan_tn30张量网络仿真机
天衍-张量网络带噪声tianyan_tnn15张量网络带噪声仿真机
天衍-单振幅tianyan_sa200单振幅仿真机
天衍-密度矩阵带噪声tianyan_swn18密度矩阵带噪声仿真机

当前,全振幅仿真机已支持最多 30 个数据比特的任务调用。如需要模拟超过 30 比特的量子线路,请联系 “天衍”量子计算云平台 tianyan@chinatelecom.cn

3.1 全振幅仿真机

全振幅状态向量仿真机是一种高精度模拟方法,它通过显式储存并演化一个包含2ⁿ个复数的量子态向量,精确再现n比特系统中每一步的量子演化过程。

“天衍-全振幅”仿真机支持 QCIS 指令集中的全部量子门,适用于各类通用量子线路的模拟需求。 示例代码:

python
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电路(如量子纠错码、量子保密传输等)的高效模拟方法。它通过稳定子群来表示和追踪量子态,将计算复杂度从指数级降至多项式级。

“天衍-稳定子” 仿真机支持 HXYZSSDCXCZM 量子门。 示例代码:

python
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 指令集定义的全部量子门。

python
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 指令集定义的所有量子门。

噪声模型:

名称公式参数默认值示例
比特翻转                                                    
ε(ρ)=(1p)ρ+pXρX
bit-flip0.1{'noise_type': "bit-flip",
'params': [0.2]}
相位翻转ε(ρ)=(1p)ρ+pZρZphase-flip0.1{'noise_type': "phase-flip",
'params': [0.2]}
去极化ε(ρ)=pI2+(1p)ρdepolarizing0.1{'noise_type': "depolarizing",
'params': [0.3]}
退相干εD=εpεa
Ea,1=(100et/2T1)
Ea,2=(01et/T100)
Ep,0=eΔt/2TφI
Ep,1=1eΔt/Tφ|00|
Ep,2=1eΔt/Tφ|11|
1Tφ=1T212T1
decoherence操作时间 0.5
相干时间 200
退相干时间 30
{'noise_type': "decoherence",
'params': [0.3, 200, 30]}

注意:每次仿真仅可配置一种噪声类型。虽然接口使用参数列表格式,但不支持同时叠加多种噪声模型,此设计仅为兼容性考虑。

python
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,2n1] ,其中 n 为当前线路比特数。

python
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 指令集中定义的全部量子门操作。

噪声定义:

名称公式参数范围应用规则示例
比特翻转                                                    
E0=ρI=ρ[1001]
E1=1ρX=1ρ[0110]
bitflip[0, 1]0,1{"id":0, "noise_type":"bitflip","data":{"prob":0.1}}
相位翻转E0=ρI=ρ[1001]
E1=1ρZ=1ρ[1001]
phaseflip[0, 1]0,1{"id":0, "noise_type":"phaseflip", "data":{"prob":0.1}}
比特相位翻转E0=ρI=ρ[1001]
E1=1ρY=1ρ[0ii0]
phasebitflip[0, 1]0,1{"id":0, "noise_type":"phasebitflip", "data":{"prob":0.1}}
退极化信道13ρ4I,ρ2X,ρ2Y,ρ2Zdepolarizing[0, 1]0,1{"id":0, "noise_type":"depolarizing", "data":{"prob":0.1,"num_qubits":2}}
泡利噪声pauli1. 可以作用于单比特或者双比特,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]]}}
阻尼振幅阻尼
E0=[1001ρ] , E1=[0ρ00]
相位阻尼
E0=ρ[1001] , E1=1ρ[1001]
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}}
读取P=[ρ(00)ρ(10)ρ(01)ρ(11)]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]]"}}

注:

  1. 每个噪声必须有一个独立不重复的 id,该编号在后续应用规则中将被引用。
  2. 参数 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]}

使用示例:

python
# 定义噪声模型
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]]