量子变分算法 (python qiskit)

news2024/10/27 9:02:36

背景

        变分量子算法是用于观察嘈杂的近期设备上的量子计算效用的有前途的候选混合算法。变分算法的特点是使用经典优化算法迭代更新参数化试验解决方案或“拟设”。这些方法中最重要的是变分量子特征求解器 (VQE),它旨在求解给定汉密尔顿量的基态,该汉密尔顿量表示为泡利项的线性组合,其中拟设电路中要优化的参数数量是量子比特数量的多项式。鉴于完整解决方案向量的大小是量子比特数量的指数,使用 VQE 成功最小化通常需要额外的问题特定信息来定义拟设电路的结构。
        执行 VQE 算法需要以下组件:汉密尔顿量和假设(问题规范)Qiskit 运行时估计器经典优化器虽然汉密尔顿量和假设需要特定领域的知识来构建,但这些细节对于运行时来说并不重要,我们可以以相同的方式执行广泛的 VQE 问题。

步骤 1 .将经典输入映射到量子问题

        尽管 VQE 算法所讨论的问题实例可能来自各种领域,但通过 Qiskit Runtime 执行的形式是相同的。Qiskit 提供了一个方便的类,用于以泡利形式表达汉密尔顿量,并在 qiskit.circuit.library 中提供了一组广泛使用的假设电路。
        这个示例汉密尔顿量源自量子化学问题。
        设置 

# 导入 VQE 实验所需的工具。ansatz是训练电路。
# General imports
import numpy as np

# Pre-defined ansatz circuit and operator class for Hamiltonian
from qiskit.circuit.library import EfficientSU2
from qiskit.quantum_info import SparsePauliOp

# SciPy minimizer routine
from scipy.optimize import minimize

# Plotting functions
import matplotlib.pyplot as plt
#runtime和session两个类用于管理与 IBM Quantum 运行时服务的连接和会话。
#Estimator类用于估算量子电路运行的期望值,通常用于量子算法中的成本函数评估。
from qiskit_ibm_runtime import QiskitRuntimeService, Session
from qiskit_ibm_runtime import EstimatorV2 as Estimator

# 从可用的后端中选择一个负载最少的后端,以便提交作业,即调用真实量子计算机
service = QiskitRuntimeService(channel="ibm_quantum")
backend = service.least_busy(operational=True, simulator=False)

# SparsePauliOp 类从给定的 Pauli 表达式和系数创建哈密顿量
hamiltonian = SparsePauliOp.from_list(
    [("YZ", 0.3980), ("ZI", -0.3980), ("ZZ", -0.0113), ("XX", 0.1810)]
)

        选择的假设是 EfficientSU2,它默认以线性方式纠缠量子位,使其成为连接有限的量子硬件的理想选择。

ansatz = EfficientSU2(hamiltonian.num_qubits)
ansatz.decompose().draw("mpl", style="iqp")

num_params = ansatz.num_parameters

这里使用的num_params数为16,即16个量子门。

步骤 2. 优化量子执行问题

        为了减少总作业执行时间,Qiskit 原语仅接受符合目标 QPU 支持的指令和连接的电路(ansatz)和可观察量(Hamiltonian)(称为指令集架构 (ISA) 电路和可观察量)。

        ISA 电路安排一系列 qiskit.transpiler 传递以优化所选后端的电路并使其与后端的 ISA 兼容。这可以通过 qiskit.transpiler 中的预设传递管理器及其optimization_level 参数轻松完成。
        最低优化级别执行使电路在设备上运行所需的最少操作;它将电路量子位映射到设备量子位并添加交换门以允许所有两量子位操作。最高优化级别更加智能,并使用了许多技巧来减少总门数。由于多量子位门具有高错误率并且量子位会随着时间的推移而退相干,因此较短的电路应该会给出更好的结果。

#这个函数用于生成预设的电路优化处理器。
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
#pm 使用指定的目标信息生成一个预设的优化处理器(pass manager)
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)

ansatz_isa = pm.run(ansatz)

ansatz_isa.draw(output="mpl", idle_wires=False, style="iqp")

 ISA 可观察

        在使用 Runtime Estimator V2 运行作业之前,转换汉密尔顿函数以使其与后端兼容。使用 SparsePauliOp 对象的 apply_layout 方法执行转换

步骤 3. 使用 Qiskit 原语执行

        与许多经典优化问题一样,VQE 问题的解可以表述为标量成本函数的最小化。根据定义,VQE 通过优化假设电路参数来最小化汉密尔顿量的期望值(能量),从而寻找汉密尔顿量的基态解。由于 Qiskit 运行时估算器直接采用汉密尔顿量和参数化的假设,并返回必要的能量,因此 VQE 实例的成本函数非常简单。
        注意,Qiskit Runtime EstimatorV2 的 run() 方法采用原始统一块 (PUB) 的可迭代对象。每个 PUB 都是一个可迭代对象,格式为 (circuit, observables, paramter_values: Optional, precision: Optional)。

#定义一个损失函数
def cost_func(params, ansatz, hamiltonian, estimator):
    """Return estimate of energy from estimator

    Parameters:
        params (ndarray): Array of ansatz parameters
        ansatz (QuantumCircuit): Parameterized ansatz circuit
        hamiltonian (SparsePauliOp): Operator representation of Hamiltonian
        estimator (EstimatorV2): Estimator primitive instance
        cost_history_dict: Dictionary for storing intermediate results

    Returns:
        float: Energy estimate
    """
    pub = (ansatz, [hamiltonian], [params])
    result = estimator.run(pubs=[pub]).result()
    energy = result[0].data.evs[0]

    cost_history_dict["iters"] += 1
    cost_history_dict["prev_vector"] = params
    cost_history_dict["cost_history"].append(energy)
    print(f"Iters. done: {cost_history_dict['iters']} [Current cost: {energy}]")

    return energy

        请注意,除了必须作为第一个参数的优化参数数组之外,使用其他参数来传递成本函数中所需的项,例如 cost_history_dict 。此字典存储每次迭代的当前向量,例如,以防万一由于失败而需要重新启动例程,还返回当前迭代次数和每次迭代的平均时间。

cost_history_dict = {
    "prev_vector": None,
    "iters": 0,
    "cost_history": [],
}
x0 = 2 * np.pi * np.random.random(num_params)

        选择的经典优化器来最小化成本函数。在这里,我们通过最小化函数使用 SciPy 中的 COBYLA 例程。请注意,在实际量子硬件上运行时,优化器的选择很重要,因为并非所有优化器都能同样好地处理嘈杂的成本函数景观。
要开始例程,请指定一组随机初始参数:

        因为我们要发送大量想要一起执行的作业,所以我们使用 Session 在一个块中执行所有生成的电路。这里的 args 是提供成本函数所需的附加参数的标准 SciPy 方法。

with Session(backend=backend) as session:
    estimator = Estimator(mode=session)
    estimator.options.default_shots = 10000

    res = minimize(
        cost_func,
        x0,
        args=(ansatz_isa, hamiltonian_isa, estimator),
        method="cobyla",
    )

        在此例程的末尾,我们得到了标准 SciPy OptimizeResult 格式的结果。由此我们可以看出,需要进行 nfev 次成本函数评估才能获得参数角度 (x) 的解向量,当将其插入 ansatz 电路时,就会产生我们正在寻找的近似基态解。

输出

 message: Optimization terminated successfully.
 success: True
  status: 1
     fun: -0.634701203143904
       x: [ 2.581e+00  4.153e-01 ...  1.070e+00  3.123e+00]
    nfev: 146
   maxcv: 0.0

步骤 4. 后处理,以经典格式返回结果

        如果过程正确终止,则 cost_history_dict 字典中的 prev_vector 和 iters 值应分别等于解向量和函数求值总数。这很容易验证: 

all(cost_history_dict["prev_vector"] == res.x)
cost_history_dict["iters"] == res.nfev
fig, ax = plt.subplots()
ax.plot(range(cost_history_dict["iters"]), cost_history_dict["cost_history"])
ax.set_xlabel("Iterations")
ax.set_ylabel("Cost")
plt.draw()

理想状态下,即完成一整轮次的优化,模型成功收敛,代价趋于稳定。 

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

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

相关文章

这是一篇vue3 的详细教程

Vue 3 详细教程 一、Vue 3 简介 Vue.js 是一款流行的 JavaScript 前端框架,用于构建用户界面。Vue 3 是其最新版本,带来了许多新特性和性能优化,使开发更加高效和灵活。 二、环境搭建 安装 Node.js 前往Node.js 官方网站下载并安装适合你…

WPF+MVVM案例实战(六)- 自定义分页控件实现

文章目录 1、项目准备2、功能实现1、分页控件 DataPager 实现2、分页控件数据模型与查询行为3、数据界面实现 3、运行效果4、源代码获取 1、项目准备 打开项目 Wpf_Examples,新建 PageBarWindow.xaml 界面、PageBarViewModel.cs ,在用户控件库 UserControlLib中创建…

WASM 使用说明23事(RUST实现)

文章目录 1. wasm是什么1.1 chatgpt定义如下:1.2 wasm关键特性: 2. wasm demo2.1 cargo 创建项目2.2 编写code2.3 安装wasm-pack2.4 编译 3.1 html页面引用wasm代码(js引用)3.2 访问页面4 导入js function4.1 编写lib.rs文件,内容…

UML 总结(基于《标准建模语言UML教程》)

定义 UML 又称为统一建模语言或标准建模语言,是一种标准的图形化建模语言,它是面向对象分析与设计的一种标准表示。尽管UML 本身没有对过程有任何定义,但UML 对任何使用它的方法(或过程)提出的要求是:支持用…

【含开题报告+文档+PPT+源码】基于vue框架的东升餐饮点餐管理平台的设计与实现

开题报告 在当前信息化社会背景下,餐饮行业正经历着由传统线下服务模式向线上线下深度融合的转变。随着移动互联网技术及大数据应用的飞速发展,用户对于餐饮服务平台的需求也日益多元化和个性化。他们期望能在一个集便捷、高效、个性化于一体的平台上完…

自动化测试工具Ranorex Studio(十六)-添加新Action

在Action表中,有两种手动添加action的方式。 一种方法是指定Action本身(’添加新Action’),然后分配对应的对象库条目(在多数情况下)。 第二种方法是直接把对象库条目拖放到Action表内,然后生成…

力扣 中等 2466.统计构造好字符串的方案数

文章目录 题目介绍题解 题目介绍 题解 题意:每次可以爬 zero 或 one 个台阶,返回爬 low 到 high 个台阶的方案数。 和上题337.组合总和 (链接)的思路一样,只不过是将可以爬的台阶数从数组换成了两个数(ze…

视频美颜平台的搭建指南:基于直播美颜SDK的完整解决方案

众所周知,直播美颜SDK是实现视频美颜功能的核心。本文将详细解析如何基于直播美颜SDK搭建一个完整的视频美颜平台。 一、视频美颜SDK的核心功能 直播美颜SDK作为平台的技术核心,能够提供丰富的美颜效果和稳定的视频处理能力。通常,SDK具备以…

iOS AVAudioSession 详解【音乐播放器的配置】

前言 在 iOS 音频开发中,AVAudioSession 是至关重要的工具,它控制着应用的音频行为,包括播放、录音、后台支持和音频中断处理等。对于音乐播放器等音频需求强烈的应用,设计一个合理的 AVAudioSession 管理体系不仅能保证音频播放…

RabbitMQ是一个开源的消息代理和队列服务器

RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol,高级消息队列协议)协议实现,同时也支持其他消息协议如STOMP、MQTT等。作为一个可靠的消息传递服务,RabbitMQ在分…

青少年CTF平台的基础题writeup

青少年CTF平台 1、文章管理系统 首先他这里有一个问号id,就想着使用mysql跑一下,但是windows的sqlmap很不给力,都不动,所以我后面换成了kali机来跑 跑一下就跑出了好多的数据库 第一次我使用ctftraining不出货,跑的一…

Coppelia Sim (v-REP)仿真 机器人3D相机手眼标定与实时视觉追踪 (一)

coppelia sim[V-REP]仿真实现 机器人于3D相机手眼标定与实时视觉追踪 一 标定板的制作生成标定的PDF文件PDF转为图像格式图像加载到仿真中 二 仿真场景设置加载机器人加载的控制dummy ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b48549d355d8441d8dfc20bc7ba7196…

【K8S系列】Kubernetes Pod节点CrashLoopBackOff 状态及解决方案详解【已解决】

在 Kubernetes 中,Pod 的状态为 CrashLoopBackOff 表示某个容器在启动后崩溃,Kubernetes 尝试重启该容器,但由于持续崩溃,重启的间隔时间逐渐增加。下面将详细介绍 CrashLoopBackOff 状态的原因、解决方案及相关命令的输出解释。 …

.NET Core WebApi第1讲(概念):Web基础、AJAX、JQuery

动态页面:数据流动 / Web服务器 / Ajax / 前后端分离 / restful风格源栈课堂一起帮https://17bang.ren/Code/261 一、Web基础 二、AJAX诞生 三、JQuery

ctfshow(262,264)--反序列化漏洞--字符串逃逸

Web262 源代码: index.php: error_reporting(0); class message{public $from;public $msg;public $to;public $tokenuser;public function __construct($f,$m,$t){$this->from $f;$this->msg $m;$this->to $t;} }$f $_GET[f]; $m $_GET[m]; $t $_…

虚拟现实新纪元:VR/AR技术将如何改变娱乐与教育

内容概要 在当今科技飞速发展的时代,虚拟现实(VR)和增强现实(AR)技术不仅让我们的娱乐体验如虎添翼,更为教育变革注入了新活力。这些技术的飞跃进展,将原本平淡无奇的场景转变为令人沉醉的沉浸…

HICP--2

在area 0的路由器只生成 area 0 的数据库,只在area 1 的一样。但是既在又在的生成两个 area的 LSDB 一、区域间三类LSA 在OSPF(Open Shortest Path First)协议中,区域间三类LSA(Link-State Advertisement&#xff09…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第七篇-体积纹理绘制】

我们前几篇已经完成了渲染部分,现在终于开始做动态绘制功能了 之前使用的是这样一个体积雾的切片图,那么现在要做的就是动态编辑它 首先,让我们简单了解一下它是如何运作的: 开始绘制画布以渲染目标,并将材质绘制到画…

Python字幕滚动:为视频添加专业级动态效果!

Python实现由下向上滚动字幕 在数字媒体和编程领域,动态文本效果总能吸引观众的注意力。其中,滚动字幕是一种常见的视觉效果,经常用于视频、演示文稿和网页中。在Python中,我们可以通过多种方式来实现滚动字幕效果,比…

《2024中国泛娱乐出海洞察报告》解析,垂直且多元化方向发展!

随着以“社交”为代表的全球泛娱乐市场规模不断扩大以及用户需求不断细化,中国泛娱乐出海产品正朝着更加垂直化、多元化的方向发展。基于此,《2024中国泛娱乐出海洞察报告》深入剖析了中国泛娱乐行业出海进程以及各细分赛道出海现状及核心特征。针对中国…