Skip to content

Commit fc2deec

Browse files
gcattanpre-commit-ci[bot]qbarthelemy
authored
Expose QAOA initial points (#355)
* Update docplex.py Expose QAOA initial points * [pre-commit.ci] auto fixes from pre-commit.com hooks * Update classification.py * [pre-commit.ci] auto fixes from pre-commit.com hooks * Update classification.py * [pre-commit.ci] auto fixes from pre-commit.com hooks * Update classification.py * Update pyriemann_qiskit/utils/docplex.py Co-authored-by: Quentin Barthélemy <q.barthelemy@gmail.com> * Update pyriemann_qiskit/classification.py Co-authored-by: Quentin Barthélemy <q.barthelemy@gmail.com> * Update pyriemann_qiskit/classification.py Co-authored-by: Quentin Barthélemy <q.barthelemy@gmail.com> --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Quentin Barthélemy <q.barthelemy@gmail.com>
1 parent ed7f0ca commit fc2deec

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

pyriemann_qiskit/classification.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,7 @@ def _get_docplex_optimizer_from_params_bag(
637637
classical_optimizer,
638638
create_mixer,
639639
n_reps,
640+
qaoa_initial_points,
640641
):
641642
if quantum:
642643
if create_mixer:
@@ -653,6 +654,7 @@ def _get_docplex_optimizer_from_params_bag(
653654
quantum_instance=quantum_instance,
654655
upper_bound=upper_bound,
655656
optimizer=qaoa_optimizer,
657+
initial_points=qaoa_initial_points,
656658
)
657659
else:
658660
logger._log(f"Using ClassicalOptimizer ({type(classical_optimizer).__name__})")
@@ -681,6 +683,8 @@ class QuanticMDM(QuanticClassifierBase):
681683
Add qaoa_optimizer parameter.
682684
.. versionchanged:: 0.4.0
683685
Add QAOA-CV optimization.
686+
.. versionchanged:: 0.4.1
687+
Add qaoa_initial_points parameter.
684688
685689
Parameters
686690
----------
@@ -724,6 +728,8 @@ class QuanticMDM(QuanticClassifierBase):
724728
n_reps : int, default=3
725729
The number of time the mixer and cost operator are repeated in the QAOA-CV
726730
circuit.
731+
qaoa_initial_points : Tuple[int, int], default=[0.0, 0.0].
732+
Starting parameters (beta and gamma) for the NaiveQAOAOptimizer.
727733
728734
See Also
729735
--------
@@ -760,6 +766,7 @@ def __init__(
760766
qaoa_optimizer=SLSQP(),
761767
create_mixer=None,
762768
n_reps=3,
769+
qaoa_initial_points=[0.0, 0.0],
763770
):
764771
QuanticClassifierBase.__init__(
765772
self, quantum, q_account_token, verbose, shots, None, seed
@@ -771,6 +778,7 @@ def __init__(
771778
self.qaoa_optimizer = qaoa_optimizer
772779
self.create_mixer = create_mixer
773780
self.n_reps = n_reps
781+
self.qaoa_initial_points = qaoa_initial_points
774782

775783
@staticmethod
776784
def _override_predict_distance(mdm):
@@ -815,6 +823,7 @@ def _init_algo(self, n_features):
815823
self.classical_optimizer,
816824
self.create_mixer,
817825
self.n_reps,
826+
self.qaoa_initial_points,
818827
)
819828
set_global_optimizer(self._optimizer)
820829
return classifier
@@ -1093,6 +1102,8 @@ class QuanticNCH(QuanticClassifierBase):
10931102
Add qaoa_optimizer parameter.
10941103
.. versionchanged:: 0.4.0
10951104
Add QAOA-CV optimization.
1105+
.. versionchanged:: 0.4.1
1106+
Add the qaoa_initial_points parameter.
10961107
10971108
Parameters
10981109
----------
@@ -1141,6 +1152,8 @@ class QuanticNCH(QuanticClassifierBase):
11411152
n_reps : int, default=3
11421153
The number of time the mixer and cost operator are repeated in the QAOA-CV
11431154
circuit.
1155+
qaoa_initial_points : Tuple[int, int], default=[0.0, 0.0].
1156+
Starting parameters (beta and gamma) for the NaiveQAOAOptimizer.
11441157
11451158
References
11461159
----------
@@ -1165,6 +1178,7 @@ def __init__(
11651178
qaoa_optimizer=SLSQP(),
11661179
create_mixer=None,
11671180
n_reps=3,
1181+
qaoa_initial_points=[0.0, 0.0],
11681182
):
11691183
QuanticClassifierBase.__init__(
11701184
self, quantum, q_account_token, verbose, shots, None, seed
@@ -1179,6 +1193,7 @@ def __init__(
11791193
self.qaoa_optimizer = qaoa_optimizer
11801194
self.create_mixer = create_mixer
11811195
self.n_reps = n_reps
1196+
self.qaoa_initial_points = qaoa_initial_points
11821197

11831198
def _init_algo(self, n_features):
11841199
self._log("Nearest Convex Hull Classifier initiating algorithm")
@@ -1200,6 +1215,7 @@ def _init_algo(self, n_features):
12001215
self.classical_optimizer,
12011216
self.create_mixer,
12021217
self.n_reps,
1218+
self.qaoa_initial_points,
12031219
)
12041220

12051221
# sets the optimizer for the distance functions

pyriemann_qiskit/utils/docplex.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,8 @@ class NaiveQAOAOptimizer(pyQiskitOptimizer):
459459
optimizer : SciPyOptimizer, default=SLSQP()
460460
An instance of a scipy optimizer to find the optimal weights for the
461461
parametric circuit (ansatz).
462+
initial_points : Tuple[int, int], default=[0.0, 0.0].
463+
Starting parameters (beta and gamma) for the QAOA.
462464
463465
Notes
464466
-----
@@ -479,11 +481,18 @@ class NaiveQAOAOptimizer(pyQiskitOptimizer):
479481
pyQiskitOptimizer
480482
"""
481483

482-
def __init__(self, upper_bound=7, quantum_instance=None, optimizer=SLSQP()):
484+
def __init__(
485+
self,
486+
upper_bound=7,
487+
quantum_instance=None,
488+
optimizer=SLSQP(),
489+
initial_points=[0.0, 0.0],
490+
):
483491
pyQiskitOptimizer.__init__(self)
484492
self.upper_bound = upper_bound
485493
self.quantum_instance = quantum_instance
486494
self.optimizer = optimizer
495+
self.initial_points = initial_points
487496

488497
def convert_spdmat(self, X):
489498
"""Convert a SPD matrix
@@ -566,7 +575,7 @@ def _callback(_eval_count, _weights, value, _meta):
566575
qaoa_mes = QAOA(
567576
sampler=quantum_instance,
568577
optimizer=self.optimizer,
569-
initial_point=[0.0, 0.0],
578+
initial_point=self.initial_points,
570579
callback=_callback,
571580
)
572581
qaoa = MinimumEigenOptimizer(qaoa_mes)

0 commit comments

Comments
 (0)