নোট
এই পৃষ্ঠাটি docs/tutorials/04_grover_optimizer.ipynb থেকে বানানো হয়েছে।
গ্রোভার অপ্টিমাইজার#
ভূমিকা#
গ্রোভার এডাপটিভ সার্চ (GAS) কে সংমিশ্রণমূলক অপ্টিমাইজেশন সমস্যার পাশাপাশি পরিবর্তনশীল (ভ্যারিয়েশনাল) অ্যালগরিদম, যেমন Variational Quantum Eigensolver (VQE) এবং Quantum Approximate Optimization Algorithm (QAOA) এর সম্ভাব্য সমাধান হিসাবে অন্বেষণ করা হয়েছে। এই অ্যালগরিদমটি একটি অব্জেক্টিভ ফাংশন এর সর্বোত্তম মানটি সন্ধান করার জন্য পুনরুক্তি ভাবে গ্রোভার অনুসন্ধান প্রয়োগ করে, যেটা প্রান্তিক হিসাবে আগের রান থেকে সর্বাধিক পরিচিত মান ব্যবহার করে। GAS-এ ব্যবহৃত অভিযোজিত ওরাকল বর্তমান প্রান্তিকের উপরে বা নীচে (যথাক্রমে সর্বাধিক এবং সর্বনিম্ন জন্য) সমস্ত মানকে স্বীকৃতি দেয়, যতক্ষণ না কোনও সর্বোত্তম সন্ধান পাওয়া যায় ততক্ষণ প্রতিটি পুনরাবৃত্তির প্রান্তিক আপডেট হয় সন্ধানের জায়গার আকার হ্রাস করে।
[1] এ বর্ণিত শর্তহীন দ্বিঘাত দ্বিমিক অনুকূলায়ন (অপ্টিমাইজেশন) সমস্যাটিকে হ্রাস করার মাধ্যমে এই নোটবুকে আমরা GroverOptimizer
এর প্রত্যেকটি উপাদান সম্পর্কে জানব যেগুলো জি এ এস-এ বর্ণিত উপায়গুলোকে ব্যবহার করে।
তথ্যসূত্র#
গ্রোভার অ্যাডাপটিভ সার্চ#
GAS এর মূল উপাদান গ্রোভার সার্চের জন্য তিনটি উপাদান প্রয়োজন:
একটি মান প্রস্তুতি অপারেটর
সার্চ স্পেসে সমস্ত মানের জন্য একটি উপরিপাতন তৈরি করে।একটি ওরাকল অপারেটর
যা আগ্রহের মানগুলি স্বীকৃতি দেয় এবং তাদের বিস্তার -1 দ্বারা বহুগুণ করে।Grover ব্যাপ্তি অপারেটর
, যা বিস্তার এর মান কে -১ দ্বারা গুন করে।
GAS বাস্তবায়ন নির্দিষ্ট ব্যবহারের ক্ষেত্রে প্রায় পৃথক হলেও সাধারণ কাঠামো এখনও নীচে বর্ণিত পদক্ষেপগুলি আলগাভাবে অনুসরণ করে।
GroverOptimizer
রীত্যনুসারে QuadraticProgramToNegativeValueOracle
যেখানে
প্রতিটি পুনরাবৃত্তিতে যেখানে প্রান্তিক
GroverOptimizer ব্যবহার করে কোনো ন্যূনতম QUBO সমস্যার সন্ধান করুন#
নিম্নলিখিত একটি লঘুকরণ সমস্যার একটি ছোট্ট উদাহরণ আছে।
প্রাথমিক পদক্ষেপরূপে আমরা একটি ডকপ্লেক্স মডেল তৈরি করব যেটা উপরের সমস্যাটিকে সংজ্ঞায়িত করবে, তারপর মডেলটিকে একটি QuadraticProgram
এ রূপান্তর করতে from_docplex()
ফাংশনটি ব্যবহার করব, যা Qiskit অনুকূলকরণে (অপ্টিমাইজেশন) একটা QUBO এর প্রতিনিধিত্ব করতে পারে।
[1]:
from qiskit_algorithms import NumPyMinimumEigensolver
from qiskit.primitives import Sampler
from qiskit_optimization.algorithms import GroverOptimizer, MinimumEigenOptimizer
from qiskit_optimization.translators import from_docplex_mp
from docplex.mp.model import Model
[2]:
model = Model()
x0 = model.binary_var(name="x0")
x1 = model.binary_var(name="x1")
x2 = model.binary_var(name="x2")
model.minimize(-x0 + 2 * x1 - 3 * x2 - 2 * x0 * x2 - 1 * x1 * x2)
qp = from_docplex_mp(model)
print(qp.prettyprint())
Problem name: docplex_model1
Minimize
-2*x0*x2 - x1*x2 - x0 + 2*x1 - 3*x2
Subject to
No constraints
Binary variables (3)
x0 x1 x2
Next, we create a GroverOptimizer
that uses 6 qubits to encode the value, and will terminate after there have been 10 iterations of GAS without progress (i.e. the value of solve()
function takes the QuadraticProgram
we created earlier, and returns a results object that contains information about the run.
[3]:
grover_optimizer = GroverOptimizer(6, num_iterations=10, sampler=Sampler())
results = grover_optimizer.solve(qp)
print(results.prettyprint())
objective function value: -6.0
variable values: x0=1.0, x1=0.0, x2=1.0
status: SUCCESS
এটি সর্বোত্তম সমাধানে ফলাফল GroverOptimizer
এর একটি সম্ভাব্য রান দেখায়।
Each graph shows a single iteration of GAS, with the current values of
পরীক্ষা করে দেখুন যে GroverOptimizer সঠিক মানটি পাচ্ছে#
We can verify that the algorithm is working correctly using the MinimumEigenOptimizer
in Qiskit optimization.
[4]:
exact_solver = MinimumEigenOptimizer(NumPyMinimumEigensolver())
exact_result = exact_solver.solve(qp)
print(exact_result.prettyprint())
objective function value: -6.0
variable values: x0=1.0, x1=0.0, x2=1.0
status: SUCCESS
[5]:
import qiskit.tools.jupyter
%qiskit_version_table
%qiskit_copyright
Version Information
Qiskit Software | Version |
---|---|
qiskit-terra | 0.23.0 |
qiskit-aer | 0.11.1 |
qiskit-optimization | 0.5.0 |
qiskit-machine-learning | 0.6.0 |
System information | |
Python version | 3.9.15 |
Python compiler | Clang 14.0.0 (clang-1400.0.29.102) |
Python build | main, Oct 11 2022 22:27:25 |
OS | Darwin |
CPUs | 4 |
Memory (Gb) | 16.0 |
Tue Dec 06 21:47:01 2022 JST |
This code is a part of Qiskit
© Copyright IBM 2017, 2022.
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.
[ ]: