qiskit的grover算法demo

qiskit的grover算法demo01 资源 01 01vscode 的 qiskt 插件 IBM 的 qiskit 提供了 vscode 的插件 插件源码位置 https github com Qiskit qiskit vscode 使用参考 https marketplace visualstudio com items itemName qiskit qiskit vscode01 02qiskit 的 demohttps

01 资源

01.01 vscode的qiskt插件

01.02 qiskit的demo

02 grover算法demo

grover_algorithm.py代码如下:

import numpy as np import matplotlib.pyplot as plt #%matplotlib inline # importing Qiskit from qiskit import Aer, IBMQ from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister from qiskit import available_backends, execute, register, get_backend, compile from qiskit.tools import visualization from qiskit.tools.visualization import circuit_drawer q = QuantumRegister(6) qc = QuantumCircuit(q) qc.x(q[2]) qc.cx(q[1], q[5]) qc.cx(q[2], q[5]) qc.cx(q[3], q[5]) qc.ccx(q[1], q[2], q[4]) qc.ccx(q[3], q[4], q[5]) qc.ccx(q[1], q[2], q[4]) qc.x(q[2]) circuit_drawer(qc) def black_box_u_f(circuit, f_in, f_out, aux, n, exactly_1_3_sat_formula): """Circuit that computes the black-box function from f_in to f_out. Create a circuit that verifies whether a given exactly-1 3-SAT formula is satisfied by the input. The exactly-1 version requires exactly one literal out of every clause to be satisfied. """ num_clauses = len(exactly_1_3_sat_formula) for (k, clause) in enumerate(exactly_1_3_sat_formula): # This loop ensures aux[k] is 1 if an odd number of literals # are true for literal in clause: if literal > 0: circuit.cx(f_in[literal-1], aux[k]) else: circuit.x(f_in[-literal-1]) circuit.cx(f_in[-literal-1], aux[k]) # Flip aux[k] if all literals are true, using auxiliary qubit # (ancilla) aux[num_clauses] circuit.ccx(f_in[0], f_in[1], aux[num_clauses]) circuit.ccx(f_in[2], aux[num_clauses], aux[k]) # Flip back to reverse state of negative literals and ancilla circuit.ccx(f_in[0], f_in[1], aux[num_clauses]) for literal in clause: if literal < 0: circuit.x(f_in[-literal-1]) # The formula is satisfied if and only if all auxiliary qubits # except aux[num_clauses] are 1 if (num_clauses == 1): circuit.cx(aux[0], f_out[0]) elif (num_clauses == 2): circuit.ccx(aux[0], aux[1], f_out[0]) elif (num_clauses == 3): circuit.ccx(aux[0], aux[1], aux[num_clauses]) circuit.ccx(aux[2], aux[num_clauses], f_out[0]) circuit.ccx(aux[0], aux[1], aux[num_clauses]) else: raise ValueError('We only allow at most 3 clauses') # Flip back any auxiliary qubits to make sure state is consistent # for future executions of this routine; same loop as above. for (k, clause) in enumerate(exactly_1_3_sat_formula): for literal in clause: if literal > 0: circuit.cx(f_in[literal-1], aux[k]) else: circuit.x(f_in[-literal-1]) circuit.cx(f_in[-literal-1], aux[k]) circuit.ccx(f_in[0], f_in[1], aux[num_clauses]) circuit.ccx(f_in[2], aux[num_clauses], aux[k]) circuit.ccx(f_in[0], f_in[1], aux[num_clauses]) for literal in clause: if literal < 0: circuit.x(f_in[-literal-1]) # -- end function def n_controlled_Z(circuit, controls, target): """Implement a Z gate with multiple controls""" if (len(controls) > 2): raise ValueError('The controlled Z with more than 2 ' + 'controls is not implemented') elif (len(controls) == 1): circuit.h(target) circuit.cx(controls[0], target) circuit.h(target) elif (len(controls) == 2): circuit.h(target) circuit.ccx(controls[0], controls[1], target) circuit.h(target) # -- end function def inversion_about_average(circuit, f_in, n): """Apply inversion about the average step of Grover's algorithm.""" # Hadamards everywhere for j in range(n): circuit.h(f_in[j]) # D matrix: flips the sign of the state |000> only for j in range(n): circuit.x(f_in[j]) n_controlled_Z(circuit, [f_in[j] for j in range(n-1)], f_in[n-1]) for j in range(n): circuit.x(f_in[j]) # Hadamards everywhere again for j in range(n): circuit.h(f_in[j]) # -- end function qr = QuantumRegister(3) qInvAvg = QuantumCircuit(qr) inversion_about_average(qInvAvg, qr, 3) circuit_drawer(qInvAvg) """ Grover search implemented in Qiskit. This module contains the code necessary to run Grover search on 3 qubits, both with a simulator and with a real quantum computing device. This code is the companion for the paper "An introduction to quantum computing, without the physics", Giacomo Nannicini, https://arxiv.org/abs/1708.03684. """ def input_state(circuit, f_in, f_out, n): """(n+1)-qubit input state for Grover search.""" for j in range(n): circuit.h(f_in[j]) circuit.x(f_out) circuit.h(f_out) # -- end function # Make a quantum program for the n-bit Grover search. n = 3 # Exactly-1 3-SAT formula to be satisfied, in conjunctive # normal form. We represent literals with integers, positive or # negative, to indicate a Boolean variable or its negation. exactly_1_3_sat_formula = [[1, 2, -3], [-1, -2, -3], [-1, 2, 3]] # Define three quantum registers: 'f_in' is the search space (input # to the function f), 'f_out' is bit used for the output of function # f, aux are the auxiliary bits used by f to perform its # computation. f_in = QuantumRegister(n) f_out = QuantumRegister(1) aux = QuantumRegister(len(exactly_1_3_sat_formula) + 1) # Define classical register for algorithm result ans = ClassicalRegister(n) # Define quantum circuit with above registers grover = QuantumCircuit() grover.add(f_in) grover.add(f_out) grover.add(aux) grover.add(ans) input_state(grover, f_in, f_out, n) T = 2 for t in range(T): # Apply T full iterations black_box_u_f(grover, f_in, f_out, aux, n, exactly_1_3_sat_formula) inversion_about_average(grover, f_in, n) # Measure the output register in the computational basis for j in range(n): grover.measure(f_in[j], ans[j]) # Execute circuit backend = Aer.get_backend('qasm_simulator') job = execute([grover], backend=backend, shots=1000) result = job.result() # Get counts and plot histogram counts = result.get_counts(grover) visualization.plot_histogram(counts) # 下面需要有IBMQ的账号在本地磁盘的配置 IBMQ.load_accounts() # get ibmq_16_rueschlikon configuration and coupling map backend = IBMQ.get_backend('ibmq_16_melbourne') backend_config = backend.configuration() backend_coupling = backend_config['coupling_map'] # compile the circuit for ibmq_16_rueschlikon grover_compiled = compile(grover, backend=backend, coupling_map=backend_coupling, seed=1) grover_compiled_qasm = grover_compiled.experiments[0].header.compiled_circuit_qasm print("Number of gates for", backend.name(), "is", len(grover_compiled_qasm.split("\n")) - 4) circuit_drawer(grover) 

如有错误之处,欢迎批评指正。:。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216225.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午12:16
下一篇 2026年3月18日 下午12:16


相关推荐

  • OpenClaw中文版Molili正式公测:一键安装部署,零使用门槛

    OpenClaw中文版Molili正式公测:一键安装部署,零使用门槛

    2026年3月13日
    5
  • 于Heroku平台部署maven webapp(java web)工程

    于Heroku平台部署maven webapp(java web)工程

    2022年1月14日
    39
  • win10图标变白纸_同是Office365,为什么你的软件图标还是旧版的?

    win10图标变白纸_同是Office365,为什么你的软件图标还是旧版的?为什么你的office365套件最新版的图标还是旧版?是新版图标还没向正式版用户推送吗?我的office365的账号有问题吗?难道是我打开的方式不对吗?旧版图标新版图标打开产品信息一看你的版本信息是这样的:版本号1808、半年频道怎么点更新都是显示已经到了最新的版本对吧?再看看新版图标的office365的产品信息是这样的:版本1904、每月频道这就定位到问题了,同是office365专业增强订阅…

    2022年10月19日
    4
  • 组装电脑购机指南和记录自己的装机过程[通俗易懂]

    组装电脑购机指南和记录自己的装机过程[通俗易懂]最近家里组装了一台电脑,从采购到组装,前前后后涉及的内容挺多的,我特地在此总结下,防止自己忘记心急的小白可以直接看配件每部分的总结,你可以略过枯燥的概念,直接比较配件参数数字大小1组装电脑需要哪些配件一般需要主板、CPU、内存条、显卡、硬盘、电源、CPU风扇、键鼠、显示器等2配件选购指南我这里主要介绍参数的比较,即“数字大小的比较”,不会有太多的新概念。有的参数越…

    2022年5月16日
    56
  • HDCVI——一种创新性的高清视频传输方案

    HDCVI——一种创新性的高清视频传输方案什么是HDCVI   2012年11月,大华技术股份有限公司发布了具有自主知识产权的同轴高清传输接口技术HDCVI。HDCVI技术是一种基于已有SYV75-3或SYV75-5同轴电缆的高清视频传输方法,能够在低成本和较低质量的同轴电缆上实现超长距离高清视频信号的可靠传输。相比较HD-SDI子系统在实际应用中对传输介质的高要求,HDCVI可以适应长距离、低成本的传输介质以及复杂的部署场合。

    2022年10月4日
    5
  • python格式化转换_Python进制转换format格式化[通俗易懂]

    python格式化转换_Python进制转换format格式化[通俗易懂]>>>bin(13)’0b1101’十进制转成八进制和十六进制'{0:x}’.format(20)转换成十六进制'{0:o}’.format(20)转换成八进制进制转换的时候用{0:进制}八进制转为二进制:比如八进制数(37)8拆开373用二进制表示为117用二进制表示为111合起来即为1111…

    2022年5月19日
    70

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号