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

相关推荐
程亦寻4 天前
物联网与前沿技术融合分析
人工智能·物联网·区块链·量子计算
卓琢4 天前
前沿技术趋势洞察与分析:探寻科技变革的多维密码
人工智能·区块链·量子计算
躺柒6 天前
读量子霸权07光合作用
量子计算·量子·量子计算机·数字计算机·光合作用
CSDN云计算6 天前
聚焦算力、AI、安全、5G等十大领域,赛迪顾问发布2025年IT趋势
人工智能·5g·安全·量子计算·赛迪
刘争Stanley8 天前
量子计算:从薛定谔的猫到你的生活
人工智能·yolo·搜索引擎·生活·scikit-learn·量子计算·dall·e 2
Loving_enjoy10 天前
潜力巨大但道路曲折的量子计算:探索未来科技的无限可能
量子计算
TaoSense11 天前
未来量子计算技术会如何影响音频DSP的发展?
人工智能·音频·量子计算
Allen_LVyingbo12 天前
Qiskit快速编程探索(基本篇)
量子计算
射频微波精密13 天前
盛铂科技新品1至44GHz锁相介质振荡器(点频源)PDROU
测试工具·信息与通信·信号处理·量子计算
程序猿阿伟14 天前
《量子比特大阅兵:不同类型量子比特在人工智能领域的优劣势剖析》
人工智能·量子计算