Bengali
Languages
English
Bengali
French
German
Japanese
Korean
Portuguese
Spanish
Tamil

Qiskit পরিচিতি

Qiskit ব্যবহারের কর্মপ্রবাহ​ নিম্নলিখিত চারটি উচ্চ-স্তরের ধাপে গঠিতঃ

  • Build: একটি কোয়ান্টাম বর্তনী (সার্কিট) এর পরিকল্পনা যা আপনার বিবেচ্য কোনো সমস্যার প্রতিনিধিত্ব করে।

  • Compile (সংকলন): নির্দিষ্ট কোয়ান্টাম পরিষেবার জন্য বর্তনী (সার্কিট) সংকলন, যেমন একটি কোয়ান্টাম ব্যবস্থা বা ধ্রুপদী (ক্লাসিক্যাল) সিমুলেটর।

  • Run (চালানো): নির্দিষ্ট কোয়ান্টাম পরিষেবায় সংকলিত বর্তনীগুলি (সার্কিট) রান করা বা চালানো। এই পরিষেবাগুলি ক্লাউড-ভিত্তিক বা স্থানীয় হতে পারে।

  • Analyze (বিশ্লেষণ): সংক্ষিপ্তসার পরিসংখ্যান গণনা করা এবং পরীক্ষাগুলির ফলাফলগুলি দৃশ্যায়িত করা।

এখানে সম্পূর্ণ ব্যাপারটির একটি উদাহরণ দেওয়া হলো, যার প্রতিটি ধাপ পরবর্তীতে বিশদভাবে ব্যাখ্যা করা হয়েছেঃ

import numpy as np
from qiskit import QuantumCircuit, transpile
from qiskit.providers.aer import QasmSimulator
from qiskit.visualization import plot_histogram

# Use Aer's qasm_simulator
simulator = QasmSimulator()

# Create a Quantum Circuit acting on the q register
circuit = QuantumCircuit(2, 2)

# Add a H gate on qubit 0
circuit.h(0)

# Add a CX (CNOT) gate on control qubit 0 and target qubit 1
circuit.cx(0, 1)

# Map the quantum measurement to the classical bits
circuit.measure([0,1], [0,1])

# compile the circuit down to low-level QASM instructions
# supported by the backend (not needed for simple circuits)
compiled_circuit = transpile(circuit, simulator)

# Execute the circuit on the qasm simulator
job = simulator.run(compiled_circuit, shots=1000)

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

# Returns counts
counts = result.get_counts(compiled_circuit)
print("\nTotal count for 00 and 11 are:",counts)

# Draw the circuit
circuit.draw()

Total count for 00 and 11 are: {'11': 504, '00': 496}
     ┌───┐     ┌─┐   
q_0: ┤ H ├──■──┤M├───
     └───┘┌─┴─┐└╥┘┌─┐
q_1: ─────┤ X ├─╫─┤M├
          └───┘ ║ └╥┘
c: 2/═══════════╩══╩═
                0  1 
# Plot a histogram
plot_histogram(counts)
_images/intro_tutorial1_1_0.png

ধাপে ধাপে Qiskit এর কার্যপ্রণালি

উপরের প্রোগ্রামটিকে ছয়টি ধাপে বিভক্ত করা যেতে পারেঃ

  1. প্যাকেজের ইম্পোর্ট (আমদানি) করা

  2. চলরাশির প্রাথমিক মান নিযুক্ত করা

  3. যুক্তিবর্তনী (গেইট) যুক্ত করা

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

  5. পরীক্ষাটি সিমুলেট করা

  6. ফলাফলের দৃশ্যায়ন

প্রথম ধাপঃ প্যাকেজ ইম্পোর্ট করা

আপনার প্রোগ্রামের জন্য ইম্পোর্ট করা মৌলিক কিছু উপাদান হলোঃ

import numpy as np
from qiskit import QuantumCircuit
from qiskit.providers.aer import QasmSimulator
from qiskit.visualization import plot_histogram

আরো বিস্তারিত ভাবে, ইম্পোর্ট করা প্যাকেজগুলো হল

  • QuantumCircuit: এটিকে কোয়ান্টাম সিস্টেমের নির্দেশনা হিসাবে বিবেচনা করা যেতে পারে। সমস্ত কোয়ান্টাম অপারেশনগুলো এই প্যাকেজে থাকে।

  • QasmSimulator: হচ্ছে এয়ার উচ্চ কর্মদক্ষতাসম্পন্ন বর্তনী (সার্কিট) সিমুলেটর ।

  • plot_histogram: আয়তলেখ (হিস্টোগ্রাম) তৈরি করে।

দ্বিতীয় ধাপঃ চলরাশির প্রাথমিক মান নিযুক্ত করা

কোডের পরবর্তী লাইনটি বিবেচনা করুন

circuit = QuantumCircuit(2, 2)

এখানে আপনি ২টি কিউবিটের প্রাথমিক মান শূন্য অবস্থায় নিযুক্ত করছেন; সঙ্গে ২টি ধ্রুপদী (ক্লাসিক্যাল) বিট কে শূন্য দিয়ে নিযুক্ত করছেন; এবং circuit টি হল কোয়ান্টাম বর্তনী (সার্কিট)।

সিনট্যাক্স বা গঠনঃ

  • QuantumCircuit(int, int)

তৃতীয় ধাপঃ যুক্তিবর্তনী (গেইট) যুক্ত করা

বর্তনীর (সার্কিট) রেজিস্টারগুলোকে নিয়ন্ত্রণ বা পরিচালনার জন্য যুক্তিবর্তনী (অপারেশন) যোগ করতে পারেন।

নিচের তিন লাইনের কোডটি বিবেচনা করুনঃ

circuit.h(0)
circuit.cx(0, 1)
circuit.measure([0,1], [0,1])

এক এক করে যুক্তিবর্তনীগুলো (গেইট) বর্তনীতে (সার্কিট) প্রতিস্থাপন করা হয়েছে যাতে বেল স্টেট গঠন হয়

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

উপরের কোডে যে যুক্তিবর্তনীগুলো (গেইট) ব্যবহৃত হয়েছে সেগুলি হলোঃ

  • QuantumCircuit.h(0): ০ কিউবিটে একটি হ্যাডামার্ড যুক্তিবর্তনী (গেইট) \(H\) যোগ করা হয়েছে যার ফলে এতে উপরিপাতন অবস্থা (সুপারপজিশন) তৈরি হয়েছে।

  • QuantumCircuit.cx(0, 1): নিয়ন্ত্রক (কন্ট্রোল) কিউবিট ০ ও লক্ষ্য (টারগেট) কিউবিট ১ এ চালিত কন্ট্রোলড-নট অপারেশন (\(CNOT\)), কিউবিটগুলোতে একটি এন্ট্যাঙ্গেলড অবস্থা তৈরি করে।

  • QuantumCircuit.measure([0,1], [0,1]): আপনি যদি সমগ্র কোয়ান্টাম এবং ধ্রুপদী (ক্লাসিক্যাল) রেজিস্টার কে measure করার জন্য পাঠান, সেক্ষেত্রে i-তম পরিমাপনের ফলাফল i -তম ধ্রুপদী (ক্লাসিক্যাল) বিট এ রাখা হবে।

চতুর্থ ধাপঃ বর্তনী (সার্কিট) দৃশ্যায়ন

qiskit.circuit.QuantumCircuit.draw() ব্যবহার করে বর্তনীকে (সার্কিট) বিভিন্ন পাঠ্যবই বা গবেষণাপত্রে ছাপানো বর্তনীর মত দেখা যায়।

circuit.draw()
     ┌───┐     ┌─┐   
q_0: ┤ H ├──■──┤M├───
     └───┘┌─┴─┐└╥┘┌─┐
q_1: ─────┤ X ├─╫─┤M├
          └───┘ ║ └╥┘
c: 2/═══════════╩══╩═
                0  1 

এই সার্কিটটি তে, qubit গুলি নির্দিষ্ট ক্রমে সজ্জিত যার মধ্যে qubit ০ সবচেয়ে উপরে এবং qubit ১ সবচেয়ে নিচে উপস্থিত। সার্কিটটি বাম থেকে ডানদিকে পড়া হয়, যার অর্থ সার্কিটের আগে যে যুক্তিবর্তনীগুলি (গেইট) প্রয়োগ করা হয়েছে সেগুলো আর ও বামে অবস্থান করবে।

QuantumCircuit.draw() অথবা qiskit.visualization.circuit_drawer() এর ডিফল্ট ব্যাকএন্ড হলো টেক্সট ব্যাকএন্ড। তবে আপনার স্থানীয় কর্মপরিবেশের উপর নির্ভর করে আপনি এই ডিফল্টগুলিকে ব্যবহারিক ক্ষেত্রে প্রয়োজনমত পরিবর্তন করতে পারেন। এই কাজটি ইউজার কনফিগ ফাইল ব্যবহার করে করা হয়। ডিফল্ট ইউজা কনফিগ ফাইলটি ~/.qiskit/settings.conf``এ থাকে এবং এটি একটি ``.ini ফাইল।

উদাহরণ স্বরূপ, একটি Matplotlib drawer এর জন্য ব্যবহৃত settings.conf ফাইল হলোঃ

[default]
circuit_drawer = mpl

আপনি যেকোনো সঠিক সার্কিট (বর্তনী) ড্রয়ার ব্যাকএন্ড ব্যবহার করতে পারেন, এর মধ্যে text, mpl, latex, আর latex_source অন্তর্ভুক্ত রয়েছে।

পদক্ষেপ ৫ঃ পরীক্ষাটি অনুকরণ (সিমুলেট) করুন

Qiskit Aer is a high performance simulator framework for quantum circuits. It provides several backends to achieve different simulation goals.

এয়ার ইন্সটল করতে সমস্যা হলে, Aer কে BasicAer দিয়ে প্রতিস্থাপন করে বেসিক এয়ার প্রোভাইডার ব্যবহার করতে পারেন। বেসিক এয়ার Qiskit টেরার অন্তর্ভুক্ত।

import numpy as np
from qiskit import QuantumCircuit, transpile
from qiskit.providers.basicaer import QasmSimulatorPy
...

বর্তনী (সার্কিট) সিমুলেশনের জন্য qasm_simulator ব্যবহার করা হয়। বর্তনীটি (সার্কিট) প্রতিবার কার্যকর করার পর ০০ অথবা ১১ বিটস্ট্রিং ফলাফল পাওয়া যাবে।

simulator = QasmSimulator()
compiled_circuit = transpile(circuit, simulator)
job = simulator.run(compiled_circuit, shots=1000)
result = job.result()
counts = result.get_counts(circuit)
print("\nTotal count for 00 and 11 are:",counts)

Total count for 00 and 11 are: {'00': 529, '11': 471}

প্রায় ৫০ শতাংশ সময় আউটপুট বিট স্ট্রিংটি ০০ হয়। execute মেথডের shots আর্গুমেন্টটি দিয়ে বর্তনীটি (সার্কিট) কতবার রান (কার্যকর) করা হবে তা ঠিক করা হয়। সিমুলেশনের শট সংখ্যা এক্ষেত্রে ১০০০ (ডিফল্ট হলো ১০২৪)।

result` অবজেক্টটি পাওয়ার পর ফলাফলের কাউন্ট বা গণনা সংখ্যা ``get_counts(circuit) মেথডের সাহায্যে পাওয়া যাবে। এটি দিয়ে পরীক্ষাটির মোট ফলাফল পাওয়া যায়।

পদক্ষেপ ৬ঃ ফলাফল দৃশ্যায়ন

Qiskit এ নানা ধরনের দৃশ্যায়ন পদ্ধতি রয়েছে,

plot_histogram ফাংশনটি এর মধ্যে একটি।

plot_histogram(counts)
_images/intro_tutorial1_4_0.png

পর্যবেক্ষণকৃত \(Pr(00)\)\(Pr(11)\) সম্ভাবনাসমূহ এদের সম্পর্কিত কাউন্ট সংখ্যাকে মোট শট শংখ্যা দিয়ে ভাগ করে গণনা করা হয়।

নোট

কীভাবে সম্ভাবনার ফলাফল পরিবর্তন হয় তা run() মেথডের মধ্যে shots কীওয়ার্ডটি পরিবর্তন করার চেষ্টা করে দেখুন।

পরবর্তী ধাপগুলো

আপনি প্রাথমিক ধারণাটুকু পেয়েছেন, এরপর নিচের উৎসগুলো থেকে শেখার চেষ্টা করতে পারেনঃ