Source code for qiskit_optimization.algorithms.qrao.encoding_commutation_verifier

# This code is part of a Qiskit project.
#
# (C) Copyright IBM 2023.
#
# 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.

"""The EncodingCommutationVerifier."""

from __future__ import annotations

from qiskit.primitives import BaseEstimator

from qiskit_optimization.exceptions import QiskitOptimizationError

from .quantum_random_access_encoding import QuantumRandomAccessEncoding


[docs]class EncodingCommutationVerifier: """Class for verifying that the relaxation commutes with the objective function.""" def __init__(self, encoding: QuantumRandomAccessEncoding, estimator: BaseEstimator): """ Args: encoding: The encoding to verify. estimator: The estimator to use for the verification. """ self._encoding = encoding self._estimator = estimator def __len__(self) -> int: return 2**self._encoding.num_vars def __iter__(self): for i in range(len(self)): yield self[i] def __getitem__(self, i: int) -> tuple[str, float, float]: if i < 0 or i >= len(self): raise IndexError(f"Index out of range: {i}") encoding = self._encoding str_dvars = f"{i:0{encoding.num_vars}b}" dvars = [int(b) for b in str_dvars] encoded_bitstr_qc = encoding.state_preparation_circuit(dvars) # Evaluate the original objective function problem = encoding.problem sense = problem.objective.sense.value obj_val = problem.objective.evaluate(dvars) * sense # Evaluate the encoded Hamiltonian encoded_op = encoding.qubit_op offset = encoding.offset job = self._estimator.run([encoded_bitstr_qc], [encoded_op]) try: encoded_obj_val = job.result().values[0] + offset except Exception as exc: raise QiskitOptimizationError( "The primitive job to verify commutation failed!" ) from exc return (str_dvars, obj_val, encoded_obj_val)