Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix bit ordering and probabilities of samples in optimization_algorithm.py #97

Merged
merged 71 commits into from May 13, 2021
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
3945892
fix unittest of grover optimizer
a-matsuo Apr 22, 2021
784cf7c
fix
a-matsuo Apr 22, 2021
546265a
fix lint
a-matsuo Apr 22, 2021
92b87ee
fix bit ordering
a-matsuo Apr 22, 2021
0ad49c1
added unittest
a-matsuo Apr 22, 2021
1c3dcb5
fix bitordering for statevector
a-matsuo Apr 22, 2021
066f54a
fix unittest and timing of updating samples
a-matsuo Apr 23, 2021
8781488
clean up
a-matsuo Apr 23, 2021
e9c4f05
fix lint
a-matsuo Apr 23, 2021
393b6b5
fix grover_optimizer as well
a-matsuo Apr 23, 2021
a710d74
added test for samples
a-matsuo Apr 23, 2021
70a8bff
fix lint
a-matsuo Apr 23, 2021
f8c8272
changed to use assert_array_almost_equal
a-matsuo Apr 23, 2021
cef9a89
fix slice
a-matsuo Apr 23, 2021
73861a6
remove change of #96
a-matsuo Apr 23, 2021
62e00fc
remove change of #96 for unittest
a-matsuo Apr 23, 2021
f8a65c8
Merge branch 'main' into fix_bit_order
t-imamichi Apr 24, 2021
1374675
Update qiskit_optimization/algorithms/grover_optimizer.py
t-imamichi Apr 24, 2021
7543f8f
Revert "Update qiskit_optimization/algorithms/grover_optimizer.py"
t-imamichi Apr 24, 2021
0aea59b
Merge branch 'main' into fix_bit_order
t-imamichi Apr 25, 2021
586851d
fix grover opt's bit ordering
a-matsuo Apr 26, 2021
06e8d1e
Merge branch 'fix_bit_order' of github.com:a-matsuo/qiskit-optimizati…
a-matsuo Apr 26, 2021
ebf9de5
fix linting
a-matsuo Apr 26, 2021
3244a60
clean test
a-matsuo Apr 26, 2021
26274da
add print
a-matsuo Apr 26, 2021
7ac3aeb
skip test temporarily. I will fix it
a-matsuo Apr 26, 2021
94e4a7c
removed temporarily
a-matsuo Apr 26, 2021
0797640
merge from main, fix conflicts
manoelmarques Apr 26, 2021
dfc8ef9
add print
a-matsuo Apr 26, 2021
c2b3847
add print int_v
a-matsuo Apr 26, 2021
e9d5ba9
align print samples
a-matsuo Apr 26, 2021
80a2afb
remove sqrt
a-matsuo Apr 27, 2021
1653b6e
move print eigen_vector
a-matsuo Apr 27, 2021
cee591d
move circuit results print
a-matsuo Apr 27, 2021
465fc0a
modified seed
a-matsuo Apr 27, 2021
76307cd
move raw_samples____print
a-matsuo Apr 27, 2021
433ba37
remove print
a-matsuo Apr 27, 2021
168fd22
changed to use basic aer
a-matsuo Apr 27, 2021
1abd994
remove print2
a-matsuo Apr 27, 2021
f3f6f5e
fix style
a-matsuo Apr 27, 2021
e3fa646
changed to use Aer
a-matsuo Apr 27, 2021
ced7129
print count_ops()
a-matsuo Apr 27, 2021
9d0482b
Merge branch 'main' into fix_bit_order
manoelmarques Apr 27, 2021
709a39a
check statevector as well
a-matsuo Apr 28, 2021
e6eeb82
Merge branch 'fix_bit_order' of github.com:a-matsuo/qiskit-optimizati…
a-matsuo Apr 28, 2021
3a5682d
remove print
a-matsuo Apr 28, 2021
43a5489
revert seed
a-matsuo Apr 28, 2021
dfc9f5c
remove print
a-matsuo Apr 28, 2021
84de846
add print
a-matsuo Apr 28, 2021
4d8af9d
remove print, change seed and increase # of trials
a-matsuo Apr 28, 2021
1d0cab5
fix lint
a-matsuo Apr 28, 2021
1858917
add more tests for grover_opt
a-matsuo Apr 28, 2021
615fa98
more unittests
a-matsuo Apr 30, 2021
30679f2
fix linting
a-matsuo Apr 30, 2021
9db6d03
Merge branch 'main' into fix_bit_order
a-matsuo May 6, 2021
3d69a72
clear prints and fix formatting
a-matsuo May 6, 2021
8d46427
fix formatting
a-matsuo May 6, 2021
89c7814
fix
a-matsuo May 7, 2021
f87606a
Merge branch 'main' into fix_bit_order
a-matsuo May 7, 2021
7599c4c
fix black
a-matsuo May 7, 2021
1723f5f
add comments and rename eigenvector
a-matsuo May 7, 2021
c2e5342
add bit ordering test case for QAOA
a-matsuo May 7, 2021
417144c
fix lint
a-matsuo May 7, 2021
6dda6ed
Merge branch 'main' into fix_bit_order
t-imamichi May 9, 2021
9a64cd4
Merge branch 'main' into fix_bit_order
t-imamichi May 10, 2021
adc3280
remove some pylint directives and clarify qubit order in from_ising a…
t-imamichi May 12, 2021
4518f7e
add reno
t-imamichi May 12, 2021
ef22a05
Merge branch 'main' into fix_bit_order
t-imamichi May 12, 2021
59f7149
Merge branch 'main' into fix_bit_order
t-imamichi May 12, 2021
6aa059e
fix mypy
t-imamichi May 13, 2021
311d648
fix spell
t-imamichi May 13, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 3 additions & 3 deletions qiskit_optimization/algorithms/optimization_algorithm.py
Expand Up @@ -502,17 +502,17 @@ def _eigenvector_to_solutions(eigenvector: Union[dict, np.ndarray, StateFn],
Raises:
TypeError: If the type of eigenvector is not supported.
"""

if isinstance(eigenvector, DictStateFn):
eigenvector = {bitstr: val ** 2 for (bitstr, val) in eigenvector.primitive.items()}
elif isinstance(eigenvector, StateFn):
eigenvector = eigenvector.to_matrix()

def generate_solution(bitstr, qubo, probability):
x = np.fromiter(list(bitstr), dtype=int)
x = np.fromiter(list(bitstr[::-1]), dtype=int)
fval = qubo.objective.evaluate(x)
return SolutionSample(x=x, fval=fval, probability=probability,
status=OptimizationResultStatus.SUCCESS)

solutions = []
if isinstance(eigenvector, dict):
all_counts = sum(eigenvector.values())
Expand All @@ -531,7 +531,7 @@ def generate_solution(bitstr, qubo, probability):
for i, sampling_probability in enumerate(probabilities):
# add the i-th state if the sampling probability exceeds the threshold
if sampling_probability >= min_probability:
bitstr = '{:b}'.format(i).rjust(num_qubits, '0')[::-1]
bitstr = '{:b}'.format(i).rjust(num_qubits, '0')
solutions.append(generate_solution(bitstr, qubo, sampling_probability))

else:
Expand Down
39 changes: 33 additions & 6 deletions test/algorithms/test_min_eigen_optimizer.py
Expand Up @@ -17,16 +17,23 @@

import numpy as np
from ddt import data, ddt
from docplex.mp.model import Model

from qiskit import BasicAer
from qiskit.algorithms import QAOA, VQE, NumPyMinimumEigensolver
from qiskit.algorithms.optimizers import COBYLA, SPSA
from qiskit.circuit.library import TwoLocal
from qiskit.exceptions import MissingOptionalLibraryError
from qiskit.providers.aer import QasmSimulator
from qiskit.utils import QuantumInstance, algorithm_globals
from qiskit.algorithms import QAOA, NumPyMinimumEigensolver
from qiskit.algorithms.optimizers import COBYLA
from qiskit_optimization.algorithms import (CplexOptimizer, MinimumEigenOptimizer)
from qiskit_optimization.algorithms.optimization_algorithm import OptimizationResultStatus
from qiskit_optimization.converters import (InequalityToEquality, IntegerToBinary,
LinearEqualityToPenalty, QuadraticProgramToQubo)
from qiskit_optimization.algorithms import (CplexOptimizer,
MinimumEigenOptimizer)
from qiskit_optimization.algorithms.optimization_algorithm import \
OptimizationResultStatus
from qiskit_optimization.converters import (InequalityToEquality,
IntegerToBinary,
LinearEqualityToPenalty,
QuadraticProgramToQubo)
from qiskit_optimization.problems import QuadraticProgram


Expand Down Expand Up @@ -245,6 +252,26 @@ def test_samples(self):
self.assertAlmostEqual(result.fval, result.samples[0].fval)
self.assertEqual(result.status, result.samples[0].status)

def test_bit_ordering(self):
t-imamichi marked this conversation as resolved.
Show resolved Hide resolved
"""Test bit ordering"""
mdl = Model("docplex model")
x = mdl.binary_var('x')
y = mdl.binary_var('y')
mdl.minimize(x-2*y)
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)
self.assertEqual(result.fval, -2)
self.assertListEqual(result.x.tolist(), [0, 1])

t-imamichi marked this conversation as resolved.
Show resolved Hide resolved

if __name__ == '__main__':
unittest.main()