# Release Notes¶

## 0.3.0¶

### New Features¶

• Added the runtime client QAOAClient to execute the QAOA algorithm on Qiskit runtime. This runtime program leverages QAOA dedicated transpiler passes such as swap strategies and pulse-efficient transpiler passes for cross-resonance based hardware. Both these optimizations can significantly reduce circuit depth and improve execution time and results. Further, the QAOA runtime also allows using CVaR expectation values, which can improve the performance of ground state calculations in optimization settings.

The client can for instance be used as

from qiskit import IBMQ
from qiskit.algorithms.optimizers import COBYLA
from qiskit.opflow import I, Z
from qiskit_optimization.runtime import QAOAClient

# get the provider and backend we use to run the program
provider = IBMQ.get_provider(hub="ibm-q", group="open", project="main")
backend = provider.get_backend("ibmq_qasm_simulator")

# define diagonal Hamiltonian whose minimum eigenvalue we want to find
op =  (Z ^ Z ^ I ^ I ^ I) - (I ^ I ^ Z ^ Z ^ I)

# set up the client and solve the problem
client = QAOAClient(
reps=2,  # use p=2 repetitions in the QAOA ansatz
optimizer=COBYLA(),
alpha=0.75,  # use CVaR expectation with 75% of the best readouts
provider=provider,
backend=backend
)
result = client.compute_minimum_eigenvalue(op)


See also the new QAOA Runtime tutorial in docs/tutorials/12_qaoa_runtime.ipynb for more details.

• Introduced the Sherrington-Kirkpatrick (SK) model [1] qiskit_optimization.applications.SKModel. The model has all-to-all ferromagnetic and antiferromagnetic interactions given by a random disorder and represents a mean-field approximation of a spin glass.

Let $$x\in\{\pm 1\}^n$$ be a configuration of spins. The SK model Hamiltonian on $$n$$ sites is

$\begin{array}{} H(x)=-1/\sqrt{n} \sum_{i<j} w_{i,j}x_ix_j,\text{ where } i,j\in [n], \end{array}$

$$w_{i,j}\in\{\pm 1\}$$ are called disorder and are chosen independently and uniformly at random.

The computational problem associated with this class is to find the ground state of the SK Hamiltonian instance and its energy.

[1]: Dmitry Panchenko. “The Sherrington-Kirkpatrick model: an overview”, https://arxiv.org/abs/1211.1094

• The deprecated methods QuadraticProgram.from_docplex and QuadraticProgram.to_docplex have been removed and no longer exist. These methods were deprecated as part of the 0.2.0 release. Instead you should use from_docplex_mp() and to_docplex_mp().

### Bug Fixes¶

• If an indicator constraint of a Docplex model does not have a name, qiskit_optimization.translators.from_docplex_mp() adds a name ind{number} for sense <= and >= or names ind{number}_LE and ind{number}_GE for sense ==.

## 0.2.0¶

### New Features¶

• Introduced a new converter class qiskit_optimization.converters.LinearInequalityToPenalty. It converts the following inequality constraints to penalty terms where x, y, $$x_i$$ are binary variables and P is a penalty factor.

$\begin{split}\begin{array}{} \text { Inequality constraint } & & \text { Penalty term } \\ x \leq y & \rightarrow & P(x-x y) \\ x \geq y & \rightarrow & P(y-x y) \\ \sum_{i=1}^n x_i \leq 1, n \geq 2 & \rightarrow & P \sum_{i, j : i < j} x_i x_j\\ \sum_{i=1}^n x_i \geq n-1, n \geq 2 & \rightarrow & P \sum_{i, j : i < j} (1 - x_i) (1 - x_j) \end{array}\end{split}$

• QuadraticProgram.pprint_as_string and QuadraticProgram.prettyprint have been removed, which were deprecated in Qiskit Aqua 0.8.0 release (October 2020).
• Changes qiskit_optimization.algorithms.MinimumEigenOptimizer.solve() to return the best solution in terms of the original problem, i.e., MinimumEigenOptimizationResult.samples[0], as qiskit_optimization.algorithms.MinimumEigenOptimizationResult.x(). It used to be the best solution in terms of the converted QUBO problem, i.e., MinimumEigenOptimizationResult.raw_samples[0].
• Sorts the order of result.get_counts(qc) by bitstring in qiskit_optimization.algorithms.GroverOptimizer when qasm_simulator is used so that the algorithm behaves deterministically. The previous version sorts the counts by probabilities, but some bitstrings may have the same probability and the algorithm could behave probabilistically.