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

相关推荐
MilieStone1 天前
十五五规划产业布局正式落地,美尔斯通加速深耕量子科技
量子计算
爱看科技1 天前
微美全息(NASDAQ:WIMI)容错量子计算赋能,大规模机器学习模型高效量子算法获突破
算法·机器学习·量子计算
3DVisionary1 天前
3D光学弯管测量系统:空调管路高效质量管控利器
数码相机·3d·量子计算·3d光学测量·弯管检测·空调管路·质量管控
cyyt2 天前
深度学习周报(10.27~11.2)
量子计算
一尘之中2 天前
量子计算机操作系统的破晓:中国“本源司南“与全球开源生态全景解析
开源·ai写作·量子计算
卡奥斯开源社区官方2 天前
量子计算“平价革命”深度解析:AMD破局FPGA方案+中国千比特云服务,技术拐点已至?
fpga开发·量子计算
luoganttcc2 天前
量子计算 可以做有限元 并行计算吗
量子计算
BAGAE5 天前
量子计算机的发展趋势
去中心化·密码学·网络攻击模型·gpu算力·量子计算·可信计算技术·空间计算
john_hjy5 天前
cuQuantum 量子计算
量子计算
世岩清上5 天前
量子科技:从实验室到生活场的科技革命
科技·生活·量子计算