量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?

这篇具有很好参考价值的文章主要介绍了量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

本文还是大部分截图来自于:《最適化問題とWildqatを用いた量子アニーリング計算入門》 https://booth.pm/ja/items/1415833

终于有人问到怎么将QUBO中的三次多项式转换为二次多项式了。直接以一个例题开始讲解。中间会用到之前文章里的知识,大家最好读了该系列前两篇之后,再阅读此文。


一、三次多项式的例题

问题:通过量子退火算法求解令下面 H H H最小化的 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3值。
量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?

下面讲解如何导出对应的QUBO矩阵。

Step1. 变量替换。

首先,把两个变量的乘积用一个变量替代,这里用 x 4 x_4 x4替代 x 2 x 3 x_2x_3 x2x3

量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?
因为我们使用了上面的变量替换,所以我们要满足以下约束:
量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?

Step2. 加入约束项。

上面的约束对应的约束项 H ′ H' H如下👇,由 x 2 , x 3 , x 4 x_2,x_3,x_4 x2,x3,x4能构成的二次多项式构成。
量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?
这里补充一句,在本系列第二篇中,直接给大家列出了常见约束的H表达式,这次我们需要手动推导。大家从头到尾,要谨记一句话:

【我们最终的目标是令目标 H H H最小化的同时,满足约束。所以,约束 H ′ H' H代入令目标 H H H最小化的变量 x 2 , x 3 , x 4 x_2,x_3,x_4 x2,x3,x4具体值时,也是最小化的。】

于是,接下来所有的变换都是为了寻找 H ′ H' H的适当的系数(a, b, c, d, e, f)。本系列第二篇中每个常见约束的求解,都经历了寻找对应系数的过程。

Step3. 寻找合适的约束项系数。

我们可以这么想,通过合适的系数(a, b, c, d, e, f),使得 x 2 , x 3 , x 4 x_2,x_3,x_4 x2,x3,x4满足式(2)时,令 H ′ = 0 H'=0 H=0;不满足式(2)时, H ′ > 0 H'>0 H>0。那就这么约定了。

  1. x 2 x 3 = x 4 x_2x_3=x_4 x2x3=x4时,如我们约定好的,令 H ′ = 0 H'=0 H=0,整理如下表:
    量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?
    这时,上表中的 x 2 , x 3 , x 4 x_2,x_3,x_4 x2,x3,x4按行代入式(4)后,对应的只包含系数(a, b, c, d, e, f)的等式如下:

量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?

  1. x 2 x 3 ≠ x 4 x_2x_3≠x_4 x2x3=x4时,如我们约定好的,令 H ′ > 0 H'>0 H>0,整理入下表:
    量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?
    这个时候, ( k 1 , k 2 , k 3 , k 4 ) (k_1,k_2,k_3,k_4) k1,k2,k3,k4都是比0大的常量。在a=b=0的前提下,把上表中的所有指按行代入式(4)后,得到等式如下:

量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?
接下来,我们要寻找合适的 ( k 1 , k 2 , k 3 , k 4 ) (k_1,k_2,k_3,k_4) k1,k2,k3,k4,比如下面的两组赋值都不行❌。
量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?
于是我们找了很久,终于发现 ( k 1 , k 2 , k 3 , k 4 ) (k_1,k_2,k_3,k_4) k1,k2,k3,k4如下👇取值时,满足约束。
量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?

Step4. 获得确定系数的约束项 H ′ H' H

把已经确定的(a, b, c, d, e, f)和 ( k 1 , k 2 , k 3 , k 4 ) (k_1,k_2,k_3,k_4) k1,k2,k3,k4代入式(4)就行了。得到最终的 H ′ H' H如下:

量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?
Step5. 获得最终的二次多项式 H H H

这里就不必多说了,别忘了还有个 λ \lambda λ 系数,需要手动指定。
量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?
我们把 λ \lambda λ =1,代入上式,得到下面最终的QUBO矩阵。
量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?

二、Python实现

1.引入库

import wildqat as wq
import numpy as np

H_A = np.array([
	[1,0,0,-1],
	[0,0,0,0],
	[0,0,0,0],
	[0,0,0,0]])
H_A = np.array([
	[0,0,0,0],
	[0,0,1,-2],
	[0,0,0,-2],
	[0,0,0,3]])
k, l = 1, 1

a = wq.opt()
a.qubo = k * H_A + l * H_B

for i in range(5):
	print("x = {}".format(a.sa()))
	print("H = {}".format(a.E(-1)))

结果打印如下,有兴趣的可以看看,取值是否满足约束。
量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?

总结

提示:写的比较匆忙,可能有很多错误,大家发现了留言告诉我:

还是挺麻烦的,不过不难理解,是可以写程序自动化的,这也是为什么我们需要pyqubo这中自动化转换QUBO的程序。文章来源地址https://www.toymoban.com/news/detail-413070.html

到了这里,关于量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 量子退火算法入门(5):旅行商问题的QUBO建模「下篇之Python实现」

    提示:上篇已经讲过了旅行商问题的QUBO建模,这里直接讲两种编程实现: 看过上篇的读者应该已经注意到,因为旅行商问题需要最终返回到初始点的。所以,下面👇的目标函数里,循环进行到 N N N 时,最后一个 x j , t + 1 x_{j,t+1} x j , t + 1 ​ 应该确定回到初始点的。 针对这

    2023年04月14日
    浏览(39)
  • TCP中的三次握手和四次挥手

    TCP中的连接和断开可以说是在面试中经常被问到的问题之一,正好有空就总结一下,首先回顾一下TCP的相关知识点 1.1 TCP的基本概念 我们知道TCP是运输层的面向连接的可靠的传输协议。 面向连接的 ,指的就是在两个进程发送数据之前,必须先相互“握手”,确保两进程可以

    2024年02月03日
    浏览(50)
  • Tcp的三次握手及netty和实际开发如何设置全连接队列参数

    上图 第一次握手,client 发送 SYN 到 server,状态修改为 SYN_SEND,server 收到,状态改变为 SYN_REVD,并将该请求放入 sync queue 队列 第二次握手,server 回复 SYN + ACK 给 client,client 收到,状态改变为 ESTABLISHED,并发送 ACK 给 server 第三次握手,server 收到 ACK,状态改变为 ESTABLISHED,将

    2024年02月08日
    浏览(48)
  • 量子退火Python实战(3):投资组合优化(Portfolio) MathorCup2023特供PyQUBO教程

    提示:包含pyQUBO用法: 最近MathorCup2023的A题刚好是投资组合的QUBO建模,刚好有篇日文文章是讲这个的,直接翻译过来。供大家参考。【因为还没有获得作者同意,暂且没有把文章设置为翻译,之后会设置成翻译,或者再加一下自己的东西变成原创。】 什么是投资组合优化?

    2024年02月03日
    浏览(56)
  • 量子算法入门——2.线性代数与复数

    参考资料: 【【零基础入门量子计算-第03讲】线性代数初步与复数】 来自b站up:溴锑锑跃迁 建议关注他的更多高质量文章:CSDN:【溴锑锑跃迁】 强烈建议搭配b站原视频进行观看,这只是我当时看的笔记,读懂这堂课的内容可能需要:线性代数(初等变换、列向量)、离散

    2024年02月19日
    浏览(40)
  • Python入门【TCP建立连接的三次握手、 TCP断开连接的四次挥手、套接字编程实战、 TCP编程的实现、TCP双向持续通信】(二十七)

    👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🔥如果感觉博主的文章还不错的

    2024年02月12日
    浏览(42)
  • TCP的三次握手

             TCP 是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务器的内存里保存的一份关于对方的信息,如 IP 地址、端口号等。         TCP 可以看成是一种字节流, 它会处理 IP 层或以下的层的丢

    2024年02月03日
    浏览(43)
  • TCP的三次握手过程

    TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而 建立连接是通过三次握手来进行的 。三次握手的过程如下图: 刚开始客户端处于 closed 的状态,服务端处于 listen 状态 。 第一次握手:客户端给服务端发一个 SYN 报文,客户端会随机初始化序号( client_isn )。此时

    2024年02月16日
    浏览(46)
  • 详解TCP的三次握手

    定义 TCP是一种面向连接(连接导向)的、可靠的基于字节流的传输层通信协议。TCP将用户数据打包成报文段,发送后会启动一个定时器,然后另一端收到的数据进行确认、对失序的数据重新排序、丢弃重复数据 特点 TCP是面向连接的传输控制层协议 每一条TCP连接只能有两个端

    2024年02月05日
    浏览(42)
  • RFID安全的三次认证

    RFID是Radio Frequency Identification的缩写,即射频识别。它是一种通过用电磁场收集数据并从远距离自动识别物体的技术。它使用无线电波来将信息从一个电子标签传输到读卡器中,而不需要直接接触。这些标签可以嵌入到物品中或附加到物品表面,以便在物流、库存管理、安全等

    2024年02月04日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包