Bengali
Languages
English
Bengali
French
German
Japanese
Korean
Portuguese
Spanish
Tamil

নোট

এই পৃষ্ঠাটি tutorials/circuits/1_getting_started_with_qiskit.ipynb থেকে উৎপন্ন হয়েছে।

Qiskit দিয়ে শুরু করা যাক।

এখানে, আমরা Qiskit এর সাথে কাজ করার একটি সাধারণ ধারণা পাবো। Qiskit এর মূল প্যাকেজটি হল টেরা (Terra) যা কোয়ান্টাম কম্পিউটার নির্দেশমালা (প্রোগ্রাম) করার জন্য প্রয়োজনীয় নির্মাণ নকশা (বিল্ডিং ব্লক) সরবরাহ করে। Qiskit এর মূল এককটি হ’ল quantum circuit। Qiskit ব্যবহার করে একটি প্রাথমিক কর্মপ্রবাহ দুটি ধাপ নিয়ে গঠিত: নির্মাণ (বিল্ড) এবং কার্যকর(এক্সিকিউট)নির্মাণ (বিল্ড) আপনাকে বিভিন্ন কোয়ান্টাম বর্তনী (সার্কিট) তৈরি করতে দেয় যা আপনি যে সমস্যার সমাধান করছেন তাতে প্রতিনিধিত্ব করে এবং কার্যকর (এক্সিকিউট) যা আপনাকে এগুলি বিভিন্ন ব্যাক-এন্ডে চালানোর অনুমতি দেয়। কাজগুলি কার্যকর করার পরে, তথ্য (ডেটা) সংগ্রহ করা হয় এবং পছন্দসই ফলাফলের উপর নির্ভর করে পরবর্তী প্রক্রিয়া (পোস্টপ্রসেস) করা হয়।

[1]:
import numpy as np
from qiskit import *

বর্তনীর (সার্কিট) প্রাথমিক ধারণা

বর্তনী (সার্কিট) নির্মাণ

প্রথম নির্দেশমালাটির (প্রোগ্রাম) জন্য প্রয়োজনীয় মৌলিক উপাদানটি হল QuantumCircuit। আমরা তিনটি কিউবিট সমন্বিত একটি QuantumCircuit তৈরির মাধ্যমে শুরু করি।.

[2]:
# Create a Quantum Circuit acting on a quantum register of three qubits
circ = QuantumCircuit(3)

বর্তনী (সার্কিট) টি রেজিস্টারগুলি দিয়ে তৈরি করার পরে, আপনি রেজিস্টার গুলি পরিচালনা করতে যুক্তিবর্তনী (গেইট) ("ক্রিয়াকলাপ (অপারেশন)") যুক্ত করতে পারেন। টিউটোরিয়ালগুলির মাধ্যমে আপনি আরও দ্বার এবং বর্তনী (সার্কিট) পাবেন। নীচে কোয়ান্টাম বর্তনীর (সার্কিটের) একটি উদাহরণ দেওয়া হলো যা তিন কিউবিট GHZ মান তৈরি করে।

\[|\psi\rangle = \left(|00\rangle+|11\rangle\right)/\sqrt{2}.\]

To create such a state, we start with a three-qubit quantum register. By default, each qubit in the register is initialized to \(|0\rangle\). To make the GHZ state, we apply the following gates: - A Hadamard gate \(H\) on qubit \(q_{0}\), which puts it into the superposition state \(\left(|0\rangle+|1\rangle\right)/\sqrt{2}\). - A controlled-Not operation (\(C_{X}\)) between qubit \(q_{0}\) and qubit \(q_{1}\). - A controlled-Not operation between qubit \(q_{0}\) and qubit \(q_{2}\).

একটি আদর্শ কোয়ান্টাম কম্পিউটারে, এই বর্তনী (সার্কিট) টি চালিয়ে প্রাপ্ত মান বা অবস্থা (স্টেট্) টি উপরের GHZ মান বা অবস্থা হবে।

Qiskit এ বর্তনীর (সার্কিট) সাথে ক্রিয়াকলাপগুলি নিম্নলিখিতভাবে এক এক করে যুক্ত করা যেতে পারে।

[3]:
# Add a H gate on qubit $q_{0}$, putting this qubit in superposition.
circ.h(0)
# Add a CX (CNOT) gate on control qubit $q_{0}$ and target qubit $q_{1}$, putting
# the qubits in a Bell state.
circ.cx(0, 1)
# Add a CX (CNOT) gate on control qubit $q_{0}$ and target qubit $q_{2}$, putting
# the qubits in a GHZ state.
circ.cx(0, 2)
[3]:
<qiskit.circuit.instructionset.InstructionSet at 0x7fa0f8fc9310>

বর্তনী (সার্কিট) দৃশ্যায়িত করা

আপনি Qiskit QuantumCircuit.draw() ব্যবহার করে বর্তনী (সার্কিট) দৃশ্যায়িত করতে পারেন, যেমন বহুসংখ্যক পাঠ্যপুস্তকের মধ্যে বর্তনী (সার্কিট) থাকে।

[4]:
circ.draw('mpl')
[4]:
../../_images/tutorials_circuits_1_getting_started_with_qiskit_7_0.png

In this circuit, the qubits are put in order, with qubit \(q_{0}\) at the top and qubit \(q_{2}\) at the bottom. The circuit is read left to right (meaning that gates that are applied earlier in the circuit show up further to the left).

মাল্টি-কিউবিট (বহু কিউবিট) গঠনতন্ত্রের স্থিতি উপস্থাপন করার সময়, Qiskit এ ব্যবহৃত টেনসর ক্রম বেশিরভাগ পদার্থবিজ্ঞান পাঠ্যপুস্তকের থেকে ভিন্ন। ধরে নেয়া যাক এখানে \(n\) কিউবিট আছে এবং কিউবিট \(j\) কে \(Q_{j}\) হিসাবে আখ্যা দেত্তয়া হয়েছে। Qiskit একটি ক্রম ব্যবহার করে যেটাতে \(n^{\mathrm{th}}\) qubit (কিউবিট) টেনসর গুণফলের বামদিকে অবস্থান করে, যাতে বেসিস ভেক্টর (ভিত্তি দিকরাশি) গুলি কে \(Q_{n-1}\otimes \cdots \otimes Q_1\otimes Q_0\) ভাবে আখ্যা দেয়া হয়।

For example, if qubit \(Q_{0}\) is in state 0, qubit \(Q_{1}\) is in state 0, and qubit \(Q_{2}\) is in state 1, Qiskit would represent this state as \(|100\rangle\), whereas many physics textbooks would represent it as \(|001\rangle\).

This difference in labeling affects the way multi-qubit operations are represented as matrices. For example, Qiskit represents a controlled-X (\(C_{X}\)) operation with qubit \(Q_{0}\) being the control and qubit \(Q_{1}\) being the target as

\[\begin{split}C_X = \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\\end{pmatrix}.\end{split}\]

Qiskit এয়ার দিয়ে সার্কিট-গুলি (বর্তনীগুলি) সিমুলেট করা

Qiskit এয়ার আমাদের প্যাকেজ যা দিয়ে কোয়ান্টাম সার্কিট-গুলি (বর্তনীগুলি) সিমুলেট করা হয়। এটা সিমুলেশন করার জন্য অনেক ব্যাকএন্ড সরবরাহ করে। এখানে আরো একটি Python দিয়ে করা একটা রূপায়ণ (ইমপ্লিমেন্টেশন) আছে, BasicAer বলে, যেটা যে কোনো সময়ে Aer এর বদলে ব্যবহার করা যেতে পারে। নিচের উদাহরণগুলো লক্ষ্য কর।

স্টেটভেক্টর (অবস্থা দিকরাশি) ব্যাকএন্ড

Qiskit এয়ার-এ সবচেয়ে প্রচলিত ব্যাকএন্ড হল statevector_simulator। এই সিমুলেটরটি কোয়ান্টামের স্থিতি কে প্রত্যাবর্তন করে, যা \(2^n\) মাত্রার একটি জটিল দিকরাশি, যেখানে \(n\) হল কিউবিট-এর সংখ্যা (তাই এটি ব্যবহারের সময় সতর্কতা অবলম্বন করুন কারণ এটি আপনার মেশিনে চালানোর সময় দ্রুত খুব বড় হয়ে যাবে)।

উপরের সার্কিটটি (বর্তনীটি) স্টেটভেক্টর সিমুলেটর দিয়ে চালানোর জন্য, আপনাকে প্রথমে এয়ার ইম্পোর্ট (আমদানি) করতে হবে এবং তারপরে ব্যাকএন্ডটি statevector_simulator এ স্থির করতে হবে।

[5]:
# Import Aer
from qiskit import Aer

# Run the quantum circuit on a statevector simulator backend
backend = Aer.get_backend('statevector_simulator')

Now that we have chosen the backend, it’s time to compile and run the quantum circuit. In Qiskit we provide the run method for this. run returns a job object that encapsulates information about the job submitted to the backend.

টিপ: আপনি জুপিটারে উপরের প্যারামিটার-গুলি (স্থিতিমাপগুলি) পেতে পারেন। কেবল ওই টেক্সট কার্সারটি একটি ফাংশনের উপরে রেখে শিফট + ট্যাব টিপুন।

[6]:
# Create a Quantum Program for execution
job = backend.run(circ)

যখন আপনি একটি নির্দেশমালা (প্রোগ্রাম) চালাবেন, একটি কাজ (জব) অবজেক্ট তৈরি করা হয় যেটাতে নিম্নলিখিত দুটি দরকারি ফাংশন আছে: job.status() এবং job.result(), যেটা যথাক্রমে কাজ (জব) এর স্থিতি এবং ফলাফলের অবজেক্ট-টি প্রত্যাবর্তন করে।

দ্রষ্টব্য: কাজ (জব) গুলি অসমনিয়ত ভাবে চালিত হয়, কিন্তু যখন ফলাফল পদ্ধতি কে ডাকা হয়, তখন এটি সমকালীনে পরিবর্তন হয় এবং অন্য কোনো কার্যে যাওয়ার আগে এটি শেষ হওয়ার জন্য অপেক্ষা করে।

[7]:
result = job.result()

ফলাফলের অবজেক্ট-টিতে তথ্য থাকে এবং কোয়ান্টাম সার্কিট-এর (বর্তনীর) স্টেট ভেক্টরটি (অবস্থা দিকরাশিটি) প্রত্যাবর্তন করার জন্য Qiskit result.get_statevector(circ) পদ্ধতিটি সরবরাহ করে।

[8]:
outputstate = result.get_statevector(circ, decimals=3)
print(outputstate)
[0.707+0.j 0.   +0.j 0.   +0.j 0.   +0.j 0.   +0.j 0.   +0.j 0.   +0.j
 0.707+0.j]

Qiskit আপনাকে এই ফলাফলগুলি পরিদর্শনের জন্য একটি দৃশ্যায়ন সরঞ্জাম -বক্স ও সরবরাহ করে।

নিচে আমরা দৃশ্যায়ন ফাংশনটি ব্যবহার করে অবস্থা (স্টেট) ঘনত্ব (ডেন্সিটি) ম্যাট্রিক্স \(\rho\) এর আসল এবং কাল্পনিক উপাদানগুলি কে অঙ্কন করবো।

[9]:
from qiskit.visualization import plot_state_city
plot_state_city(outputstate)
[9]:
../../_images/tutorials_circuits_1_getting_started_with_qiskit_20_0.png

ঐকিক (ইউনিটারি) ব্যাকএন্ড

Qiskit এয়ার এর মধ্যে কর্মক্ষম unitary_simulator অন্তর্ভুক্ত, প্রদত্ত বর্তনীর(সার্কিট ) এর সকল উপাদান কে একক ক্রিয়াকলাপ সম্পন্ন হতে হবে। এই ব্যাকএন্ডটি \(2^n \times 2^n\) ম্যাট্রিক্স গণনা করতে পারে যা কোয়ান্টাম বর্তনী (সার্কিট) এর গেটস রূপে উপস্থাপন করে।

[10]:
# Run the quantum circuit on a unitary simulator backend
backend = Aer.get_backend('unitary_simulator')
job = backend.run(circ)
result = job.result()

# Show the results
print(result.get_unitary(circ, decimals=3))
[[ 0.707+0.j  0.707-0.j  0.   +0.j  0.   +0.j  0.   +0.j  0.   +0.j
   0.   +0.j  0.   +0.j]
 [ 0.   +0.j  0.   +0.j  0.   +0.j  0.   +0.j  0.   +0.j  0.   +0.j
   0.707+0.j -0.707+0.j]
 [ 0.   +0.j  0.   +0.j  0.707+0.j  0.707-0.j  0.   +0.j  0.   +0.j
   0.   +0.j  0.   +0.j]
 [ 0.   +0.j  0.   +0.j  0.   +0.j  0.   +0.j  0.707+0.j -0.707+0.j
   0.   +0.j  0.   +0.j]
 [ 0.   +0.j  0.   +0.j  0.   +0.j  0.   +0.j  0.707+0.j  0.707-0.j
   0.   +0.j  0.   +0.j]
 [ 0.   +0.j  0.   +0.j  0.707+0.j -0.707+0.j  0.   +0.j  0.   +0.j
   0.   +0.j  0.   +0.j]
 [ 0.   +0.j  0.   +0.j  0.   +0.j  0.   +0.j  0.   +0.j  0.   +0.j
   0.707+0.j  0.707-0.j]
 [ 0.707+0.j -0.707+0.j  0.   +0.j  0.   +0.j  0.   +0.j  0.   +0.j
   0.   +0.j  0.   +0.j]]

OpenQASM ব্যাকএন্ড

উপরের সিমুলেটরগুলি দরকারী কারণ তারা আদর্শ বর্তনী এবং বর্তনীর ম্যাট্রিক্স উপস্থাপনার দ্বারা দশার ফলাফল সম্পর্কে তথ্য সরবরাহ করে। যদিও একটি বাস্তব গবেষণা প্রতিটি কিউবিট পরিমাপ করে শেষ হয় (সাধারণত গণনা \(|0\rangle, |1\rangle\) ভিত্তিতে)। পরিমাপ ছাড়া আমরা দশা সম্পর্কে জানতে পারি না। পরিমাপের কারণে কোয়ান্টাম সিস্টেম টি ধ্রুপদী বিটের মধ্যে পতিত হচ্ছে ।

উদাহরণস্বরূপ, ধরা যাক আমরা একটি তিন-qubit GHZ অবস্থা এর প্রত্যেক কিউবিটের স্বাধীন পরিমাপ করলাম

\[|\psi\rangle = (|000\rangle +|111\rangle)/\sqrt{2},\]

and let \(xyz\) denote the bitstring that results. Recall that, under the qubit labeling used by Qiskit, \(x\) would correspond to the outcome on qubit \(q_{2}\), \(y\) to the outcome on qubit \(q_{1}\), and \(z\) to the outcome on qubit \(q_{0}\).

বি: দ্র: বিটস্ট্রিংয়ের এই উপস্থাপনাটি বামদিকে সবচেয়ে উল্লেখযোগ্য বিট(M. S. B) এবং ডানদিকে অন্তত উল্লেখযোগ্য বিট (LSB) রাখে। এটি বাইনারি বিটস্ট্রিংয়ের প্রামাণ্য ক্রম।একইভাবে কিউবিটগুলি এই ক্রমানুসারে স্থাপন করা হয় (MSB প্রতিনিধিত্বকারী কিউবিট গুলির সূচক ০ থাকে), তাই Qiskit একটি প্রামাণ্য টেনসর গুণন (প্রোডাক্ট) ক্রম ব্যবহার করে না।

স্মরণ করুন, \(xyz\) ফলাফল পাওয়ার সম্ভাব্যতা দেওয়া হয়েছে

\[\mathrm{Pr}(xyz) = |\langle xyz | \psi \rangle |^{2}\]

এবং যেমন GHZ স্টেট এর ক্ষেত্রে 000 বা 111 পাওয়ার সম্ভাবনা উভয় ক্ষেত্রেই 1/2।

পরিমাপ অন্তর্ভুক্ত এমন একটি সার্কিট সিমুলেট করতে আমাদের উপরের মূল সার্কিটটিতে পরিমাপ যুক্ত করতে হবে এবং একটি ভিন্ন Aer ব্যাকএন্ড ব্যবহার করতে হবে।

[13]:
# Create a Quantum Circuit
meas = QuantumCircuit(3, 3)
meas.barrier(range(3))
# map the quantum measurement to the classical bits
meas.measure(range(3), range(3))

# The Qiskit circuit object supports composition using
# the compose method.
circ.add_register(meas.cregs[0])
qc = circ.compose(meas)

#drawing the circuit
qc.draw()
[13]:
     ┌───┐           ░ ┌─┐
q_0: ┤ H ├──■────■───░─┤M├──────
     └───┘┌─┴─┐  │   ░ └╥┘┌─┐
q_1: ─────┤ X ├──┼───░──╫─┤M├───
          └───┘┌─┴─┐ ░  ║ └╥┘┌─┐
q_2: ──────────┤ X ├─░──╫──╫─┤M├
               └───┘ ░  ║  ║ └╥┘
c: 3/═══════════════════╩══╩══╩═
                        0  1  2 

এই বর্তনী (সার্কিট) একটি ধ্রুপদী (ক্লাসিক্যাল) রেজিস্টার এবং তিনটি পরিমাপ যোগ করেছে যার দ্বারা কিউবিটের ফলগুলো ধ্রুপদী (ক্লাসিক্যাল) বিটগুলোতে গুলিতে সঞ্চয় করা হয়।

To simulate this circuit, we use the qasm_simulator in Qiskit Aer. Each run of this circuit will yield either the bitstring 000 or 111. To build up statistics about the distribution of the bitstrings (to, e.g., estimate \(\mathrm{Pr}(000)\)), we need to repeat the circuit many times. The number of times the circuit is repeated can be specified in the run method, via the shots keyword.

[17]:
# Use Aer's qasm_simulator
backend_sim = Aer.get_backend('qasm_simulator')

# Execute the circuit on the qasm simulator.
# We've set the number of repeats of the circuit
# to be 1024, which is the default.
job_sim = backend_sim.run(transpile(qc, backend_sim), shots=1024)

# Grab the results from the job.
result_sim = job_sim.result()

কোনও ফলাফলের অবজেক্ট তৈরী হয়ে গেলে আপনি `` get_counts (circuit) `` ফাংশনটির মাধ্যমে পরিসংখ্যান গুলি পর্যবেক্ষণ করতে পারেন। এটি আপনাকে উপস্থাপিত সার্কিটের aggregated বাইনারি ফলাফল দেয়।

[18]:
counts = result_sim.get_counts(qc)
print(counts)
{'111': 514, '000': 510}

প্রায় 50 শতাংশ সময়, আউটপুট বিটস্ট্রিংটি 000 হয়। Qiskit plot_histogram নামে একটি ফাংশনও সরবরাহ করে, যা আপনাকে ফলাফলগুলি দেখতে দেয়।

[19]:
from qiskit.visualization import plot_histogram
plot_histogram(counts)
[19]:
../../_images/tutorials_circuits_1_getting_started_with_qiskit_32_0.png

The estimated outcome probabilities \(\mathrm{Pr}(000)\) and \(\mathrm{Pr}(111)\) are computed by taking the aggregate counts and dividing by the number of shots (times the circuit was repeated). Try changing the shots keyword in the run method and see how the estimated probabilities change.

[20]:
import qiskit.tools.jupyter
%qiskit_version_table
%qiskit_copyright

Version Information

Qiskit SoftwareVersion
qiskit-terra0.19.0.dev0+be0ed5f
qiskit-aer0.8.2
qiskit-ignis0.6.0
qiskit-ibmq-provider0.16.0.dev0+4e20edc
System information
Python3.7.7 (default, May 6 2020, 04:59:01) [Clang 4.0.1 (tags/RELEASE_401/final)]
OSDarwin
CPUs6
Memory (Gb)32.0
Sat Jul 31 01:06:28 2021 EDT

This code is a part of Qiskit

© Copyright IBM 2017, 2021.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.

[ ]: