基于 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。

相关推荐
一尘之中1 天前
量子存储器:不可读的“海量存储”与计算的革命
ai写作·量子计算
Eloudy1 天前
全文 -- CUAOA: A Novel CUDA-Accelerated Simulation Framework for the QAOA
量子计算
明明真系叻2 天前
2026.1.25日周报
论文阅读·量子计算
fengfuyao9852 天前
基于MATLAB的量子图像加密实现
开发语言·matlab·量子计算
明明真系叻2 天前
2025.12.14日周报——文献阅读
论文阅读·量子计算
养军博客3 天前
江苏省计算机大类专转本全面知识点
计算机网络·云计算·媒体·量子计算
witAI5 天前
2025动漫剧本创作工具推荐,助力逆袭重生动态漫
python·量子计算
Eloudy6 天前
NVIDIA NVQLink 量子与经典计算融合的开放式互连架构
量子计算·arch
雪兽软件6 天前
量子计算与加密的未来
量子计算