基于 MindQuantum 实现对 “天衍” 量子云平台真机的比特映射

MindQuantum 目前只支持量子模拟器,如果需要获得量子算法在真机上的实测数据,可以借助"天衍"量子云平台提供的真机。本文将介绍如何基于 MindQuantum 绘制"天衍"真机的拓扑图,并进而实现比特映射。

关于 MindQuantum 涉及比特映射的教程可参考 比特映射。而 Cqlib 的使用可参考 Cqlib 入门教程

1. 获取真机参数

在绘制拓扑图之前,需要先获取真机的参数。如何获取,以及参数的形式,可参考我之前的一篇文章 如何本地查看"天衍"云平台真机参数?

下面以绘制 tianyan24 的拓扑图为例。官方给出的真实拓扑图如下图所示。

python 复制代码
from cqlib import TianYanPlatform
from mindquantum.device import QubitsTopology, QubitNode

login_key = "your_key"

## 构造 tianyan24 拓扑图
platform = TianYanPlatform(login_key=login_key, machine_name="tianyan24")
config = platform.download_config() # 下载参数

2. 提取有效耦合边

从真机参数中,将可用的耦合提取出来。

python 复制代码
couplers_map: dict = config['overview']['coupler_map'] # {'G0':['Q1', 'Q0'], ...}
disable_couplers = config['disabledCouplers'].split(",") # ['G0', ...] # 不能用的耦合
for Gi in disable_couplers: 
    couplers_map.pop(Gi) # 删掉不能用的耦合

couplers = [] # [[4,3], ..]
for k, v in couplers_map.items():
    couplers.append([int(v[0][1:]), int(v[1][1:])])

print(couplers)
复制代码
[[4, 3], [5, 4], [6, 5], [7, 6], [8, 7], [9, 8], [15, 3], [16, 4], [17, 5], [18, 6], [19, 7], 
 [20, 8], [21, 9], [23, 11], [13, 12], [16, 15], [17, 16], [18, 17], [19, 18], [20, 19], 
 [21, 20], [22, 21], [23, 22]]

3. 创建并填充拓扑图

由于 tianyan24 具有 24 个物理比特,拓扑结构为 2 × 12 2\times12 2×12,所以基于 MindQuantum 先创建一个只有 24 个物理比特而无连线的拓扑图,并将可用耦合逐个填充进去。

python 复制代码
topology = QubitsTopology([QubitNode(i, poi_x=i%12, poi_y=i>=12) for i in range(24)])

for pair in couplers:
    topology[pair[0]] >> topology[pair[1]] # type:ignore
    
topology.show()

4. 删除不可用的物理比特

有一些物理比特是不可用的,我们需要进一步将其从拓扑图中删除。

python 复制代码
# 删除不可用的物理比特
disable_qubits = [int(item[1:]) for item in config['disabledQubits'].split(",")]
for i in disable_qubits:
    topology.remove_qubit_node(i)

topology.show()

此时,得到的拓扑图就与官方图一致了。

类似地,我们进一步处理 tianyan176 和 tianyan176-2 这两个 66 量子比特的真机拓扑图。

python 复制代码
## 构造 tianyan176 拓扑图

from cqlib import TianYanPlatform
from mindquantum.device import QubitsTopology, QubitNode

login_key = "your_key"
machine_name = "tianyan176"
platform = TianYanPlatform(login_key=login_key, machine_name=machine_name)

config = platform.download_config() # 下载参数

couplers_map: dict = config['overview']['coupler_map'] # {'G0':['Q1', 'Q0'], ...}
disable_couplers = config['disabledCouplers'].split(",") # ['G0', ...]
for Gi in disable_couplers: # 删掉不能用的耦合
    couplers_map.pop(Gi)

couplers = [] # [[4,3], ..]
for k, v in couplers_map.items():
    couplers.append([int(v[0][1:]), int(v[1][1:])])

topology = QubitsTopology([QubitNode(i, poi_x = 2*(i%6)+(1-(i//6)%2), poi_y = i//6) for i in range(66)])

for pair in couplers:
    topology[pair[0]] >> topology[pair[1]] # type:ignore

# 删除不可用的物理比特
disable_qubits = [int(item[1:]) for item in config['disabledQubits'].split(",")]

for i in disable_qubits:
    topology.remove_qubit_node(i)

topology.show()
python 复制代码
## 构造 tianyan176-2 拓扑图

from cqlib import TianYanPlatform
from mindquantum.device import QubitsTopology, QubitNode

login_key = "your_key"
machine_name = "tianyan176-2"
platform = TianYanPlatform(login_key=login_key, machine_name=machine_name)

config = platform.download_config() # 下载参数

couplers_map: dict = config['overview']['coupler_map'] # {'G0':['Q1', 'Q0'], ...}
disable_couplers = config['disabledCouplers'].split(",") # ['G0', ...]
for Gi in disable_couplers: # 删掉不能用的耦合
    couplers_map.pop(Gi)

couplers = [] # [[4,3], ..]
for k, v in couplers_map.items():
    couplers.append([int(v[0][1:]), int(v[1][1:])])

topology = QubitsTopology([QubitNode(i, poi_x = 2*(i%6)+(1-(i//6)%2), poi_y = i//6) for i in range(66)])

for pair in couplers:
    topology[pair[0]] >> topology[pair[1]] # type:ignore

# 删除不可用的物理比特
disable_qubits = [int(item[1:]) for item in config['disabledQubits'].split(",")]

for i in disable_qubits:
    topology.remove_qubit_node(i)

topology.show()

最后,我们将上述功能封装为一个函数,从而可一键生成想要的拓扑图。

python 复制代码
## 构造 tianyan176 拓扑图

from cqlib import TianYanPlatform
from mindquantum.device import QubitsTopology, QubitNode


login_key = "your_key"

def get_topology(machine_name:str):
    """根据给定的真机名称,自动下载参数,并生成拓扑图。
    machine_name 可选:'tianyan24', 'tianyan176', 'tianyan176-2'。
    """
    platform = TianYanPlatform(login_key=login_key, machine_name=machine_name)
    config = platform.download_config() # 下载参数

    couplers_map: dict = config['overview']['coupler_map'] # {'G0':['Q1', 'Q0'], ...}
    disable_couplers = config['disabledCouplers'].split(",") # ['G0', ...]
    for Gi in disable_couplers: # 删掉不能用的耦合
        couplers_map.pop(Gi)

    couplers = [] # [[4,3], ..]
    for k, v in couplers_map.items():
        couplers.append([int(v[0][1:]), int(v[1][1:])])
    
    if "176" in machine_name:
        topology = QubitsTopology([QubitNode(i, poi_x = 2*(i%6)+(1-(i//6)%2), poi_y = i//6) for i in range(66)])
    else:
        topology = QubitsTopology([QubitNode(i, poi_x=i%12, poi_y=i>=12) for i in range(24)])

    for pair in couplers:
        topology[pair[0]] >> topology[pair[1]] # type:ignore

    # 删除不可用的物理比特
    disable_qubits = [int(item[1:]) for item in config['disabledQubits'].split(",")]

    for i in disable_qubits:
        topology.remove_qubit_node(i)
    return topology

topology = get_topology("tianyan24")
topology.show()

比特映射

在绘制完拓扑图之后,即可参照教程 比特映射 对量子算法实行比特映射,进而在硬件上执行获得实测数据。

注意:在实际测试中,使用上面构造的拓扑图进行比特映射时,会出现崩溃,目前尚未搞清原因所在。希望读者在参照本文实操时,我或者 MindQuantum 团队已经修复了该 bug。

相关推荐
逻辑君13 小时前
认知神经科学研究报告【20260111】
人工智能·深度学习·机器学习·量子计算
YFJ_mily14 小时前
**Python 实战:写一个论文 PDF 投稿自检工具|附 IPAT 2026 智能光子学会议征稿信息
人工智能·python·pdf·量子计算·论文投稿·智能光子学
想你依然心痛3 天前
量子计算对嵌入式密码学的挑战与后量子算法准备
算法·密码学·量子计算
Litluecat4 天前
2026年7月7日科技热点新闻
人工智能·科技·搜索引擎·量子计算·新闻·每日
Omics Pro7 天前
首个针对生物医药LLM智能体的全流程过程级评测框架
数据库·人工智能·windows·redis·量子计算
AI科技星7 天前
乖乖数学全域数学加速正电荷会产生反向引力
人工智能·机器学习·概率论·量子计算·乖乖数学·全域数学·引力
AI科技星7 天前
基于超复数广义分形流形的电磁耦合与缪子反常磁矩几何理论(中英对照终稿)
网络·人工智能·机器学习·概率论·量子计算·乖乖数学·全域数学
AI科技星7 天前
基于超复数广义分形流形的电磁耦合与缪子反常磁矩几何理论
开发语言·平面·重构·概率论·量子计算·乖乖数学·全域数学
AI科技星8 天前
精细结构常数 α 全套自洽公式体系(论文定稿版)
开发语言·平面·重构·概率论·量子计算
Eloudy8 天前
hsb fpga/ 目录分析
fpga开发·量子计算