TN Tutorial(0-1):建立量子态,演化门实例等

2024-01-18 22:10

本文主要是介绍TN Tutorial(0-1):建立量子态,演化门实例等,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 本节是注解搭建ADQC必要的基础模块:

* 初始化量子态:Library.QuantumState.TensorPureState ( ) 要传参建立实例,MF只能建立参数

   (1)Psi = TensorPureState( psi_ ):psi_作为一个 2**num_qbits 交由MF建立的参数张量

        psi_ = qs.state_all_up( n_qubits = 3,d = 2) 返回一个|000>态

          

        psi_ = qs.state_ghz( n_qubit = 3) 返回一个\frac{1}{\sqrt2} (|000> + |111>) 态

             

        up = tc.tensor([1.0,0.0]).to( dtype = tc.float64 ) + psi_ = tc.einsum('a,b,c -> abc ',up,up,up)

        

   (2)Psi = TensorPureState( nq = 4 )随机建立态,以及如果有机会你会看到后面ADQC会在         建立一个随机目标态psi_target(只作为计算保真度的部分并不参与线路演化) 我们对比一下:

      Psi: 梦开始的地方|000》

       

      Psi:nq=4 的 TensorPureState( )

       

     返回一个一长串高阶张量,conj( ).flatten( ),获得可以拿去点积的平展形式

    

     这简直就是psi_target:     

   

* 定义门:建立了Psi 实例后,MathFun可以提供演化门的细节

    (1)mf.pauli_operators( ), mf.swap( ), mf.hadamard( ), mf.phase_shift( ):QFT_3的手写例子

print('初态为|000>')
up = tc.tensor([1.0, 0.0]).to(dtype=tc.float64)
psi = TensorPureState(tc.einsum('a,b,c->abc', up, up, up))psi.act_single_gate(mf.hadamard(), [0])
psi.act_single_gate(mf.phase_shift(pi/2), [0], [1])
psi.act_single_gate(mf.phase_shift(pi/4), [0], [2])
psi.act_single_gate(mf.hadamard(), [1])
psi.act_single_gate(mf.phase_shift(pi/2), [1], [2])
psi.act_single_gate(mf.hadamard(), [2])

    (2)Psi.act_single_gate( ) StaeOP.py传4*4矩阵,内置函数细节可以转换为2*2*2*2的张量:

psi0_ = ghz.clone()
psi0 = qs.TensorPureState(psi0_)cnot = tc.tensor([[1, 0, 0, 0], [0, 1, 0, 0],[0, 0, 0, 1], [0, 0, 1, 0]]).to(dtype=tc.float64)print('在量子位1(控制)与2(目标)上作用矩阵上传的CNOT后得:')
psi1.act_single_gate(cnot, [1, 2])
print(psi1.tensor.flatten())print('在量子位1(控制)与2(目标)上作用2*2*2*2张量上传的CNOT后得:')
psi0.act_single_gate(cnot.reshape(2,2,2,2), [1, 2])
print(psi1.tensor.flatten())​

 psi0 ~ psi1原理在于:act_single_gate类函数l56-l68里有reshape,转成合乎多体演化的多阶张量

for pp in pos_control:perm.remove(pp)perm = pos + perm + pos_controlstate1 = self.tensor.permute(perm).reshape(2 ** m_p, -1, 2 ** m_c)state1_ = state1[:, :, :-1]state2_ = gate.reshape(-1, 2 ** m_p).mm(state1[:, :, -1])state1 = tc.cat([state1_, state2_.reshape(state2_.shape + (1,))], dim=-1)

    (3)ADGate 那章有模块化编程之后细讲:

 有了模块化编程就豁然开朗,如果说前面都是教学工具的话,开发到这一步到这一步才像  vqnet,qiskit_learning等专业框架一样,真上道了。。。。orz.

* 量子态演化:act_single_gate(gate,cqbit1,cqbit2) 方法(1,2 制备均匀叠加态)

    (1)Psi.act_single_gate( ), 插入门演化量子态的直接方法

U.append(mf.hadamard())psi_ = qs.state_all_up(4, 2).to(dtype=tc.float64)
Psi = qs.TensorPureState(psi_)
Psi.act_single_gate(U[0],[0])
Psi.act_single_gate(U[0],[1])
Psi.act_single_gate(U[0],[2])
Psi.act_single_gate(U[0],[3])

    (2)Psi.observation( gate,[qbit_nth] ), 直接获取该位置的期望值

   

    (3)Psi.reduced_density_matrix( ), 获取该位置约化密度矩阵进行svdvals后获得纠缠谱

      * 这是一个对 nq=4 的 4-qubits 随机态的采样,详见rmd_sample.py

   

    原理上要获得(2,3)间的纠缠谱:permute(1,2,0,3)再reshape(4,4),并且与自己点积     

print('求[1,2]位置对应的约化密度矩阵')
psi = TensorPureState(nq=4)  # 4-qubit随机量子态
rmd1 = psi.reduced_density_matrix([1, 2])tmp = psi.tensor.permute(1, 2, 0, 3).reshape(4, 4)
rmd2 = tmp.mm(tmp.t())
print('两种方法结果的差 = ', (rmd1 - rmd2).norm().item())

值得一提的约化密度矩阵的原理与张量的向量化:                                                                                    

 之后的张量网络收缩里我们也有这个矩阵化,规则人话说就是把指标分成两组各自将指标向量化(abc...)x(ABCD...)把各元素的访问索引返回成一个矩阵:所谓向量化,是指返回一个向量,   依原tensor指标先后次序, 将元素索引一 一访问后获得的线性排布。

    (4)Psi.sampling( 2048 , [3] ), 跟随qbits[3],随机采样2048次,获得结果分布

    

    (5)Psi.bipartite_ent([0,1])纠缠谱,与其它几个谱方法的比较:

       * Psi返回的奇异谱:

s0 = svdvals(psi.tensor.reshape(4, 4))
print('SVD获得的奇异值:\n', s0)

        * Psi约化矩阵返回的本征谱: 

rho = psi.reduced_density_matrix([2, 3])
s1 = eigvalsh(rho)
print('约化矩阵rho[2,3]的本征值(开方):\n',sqrt(s1.sort(descending=True)[0]))

        * Psi约化矩阵成员函数的二分纠缠谱: 

print('调用成员函数获得的本征谱:\n',psi.bipartite_ent([0, 1]))

纠缠谱,纠缠熵:纠缠熵作为纠缠谱的平方的概率分布,算纠缠熵,刻画了两个子体系之间的纠缠大小;此外,不同的二分方式确定了不同的奇异谱或纠缠谱的计算方式,体现在对量子态系数 的矩阵化。纠缠谱平方本质上也是对应约化密度矩阵的本征谱。

* 量子态演化:act_N_qubit_QFT(psi)方法

    (1)原理:

     

  (2)规则与运行:

           * 毕竟是一组门实例的封装的,可以指定qbit_nth对psi进行局部qft

           * 在pos送入一个list装载待qft的qbits

​#对|0000> 0,1,2号位进行QFT:
psi_test = TensorPureState(tc.einsum('a,b,c,d->abcd',up,up,up,up))
psi_test = act_N_qubit_QFT(psi_test,pos = [0,1,2])
#对|0000> 0,1,3号位进行QFT:
psi_test = TensorPureState(tc.einsum('a,b,c,d->abcd',up,up,up,up))
psi_test = act_N_qubit_QFT(psi_test,pos = [0,1,3])

   * 表示一下对psi[0,1,2],psi[0,1,3],进行的QFT编码

  

 

* 建立并运行一个完整的量子线路实例,我们就是把它分成以上三个部分来完成的:(1)建立量子态实例psi;(2)演化量子线路,psi.act_single_gate或者是psi.act_N_qubits_QFT ;(3)psi的测量与运行结果的处理。

这篇关于TN Tutorial(0-1):建立量子态,演化门实例等的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/620412

相关文章

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

mysqld_multi在Linux服务器上运行多个MySQL实例

《mysqld_multi在Linux服务器上运行多个MySQL实例》在Linux系统上使用mysqld_multi来启动和管理多个MySQL实例是一种常见的做法,这种方式允许你在同一台机器上运行多个... 目录1. 安装mysql2. 配置文件示例配置文件3. 创建数据目录4. 启动和管理实例启动所有实例

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss