不懂量子也能编程!

社区官方
2024-08-24

现有经典计算的软件开发套件并不适用于量子计算,有较高的迁移成本,打破这一技术壁垒是降低量子计算实用化门槛的重中之重。

 

北京玻色量子科技有限公司(简称“玻色量子”)为了解决这一难题,自研“开物SDK”开发套件,大大降低了开发者门槛。无论是高校、企业、个人开发者或其他用户,不需要学习量子物理的技术原理,即可开发量子算法并在量子计算机真机上完成求解。

 

值得注意的是,“开物SDK”是“天工量子大脑”真机最为重要的支撑之一,也是量子AI最重要的三大支柱之一。“开物SDK”一方面管理问题数据与量子系统底层硬件的映射,另一方面对接真实世界的场景,目的是让真实场景中的问题数据可以有效的转化为底层硬件上的量子关系,帮助用户实现计算。

 

当前,“开物SDK”在QUBO模型(二次无约束二值优化模型)转化、自动调参、真机模拟三个方面实现了自动化。用户只需关注建立与场景所对应的数学模型,SDK可以自动分解复杂算法,实现智能优化,一键解决约束项问题,无需接入真机即可模拟编程求解。“天工量子大脑”与“开物SDK”的结合,可以实现自动降阶、自适应约束、自动拆解,高效助力用户将高次模型简化为QUBO模型,使得计算更高效;保证精度平衡,使速度与准确两者兼得;自动分解大规模问题为小规模问题的集合,以实现用较小的量子比特数开销就能够实用于较大规模计算任务求解。

 

量子计算人人可用的钥匙——开物SDK

 

量子计算要想实现人人可用并不难,因为玻色量子技术研发团队将入门的门槛磨平了。

 

开物SDK是一套基于相干光量子计算机(天工量子大脑550W和天工量子大脑100)求解QUBO问题的软件开发套件,旨在帮助开发者在Python环境下直接构建可适用于相干光量子计算机的软件算法,并提供物理接口(如Ising矩阵)调用量子计算机物理真机。

 

其中,SDK包含多种经典求解器和CIM模拟求解器,前/后处理模块等,将数学算法直接映射为量子计算机可识别的输入,使得开发者不用具备专门的量子物理知识,即可在数学建模层进行量子计算算法开发。目前分4个模块:

1.QUBO:针对QUBO提供一系列求解前处理工具
2.2.CIM:CIM求解模块包含模拟求解器和物理机接口等
3.3.classical:包含多种求解QUBO或Ising的经典求解器
4.4.sampler:求解后处理模块,将求解器输出的结果进行数据处理
 

手把手教学,一看就会

 

1.  登录网站获取用户ID和SDK授权码。登录网址:https://developer.qboson.com/

 

2.  根据个人电脑操作系统在官网下载对应的SDK,文件命名如:kaiwu-sdk.linux.xxx..zip(mac有intel和m两个版本,使用过程中如提醒架构有问题,请尝试不同的版本)。

 

3.  用户需要提前安装Python3.8(不区分小版本),暂不支持Python其它版本,Python安装请自行搜索相关教程。

 

4.  SDK安装包解压后会有一个whl文件 (以 0.9.3 版本为例)

 

5.  安装SDK,使用pip安装时注意whl文件路径(国内可使用: pip3 install kaiwu-0.9.3-py3-none-any.whl-ihttps://pypi.tuna.tsinghua.edu.cn/simple)

 

6.  建模代码开头增加授权初始化代码,如果初始化错误请校验用户ID和SDK授权码或清除kaiwu/license.lic文件,然后重新初始化。

 

 

快速上手,全能且好用——使用相干光量子计算机解Max-Cut最大割问题

 

1.  问题描述

 

Max-Cut最大割问题是NP-Complete问题。给定一张图,求一种分割方法,将所有顶点分割成两部分,目标是使得被切断的边的数量最大,或边的总权重最大。

 

以无向无权图为例。在图G(V,E)中,V为图的顶点集合,E为图的边集,w为图的邻接矩阵。对于i,j∈V,wij表示顶点i到顶点j是否有边,有连边关系则取1,无连边关系则取0,以决策变量σi表示顶点i的分类,其可能的取值为1,-1,分别表示将顶点i分为A类或B类。则在给定的无向图中,将所有顶点分割成两群的分割方法所对应割取的边的个数为Z,模型表示为

 

以一个四顶点实例说明,如下图所示,通过观察可以发现将1、2分为A类,3、4分为B类的“割”法将得到问题的最优解Z=4。

 

通过连边关系可知,邻接矩阵为

 

当顶点1、2为一组,顶点3、4为另一组时,σ1=1,σ4=-1。则上式变为

 

此时目标函数为

 

最大割数量为4,符合前文通过观察得到的答案。

注意到,Wij为输入的常量,并不影响模型的计算,所以上式可以简化为:

 

其中,H表示哈密尔顿量,w为输入的邻接矩阵,决策变量σi表示顶点i的分类,上述式子就是一个最大割问题的Ising模型。

 

2.  建模代码输入矩阵

import numpy as np
import kaiwu as kw

# Import the plotting library
import matplotlib.pyplot as plt

# invert input graph matrix
matrix = -np.array([
                [0, 1, 0, 1, 1, 0, 0, 1, 1, 0],
                [1, 0, 1, 0, 0, 1, 1, 1, 0, 0],
                [0, 1, 0, 1, 1, 0, 0, 0, 1, 0],
                [1, 0, 1, 0, 0, 1, 1, 0 ,1, 0],
                [1, 0, 1, 0, 0, 1, 0, 1, 0, 1],
                [0, 1, 0, 1, 1, 0, 0, 0, 1, 1],
                [0, 1, 0, 1, 0, 0, 0, 0, 0, 1],
                [1, 1, 0, 0, 1, 0, 0, 0, 1, 0],
                [1, 0, 1, 1, 0, 1, 0, 1, 0, 1],
                [0, 0, 0, 0, 1, 1, 1, 0, 1, 0]])
 

3.使用CIM模拟器查看量子比特演化

查看单次CIM模拟的量子比特演化过程用到了kaiwu.cim.simulator_core模拟器, 该模拟器输入CIM-Ising矩阵、pump功率、噪声强度、圈数、圈步长,输出量子比特演化的模拟量,需要注意的是,使用这个模拟器前一般会使用kaiwu.cim.normalizer对输入矩阵的特征值进行归一化:

matrix_n = kw.cim.normalizer(matrix, normalization=0.5)
output = kw.cim.simulator_core(
            matrix_n,
            c = 0,
            pump = 0.7,
            noise = 0.01,
            laps = 1000,
            dt = 0.1)
 

计算哈密顿量,一般使用未进行归一化的矩阵进行计算:

h = kw.sampler.hamiltonian(matrix, output)
 

绘制量子比特演化图与哈密顿量图:

plt.figure(figsize=(10, 10))

# pulsing diagram
plt.subplot(211)
plt.plot(output, linewidth=1)
plt.title("Pulse Phase")
plt.ylabel("Phase")
plt.xlabel("T")

# Energy diagram
plt.subplot(212)
plt.plot(h, linewidth=1)
plt.title("Hamiltonian")
plt.ylabel("H")
plt.xlabel("T")

plt.show()
 

4.  查看最优解

 

查看最优解前

需要将kaiwu.cim.simulator_core模拟器输出的数据,使用 kaiwu.sampler.binarizer进行二值化。 关于kaiwu.sampler.binarizer,我们在本示例中只输入第一个参数表示输入解集, 其余参数保持默认即可。

c_set = kw.sampler.binarizer(output)
 

最优解采样:

kaiwu.sampler.optimal_sampler将对二值的解集进行按能量排序,越靠前的解能量越低,即解越优。

opt = kw.sampler.optimal_sampler(matrix, c_set, 0)
 

取最优解,其中 opt = (解集, 能量),下面第一个索引取解集,第二个索引取解集第一个解。

best = opt[0][0]
print(best)
 

 

5.  使用CIM模拟器进行计算

 

若想大规模计算,我们用到了kaiwu.cim.simulator模拟器,该模拟器输入CIM-Ising矩阵、pump功率、噪声强度、圈数、圈步长、归一化因子、独立运行次数,输出量子比特经过去重的二值化值,使用这个模拟器前就不需要使用kaiwu.cim.normalizer对输入矩阵的特征值进行归一化了:

worker = kw.cim.SimulatedCIMOptimizer(
    pump=0.7,
    noise=0.01,
    laps=50,
    delta_time=0.1,
    normalization=0.3,
    iterations=10
)
output = worker.solve(matrix)
 

6.  输出结果

opt = kw.sampler.optimal_sampler(matrix, output, 0)
best = opt[0][0]
max_cut = (np.sum(-matrix)-np.dot(-matrix,best).dot(best))/4
print("The obtained max cut is "+str(max_cut)+".")
 

以上,就是通过快速上手开物SDK,使用相干光量子计算机——天工量子大脑550W求解Max-Cut最大割问题的详细步骤啦。

 

量子计算与开物SDK

 

显然,“开物SDK”方便用户只需关注数学模型,基于Python,任意IDE环境均可适配,充分体现出“好用”和“全能”的性能优势。基于天工量子大脑真机,结合开物SDK与量子云服务,玻色量子自研的相干光量子计算技术可以在金融、通信、生命科学、材料化工、AI、电力能源等领域实现基于真实应用场景、真实业务数据、量子真机验证三位一体的应用探索。

 

同时,玻色量子还构建了一个“场景漏斗”。近一年来,已有数十个不同的场景进入“场景漏斗”,玻色量子已联合产出近10篇场景移植验证成功的学术论文。当千行百业的用户都参与到量子计算的生态中,才能实现终极目标:找到量子计算的可规模扩展、可高频使用的场景。

 

2023年,为了更好的加速生态建设,玻色量子与北京图象图形学学会、移动云、南方科技大学成功举办首届“五岳杯”量子计算挑战赛。此次赛事共有近2000支队伍,近5000人报名竞赛!参赛者覆盖近500所中国高校,超过900个专业,总计收集到量子计算应用论文2000余份。

 

这些数字,进一步证明了两点:第一,量子计算的加速能力可以赋能众多领域,只有更多的行业开发者加入,才能让量子计算发挥出真正的能力。第二,通过开物SDK,即使只是大学本科生,通过一定的数学和代码,也可以实现量子计算的使用。

 

基于天工量子大脑真机和开物SDK,玻色量子将与更多开发者合作,打破各种技术壁垒,更为广泛的实现量子计算实用化。

 

——end——

270
0
1
返回顶部
返回顶部