基于QFT的量子加法器的原理与实现-mindspore quantum

news2024/11/17 11:53:26

1 量子Fourier变换

离散Fourier变换以一一个复向量 x 0 , . . . , x N − 1 {x_0},...,{x_{N - 1}} x0,...,xN1为输入,输出的数据是如下复向量 y 0 , . . . , y N − 1 {y_0},...,{y_{N - 1}} y0,...,yN1
y k ≡ 1 N ∑ j = 0 N − 1 x j e 2 π i j k / N {y_k} \equiv \frac{1}{{\sqrt N }}\sum\limits_{j = 0}^{N - 1} {{x_j}{e^{ 2\pi ijk/N}}} ykN 1j=0N1xje2πijk/N

量子Fourier变换是与它严格相同的变换。量子Fourier变换定义为,在一组标准正交基 ∣ 0 ⟩ , . . . , ∣ N − 1 ⟩ \left| 0 \right\rangle ,...,\left| {N - 1} \right\rangle 0,...,N1上的一个线性算子,在基态上的作用为
∣ j ⟩ → 1 N ∑ k = 0 N − 1 e 2 π i j k / N ∣ k ⟩ \left| j \right\rangle \to \frac{1}{{\sqrt N }}\sum\limits_{k = 0}^{N - 1} {{e^{2\pi ijk/N}}} \left| k \right\rangle jN 1k=0N1e2πijk/Nk

我们将状态 j j j写成二进制形式 j = j 1 j 2 . . . j n j=j_1j_2...j_n j=j1j2...jn,用记号 0. j l j l + 1 . . . j m 0.j_lj_{l+1}...j_m 0.jljl+1...jm表示二进制分数。

容易推导出量子Fourier变换的积形式:
∣ j 1 , . . . , j n ⟩ → 1 2 n / 2 [ ( ∣ 0 ⟩ + e 2 π i 0. j n ∣ 1 ⟩ ) ( ∣ 0 ⟩ + e 2 π i 0. j n − 1 j n ∣ 1 ⟩ ) . . . ( ∣ 0 ⟩ + e 2 π i 0. j 1 . . . j n − 1 j n ∣ 1 ⟩ ) ] \begin{array}{l} \left| {{j_1},...,{j_n}} \right\rangle \to \\ \frac{1}{{{2^{n/2}}}}\left[ {\left( {\left| 0 \right\rangle + {e^{2\pi i0.{j_n}}}\left| 1 \right\rangle } \right)\left( {\left| 0 \right\rangle + {e^{2\pi i0.{j_{n - 1}}{j_n}}}\left| 1 \right\rangle } \right)...\left( {\left| 0 \right\rangle + {e^{2\pi i0.{j_1}...{j_{n - 1}}{j_n}}}\left| 1 \right\rangle } \right)} \right] \end{array} j1,...,jn2n/21[(0+e2πi0.jn1)(0+e2πi0.jn1jn1)...(0+e2πi0.j1...jn1jn1)]

量子Fourier变换的有效线路实现如下:
在这里插入图片描述其中门 R k R_k Rk表示酉变换
在这里插入图片描述
使用交换运算逆转量子比特的顺序,量子比特的状态为
1 2 n / 2 ( ∣ 0 ⟩ + e 2 π i 0. j n ∣ 1 ⟩ ) ( ∣ 0 ⟩ + e 2 π i 0. j n − 1 j n ∣ 1 ⟩ ) . . . ( ∣ 0 ⟩ + e 2 π i 0. j 1 . . . j n − 1 j n ∣ 1 ⟩ ) \frac{1}{{{2^{n/2}}}} {\left( {\left| 0 \right\rangle + {e^{2\pi i0.{j_n}}}\left| 1 \right\rangle } \right)\left( {\left| 0 \right\rangle + {e^{2\pi i0.{j_{n - 1}}{j_n}}}\left| 1 \right\rangle } \right)...\left( {\left| 0 \right\rangle + {e^{2\pi i0.{j_1}...{j_{n - 1}}{j_n}}}\left| 1 \right\rangle } \right)} 2n/21(0+e2πi0.jn1)(0+e2πi0.jn1jn1)...(0+e2πi0.j1...jn1jn1)

量子Fourier变换可使用如下语句实现

from mindquantum.algorithm.library import qft
circ = qft([2,1,0]) 
circ.svg()

在这里插入图片描述

图中的PS门为相位旋转门PhaseShift。
在这里插入图片描述

需要注意的是,q0 q1 q2寄存器对应的量子态为 ∣ q 2 q 1 q 0 ⟩ \left| {{q_2}{q_1}{q_0}} \right\rangle q2q1q0

2 量子加法器

若有 a = a 1 a 2 . . . a n a=a_1a_2...a_n a=a1a2...an b = b 1 b 2 . . . b n b=b_1b_2...b_n b=b1b2...bn,欲计算 c = a + b c=a+b c=a+b,根据量子Fourier变换的知识,我们可先制备出如下量子态 ∣ c f ⟩ |cf\rangle cf
1 2 n / 2 ( ∣ 0 ⟩ + e 2 π i 0. c n ∣ 1 ⟩ ) ( ∣ 0 ⟩ + e 2 π i 0. c n − 1 c n ∣ 1 ⟩ ) . . . ( ∣ 0 ⟩ + e 2 π i 0. c 1 . . . c n − 1 c n ∣ 1 ⟩ ) \frac{1}{{{2^{n/2}}}}\left( {\left| 0 \right\rangle + {e^{2\pi i0.{c_n}}}\left| 1 \right\rangle } \right)\left( {\left| 0 \right\rangle + {e^{2\pi i0.{c_{n - 1}}{c_n}}}\left| 1 \right\rangle } \right)...\left( {\left| 0 \right\rangle + {e^{2\pi i0.{c_1}...{c_{n - 1}}{c_n}}}\left| 1 \right\rangle } \right) 2n/21(0+e2πi0.cn1)(0+e2πi0.cn1cn1)...(0+e2πi0.c1...cn1cn1)
再利用逆Fourier变换即可得到 ∣ c 1 c 2 . . . c n ⟩ |c_1c_2...c_n\rangle c1c2...cn

2.1 不考虑最高位进位

观察到
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
于是可使用如下线路制备 ∣ c f ⟩ |cf\rangle cf,这里先不考虑最高位有进位的情况。
在这里插入图片描述
将这个线路记作MAdder(Modular Adder)。于是,量子加法器的线路如下(不考虑最高位进位):
在这里插入图片描述

2.2 考虑最高位进位

考虑 a = a 1 a 2 . . . a n a=a_1a_2...a_n a=a1a2...an b = b 1 b 2 . . . b n b=b_1b_2...b_n b=b1b2...bn c = a + b = c 1 c 2 . . . c n + 1 c = a + b = {c_1}{c_2}...{c_{n + 1}} c=a+b=c1c2...cn+1 c 1 = 0 c_1=0 c1=0表示最高位无进位, c 1 = 0 c_1=0 c1=0表示最高位有进位。

若考虑最高位进位,则需要给 a a a增加一个量子比特存储进位项。
∣ a ⟩ = ∣ 0 a 1 , . . . , a n ⟩ \left|a \right\rangle = \left| {0{a_1},...,{a_n}} \right\rangle a=0a1,...,an
∣ a ⟩ \left|a \right\rangle a做量子Fourier变换后
在这里插入图片描述
观察到
在这里插入图片描述
于是制备 ∣ c f ⟩ |cf\rangle cf的线路如下
在这里插入图片描述
注意:红框里线路的旋转角相比于前面的线路均多除了一个2。
将上图线路记作Adder,完整的量子加法器线路如下
在这里插入图片描述

3 代码实现

导入一些用到的包

from mindquantum.algorithm.library import qft
from mindquantum.simulator import Simulator
from mindquantum.core.gates import  X, PhaseShift
from mindquantum.core.circuit import Circuit,dagger
import numpy as np

定义受控相位旋转操作

def _rn(k):
    return PhaseShift(2 * np.pi / 2 ** k)

def C_R(tq, cq, k):
    circ = Circuit()
    circ += _rn(k).on(tq, cq)
    return circ

定义adder,这里考虑了进位项

def m_adder(qa, qb):
    circ = Circuit()
    qa_num = len(qa)
    qb_num = len(qb)

    for q in range(qb_num):
        for i in range(qb_num - q - 1, qb_num):
            circ += C_R(qa[qa_num - q - 1], qb[qb_num - i - 1], i - (qb_num - q - 1) + 1)
        if qa_num > qb_num and q == (qb_num - 1):  # 进位的控制
            for i in range(qb_num - q - 1, qb_num):
                circ += C_R(qa[qa_num - q - 1 - 1], qb[qb_num - i - 1], i - (qb_num - q - 1) + 1 + 1)
    return circ

输入a和b的值(假设a,b都是3bit二进制数),并执行加法器

#定义存储a和b的寄存器qa,qb
qa = [3, 4, 5, 6]
qb = [0, 1, 2]

circ = Circuit()

# qa 输入a的值 001
# circ += X.on(5)
# circ += X.on(4)
circ += X.on(3)

# qb 输入b的值 111
circ += X.on(2)
circ += X.on(1)
circ += X.on(0)

#对qa执行量子Fourier操作
circ += qft([6, 5, 4, 3])

#执行加法操作
adder = m_adder(qa, qb)
circ += adder

#使用量子逆Four变换恢复出结果
circ += dagger(qft([6, 5, 4, 3]))

sim = Simulator('projectq', 7)
sim.apply_circuit(circ)
print(sim.get_qs(True))

circ.svg() #查看整个线路

1¦1000111⟩
结果保存在qa寄存器中即c=1000
qb寄存器中值不变,即b=111

参考资料

[1] Engin Şahin. Quantum arithmetic operations based on quantum fourier transform on signed integers. International Journal of Quantum Information. (2020) 2050035 (21 pages).

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/670712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【初识C语言】变量和常量

文章目录 1. 局部变量和全局变量2. 变量的作用域和生命周期3. 常量 生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)有些值是可变的(比如:年龄,体重&…

18款奔驰S450 4MATIC升级发光出风口,提升车内氛围感

完美匹配,全部都是原装位,安装很快,瞬间发光。随着氛围灯颜色的变化而变化。美丽靓丽与质感同存,大大提升了车的颜值档次。让您车生活更加的富有乐趣与满足!

决策树笔记

决策树模型学习过程 1.根节点选择什么特征 2.只关注决策树的左侧分支 3.再关注右侧分支 纯度 熵就是样本的混乱程度,熵越大,越混乱,纯度就越低 减小熵信息增益 选择拆分信息增益 选择信息增益大的,以增加纯度 p1left 定义为…

2023年功能测试会被淘汰?自动化测试到测试开发?我的测试之路...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 现在2023年&#…

数据技术在金融行业有哪些应用_光点科技

随着信息技术的迅猛发展,大数据技术逐渐成为金融行业的重要工具。大数据技术的应用,不仅可以提高金融机构的运营效率,还能够提供更准确的风险评估和预测,从而为投资者和决策者提供更好的决策依据。 那么,大数据技术在…

ES应用风暴

文章目录 使用案例启发使用ElasticSearch作为主要的后端,作为搜索引擎在现有系统增加ElasticSearch使用ElasticSearch和现有的工具 常用于日志收集(分析)系统、实时警报 使用案例 维基百科:全文检索、高亮、搜索推荐。The Guar…

【无标题】Instant NGP(使用哈希编码的多分辨率的即时神经图形原语)

论文基本信息 作者:THOMAS MLLER,NVIDIA,瑞士ALEX EV ANS,NVIDIA,英国CHRISTOPH SCHIED,美国NVIDIA ALEXANDER KELLER,德国 关键词: Image Synthesis, Neural Networks, En- codings…

[230606] 听力TPO66汇总·最终篇|L3-WATM Wether Animals have a Theory Mind|19:30-21:30

[230605] 听力TPO66汇总下篇|L2-Fish Movement|13:00~14:0015:20~17:00 http://t.csdn.cn/jxqyr [230604] 听力TPO66汇总上篇| C1 L1 C2|10:20~12:00 http://t.csdn.cn/zyEGw 极度缺少相关背景知识

蓝精灵协会 | 23 年 6 月通讯

您好,Smurf 朋友们,欢迎阅读我们的新版时事通讯。它旨在分享来自社区及其项目的最新更新。我们希望您会喜欢它! 水晶特卖:折扣从 6 月 19 日开始 根据社区的投票,我们延长了水晶薄荷的持续时间,并减少了折扣…

这所天津的热门院校,保护一志愿,曾连续两年专业课题目完全相同,平均140分!

一、学校及专业介绍 天津工业大学(Tiangong University),简称“天工大”,位于天津市,是教育部与天津市共建高校、国家国防科技工业局和天津市共建的天津市重点建设高校、国家“双一流”建设高校、天津市高水平特色大学…

Python 常用内置函数与匿名函数的应用

目录 一、前言二、常用内置函数2.1 max()2.2 enumerate()2.3 map()3.4 reduce()2.5 filter()2.6 sorted() 一、前言 我们知道,Python 函数总体可分为两类,一类是标准函数,一类是匿名函数。其中标准函数中又可细分为内置标准函数、自定义标准…

支付宝一面:如何基于Redis实现分布式锁?

复习八股文的时候,分布式锁大家应该不陌生,像很多阿里、美团的面试官就很喜欢问这个问题。 前几天一位读者面试阿里的时候,就被问到了这个问题。当时,面试官追问的比较深,一些细节他回答的不是很好。不过,…

遭遇疑似网络攻击时服务器异常情况排查方法

一、适用场景 该方法主要用于发生网信安全异常情况时的异常设备信息提取和登机排查指导,主要包括主机类设备,linux和windows操作系统为主。 二、处理原则 网络安全应急工作坚持统一指挥、分工负责、及时预警、分级响应、密切协同、快速处置、确保恢复、…

Android Studio设置不自动运行到run标签

点击run成功后会自动切换到run标签,很烦人 设置: Edit Configuration app下的Miscellaneous 下,取消勾选 Activate tool window

提升项目经理能力,有什么方法?

一,项目管理是职场的基础能力 他思考了一会,和我说:项目经理这个职业,同事专业性强,薪酬稳定,福利优越。只要有几年的项目管理经验,也能生存无忧。 但是,如果你不满足于只做一个普…

计网笔记--数据链路层

1--数据链路层三个问题 ① 封装成帧 ② 差错控制 差错检测:奇偶校验和循环冗余校验 ③ 可靠传输 2--三种可靠传输协议 ① 停止-等待协议(SW) 接收成功,发送ACK确认信号,接收失败,发送NAK否认信号&#xf…

Elasticsearch:ignore_malformed,映射异常的解药

我们知道在文档摄入到 Elasticsearch 时,如果文档的字段在 mapping 中已经有定义,而当前的文档的字段的类型和之前的类型是不一样的情况下,那么我们该如何处理呢?通常由如下的几种方法: 使用 coerce 属性。在这种情况…

python微信公众号推送消息

目录 准备数据 接口 代码 微信公众号开发文档:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html 准备数据 1、微信公众号注册:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?tsandbox/login 2、注册成功后可生…

基于TCP/UDP的Socket编程

---- socket概述: socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。 socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写…

springboot启动流程 (3) 自动装配

在SpringBoot中,EnableAutoConfiguration注解用于开启自动装配功能。 本文将详细分析该注解的工作流程。 EnableAutoConfiguration注解 启用SpringBoot自动装配功能,尝试猜测和配置可能需要的组件Bean。 自动装配类通常是根据类路径和定义的Bean来应…