Skip to content
Merged

Gm qaoa #1355

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
681 changes: 681 additions & 0 deletions algorithms/qaoa/grover_mixer_qaoa/gm_qaoa.ipynb

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions algorithms/qaoa/grover_mixer_qaoa/gm_qaoa.metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"friendly_name": "Grover Mixer QAOA",
"description": "Solving Optimization problem using the QAOA algorithm with a Grover Mixer Variant",
"problem_domain_tags": ["optimization"],
"qmod_type": ["algorithms"],
"level": ["demos"]
}
91 changes: 91 additions & 0 deletions algorithms/qaoa/grover_mixer_qaoa/gm_qaoa.qmod
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
qperm apply_to_all_expanded___0(target: qbit[1]) {
repeat (index: 1) {
X(target[index]);
}
}

qfunc _dicke_split_cycle_shift_expanded___0(qvar: qbit[4]) {
within {
CX(qvar[1], qvar[0]);
} apply {
control (qvar[0]) {
RY(2.094395102393, qvar[1]);
}
}
}

qfunc _dicke_split_cycle_shift_expanded___1(qvar: qbit[3]) {
within {
CX(qvar[1], qvar[0]);
} apply {
control (qvar[0]) {
RY(1.910633236249, qvar[1]);
}
}
}

qfunc _dicke_split_cycle_shift_expanded___2(qvar: qbit[2]) {
within {
CX(qvar[1], qvar[0]);
} apply {
control (qvar[0]) {
RY(1.570796326795, qvar[1]);
}
}
}

qfunc prepare_dicke_state_unary_input_expanded___0(qvar: qbit[2]) {
_dicke_split_cycle_shift_expanded___2(qvar);
}

qfunc prepare_dicke_state_unary_input_expanded___1(qvar: qbit[3]) {
_dicke_split_cycle_shift_expanded___1(qvar);
prepare_dicke_state_unary_input_expanded___0(qvar[1:3]);
}

qfunc prepare_dicke_state_unary_input_expanded___2(qvar: qbit[4]) {
_dicke_split_cycle_shift_expanded___0(qvar);
prepare_dicke_state_unary_input_expanded___1(qvar[1:4]);
}

qfunc prepare_dicke_state_expanded___0(qvar: qbit[4]) {
apply_to_all_expanded___0(qvar[0:1]);
prepare_dicke_state_unary_input_expanded___2(qvar);
}

qfunc initial_state_expanded___0(x: qbit[4]) {
prepare_dicke_state_expanded___0(x[0:4]);
}

qfunc cost_layer_expanded___0(gamma: real, x: qbit[4]) {
phase (((x[0] + (2 * x[1])) - x[2]) + (12 * x[3]), gamma);
}

qfunc mixer_layer_expanded___0(beta: real, x: qbit[4]) {
x_lsbs: qnum<3, False, 0>;
x_msb: qbit;
within {
invert {
initial_state_expanded___0(x);
}
x -> {x_lsbs, x_msb};
X(x_msb);
} apply {
control (x_lsbs == 0) {
RZ((-0.318309886184) * beta, x_msb);
}
}
}

qfunc qaoa_ansatz_expanded___0(gammas: real[3], betas: real[3], qba: qbit[4]) {
repeat (i: 3) {
cost_layer_expanded___0(gammas[i], qba);
mixer_layer_expanded___0(betas[i], qba);
}
}

qfunc main(params: real[6], output x: qbit[4]) {
allocate(4, x);
initial_state_expanded___0(x);
qaoa_ansatz_expanded___0(params[0:3], params[3:6], x);
}
44 changes: 44 additions & 0 deletions algorithms/qaoa/grover_mixer_qaoa/gm_qaoa.synthesis_options.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"constraints": {
"max_gate_count": {},
"optimization_parameter": "no_opt"
},
"preferences": {
"custom_hardware_settings": {
"basis_gates": [
"h",
"rx",
"u",
"s",
"cx",
"sx",
"rz",
"cy",
"t",
"y",
"sdg",
"p",
"id",
"tdg",
"u2",
"z",
"r",
"u1",
"sxdg",
"cz",
"ry",
"x"
],
"is_symmetric_connectivity": true
},
"debug_mode": true,
"machine_precision": 8,
"optimization_level": 1,
"output_format": ["qasm"],
"pretty_qasm": true,
"random_seed": 3858854528,
"synthesize_all_separately": false,
"timeout_seconds": 300,
"transpilation_option": "auto optimize"
}
}
4 changes: 2 additions & 2 deletions applications/optimization/adaptive_qaoa_lib.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -1316,7 +1316,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "adaptiveqaoa",
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
Expand All @@ -1330,7 +1330,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.12"
"version": "3.11.4"
}
},
"nbformat": 4,
Expand Down
20 changes: 20 additions & 0 deletions tests/notebooks/test_gm_qaoa.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from tests.utils_for_testbook import (
validate_quantum_program_size,
validate_quantum_model,
wrap_testbook,
)
from testbook.client import TestbookNotebookClient


@wrap_testbook("gm_qaoa", timeout_seconds=300)
def test_notebook(tb: TestbookNotebookClient) -> None:
# test quantum programs
validate_quantum_program_size(
tb.ref_pydantic("qprog_gmqaoa"),
expected_width=None,
expected_depth=None,
expected_cx_count=None,
)

# test notebook content
pass # Todo
Loading