Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion qiskit_optimization/algorithms/grover_optimizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ def solve(self, problem: QuadraticProgram) -> OptimizationResult:
samples = self._interpret_samples(problem, raw_samples, self._converters)
else:
# Using Durr and Hoyer method, increase m.
m = int(np.ceil(min(m * 8 / 7, 2 ** (n_key / 2))))
m = max(m + 1, int(np.ceil(min(m * 8 / 7, 2 ** (n_key / 2)))))
logger.info("No Improvement. M: %s", m)

# Check if we've already seen this value.
Expand Down
22 changes: 9 additions & 13 deletions test/algorithms/test_grover_optimizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ def setUp(self):
self.qasm_simulator = QuantumInstance(
Aer.get_backend("qasm_simulator"), seed_simulator=123, seed_transpiler=123
)
self.n_iter = 8

def validate_results(self, problem, results):
"""Validate the results object returned by GroverOptimizer."""
Expand Down Expand Up @@ -91,8 +92,7 @@ def test_qubo_gas_int_simple(self):
op.from_docplex(model)

# Get the optimum key and value.
n_iter = 8
gmf = GroverOptimizer(4, num_iterations=n_iter, quantum_instance=self.sv_simulator)
gmf = GroverOptimizer(4, num_iterations=self.n_iter, quantum_instance=self.sv_simulator)
results = gmf.solve(op)
self.validate_results(op, results)

Expand All @@ -112,8 +112,7 @@ def test_qubo_gas_int_simple_maximize(self):
op.from_docplex(model)

# Get the optimum key and value.
n_iter = 8
gmf = GroverOptimizer(4, num_iterations=n_iter, quantum_instance=self.sv_simulator)
gmf = GroverOptimizer(4, num_iterations=self.n_iter, quantum_instance=self.sv_simulator)
results = gmf.solve(op)
self.validate_results(op, results)

Expand All @@ -134,10 +133,8 @@ def test_qubo_gas_int_paper_example(self, simulator):
op.from_docplex(model)

# Get the optimum key and value.
n_iter = 10

q_instance = self.sv_simulator if simulator == "sv" else self.qasm_simulator
gmf = GroverOptimizer(6, num_iterations=n_iter, quantum_instance=q_instance)
gmf = GroverOptimizer(6, num_iterations=self.n_iter, quantum_instance=q_instance)
results = gmf.solve(op)
self.validate_results(op, results)

Expand All @@ -153,12 +150,11 @@ def test_converter_list(self):
op.from_docplex(model)

# Get the optimum key and value.
n_iter = 8
# a single converter.
qp2qubo = QuadraticProgramToQubo()
gmf = GroverOptimizer(
4,
num_iterations=n_iter,
num_iterations=self.n_iter,
quantum_instance=self.sv_simulator,
converters=qp2qubo,
)
Expand All @@ -172,7 +168,7 @@ def test_converter_list(self):
converters = [ineq2eq, int2bin, penalize]
gmf = GroverOptimizer(
4,
num_iterations=n_iter,
num_iterations=self.n_iter,
quantum_instance=self.sv_simulator,
converters=converters,
)
Expand All @@ -183,7 +179,7 @@ def test_converter_list(self):
invalid = [qp2qubo, "invalid converter"]
GroverOptimizer(
4,
num_iterations=n_iter,
num_iterations=self.n_iter,
quantum_instance=self.sv_simulator,
converters=invalid,
)
Expand All @@ -197,7 +193,7 @@ def test_samples_and_raw_samples(self, simulator):
op.minimize(linear={"x": 1, "y": 2})
op.linear_constraint(linear={"x": 1, "y": 1}, sense=">=", rhs=1, name="xy")
q_instance = self.sv_simulator if simulator == "sv" else self.qasm_simulator
grover_optimizer = GroverOptimizer(8, num_iterations=10, quantum_instance=q_instance)
grover_optimizer = GroverOptimizer(8, num_iterations=self.n_iter, quantum_instance=q_instance)
opt_sol = 1
success = OptimizationResultStatus.SUCCESS
results = grover_optimizer.solve(op)
Expand Down Expand Up @@ -231,7 +227,7 @@ def test_bit_ordering(self, simulator):
op.from_docplex(mdl)
opt_sol = -2
success = OptimizationResultStatus.SUCCESS
grover_optimizer = GroverOptimizer(3, num_iterations=10, quantum_instance=q_instance)
grover_optimizer = GroverOptimizer(3, num_iterations=self.n_iter, quantum_instance=q_instance)
results = grover_optimizer.solve(op)
self.assertEqual(results.fval, opt_sol)
np.testing.assert_array_almost_equal(results.x, [0, 1])
Expand Down