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

相关推荐
猫头虎3 天前
5G-A来了!5G信号多个A带来哪些改变?
5g·机器人·web3·aigc·社交电子·能源·量子计算
Poseidon、4 天前
2025年5月通信科技领域周报(4.28-5.4):5G-A技术引领峰会通信 卫星通信加速全球化布局
5g·信息与通信·量子计算
萧鼎5 天前
深入探索 Python 的 QuTiP 5 库:量子计算与开放量子系统模拟的利器
开发语言·python·量子计算
Lowcode0025 天前
从图灵机到量子计算:逻辑可视化的终极进化
量子计算
九章云极AladdinEdu8 天前
算力经济模型推演:从中心化到去中心化算力市场的转变(区块链+智能合约的算力交易原型设计)
人工智能·机器学习·去中心化·区块链·智能合约·gpu算力·量子计算
国际云,接待8 天前
2025年服务器技术全景解析:量子计算、液冷革命与未来生态构建
运维·服务器·架构·云计算·腾讯云·量子计算
R²AIN SUITE9 天前
量子跃迁:破解未来计算的“时空密码”
量子计算
灏瀚星空13 天前
随机微分方程(SDE):股票价格模型、利率模型的构建
笔记·python·学习·数学建模·矩阵·开源·量子计算
九章云极AladdinEdu14 天前
量子机器学习中的GPU加速实践:基于CUDA Quantum的混合编程模型探索
人工智能·分布式·机器学习·ai·ai编程·gpu算力·量子计算
国际云,接待14 天前
甲骨文云2025深度解析:AI驱动的云原生生态与全球化突围
运维·服务器·人工智能·云原生·性能优化·云计算·量子计算