qiskit-optimization: MinimumEigenOptimizer returns a wrong solution
Information
- Qiskit Optimization version: latest
- Python version: 3.8.9
- Operating system: macOS 11.2.3
What is the current behavior?
MinimumEigenOptimizer
with qasm_simulator returns a wrong solution.
Steps to reproduce the problem
from docplex.mp.model import Model
mdl = Model("docplex model")
x = mdl.binary_var('x')
y = mdl.binary_var('y')
mdl.minimize(x-2*y)
print(mdl.export_as_lp_string())
result = mdl.solve()
print("result of CPLEX solver")
print(result)
from qiskit_optimization import QuadraticProgram
from qiskit.providers.aer import QasmSimulator
from qiskit.algorithms.optimizers import SPSA
from qiskit.circuit.library import TwoLocal
from qiskit.utils import QuantumInstance
from qiskit.algorithms import VQE
from qiskit_optimization.algorithms import MinimumEigenOptimizer
seed = 1234
qp = QuadraticProgram()
qp.from_docplex(mdl)
backend = QasmSimulator()
optimizer = SPSA(maxiter=100)
ry = TwoLocal(2, 'ry', 'cz', reps=3, entanglement='full')
quantum_instance = QuantumInstance(backend=backend, seed_simulator=seed, seed_transpiler=seed)
vqe_mes = VQE(ry, optimizer=optimizer, quantum_instance=quantum_instance)
vqe = MinimumEigenOptimizer(vqe_mes)
result = vqe.solve(qp)
print("result of VQE solver")
print(result)
print(result.raw_samples)
output:
\ This file has been generated by DOcplex
\ ENCODING=ISO-8859-1
\Problem name: docplex model
Minimize
obj: x - 2 y
Subject To
Bounds
0 <= x <= 1
0 <= y <= 1
Binaries
x y
End
result of CPLEX solver
solution for: docplex model
objective: -2
y=1
result of VQE solver
optimal function value: 1.0
optimal value: [1. 0.]
status: SUCCESS
What is the expected behavior?
The solution of VQE should be [0. 1.]
.
Suggested solutions
We may need to reverse the bitstrings as x = np.fromiter(list(bitstr[::-1]), dtype=int)
. But, it may affect other algorithms and unit tests.
https://github.com/Qiskit/qiskit-optimization/blob/54a6d0750492132aa019975e3a8648c507b7553c/qiskit_optimization/algorithms/optimization_algorithm.py#L511
About this issue
- Original URL
- State: closed
- Created 3 years ago
- Comments: 19 (8 by maintainers)
Ok ππ» yeah letβs revisit the ordering in another issue, Iβm not sure I fully understood where which order is assumed π Thanks for the clarifications!
@Cryoris Sure. Let me check reversing the Hamiltonian order works correctly as I expect. I will work on it next week. @t-imamichi Ya, we need to clarify the order of Hamiltonian in docstrings if we change it.