Source code for openqaoa.algorithms.rqaoa.rqaoa_workflow_properties

from typing import Union

from ..workflow_properties import WorkflowProperties
from ...qaoa_components import Hamiltonian


ALLOWED_RQAOA_TYPES = ["adaptive", "custom"]


[docs]class RqaoaParameters(WorkflowProperties): """ Parameter class to initialise parameters to run a desired RQAOA program. Attributes ---------- rqaoa_type: `int` String specifying the RQAOA scheme under which eliminations are computed. The two methods are 'custom' and 'adaptive'. Defaults to 'adaptive'. n_max: `int` Maximum number of eliminations allowed at each step when using the adaptive method. steps: `Union[list,int]` Elimination schedule for the RQAOA algorithm. If an integer is passed, it sets the number of spins eliminated at each step. If a list is passed, the algorithm will follow the list to select how many spins to eliminate at each step. Note that the list needs enough elements to specify eliminations from the initial number of qubits up to the cutoff value. If the list contains more, the algorithm will follow instructions until the cutoff value is reached. n_cutoff: `int` Cutoff value at which the RQAOA algorithm obtains the solution classically. original_hamiltonian: `Hamiltonian` Hamiltonian encoding the original problem fed into the RQAOA algorithm. counter: `int` Variable to count the step in the schedule. If counter = 3 the next step is schedule[3]. Default is 0, but can be changed to start in the position of the schedule that one wants. """ def __init__( self, rqaoa_type: str = "custom", n_max: int = 1, steps: Union[list, int] = 1, n_cutoff: int = 5, original_hamiltonian: Hamiltonian = None, counter: int = 0, ): """ Initialises RQAOA program parameters. Parameters ---------- rqaoa_type: `int` String specifying the RQAOA scheme under which eliminations are computed. The two methods are 'custom' and 'adaptive'. Defaults to "custom". n_max: `int` Maximum number of eliminations allowed at each step when using the adaptive method. Defaults to 1. steps: `Union[list,int]` Elimination schedule for the RQAOA algorithm. If an integer is passed, it sets the number of spins eliminated at each step. If a list is passed, the algorithm will follow the list to select how many spins to eliminate at each step. Note that the list needs enough elements to specify eliminations from the initial number of qubits up to the cutoff value. If the list contains more, the algorithm will follow instructions until the cutoff value is reached. Defaults to 1. n_cutoff: `int` Cutoff value at which the RQAOA algorithm obtains the solution classically. Defaults to 5. original_hamiltonian: `Hamiltonian` Hamiltonian encoding the original problem fed into the RQAOA algorithm. Defaults to None. counter: `int` Variable to count the step in the schedule. If counter = 3 the next step is schedule[3]. Default is 0, but can be changed to start in the position of the schedule that one wants. """ self.rqaoa_type = rqaoa_type.lower() self.n_max = n_max self.steps = steps self.n_cutoff = n_cutoff self.original_hamiltonian = original_hamiltonian self.counter = counter # check if the rqaoa type is correct if self.rqaoa_type not in ALLOWED_RQAOA_TYPES: self.compiled = False raise Exception( f'rqaoa_type {self.rqaoa_type} is not supported. Please select "adaptive" or "custom".' ) # check if the parameters given are in accordance with the rqaoa_type if self.rqaoa_type == "adaptive": if self.steps != 1: raise ValueError( "When using the adaptive method, the `steps` parameter is not required. \ The parameter that specifies the maximum number of eliminations per step is `n_max`." ) if self.counter != 0: raise ValueError( "When using the adaptive method, the `counter` parameter is not required." ) else: if self.n_max != 1: raise ValueError( "When using the custom method, the `n_max` parameter is not required. \ The parameter that specifies the number of eliminations is `steps`,\ which can be a string or a list." )