使用 QCIS 的 Quantum Computer@quantumcomputer.ac.cn 的 SDK。
项目描述
数学创新研究院云平台数学编程教学(Readme版)
教学大纲
1.软件环境的安装
2. Hello Quantum,首个量子程序的提交
2.1准备计算计算云平台登录信息
2.2理财程序编写
2.3将程序提交到计算云平台
2.4读取实验结果
3.多元矩阵程序--传参混合编程
3.1示例1:将经典参数带入量子线路
3.2示例2:以标准参数作为判断条件,执行不同的电路线路
3.3示例3:根据经典参数,重新合成(组合)报表线路
1. 软件环境的安装
在Python环境下,安装ezQpy SDK中科院数学信息与量子科技创新研究院计算机的远程调用SDK包
如果你按一下zQ,运行点击运行下面的安装提示键+中,然后按一下键,然后接着指令相同。
pip install ezQpy
提示输出中有类似成功的字样,即为安装成功。
安装采集包:ezQpy
安装成功 ezQpy-0.1.5
2 Hello Quantum,首个量子程序的提交
2.1 准备计算计算云平台登录信息
from ezQpy import * #导入ezQpy包
username = "您的ID"
password = "您的密码"
account = Account(username, password)
#设置用户登录信息,并创建实例
#SDK不断升级中,后期将不采用账号,密码形式登录,敬请留意。
#账号注册:https://quantumcomputer.ac.cn
2.2 量子程序编写
本地函数只有最基础的离线
检查,最新的检查以程序实际提交时检查。
离线版本,QCIS线路提交后,在线不优化,以用户的程序设计,不改变设计线路。
#手动书写第一个量子程序:Bell态制备
qcis_raw = '''
H Q1
X Q2
H Q2
CZ Q1 Q2
H Q2
M Q1
M Q2
'''
#可以通过多种方法自行产生待提交的程序。
# 以上指令意义请自行补课,参考QCIS指令集:https://quantumcomputer.ac.cn/Knowledge/detail/all/e3948e8e0fab45c5adcfc730d0a1a3ba.html
#有代替换变量时,请不要执行正则检查和代码优化
#0.1.6之后的函数支持,线路的正则检查
qcis_circuit=account.qcis_check_regular(qcis_raw)
#优化代码,对一些等效操作进行合并。现阶段提供的优化实例见SDK发布详细说明。https://xxxx
qcis_sim = account.simplify(qcis_circuit)
#查看优化结果
print(qcis_sim)
#变量替换,以保证后面代码统一。
qcis_circuit=qcis_sim
2.3 将程序提交到计算云平台
作为入门教程,可以只通过最简单的submit_job()参数来提交一个简单的实验,更多参数见进阶教程。
函数定义:
query_id=$\color{red} {submit_job}$(电路=None,exp_name='exp0',parameters=None,values=None,num_shots=12000,lab_id=None,exp_id=None,version=None)
电路,量子线路,对于新实验必须提供。
exp_name, 名称,建议提供,自行查找实验归类实验。
参数,值,线路中变量的替换,用于混合编程,见后文实例。
num_s,每一次重复的次数,实验的特点,得出的结果是实验实验的统计,12个爆破机,目前支持3000次的仅此一倍。
lab_id,实验集合id,相当于实验目录。
exp_id,不提供实验线路,可以通过exp_id,用于运行保存过的线路id。
版本,实验线路的名称标识。
query_返回,字符类型。为id/表示实验运行结果的id,用于说明实验运行的id,则用于说明实验提交出现异常。
submit_job 是有多个基础函数组合组成,参数及更多阶的使用形式定义请参见高。
query_id = account.submit_job(qcis_circuit, exp_name='Bell_QCIS')
#最简形式exp_name参量也可以不传递。
#submit_job可以有更多设置,还请关注我们的教程更新。
#不传递计算机名称时,默认使用12比特一维链芯片对应的量子计算机。
#其他量子计算机名称及规格,敬请关注我们的官方网站。https://quantumcomputer.ac.cn
print(query_id)
2.4 读取实验结果
前面的步骤准备好提交到计算云平台的计算机上并执行,实验一次通过量子导查询_id回读结果就可以了。submit_job
()一般执行时,,获得实验结果查询(query_id),在实验进度查询时,请查询查询保存id查询
好
。 ,利用query_experiment()可以进行下一步查询工作。
if query_id:
result=account.query_experiment(query_id, max_wait_time=360000)
#result即为实验结果
#最大等待时间单位为秒,不传递时默认为30秒。因量子程序的执行会有排队的情况,而量子计算机本身有自动校准的时间,如果想跑全自动的程序,等待时间最好大于两者。
#以下是实验结果的显示、使用与保存。
#打印,显示结果
print(result)
#选出、处理部分结果
value = result['00']
print(value)
#保存结果
f = open("./results.txt",'w')
f.write(str(value))
f.close()
即完成了基于Q的最简单的实验流程,需要对实验进行适当的重集,或者半自动完成,CIS的提交实验,做指定实验等,可以参考后继的高级篇。
本段落代码如下:
from ezQpy import * #导入ezQpy包
username = "您的ID"
password = "您的密码"
account = Account(username, password)
qcis_raw = '''
H Q1
X Q2
H Q2
CZ Q1 Q2
H Q2
M Q1
M Q2
'''
qcis_circuit=account.qcis_check_regular(qcis_raw)
qcis_sim = account.simplify(qcis_circuit)
print(qcis_sim)
qcis_circuit=qcis_sim
query_id = account.submit_job(qcis_circuit, exp_name='Bell_QCIS')
print(query_id)
if query_id:
result=account.query_experiment(query_id, max_wait_time=360000)
#result即为实验结果
#最大等待时间单位为秒,不传递时默认为30秒。因量子程序的执行会有排队的情况,而量子计算机本身有自动校准的时间,如果想跑全自动的程序,等待时间最好大于两者。
#以下是实验结果的显示、使用与保存。
#打印,显示结果
print(result)
#选出、处理部分结果
value = result['00']
print(value)
#保存结果
f = open("./results.txt",'w')
f.write(str(value))
f.close()
3 多组程序
多款数学程序并不神秘,只是到了程序中的单个手指输入程序中的位数,将经典程序的首个参数类型结果显示给程序或者程序。
3.1 示例1:将经典参数带入量子线路
演示程序必有实际物理意义,未参考编程风格。
from ezQpy import * #导入ezQpy包
username = "您的ID"
password = "您的密码"
account = Account(username, password)
qcis_circuit = '''
RX Q1 {n1}
RX Q2 {n2}
H Q1
X Q2
H Q2
CZ Q1 Q2
H Q2
M Q1
M Q2
'''
#代码中嵌入了变量['n1','n2'],利用submit_job函数,提交前进行参数带入,实现动态数据的输入。
value=0
while value < 0.5 : #经典计算的条件判断
query_id = account.submit_job(qcis_circuit, exp_name='QCIS_test',parameters=['n1','n2'], values=[(0.2*value)%3.14, (0.2*value)%3.14])
#将实时计算的经典数据带入量子程序,并运行。
#实现了经典程序数据与量子程序数据的交互。
#还可以根据经典数据作为条件,调用不同量子程序,输入不同参数。见示例2
if query_id:
result=account.query_experiment(query_id, max_wait_time=360000)
#最大等待时间单位为秒,不传递时默认为30秒。因量子程序的执行会有排队的情况,而量子计算机本身有自动校准的时间,如果想跑全自动的程序,等待时间最好大于两者。
print(result)
value = float(result['00']) #将量子程序的运行结果处理,重新赋值给经典程序。
print(value)
else:
value=0.5
print(f'迭代失败,有实验未运行成功')
#以下为运算结果的使用与保存。
f = open("./results.txt",'w')
f.write('value={},next n1={},n2={}'.format(value,(0.2*value)%3.14, (0.2*value)%3.14))
f.close()
3.2 示例2:以标准参数作为判断条件,执行不同的电路线路
演示程序必有实际物理意义,未参考编程风格。
from ezQpy import * #导入ezQpy包
username = "您的ID"
password = "您的密码"
account = Account(username, password)
qcis_circuit_1 = '''
RX Q1 {n1}
RX Q2 {n2}
H Q1
X Q2
H Q2
CZ Q1 Q2
H Q2
M Q1
M Q2
'''
#代码中嵌入了变量['n1','n2'],利用submit_job函数,提交前进行参数带入,实现动态数据的输入。
qcis_circuit_2 = '''
H Q1
X Q2
H Q2
CZ Q1 Q2
H Q2
RX Q1 {n3}
RX Q2 {n4}
M Q1
M Q2
'''
#代码中嵌入了变量['n3','n4'],利用submit_job函数,提交前进行参数带入,实现动态数据的输入。
#经典计算一系列动作,得到一个判断变量。
value=0
if value < 0.5 : #经典计算的条件判断
query_id = account.submit_job(qcis_circuit_1, exp_name='QCIS_test_1',parameters=['n1','n2'], values=[(0.2*value)%3.14, (0.2*value)%3.14])
#将实时计算的经典数据带入量子程序,并运行。
#实现了经典程序数据与量子程序数据的交互。
if query_id:
result=account.query_experiment(query_id, max_wait_time=360000)
#最大等待时间单位为秒,不传递时默认为30秒。因量子程序的执行会有排队的情况,而量子计算机本身有自动校准的时间,如果想跑全自动的程序,等待时间最好大于两者。
print(result)
value = float(result['00']) #将量子程序的运行结果处理,重新赋值给经典程序。
print(value)
else:
print(f'迭代失败,有实验未运行成功')
else:
query_id = account.submit_job(qcis_circuit_2, exp_name='QCIS_test_2',parameters=['n3','n4'], values=[(0.3*value)%3.14, (0.3*value)%3.14])
#将实时计算的经典数据带入量子程序,并运行。
#实现了经典程序数据与量子程序数据的交互。
if query_id:
result=account.query_experiment(query_id, max_wait_time=360000)
#最大等待时间单位为秒,不传递时默认为30秒。因量子程序的执行会有排队的情况,而量子计算机本身有自动校准的时间,如果想跑全自动的程序,等待时间最好大于两者。
print(result)
value = float(result['00']) #将量子程序的运行结果处理,重新赋值给经典程序。
print(value)
else:
print(f'迭代失败,有实验未运行成功')
#以上还可以根据实验结果进行再次循环迭代等。参加示例1.
#以下为运算结果的使用与保存。
f = open("./results.txt",'w')
f.write('value={},next n1={},n2={}'.format(value,(0.2*value)%3.14, (0.2*value)%3.14))
f.close()
3.3 示例3:根据经典参数,重新合成(组件)线路
演示程序必有实际物理意义,未参考编程风格。
from ezQpy import * #导入ezQpy包
username = "您的ID"
password = "您的密码"
account = Account(username, password)
qcis_circuit = '''
'''
#空白量子线路,等待生产
#一通经典计算
i=15
if i >10:
qcis_circuit=qcis_circuit+'\nX Q1'
else:
qcis_circuit=qcis_circuit+'\Y Q1'
#再一通经典计算
j=5
if j >10:
qcis_circuit=qcis_circuit+'\nRX Q1 {n1} \nRY Q1 {n2} \nM Q1'
else:
qcis_circuit=qcis_circuit+'\nRY Q1 {n1} \nRX Q1 {n2} \nM Q1'
#看看线路成什么样子了
print(qcis_circuit)
#又一通经典计算
value=0
#采用量子实验结果递归和经典参数带入作为下文示例。
while value < 0.5 : #经典计算的条件判断
query_id = account.submit_job(qcis_circuit, exp_name='QCIS_test',parameters=['n1','n2'], values=[(0.2*value)%3.14, (0.2*value)%3.14])
#将实时计算的经典数据带入量子程序,并运行。
#实现了经典程序数据与量子程序数据的交互。
#还可以根据经典数据作为条件,调用不同量子程序,输入不同参数。见示例2
if query_id:
result=account.query_experiment(query_id, max_wait_time=360000)
#最大等待时间单位为秒,不传递时默认为30秒。因量子程序的执行会有排队的情况,而量子计算机本身有自动校准的时间,如果想跑全自动的程序,等待时间最好大于两者。
print(result)
value = float(result['00']) #将量子程序的运行结果处理,重新赋值给经典程序。
print(value)
else:
value=0.5
print(f'迭代失败,有实验未运行成功')
#以下为运算结果的使用与保存。
f = open("./results.txt",'w')
f.write('value={},next n1={},n2={}'.format(value,(0.2*value)%3.14, (0.2*value)%3.14))
f.close()
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
ezQpy-0.1.6.1.tar.gz
(20.1 kB
查看哈希)
内置分布
ezQpy-0.1.6.1-py2.py3-none-any.whl
(19.3 kB
查看哈希)