Archived
1
0
This repository has been archived on 2023-07-24. You can view files and clone it, but cannot push or open issues or pull requests.
qalg/bench-qiskit/deutsch_alogrithm.py

86 lines
2.3 KiB
Python

# https://github.com/qiskit-community/qiskit-community-tutorials/blob/master/algorithms/deutsch_jozsa.ipynb
# https://github.com/mrtkp9993/QuantumComputingExamples
# https://github.com/DavitKhach/quantum-algorithms-tutorials/blob/master/quantum_parallelism_Deutsch_Jozsa.ipynb
# https://fullstackquantumcomputation.tech/blog/deutsch-algorithm/
# https://www.mlq.ai/quantum-programming-with-qiskit/
# https://github.com/przecze/deutschs_algorithm_in_qiskit_vs_cirq/blob/main/common.py
from random import randint
from qiskit import QuantumCircuit,QuantumRegister,ClassicalRegister
from qiskit import BasicAer,IBMQ
from qiskit.tools.monitor import job_monitor
from qiskit import transpile
from quantum_runner import quantum_simulate,setup_IBM
# количество создаваемых битов
n = 1
# создаем функции
ff = randint(0, n)
if ff !=0:
randint(1,2**n)
# создание n-кубитов в системе
qr = QuantumRegister(n+1)
# создание n классических битов, для записи измерений
cr = ClassicalRegister(n)
circuit = QuantumCircuit(qr,cr)
# создаем вспомогательные кубиты
circuit.x(qr[n])
circuit.h(qr[n])
# Барьер нужен для группировки отдельных частей цепи
circuit.barrier()
# Первая часть, это подготовка суперпозиции состояний.
# Для этого используем вентиль Адамара
circuit.h(qr[0])
circuit.h(qr[1])
circuit.barrier()
# Создаем квантовый оракул, используя контроллер
circuit.cx(qr[0],qr[1])
circuit.barrier()
# Применяем вентиль уже к оракулу
for i in range(n):
circuit.h(qr[i])
circuit.barrier()
# Измеряем кубит
for i in range(n):
circuit.measure(qr[i],cr[i])
# Запустим локально
backend = BasicAer.get_backend("qasm_simulator")
results = quantum_simulate(circuit,backend,True)
results = list(results.keys())
print(circuit)
print(f"q({ff})=",results)
#setup_IBM()
#provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')
#backend = provider.get_backend('ibmq_lima')
#job_monitor(quantum_simulate(circuit,backend), interval=2)
#print(quantum_simulate(circuit,backend,True))