qiskit-documentation/docs/api/qiskit/0.25/qiskit.optimization.algorit...

151 lines
9.3 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: RecursiveMinimumEigenOptimizer
description: API reference for qiskit.optimization.algorithms.RecursiveMinimumEigenOptimizer
in_page_toc_min_heading_level: 1
python_api_type: class
python_api_name: qiskit.optimization.algorithms.RecursiveMinimumEigenOptimizer
---
# qiskit.optimization.algorithms.RecursiveMinimumEigenOptimizer
<Class id="qiskit.optimization.algorithms.RecursiveMinimumEigenOptimizer" isDedicatedPage={true} github="https://github.com/qiskit-community/qiskit-aqua/tree/stable/0.9/qiskit/optimization/algorithms/recursive_minimum_eigen_optimizer.py" signature="RecursiveMinimumEigenOptimizer(min_eigen_optimizer, min_num_vars=1, min_num_vars_optimizer=None, penalty=None, history=<IntermediateResult.LAST_ITERATION: 1>, converters=None)" modifiers="class">
A meta-algorithm that applies a recursive optimization.
The recursive minimum eigen optimizer applies a recursive optimization on top of [`MinimumEigenOptimizer`](qiskit.optimization.algorithms.MinimumEigenOptimizer "qiskit.optimization.algorithms.MinimumEigenOptimizer"). The algorithm is introduced in \[1].
**Examples**
Outline of how to use this class:
```python
from qiskit.aqua.algorithms import QAOA
from qiskit.optimization.problems import QuadraticProgram
from qiskit.optimization.algorithms import RecursiveMinimumEigenOptimizer
problem = QuadraticProgram()
# specify problem here
# specify minimum eigen solver to be used, e.g., QAOA
qaoa = QAOA(...)
optimizer = RecursiveMinimumEigenOptimizer(qaoa)
result = optimizer.solve(problem)
```
**References**
**\[1]: Bravyi et al. (2019), Obstacles to State Preparation and Variational Optimization**
from Symmetry Protection. [http://arxiv.org/abs/1910.08980](http://arxiv.org/abs/1910.08980).
Initializes the recursive minimum eigen optimizer.
This initializer takes a `MinimumEigenOptimizer`, the parameters to specify until when to to apply the iterative scheme, and the optimizer to be applied once the threshold number of variables is reached.
**Parameters**
* **min\_eigen\_optimizer** (`MinimumEigenOptimizer`) The eigen optimizer to use in every iteration.
* **min\_num\_vars** (`int`) The minimum number of variables to apply the recursive scheme. If this threshold is reached, the min\_num\_vars\_optimizer is used.
* **min\_num\_vars\_optimizer** (`Optional`\[`OptimizationAlgorithm`]) This optimizer is used after the recursive scheme for the problem with the remaining variables.
* **penalty** (`Optional`\[`float`]) The factor that is used to scale the penalty terms corresponding to linear equality constraints.
* **history** (`Optional`\[`IntermediateResult`]) Whether the intermediate results are stored. Default value is [`LAST_ITERATION`](qiskit.optimization.algorithms.IntermediateResult#last_iteration "qiskit.optimization.algorithms.IntermediateResult.LAST_ITERATION").
* **converters** (`Union`\[`QuadraticProgramConverter`, `List`\[`QuadraticProgramConverter`], `None`]) The converters to use for converting a problem into a different form. By default, when None is specified, an internally created instance of [`QuadraticProgramToQubo`](qiskit.optimization.converters.QuadraticProgramToQubo "qiskit.optimization.converters.QuadraticProgramToQubo") will be used.
**Raises**
* [**QiskitOptimizationError**](qiskit.optimization.QiskitOptimizationError "qiskit.optimization.QiskitOptimizationError") In case of invalid parameters (num\_min\_vars \< 1).
* **TypeError** When there one of converters is an invalid type.
### \_\_init\_\_
<Function id="qiskit.optimization.algorithms.RecursiveMinimumEigenOptimizer.__init__" signature="__init__(min_eigen_optimizer, min_num_vars=1, min_num_vars_optimizer=None, penalty=None, history=<IntermediateResult.LAST_ITERATION: 1>, converters=None)">
Initializes the recursive minimum eigen optimizer.
This initializer takes a `MinimumEigenOptimizer`, the parameters to specify until when to to apply the iterative scheme, and the optimizer to be applied once the threshold number of variables is reached.
**Parameters**
* **min\_eigen\_optimizer** (`MinimumEigenOptimizer`) The eigen optimizer to use in every iteration.
* **min\_num\_vars** (`int`) The minimum number of variables to apply the recursive scheme. If this threshold is reached, the min\_num\_vars\_optimizer is used.
* **min\_num\_vars\_optimizer** (`Optional`\[`OptimizationAlgorithm`]) This optimizer is used after the recursive scheme for the problem with the remaining variables.
* **penalty** (`Optional`\[`float`]) The factor that is used to scale the penalty terms corresponding to linear equality constraints.
* **history** (`Optional`\[`IntermediateResult`]) Whether the intermediate results are stored. Default value is [`LAST_ITERATION`](qiskit.optimization.algorithms.IntermediateResult#last_iteration "qiskit.optimization.algorithms.IntermediateResult.LAST_ITERATION").
* **converters** (`Union`\[`QuadraticProgramConverter`, `List`\[`QuadraticProgramConverter`], `None`]) The converters to use for converting a problem into a different form. By default, when None is specified, an internally created instance of [`QuadraticProgramToQubo`](qiskit.optimization.converters.QuadraticProgramToQubo "qiskit.optimization.converters.QuadraticProgramToQubo") will be used.
**Raises**
* [**QiskitOptimizationError**](qiskit.optimization.QiskitOptimizationError "qiskit.optimization.QiskitOptimizationError") In case of invalid parameters (num\_min\_vars \< 1).
* **TypeError** When there one of converters is an invalid type.
</Function>
## Methods
| | |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| [`__init__`](#qiskit.optimization.algorithms.RecursiveMinimumEigenOptimizer.__init__ "qiskit.optimization.algorithms.RecursiveMinimumEigenOptimizer.__init__")(min\_eigen\_optimizer\[, …]) | Initializes the recursive minimum eigen optimizer. |
| [`get_compatibility_msg`](#qiskit.optimization.algorithms.RecursiveMinimumEigenOptimizer.get_compatibility_msg "qiskit.optimization.algorithms.RecursiveMinimumEigenOptimizer.get_compatibility_msg")(problem) | Checks whether a given problem can be solved with this optimizer. |
| [`is_compatible`](#qiskit.optimization.algorithms.RecursiveMinimumEigenOptimizer.is_compatible "qiskit.optimization.algorithms.RecursiveMinimumEigenOptimizer.is_compatible")(problem) | Checks whether a given problem can be solved with the optimizer implementing this method. |
| [`solve`](#qiskit.optimization.algorithms.RecursiveMinimumEigenOptimizer.solve "qiskit.optimization.algorithms.RecursiveMinimumEigenOptimizer.solve")(problem) | Tries to solve the given problem using the recursive optimizer. |
### get\_compatibility\_msg
<Function id="qiskit.optimization.algorithms.RecursiveMinimumEigenOptimizer.get_compatibility_msg" signature="get_compatibility_msg(problem)">
Checks whether a given problem can be solved with this optimizer.
Checks whether the given problem is compatible, i.e., whether the problem can be converted to a QUBO, and otherwise, returns a message explaining the incompatibility.
**Parameters**
**problem** (`QuadraticProgram`) The optimization problem to check compatibility.
**Return type**
`str`
**Returns**
A message describing the incompatibility.
</Function>
### is\_compatible
<Function id="qiskit.optimization.algorithms.RecursiveMinimumEigenOptimizer.is_compatible" signature="is_compatible(problem)">
Checks whether a given problem can be solved with the optimizer implementing this method.
**Parameters**
**problem** (`QuadraticProgram`) The optimization problem to check compatibility.
**Return type**
`bool`
**Returns**
Returns True if the problem is compatible, False otherwise.
</Function>
### solve
<Function id="qiskit.optimization.algorithms.RecursiveMinimumEigenOptimizer.solve" signature="solve(problem)">
Tries to solve the given problem using the recursive optimizer.
Runs the optimizer to try to solve the optimization problem.
**Parameters**
**problem** (`QuadraticProgram`) The problem to be solved.
**Return type**
`OptimizationResult`
**Returns**
The result of the optimizer applied to the problem.
**Raises**
* [**QiskitOptimizationError**](qiskit.optimization.QiskitOptimizationError "qiskit.optimization.QiskitOptimizationError") Incompatible problem.
* [**QiskitOptimizationError**](qiskit.optimization.QiskitOptimizationError "qiskit.optimization.QiskitOptimizationError") Infeasible due to variable substitution
</Function>
</Class>