From 1ed5fb9ec83b7c2f2f5d23d39ed5ff990ba57e9b Mon Sep 17 00:00:00 2001 From: emmawilmott63 Date: Sat, 31 Jan 2026 13:10:38 -0500 Subject: [PATCH 01/13] Energy Comparison Test --- team-submissions/SV.ipynb | 129 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 team-submissions/SV.ipynb diff --git a/team-submissions/SV.ipynb b/team-submissions/SV.ipynb new file mode 100644 index 00000000..7f72c786 --- /dev/null +++ b/team-submissions/SV.ipynb @@ -0,0 +1,129 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "884e5b8d", + "metadata": {}, + "outputs": [], + "source": [ + "# Self-Validation - automating hand calculations (up to small N)\n", + "\n", + "def C_k(s, k):\n", + " N = len(s)\n", + " sum = 0\n", + " for i in range (N-k):\n", + " next = s[i]*s[i+k]\n", + " sum = sum + next\n", + " return sum\n", + "\n", + "def E(s):\n", + " N = len(s)\n", + " sum = 0\n", + " for k in range (1,N):\n", + " next = C_k(s, k)**2\n", + " sum = sum + next\n", + " return sum\n", + "\n", + "from itertools import product\n", + "\n", + "def sequence(N):\n", + " return [list(seq) for seq in product([1, -1], repeat=N)]\n", + "\n", + "def calculate(N):\n", + " Elist = []\n", + " seq = sequence(N)\n", + " for j in range(len(seq)):\n", + " sj = seq[j]\n", + " Ej = E(sj)\n", + " Elist.append(Ej)\n", + " minE = min(Elist)\n", + " mini = [index for index, value in enumerate(Elist) if value == minE]\n", + " print(f\"Optimal Energy: {minE}\")\n", + " print(f\"Number of Optimal Sequences: {len(mini)}\")\n", + " for m in mini:\n", + " print(f\"Optimal Sequence: {seq[m]}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "1917fa7f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimal Energy: 13\n", + "Number of Optimal Sequences: 40\n", + "Optimal Sequence: [1, 1, 1, 1, 1, -1, -1, 1, -1, 1]\n", + "Optimal Sequence: [1, 1, 1, 1, -1, 1, -1, -1, 1, 1]\n", + "Optimal Sequence: [1, 1, 1, 1, -1, -1, 1, 1, -1, 1]\n", + "Optimal Sequence: [1, 1, 1, 1, -1, -1, 1, -1, 1, -1]\n", + "Optimal Sequence: [1, 1, 1, -1, 1, -1, 1, 1, -1, -1]\n", + "Optimal Sequence: [1, 1, 1, -1, -1, 1, 1, -1, 1, -1]\n", + "Optimal Sequence: [1, 1, 1, -1, -1, -1, 1, -1, -1, 1]\n", + "Optimal Sequence: [1, 1, -1, -1, 1, -1, 1, 1, 1, 1]\n", + "Optimal Sequence: [1, 1, -1, -1, 1, -1, 1, -1, -1, -1]\n", + "Optimal Sequence: [1, 1, -1, -1, -1, 1, -1, -1, 1, -1]\n", + "Optimal Sequence: [1, -1, 1, 1, 1, 1, 1, -1, -1, 1]\n", + "Optimal Sequence: [1, -1, 1, 1, -1, 1, 1, 1, -1, -1]\n", + "Optimal Sequence: [1, -1, 1, 1, -1, -1, 1, 1, 1, 1]\n", + "Optimal Sequence: [1, -1, 1, -1, 1, 1, -1, -1, -1, -1]\n", + "Optimal Sequence: [1, -1, 1, -1, -1, 1, 1, 1, 1, 1]\n", + "Optimal Sequence: [1, -1, 1, -1, -1, 1, 1, -1, -1, -1]\n", + "Optimal Sequence: [1, -1, 1, -1, -1, -1, -1, 1, 1, -1]\n", + "Optimal Sequence: [1, -1, -1, 1, 1, 1, 1, 1, -1, 1]\n", + "Optimal Sequence: [1, -1, -1, 1, 1, 1, 1, -1, 1, -1]\n", + "Optimal Sequence: [1, -1, -1, 1, -1, -1, -1, 1, 1, 1]\n", + "Optimal Sequence: [-1, 1, 1, -1, 1, 1, 1, -1, -1, -1]\n", + "Optimal Sequence: [-1, 1, 1, -1, -1, -1, -1, 1, -1, 1]\n", + "Optimal Sequence: [-1, 1, 1, -1, -1, -1, -1, -1, 1, -1]\n", + "Optimal Sequence: [-1, 1, -1, 1, 1, 1, 1, -1, -1, 1]\n", + "Optimal Sequence: [-1, 1, -1, 1, 1, -1, -1, 1, 1, 1]\n", + "Optimal Sequence: [-1, 1, -1, 1, 1, -1, -1, -1, -1, -1]\n", + "Optimal Sequence: [-1, 1, -1, 1, -1, -1, 1, 1, 1, 1]\n", + "Optimal Sequence: [-1, 1, -1, -1, 1, 1, -1, -1, -1, -1]\n", + "Optimal Sequence: [-1, 1, -1, -1, 1, -1, -1, -1, 1, 1]\n", + "Optimal Sequence: [-1, 1, -1, -1, -1, -1, -1, 1, 1, -1]\n", + "Optimal Sequence: [-1, -1, 1, 1, 1, -1, 1, 1, -1, 1]\n", + "Optimal Sequence: [-1, -1, 1, 1, -1, 1, -1, 1, 1, 1]\n", + "Optimal Sequence: [-1, -1, 1, 1, -1, 1, -1, -1, -1, -1]\n", + "Optimal Sequence: [-1, -1, -1, 1, 1, 1, -1, 1, 1, -1]\n", + "Optimal Sequence: [-1, -1, -1, 1, 1, -1, -1, 1, -1, 1]\n", + "Optimal Sequence: [-1, -1, -1, 1, -1, 1, -1, -1, 1, 1]\n", + "Optimal Sequence: [-1, -1, -1, -1, 1, 1, -1, 1, -1, 1]\n", + "Optimal Sequence: [-1, -1, -1, -1, 1, 1, -1, -1, 1, -1]\n", + "Optimal Sequence: [-1, -1, -1, -1, 1, -1, 1, 1, -1, -1]\n", + "Optimal Sequence: [-1, -1, -1, -1, -1, 1, 1, -1, 1, -1]\n" + ] + } + ], + "source": [ + "calculate(10)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 10455acbb3fd7c0abed39356bf3be548c8050604 Mon Sep 17 00:00:00 2001 From: Katie Jones Date: Sat, 31 Jan 2026 13:11:57 -0500 Subject: [PATCH 02/13] Symmetry Validator --- team-submissions/symValidator.py | 131 +++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 team-submissions/symValidator.py diff --git a/team-submissions/symValidator.py b/team-submissions/symValidator.py new file mode 100644 index 00000000..5c32f27d --- /dev/null +++ b/team-submissions/symValidator.py @@ -0,0 +1,131 @@ +'''“We verify correctness by (a) exact enumeration for small N, +(b) symmetry tests mandated by the LABS Hamiltonian (global spin-flip, +reversal, and their combination), +and (c) cross-checks between classical MTS and the +quantum algorithm on small instances. +This mirrors standard practice in quantum-classical algorithm validation where +invariants and small-instance exact checks are used as the ground-truth proxy +when a solution key is not available.” ''' +# CELL: LABS energy function (canonical) +import numpy as np + +def labs_energy(s): + """Compute LABS energy for a sequence s of +/-1 (list or 1D numpy array).""" + s = np.asarray(s, dtype=int) + N = s.size + E = 0 + for k in range(1, N): + Ck = int(np.sum(s[:N-k] * s[k:])) # autocorrelation at shift k + E += Ck * Ck + return int(E) + + +# brute force enumeration for small N +import itertools, pandas as pd + +def brute_force_labs(N): + energies = {} + for bits in itertools.product([-1, 1], repeat=N): + energies[bits] = labs_energy(bits) + # return sorted list of (sequence, energy) + return sorted(energies.items(), key=lambda t: t[1]) + +# run for N=5 +N = 5 +bf = brute_force_labs(N) +print(f"Found {len(bf)} sequences; best energy = {bf[0][1]}") +# show top few +for seq, e in bf[:6]: + print(seq, e) + + +# symmetry positive tests (must pass) +def test_global_flip(s): + assert labs_energy(s) == labs_energy([-x for x in s]), "Global flip symmetry failed" + +def test_reversal(s): + assert labs_energy(s) == labs_energy(list(reversed(s))), "Reversal symmetry failed" + +def test_flip_and_reverse(s): + assert labs_energy(s) == labs_energy([-x for x in reversed(s)]), "Flip+reverse symmetry failed" + +# test on random and canonical sequences +import random +for N in [3,4,5,6]: + for _ in range(10): + s = [random.choice([-1,1]) for _ in range(N)] + test_global_flip(s) + test_reversal(s) + test_flip_and_reverse(s) +print("Positive symmetry tests passed on random samples.") + +#negative tests to catch incorrect assumptions (eg, accidental cyclic autocor) +def cyclic_rotate(s, r): + """Cyclic rotate right by r""" + r = r % len(s) + return s[-r:] + s[:-r] + +# pick a random sequence and check rotation changes energy (for linear LABS) + +s = [1, -1, 1, 1, -1] # example +E_orig = labs_energy(s) +E_rot = labs_energy(cyclic_rotate(s, 1)) +print("orig:",s,"E=",E_orig, "rotated E=", E_rot) +assert E_orig != E_rot, "Rotation did not change energy check whether you accidentally implemented circular autocor!" + +# cross-check classical vs quantum (small N) +# integrate after phase 1 is completed +'''def compare_solvers(N): + bf = brute_force_labs(N) + best_exact_e = bf[0][1] + # run MTS (classical baseline) - placeholder: use your notebook's MTS call + mts_seq, mts_e = run_MTS(N) # must return (sequence, energy) + # run quantum procedure (placeholder) + q_seq, q_e = run_quantum(N) # must return (sequence, energy) + print(f"N={N}: exact={best_exact_e}, MTS={mts_e}, Quantum={q_e}") + return best_exact_e, mts_e, q_e + +# Example call (only for N small where brute force is available) +N = 6 +compare_solvers(N) +''' + +# build orbit under dihedral-like ops +def dihedral_orbit(s): + #the 'shape' is a 1D sequence, so we can't use rotations + s = list(s) + ops = [ + lambda x: x, + lambda x: [-a for a in x], # flip + lambda x: list(reversed(x)), # reverse + lambda x: [-a for a in reversed(x)] # flip+reverse + ] + return {tuple(op(s)) for op in ops} + +# example +s = [1,-1,1,1] +#get all transformations +orbit = dihedral_orbit(s) +print("orbit size:", len(orbit)) +#print energy, should be the same +for seq in orbit: + print(seq, labs_energy(seq)) + +# CELL: small test suite runner +def run_all_tests(): + # smoke tests for small Ns using brute force sequences + for N in range(3,7): + print(f"Testing all symmetries on all {2**N} sequences for N={N}") + bf = brute_force_labs(N) + for seq, e in bf: + test_global_flip(seq) + test_reversal(seq) + test_flip_and_reverse(seq) + # negative test sample + s = [1, -1, 1, 1, -1, 1] + assert labs_energy(s) != labs_energy(cyclic_rotate(s, 1)) + print("All tests passed.") + +# Run the tests +run_all_tests() + From 80ea5eef6af48a9d30966142dc6bda7178c07a1c Mon Sep 17 00:00:00 2001 From: Rebecca922 Date: Sat, 31 Jan 2026 18:35:27 +0000 Subject: [PATCH 03/13] excerise 3 --- ...1_quantum_enhanced_optimization_LABS.ipynb | 94 +++++++++++++++++-- 1 file changed, 86 insertions(+), 8 deletions(-) diff --git a/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb b/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb index f96cb45c..bcaab378 100644 --- a/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb +++ b/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "b1f70ff2-492a-41a4-97db-5da6d5775cb7", "metadata": {}, "outputs": [], @@ -61,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 1, "id": "bfc407dd-113d-485c-88db-7ddbad344ead", "metadata": {}, "outputs": [], @@ -140,7 +140,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "341c9a3f-565c-49ab-9903-0aa9a508722c", "metadata": {}, "outputs": [], @@ -230,12 +230,90 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "c91bbaae-62a1-41e7-a285-af885627a942", "metadata": {}, "outputs": [], "source": [ - "# TODO Write CUDA-Q kernels to apply the 2 and 4 qubit operators. " + "# TODO Write CUDA-Q kernels to apply the 2 and 4 qubit operators.\n", + "# define rzz\n", + "from numpy import pi\n", + "@cudaq.kernel\n", + "def rzz(q0: cudaq.qubit, q1: cudaq.qubit, theta: float):# for pi/2\n", + " x.ctrl(q0, q1) \n", + " rz(theta, q1) \n", + " x.ctrl(q0, q1)\n", + "\n", + "@cudaq.kernel\n", + "def two_qubit_rotation_block(q0: cudaq.qubit, q1: cudaq.qubit, theta: float):\n", + " rx(pi/2.0, q1)\n", + " rzz(q0, q1, theta)\n", + " rx(pi/2.0, q0)\n", + " rx(-pi/2.0, q1)\n", + " rzz(q0, q1, theta)\n", + " rx(-pi/2.0, q0)\n", + "\n", + "@cudaq.kernel\n", + "def four_qubit_rotation_block(q0: cudaq.qubit, q1: cudaq.qubit, q2: cudaq.qubit, q3: cudaq.qubit, theta: float):\n", + " rx(-pi/2.0, q0)\n", + " ry(pi/2.0, q1)\n", + " ry(-pi/2.0, q2)\n", + " \n", + " rzz(q0, q1, -pi/2.0)\n", + " rzz(q2, q3, -pi/2.0)\n", + "\n", + " rx(pi/2.0, q0)\n", + " ry(-pi/2.0, q1) \n", + " ry(pi/2.0, q2)\n", + " rx(-pi/2.0, q3) \n", + "\n", + " rx(-pi/2.0, q1) \n", + " rx(-pi/2.0, q2) \n", + " \n", + " rzz(q1, q2, theta)\n", + "\n", + " rx(pi/2.0, q1) \n", + " rx(pi, q2) \n", + "\n", + " ry(pi/2.0, q1)\n", + " \n", + " rzz(q0, q1, pi/2.0)\n", + " \n", + " rx(pi/2.0, q0)\n", + " ry(-pi/2.0, q2) \n", + " \n", + " rzz(q1, q2, -theta)\n", + " \n", + " rx(pi/2.0, q1)\n", + " rx(-pi, q2) \n", + " \n", + " rzz(q1, q2, -theta)\n", + " \n", + " rx(-pi, q1)\n", + " ry(pi/2.0, q2)\n", + " \n", + " rzz(q2, q3, -pi/2.0)\n", + " \n", + " ry(-pi/2.0, q2) # Ry_dagger\n", + " rx(-pi/2.0, q3)\n", + "\n", + " rx(-pi/2.0, q2)\n", + " \n", + " rzz(q1, q2, theta)\n", + "\n", + " rx(pi/2.0, q1)\n", + " rx(pi/2.0, q2)\n", + " \n", + " ry(-pi/2.0, q1)\n", + " ry(pi/2.0, q2)\n", + " \n", + " rzz(q0, q1, pi/2.0)\n", + " rzz(q2, q3, pi/2.0)\n", + "\n", + " \n", + " ry(pi/2.0, q1)\n", + " ry(-pi/2.0, q2)\n", + " rx(pi/2.0, q3)" ] }, { @@ -420,9 +498,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3 [cuda-q-v0.13.0]", "language": "python", - "name": "python3" + "name": "python3_tl48" }, "language_info": { "codemirror_mode": { @@ -434,7 +512,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.3" + "version": "3.11.9" } }, "nbformat": 4, From 803566a940641f06ee032fe00bc5dfb41e498718 Mon Sep 17 00:00:00 2001 From: Katie Jones Date: Sat, 31 Jan 2026 14:04:45 -0500 Subject: [PATCH 04/13] Updated energy function --- team-submissions/SV.ipynb | 121 +++++++++++++++++++++++++++----------- 1 file changed, 86 insertions(+), 35 deletions(-) diff --git a/team-submissions/SV.ipynb b/team-submissions/SV.ipynb index 7f72c786..378bae17 100644 --- a/team-submissions/SV.ipynb +++ b/team-submissions/SV.ipynb @@ -2,52 +2,105 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "884e5b8d", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "N= 10 best energy= 13 count= 40\n", + "[1, 1, 1, 1, 1, -1, -1, 1, -1, 1]\n", + "[1, 1, 1, 1, -1, 1, -1, -1, 1, 1]\n", + "[1, 1, 1, 1, -1, -1, 1, 1, -1, 1]\n", + "[1, 1, 1, 1, -1, -1, 1, -1, 1, -1]\n", + "[1, 1, 1, -1, 1, -1, 1, 1, -1, -1]\n", + "[1, 1, 1, -1, -1, 1, 1, -1, 1, -1]\n", + "[1, 1, 1, -1, -1, -1, 1, -1, -1, 1]\n", + "[1, 1, -1, -1, 1, -1, 1, 1, 1, 1]\n", + "[1, 1, -1, -1, 1, -1, 1, -1, -1, -1]\n", + "[1, 1, -1, -1, -1, 1, -1, -1, 1, -1]\n", + "[1, -1, 1, 1, 1, 1, 1, -1, -1, 1]\n", + "[1, -1, 1, 1, -1, 1, 1, 1, -1, -1]\n", + "[1, -1, 1, 1, -1, -1, 1, 1, 1, 1]\n", + "[1, -1, 1, -1, 1, 1, -1, -1, -1, -1]\n", + "[1, -1, 1, -1, -1, 1, 1, 1, 1, 1]\n", + "[1, -1, 1, -1, -1, 1, 1, -1, -1, -1]\n", + "[1, -1, 1, -1, -1, -1, -1, 1, 1, -1]\n", + "[1, -1, -1, 1, 1, 1, 1, 1, -1, 1]\n", + "[1, -1, -1, 1, 1, 1, 1, -1, 1, -1]\n", + "[1, -1, -1, 1, -1, -1, -1, 1, 1, 1]\n", + "[-1, 1, 1, -1, 1, 1, 1, -1, -1, -1]\n", + "[-1, 1, 1, -1, -1, -1, -1, 1, -1, 1]\n", + "[-1, 1, 1, -1, -1, -1, -1, -1, 1, -1]\n", + "[-1, 1, -1, 1, 1, 1, 1, -1, -1, 1]\n", + "[-1, 1, -1, 1, 1, -1, -1, 1, 1, 1]\n", + "[-1, 1, -1, 1, 1, -1, -1, -1, -1, -1]\n", + "[-1, 1, -1, 1, -1, -1, 1, 1, 1, 1]\n", + "[-1, 1, -1, -1, 1, 1, -1, -1, -1, -1]\n", + "[-1, 1, -1, -1, 1, -1, -1, -1, 1, 1]\n", + "[-1, 1, -1, -1, -1, -1, -1, 1, 1, -1]\n", + "[-1, -1, 1, 1, 1, -1, 1, 1, -1, 1]\n", + "[-1, -1, 1, 1, -1, 1, -1, 1, 1, 1]\n", + "[-1, -1, 1, 1, -1, 1, -1, -1, -1, -1]\n", + "[-1, -1, -1, 1, 1, 1, -1, 1, 1, -1]\n", + "[-1, -1, -1, 1, 1, -1, -1, 1, -1, 1]\n", + "[-1, -1, -1, 1, -1, 1, -1, -1, 1, 1]\n", + "[-1, -1, -1, -1, 1, 1, -1, 1, -1, 1]\n", + "[-1, -1, -1, -1, 1, 1, -1, -1, 1, -1]\n", + "[-1, -1, -1, -1, 1, -1, 1, 1, -1, -1]\n", + "[-1, -1, -1, -1, -1, 1, 1, -1, 1, -1]\n" + ] + } + ], "source": [ - "# Self-Validation - automating hand calculations (up to small N)\n", + "from itertools import product\n", "\n", "def C_k(s, k):\n", " N = len(s)\n", - " sum = 0\n", - " for i in range (N-k):\n", - " next = s[i]*s[i+k]\n", - " sum = sum + next\n", - " return sum\n", + " total = 0\n", + " for i in range(N - k):\n", + " total += s[i] * s[i + k]\n", + " return total\n", "\n", "def E(s):\n", " N = len(s)\n", - " sum = 0\n", - " for k in range (1,N):\n", - " next = C_k(s, k)**2\n", - " sum = sum + next\n", - " return sum\n", - "\n", - "from itertools import product\n", + " total = 0\n", + " for k in range(1, N):\n", + " ck = C_k(s, k)\n", + " total += ck * ck\n", + " return total\n", "\n", - "def sequence(N):\n", - " return [list(seq) for seq in product([1, -1], repeat=N)]\n", + "def brute_force_sequences(N):\n", + " # generator that yields (seq_list, energy)\n", + " for seq in product([1, -1], repeat=N):\n", + " seq_list = list(seq)\n", + " yield seq_list, E(seq_list)\n", "\n", "def calculate(N):\n", - " Elist = []\n", - " seq = sequence(N)\n", - " for j in range(len(seq)):\n", - " sj = seq[j]\n", - " Ej = E(sj)\n", - " Elist.append(Ej)\n", - " minE = min(Elist)\n", - " mini = [index for index, value in enumerate(Elist) if value == minE]\n", - " print(f\"Optimal Energy: {minE}\")\n", - " print(f\"Number of Optimal Sequences: {len(mini)}\")\n", - " for m in mini:\n", - " print(f\"Optimal Sequence: {seq[m]}\")\n" + " best_energy = None\n", + " best_seqs = []\n", + " for seq, energy in brute_force_sequences(N):\n", + " if best_energy is None or energy < best_energy:\n", + " best_energy = energy\n", + " best_seqs = [seq]\n", + " elif energy == best_energy:\n", + " best_seqs.append(seq)\n", + " return best_energy, best_seqs\n", + "\n", + "# Example usage:\n", + "if __name__ == \"__main__\":\n", + " N = 10\n", + " best_energy, best_seqs = calculate(N)\n", + " print(\"N=\", N, \"best energy=\", best_energy, \"count=\", len(best_seqs))\n", + " for seq in best_seqs:\n", + " print(seq)\n" ] }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 2, "id": "1917fa7f", "metadata": {}, "outputs": [ @@ -100,14 +153,12 @@ ] } ], - "source": [ - "calculate(10)" - ] + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "base", "language": "python", "name": "python3" }, @@ -121,7 +172,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.4" + "version": "3.12.7" } }, "nbformat": 4, From 5c35b2b05b8a84a3dba59ba7d45c31cfc733ea58 Mon Sep 17 00:00:00 2001 From: Siryouka Date: Sat, 31 Jan 2026 19:03:44 +0000 Subject: [PATCH 05/13] exercise 2 --- ...1_quantum_enhanced_optimization_LABS.ipynb | 330 +++++++++++++++++- 1 file changed, 328 insertions(+), 2 deletions(-) diff --git a/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb b/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb index bcaab378..4527caf6 100644 --- a/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb +++ b/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb @@ -145,7 +145,333 @@ "metadata": {}, "outputs": [], "source": [ - "#TODO - Write code to perform MTS" + "#TODO - Write code to perform MTS\n", + "import numpy as np\n", + "import time\n", + "import matplotlib.pyplot as plt\n", + "import itertools\n", + "\n", + "# ============================================================\n", + "# 1) LABS objective for ±1 sequences\n", + "# ============================================================\n", + "\n", + "def pm1_to_bits01(s_pm1: np.ndarray) -> np.ndarray:\n", + " return ((s_pm1 + 1) // 2).astype(np.int8)\n", + "\n", + "def bits01_to_pm1(bits01) -> np.ndarray:\n", + " x = np.array(bits01, dtype=np.int8)\n", + " return (2*x - 1).astype(np.int8) # 0->-1, 1->+1\n", + "\n", + "def labs_correlations_pm1(s: np.ndarray) -> np.ndarray:\n", + " \"\"\"C[k-1] = C_k for k=1..N-1, C_k = sum_i s[i]*s[i+k].\"\"\"\n", + " N = s.size\n", + " C = np.empty(N-1, dtype=np.int32)\n", + " for k in range(1, N):\n", + " C[k-1] = int(np.dot(s[:-k], s[k:]))\n", + " return C\n", + "\n", + "def labs_energy_from_C(C: np.ndarray) -> int:\n", + " C64 = C.astype(np.int64)\n", + " return int(np.sum(C64*C64))\n", + "\n", + "def labs_energy_pm1(s: np.ndarray) -> int:\n", + " return labs_energy_from_C(labs_correlations_pm1(s))\n", + "\n", + "def aperiodic_autocorr_full(s_pm1: np.ndarray) -> np.ndarray:\n", + " \"\"\"lags = -(N-1)..+(N-1)\"\"\"\n", + " N = len(s_pm1)\n", + " out = []\n", + " for lag in range(-(N-1), N):\n", + " if lag < 0:\n", + " out.append(int(np.dot(s_pm1[-lag:], s_pm1[:N+lag])))\n", + " elif lag == 0:\n", + " out.append(int(np.dot(s_pm1, s_pm1)))\n", + " else:\n", + " out.append(int(np.dot(s_pm1[:-lag], s_pm1[lag:])))\n", + " return np.array(out, dtype=int)\n", + "\n", + "# ============================================================\n", + "# 2) Algorithm 3: Combine & Mutate (as in your screenshot)\n", + "# ============================================================\n", + "\n", + "def combine_alg3(p1: np.ndarray, p2: np.ndarray, rng: np.random.Generator) -> np.ndarray:\n", + " N = p1.size\n", + " k = int(rng.integers(1, N)) # k in {1,...,N-1}\n", + " child = np.empty_like(p1)\n", + " child[:k] = p1[:k]\n", + " child[k:] = p2[k:]\n", + " return child\n", + "\n", + "def mutate_alg3(s: np.ndarray, p_mut: float, rng: np.random.Generator) -> np.ndarray:\n", + " out = s.copy()\n", + " if p_mut <= 0.0:\n", + " return out\n", + " mask = rng.random(out.size) < p_mut\n", + " out[mask] *= -1\n", + " return out\n", + "\n", + "# ============================================================\n", + "# 3) Tabu Search (single-bit flip neighborhood)\n", + "# - aspiration: allow tabu move if it improves best found in this tabu run\n", + "# - candidate_size: evaluate subset of flips each step (CPU-friendly)\n", + "# ============================================================\n", + "\n", + "def delta_energy_single_flip_pm1(s: np.ndarray, C: np.ndarray, E: int, j: int):\n", + " \"\"\"\n", + " After flipping s[j], update correlations deltaC and energy E_new.\n", + " Flip affects C_k terms that involve index j:\n", + " (j, j+k) and (j-k, j) when in bounds.\n", + " Each affected product changes sign => delta contribution = -2*old_term.\n", + " \"\"\"\n", + " N = s.size\n", + " sj = int(s[j])\n", + " deltaC = np.zeros_like(C, dtype=np.int32)\n", + "\n", + " for k in range(1, N):\n", + " d = 0\n", + " jp = j + k\n", + " jm = j - k\n", + " if jp < N:\n", + " d += sj * int(s[jp])\n", + " if jm >= 0:\n", + " d += int(s[jm]) * sj\n", + " if d != 0:\n", + " deltaC[k-1] = -2 * d\n", + "\n", + " C64 = C.astype(np.int64)\n", + " d64 = deltaC.astype(np.int64)\n", + " dE = int(np.sum(2*C64*d64 + d64*d64))\n", + " return E + dE, deltaC\n", + "\n", + "def tabu_search_pm1(\n", + " s0: np.ndarray,\n", + " max_iters: int = 1000,\n", + " tabu_tenure: int = 30,\n", + " candidate_size: int = 64,\n", + " rng: np.random.Generator | None = None,\n", + "):\n", + " if rng is None:\n", + " rng = np.random.default_rng()\n", + "\n", + " s = s0.copy()\n", + " C = labs_correlations_pm1(s)\n", + " E = labs_energy_from_C(C)\n", + "\n", + " best_s = s.copy()\n", + " best_E = int(E)\n", + "\n", + " N = s.size\n", + " tabu_until = np.zeros(N, dtype=np.int32)\n", + "\n", + " for it in range(1, max_iters + 1):\n", + " # choose candidate flip indices\n", + " if candidate_size >= N:\n", + " candidates = np.arange(N)\n", + " else:\n", + " candidates = rng.choice(N, size=candidate_size, replace=False)\n", + "\n", + " chosen_j = None\n", + " chosen_E = None\n", + " chosen_dC = None\n", + "\n", + " # pick best admissible (tabu allowed only if aspiration)\n", + " for j in candidates:\n", + " E_new, dC = delta_energy_single_flip_pm1(s, C, E, int(j))\n", + " is_tabu = tabu_until[j] > it\n", + " if is_tabu and (E_new >= best_E):\n", + " continue\n", + " if (chosen_E is None) or (E_new < chosen_E):\n", + " chosen_j, chosen_E, chosen_dC = int(j), int(E_new), dC\n", + "\n", + " # if all were blocked, ignore tabu\n", + " if chosen_j is None:\n", + " for j in candidates:\n", + " E_new, dC = delta_energy_single_flip_pm1(s, C, E, int(j))\n", + " if (chosen_E is None) or (E_new < chosen_E):\n", + " chosen_j, chosen_E, chosen_dC = int(j), int(E_new), dC\n", + "\n", + " # apply flip\n", + " s[chosen_j] *= -1\n", + " C += chosen_dC\n", + " E = chosen_E\n", + "\n", + " # update tabu tenure (with slight randomness)\n", + " tenure = tabu_tenure + int(rng.integers(0, max(1, tabu_tenure // 3)))\n", + " tabu_until[chosen_j] = it + tenure\n", + "\n", + " if E < best_E:\n", + " best_E = int(E)\n", + " best_s = s.copy()\n", + "\n", + " return best_s, best_E\n", + "\n", + "# ============================================================\n", + "# 4) MTS main loop (matches your diagram)\n", + "# ============================================================\n", + "\n", + "def mts_labs_pm1(\n", + " N: int,\n", + " pop_size: int = 32,\n", + " p_combine: float = 0.7,\n", + " p_mut: float = 1.0/50.0,\n", + " mts_iters: int = 1000,\n", + " tabu_iters: int = 800,\n", + " tabu_tenure: int = 30,\n", + " candidate_size: int = 64,\n", + " target_E: int | None = None,\n", + " seed: int = 0,\n", + " verbose_every: int = 100,\n", + "):\n", + " rng = np.random.default_rng(seed)\n", + "\n", + " # init population: k random bitstrings\n", + " pop = rng.choice(np.array([-1, 1], dtype=np.int8), size=(pop_size, N))\n", + " pop_E = np.array([labs_energy_pm1(pop[i]) for i in range(pop_size)], dtype=np.int64)\n", + "\n", + " best_idx = int(np.argmin(pop_E))\n", + " best_s = pop[best_idx].copy()\n", + " best_E = int(pop_E[best_idx])\n", + "\n", + " trace = [best_E]\n", + " t0 = time.time()\n", + "\n", + " for it in range(1, mts_iters + 1):\n", + " if target_E is not None and best_E <= target_E:\n", + " break\n", + "\n", + " # ---- Make Child ----\n", + " if rng.random() < p_combine:\n", + " i1, i2 = rng.integers(0, pop_size, size=2)\n", + " child = combine_alg3(pop[i1], pop[i2], rng)\n", + " else:\n", + " i = int(rng.integers(0, pop_size))\n", + " child = pop[i].copy()\n", + "\n", + " # ---- Mutate Child ----\n", + " child = mutate_alg3(child, p_mut, rng)\n", + "\n", + " # ---- Tabu Search with Child ----\n", + " result_s, result_E = tabu_search_pm1(\n", + " child,\n", + " max_iters=tabu_iters,\n", + " tabu_tenure=tabu_tenure,\n", + " candidate_size=candidate_size,\n", + " rng=rng,\n", + " )\n", + "\n", + " # ---- Update best solution ----\n", + " if result_E < best_E:\n", + " best_E = int(result_E)\n", + " best_s = result_s.copy()\n", + "\n", + " # ---- Add result to Population ----\n", + " # randomly replace a member if result is better\n", + " r = int(rng.integers(0, pop_size))\n", + " if result_E < pop_E[r]:\n", + " pop[r] = result_s\n", + " pop_E[r] = result_E\n", + "\n", + " # (optional, helpful) elitism: keep global best in population\n", + " worst = int(np.argmax(pop_E))\n", + " if best_E < pop_E[worst]:\n", + " pop[worst] = best_s\n", + " pop_E[worst] = best_E\n", + "\n", + " trace.append(best_E)\n", + "\n", + " if verbose_every and (it % verbose_every == 0):\n", + " print(f\"[MTS {it:5d}] best_E={best_E} elapsed={time.time()-t0:.2f}s\")\n", + "\n", + " return {\n", + " \"best_s_pm1\": best_s,\n", + " \"best_s_01\": pm1_to_bits01(best_s),\n", + " \"best_E\": best_E,\n", + " \"best_trace\": np.array(trace, dtype=np.int64),\n", + " \"population_pm1\": pop,\n", + " \"population_E\": pop_E.copy(),\n", + " \"elapsed_sec\": time.time() - t0,\n", + " }\n", + "\n", + "# ============================================================\n", + "# 5) Visualization: best curve + final population energy distribution\n", + "# ============================================================\n", + "\n", + "def visualize_mts(res: dict):\n", + " print(\"Best E:\", res[\"best_E\"])\n", + " print(\"Best bitstring (0/1):\", \"\".join(map(str, res[\"best_s_01\"].tolist())))\n", + " print(\"Elapsed (s):\", f\"{res['elapsed_sec']:.3f}\")\n", + "\n", + " trace = res[\"best_trace\"]\n", + " popE = res[\"population_E\"]\n", + "\n", + " plt.figure()\n", + " plt.plot(trace)\n", + " plt.xlabel(\"MTS iteration\")\n", + " plt.ylabel(\"Best-so-far Energy E\")\n", + " plt.title(\"MTS Best-so-far Curve\")\n", + " plt.show()\n", + "\n", + " plt.figure()\n", + " plt.hist(popE, bins=20)\n", + " plt.xlabel(\"Energy E\")\n", + " plt.ylabel(\"Count\")\n", + " plt.title(\"Final Population Energy Distribution\")\n", + " plt.show()\n", + "\n", + "# ============================================================\n", + "# (Bonus) N=7: show a very good and very poor sequence difference\n", + "# ============================================================\n", + "\n", + "def brute_best_worst_N7():\n", + " N = 7\n", + " rows = []\n", + " for bits in itertools.product([0,1], repeat=N):\n", + " s = bits01_to_pm1(bits)\n", + " E = labs_energy_pm1(s)\n", + " rows.append((bits, E))\n", + " minE = min(E for _,E in rows)\n", + " maxE = max(E for _,E in rows)\n", + " good = [b for b,E in rows if E==minE][0]\n", + " bad = [b for b,E in rows if E==maxE][0]\n", + "\n", + " def show(bits, title):\n", + " s = bits01_to_pm1(bits)\n", + " C = labs_correlations_pm1(s)\n", + " E = labs_energy_pm1(s)\n", + " ac = aperiodic_autocorr_full(s)\n", + " print(f\"--- {title} ---\")\n", + " print(\"bits:\", \"\".join(map(str,bits)))\n", + " print(\"E:\", E)\n", + " print(\"Ck k=1..6:\", C.tolist())\n", + " print(\"aperiodic autocorr lags -6..+6:\", ac.tolist())\n", + " print()\n", + "\n", + " print(\"N=7 global minE and maxE (by brute force):\", minE, maxE)\n", + " show(good, \"Very good (global optimal)\")\n", + " show(bad, \"Very poor (max energy)\")\n", + " \n", + "# ============================================================\n", + "# Example runs\n", + "# ============================================================\n", + "\n", + "# 1) N=7 demo (good vs poor)\n", + "brute_best_worst_N7()\n", + "\n", + "# 2) Run MTS (CPU baseline) - start small\n", + "N = 64\n", + "res = mts_labs_pm1(\n", + " N=N,\n", + " pop_size=32,\n", + " p_combine=0.7,\n", + " p_mut=1.0/50.0,\n", + " mts_iters=400,\n", + " tabu_iters=800,\n", + " tabu_tenure=30,\n", + " candidate_size=64,\n", + " seed=42,\n", + " verbose_every=50,\n", + ")\n", + "visualize_mts(res)\n" ] }, { @@ -500,7 +826,7 @@ "kernelspec": { "display_name": "Python 3 [cuda-q-v0.13.0]", "language": "python", - "name": "python3_tl48" + "name": "python3_p93b" }, "language_info": { "codemirror_mode": { From 9e8efd00e8c910a0db5010960544796efc86e8a6 Mon Sep 17 00:00:00 2001 From: Siryouka Date: Sat, 31 Jan 2026 19:45:59 +0000 Subject: [PATCH 06/13] exercise 4 --- ...1_quantum_enhanced_optimization_LABS.ipynb | 83 ++++++++++++++++--- 1 file changed, 72 insertions(+), 11 deletions(-) diff --git a/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb b/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb index 4527caf6..037dd156 100644 --- a/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb +++ b/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb @@ -688,23 +688,84 @@ "metadata": {}, "outputs": [], "source": [ - "def get_interactions(N):\n", + "def get_interactions(N: int):\n", " \"\"\"\n", - " Generates the interaction sets G2 and G4 based on the loop limits in Eq. 15.\n", + " Generates the interaction sets G2 and G4 based on the loop limits in Eq.15 (noted in the notebook).\n", " Returns standard 0-based indices as lists of lists of ints.\n", - " \n", + "\n", " Args:\n", " N (int): Sequence length.\n", - " \n", + "\n", " Returns:\n", - " G2: List of lists containing two body term indices\n", - " G4: List of lists containing four body term indices\n", + " G2: List of [i, i+k] two-body index pairs (0-based).\n", + " G4: List of [i, i+t, i+k, i+k+t] four-body index quadruples (0-based).\n", " \"\"\"\n", - " \n", - " #TODO - complete the loops below to compute G2 and G4 indicies\n", - "\n", - " \n", - " return G2, G4" + " if not isinstance(N, int) or N < 4:\n", + " # N must be at least 4 for non-empty G4; G2 exists for N>=3, but we choose N>=4 here as safe min.\n", + " raise ValueError(\"N must be an integer >= 4\")\n", + "\n", + " G2 = []\n", + " G4 = []\n", + "\n", + " # --- Build G2 ---\n", + " # 1-based loops in the guide: i = 1..N-2, k = 1..floor((N-i)/2)\n", + " # Convert to 0-based: i0 = i-1 in range(0, N-2), k runs 1..floor((N-(i))/2)\n", + " for i0 in range(0, N - 2): # i0 corresponds to i=1..N-2\n", + " max_k = (N - (i0 + 1)) // 2 # floor((N-i)/2) where i = i0+1\n", + " for k in range(1, max_k + 1):\n", + " j0 = i0 + k\n", + " # sanity: ensure indices inside [0, N-1]\n", + " if 0 <= j0 < N:\n", + " G2.append([i0, j0])\n", + "\n", + " # --- Build G4 ---\n", + " # 1-based loops in the guide: i = 1..N-3, t = 1..floor((N-i-1)/2), k = t+1..N-i-t\n", + " # Convert to 0-based: i0 in 0..N-4, t,k as below.\n", + " for i0 in range(0, N - 3): # i0 corresponds to i=1..N-3\n", + " max_t = (N - (i0 + 1) - 1) // 2 # floor((N-i-1)/2) with i=i0+1\n", + " for t in range(1, max_t + 1):\n", + " # k loop (1-based): k = t+1 .. N - i - t\n", + " # convert bounds to 0-based arithmetic: iterate over k in that integer range\n", + " k_min = t + 1\n", + " k_max = (N - (i0 + 1) - t) # inclusive in 1-based formula\n", + " # k_min..k_max (both inclusive) in 1-based; iterate accordingly\n", + " for k in range(k_min, k_max + 1):\n", + " # map to 0-based indices for the four-body term:\n", + " # (i, i+t, i+k, i+k+t) in 1-based -> subtract 1 for 0-based:\n", + " a = i0\n", + " b = i0 + t\n", + " c = i0 + k\n", + " d = i0 + k + t\n", + " # ensure within bounds\n", + " if 0 <= a < N and 0 <= b < N and 0 <= c < N and 0 <= d < N:\n", + " G4.append([a, b, c, d])\n", + "\n", + " # --- Sanity checks (counts) ---\n", + " # expected_G2_len = sum_{i=1}^{N-2} floor((N-i)/2)\n", + " expected_G2 = sum(((N - i) // 2) for i in range(1, N - 1))\n", + " # expected_G4_len = sum_{i=1}^{N-3} sum_{t=1}^{floor((N-i-1)/2)} (N - i - 2*t)\n", + " expected_G4 = 0\n", + " for i in range(1, N - 2):\n", + " max_t = (N - i - 1) // 2\n", + " for t in range(1, max_t + 1):\n", + " expected_G4 += max(0, N - i - 2 * t)\n", + "\n", + " assert len(G2) == expected_G2, f\"G2 length mismatch: got {len(G2)}, expected {expected_G2}\"\n", + " assert len(G4) == expected_G4, f\"G4 length mismatch: got {len(G4)}, expected {expected_G4}\"\n", + "\n", + " return G2, G4\n", + "\n", + "# -------------------------\n", + "# Quick usage example / smoke test:\n", + "# -------------------------\n", + "if __name__ == \"__main__\":\n", + " for Ntest in [6, 7, 8, 10]:\n", + " G2, G4 = get_interactions(Ntest)\n", + " print(f\"N={Ntest}: |G2|={len(G2)}, |G4|={len(G4)}\")\n", + " # print a few examples\n", + " print(\" G2 sample:\", G2[:6])\n", + " print(\" G4 sample:\", G4[:6])\n", + " print(\"-\" * 40)\n" ] }, { From 53459c2812dc266db0e8d6864fc22b10cf40281a Mon Sep 17 00:00:00 2001 From: Siryouka Date: Sat, 31 Jan 2026 20:02:50 +0000 Subject: [PATCH 07/13] sanitation --- ...1_quantum_enhanced_optimization_LABS.ipynb | 37 ++++++++----------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb b/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb index 037dd156..b6d31f3f 100644 --- a/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb +++ b/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb @@ -151,9 +151,7 @@ "import matplotlib.pyplot as plt\n", "import itertools\n", "\n", - "# ============================================================\n", "# 1) LABS objective for ±1 sequences\n", - "# ============================================================\n", "\n", "def pm1_to_bits01(s_pm1: np.ndarray) -> np.ndarray:\n", " return ((s_pm1 + 1) // 2).astype(np.int8)\n", @@ -190,9 +188,9 @@ " out.append(int(np.dot(s_pm1[:-lag], s_pm1[lag:])))\n", " return np.array(out, dtype=int)\n", "\n", - "# ============================================================\n", + "\n", "# 2) Algorithm 3: Combine & Mutate (as in your screenshot)\n", - "# ============================================================\n", + "\n", "\n", "def combine_alg3(p1: np.ndarray, p2: np.ndarray, rng: np.random.Generator) -> np.ndarray:\n", " N = p1.size\n", @@ -210,11 +208,10 @@ " out[mask] *= -1\n", " return out\n", "\n", - "# ============================================================\n", "# 3) Tabu Search (single-bit flip neighborhood)\n", "# - aspiration: allow tabu move if it improves best found in this tabu run\n", "# - candidate_size: evaluate subset of flips each step (CPU-friendly)\n", - "# ============================================================\n", + "\n", "\n", "def delta_energy_single_flip_pm1(s: np.ndarray, C: np.ndarray, E: int, j: int):\n", " \"\"\"\n", @@ -305,9 +302,8 @@ "\n", " return best_s, best_E\n", "\n", - "# ============================================================\n", + "\n", "# 4) MTS main loop (matches your diagram)\n", - "# ============================================================\n", "\n", "def mts_labs_pm1(\n", " N: int,\n", @@ -392,9 +388,8 @@ " \"elapsed_sec\": time.time() - t0,\n", " }\n", "\n", - "# ============================================================\n", + "\n", "# 5) Visualization: best curve + final population energy distribution\n", - "# ============================================================\n", "\n", "def visualize_mts(res: dict):\n", " print(\"Best E:\", res[\"best_E\"])\n", @@ -418,9 +413,9 @@ " plt.title(\"Final Population Energy Distribution\")\n", " plt.show()\n", "\n", - "# ============================================================\n", - "# (Bonus) N=7: show a very good and very poor sequence difference\n", - "# ============================================================\n", + "\n", + "# N=7: show a very good and very poor sequence difference\n", + "\n", "\n", "def brute_best_worst_N7():\n", " N = 7\n", @@ -450,9 +445,9 @@ " show(good, \"Very good (global optimal)\")\n", " show(bad, \"Very poor (max energy)\")\n", " \n", - "# ============================================================\n", + "\n", "# Example runs\n", - "# ============================================================\n", + "\n", "\n", "# 1) N=7 demo (good vs poor)\n", "brute_best_worst_N7()\n", @@ -707,7 +702,7 @@ " G2 = []\n", " G4 = []\n", "\n", - " # --- Build G2 ---\n", + " # Build G2\n", " # 1-based loops in the guide: i = 1..N-2, k = 1..floor((N-i)/2)\n", " # Convert to 0-based: i0 = i-1 in range(0, N-2), k runs 1..floor((N-(i))/2)\n", " for i0 in range(0, N - 2): # i0 corresponds to i=1..N-2\n", @@ -718,7 +713,7 @@ " if 0 <= j0 < N:\n", " G2.append([i0, j0])\n", "\n", - " # --- Build G4 ---\n", + " # Build G4\n", " # 1-based loops in the guide: i = 1..N-3, t = 1..floor((N-i-1)/2), k = t+1..N-i-t\n", " # Convert to 0-based: i0 in 0..N-4, t,k as below.\n", " for i0 in range(0, N - 3): # i0 corresponds to i=1..N-3\n", @@ -740,7 +735,7 @@ " if 0 <= a < N and 0 <= b < N and 0 <= c < N and 0 <= d < N:\n", " G4.append([a, b, c, d])\n", "\n", - " # --- Sanity checks (counts) ---\n", + " # Sanity checks (counts)\n", " # expected_G2_len = sum_{i=1}^{N-2} floor((N-i)/2)\n", " expected_G2 = sum(((N - i) // 2) for i in range(1, N - 1))\n", " # expected_G4_len = sum_{i=1}^{N-3} sum_{t=1}^{floor((N-i-1)/2)} (N - i - 2*t)\n", @@ -755,9 +750,9 @@ "\n", " return G2, G4\n", "\n", - "# -------------------------\n", - "# Quick usage example / smoke test:\n", - "# -------------------------\n", + "\n", + "# Quick usage example/smoke test:\n", + "\n", "if __name__ == \"__main__\":\n", " for Ntest in [6, 7, 8, 10]:\n", " G2, G4 = get_interactions(Ntest)\n", From 9bf3064fa8df4da7eb472c5f603c4f26a8f28e76 Mon Sep 17 00:00:00 2001 From: Katie Jones Date: Sat, 31 Jan 2026 15:24:14 -0500 Subject: [PATCH 08/13] sym update before integration with exercises --- team-submissions/symValidator.py | 77 +++++++++++++++++--------------- 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/team-submissions/symValidator.py b/team-submissions/symValidator.py index 5c32f27d..f4b08979 100644 --- a/team-submissions/symValidator.py +++ b/team-submissions/symValidator.py @@ -6,7 +6,8 @@ This mirrors standard practice in quantum-classical algorithm validation where invariants and small-instance exact checks are used as the ground-truth proxy when a solution key is not available.” ''' -# CELL: LABS energy function (canonical) +# symValidator.py +#LABS energy function (canonical) import numpy as np def labs_energy(s): @@ -21,7 +22,7 @@ def labs_energy(s): # brute force enumeration for small N -import itertools, pandas as pd +import itertools def brute_force_labs(N): energies = {} @@ -30,14 +31,6 @@ def brute_force_labs(N): # return sorted list of (sequence, energy) return sorted(energies.items(), key=lambda t: t[1]) -# run for N=5 -N = 5 -bf = brute_force_labs(N) -print(f"Found {len(bf)} sequences; best energy = {bf[0][1]}") -# show top few -for seq, e in bf[:6]: - print(seq, e) - # symmetry positive tests (must pass) def test_global_flip(s): @@ -51,28 +44,12 @@ def test_flip_and_reverse(s): # test on random and canonical sequences import random -for N in [3,4,5,6]: - for _ in range(10): - s = [random.choice([-1,1]) for _ in range(N)] - test_global_flip(s) - test_reversal(s) - test_flip_and_reverse(s) -print("Positive symmetry tests passed on random samples.") - #negative tests to catch incorrect assumptions (eg, accidental cyclic autocor) def cyclic_rotate(s, r): """Cyclic rotate right by r""" r = r % len(s) return s[-r:] + s[:-r] -# pick a random sequence and check rotation changes energy (for linear LABS) - -s = [1, -1, 1, 1, -1] # example -E_orig = labs_energy(s) -E_rot = labs_energy(cyclic_rotate(s, 1)) -print("orig:",s,"E=",E_orig, "rotated E=", E_rot) -assert E_orig != E_rot, "Rotation did not change energy check whether you accidentally implemented circular autocor!" - # cross-check classical vs quantum (small N) # integrate after phase 1 is completed '''def compare_solvers(N): @@ -102,14 +79,6 @@ def dihedral_orbit(s): ] return {tuple(op(s)) for op in ops} -# example -s = [1,-1,1,1] -#get all transformations -orbit = dihedral_orbit(s) -print("orbit size:", len(orbit)) -#print energy, should be the same -for seq in orbit: - print(seq, labs_energy(seq)) # CELL: small test suite runner def run_all_tests(): @@ -127,5 +96,41 @@ def run_all_tests(): print("All tests passed.") # Run the tests -run_all_tests() - +if __name__ == "__main__": + # run for N=5 + N = 5 + bf = brute_force_labs(N) + print(f"Found {len(bf)} sequences; best energy = {bf[0][1]}") + # show top few + for seq, e in bf[:6]: + print(seq, e) + + # symmetry smoke tests on random sequences + for N in [3, 4, 5, 6]: + for _ in range(10): + s = [random.choice([-1, 1]) for _ in range(N)] + test_global_flip(s) + test_reversal(s) + test_flip_and_reverse(s) + print("Positive symmetry tests passed on random samples.") + + # pick a random sequence and check rotation changes energy (for linear LABS) + s = [1, -1, 1, 1, -1] # example + E_orig = labs_energy(s) + E_rot = labs_energy(cyclic_rotate(s, 1)) + print("orig:", s, "E=", E_orig, "rotated E=", E_rot) + assert E_orig != E_rot, ( + "Rotation did not change energy check whether you accidentally implemented circular autocor!" + ) + + # dihedral orbit demo + s = [1, -1, 1, 1] + # get all transformations + orbit = dihedral_orbit(s) + print("orbit size:", len(orbit)) + # print energy, should be the same + for seq in orbit: + print(seq, labs_energy(seq)) + + # Run the tests + run_all_tests() \ No newline at end of file From 9f8c9d65af5351be31202fa73323ddcda36900a6 Mon Sep 17 00:00:00 2001 From: Rebecca922 Date: Sat, 31 Jan 2026 21:00:32 +0000 Subject: [PATCH 09/13] ex3 update + ex 5 --- ...1_quantum_enhanced_optimization_LABS.ipynb | 122 +++++++++++++++--- 1 file changed, 107 insertions(+), 15 deletions(-) diff --git a/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb b/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb index b6d31f3f..156e81f3 100644 --- a/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb +++ b/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 13, "id": "b1f70ff2-492a-41a4-97db-5da6d5775cb7", "metadata": {}, "outputs": [], @@ -61,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 14, "id": "bfc407dd-113d-485c-88db-7ddbad344ead", "metadata": {}, "outputs": [], @@ -140,10 +140,61 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 15, "id": "341c9a3f-565c-49ab-9903-0aa9a508722c", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "N=7 global minE and maxE (by brute force): 3 91\n", + "--- Very good (global optimal) ---\n", + "bits: 0001101\n", + "E: 3\n", + "Ck k=1..6: [0, -1, 0, -1, 0, -1]\n", + "aperiodic autocorr lags -6..+6: [-1, 0, -1, 0, -1, 0, 7, 0, -1, 0, -1, 0, -1]\n", + "\n", + "--- Very poor (max energy) ---\n", + "bits: 0000000\n", + "E: 91\n", + "Ck k=1..6: [6, 5, 4, 3, 2, 1]\n", + "aperiodic autocorr lags -6..+6: [1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1]\n", + "\n", + "[MTS 50] best_E=372 elapsed=56.05s\n", + "[MTS 100] best_E=372 elapsed=112.10s\n", + "[MTS 150] best_E=368 elapsed=168.20s\n", + "[MTS 200] best_E=316 elapsed=224.17s\n", + "[MTS 250] best_E=316 elapsed=280.15s\n", + "[MTS 300] best_E=316 elapsed=335.95s\n", + "[MTS 350] best_E=316 elapsed=391.85s\n", + "[MTS 400] best_E=316 elapsed=447.77s\n", + "Best E: 316\n", + "Best bitstring (0/1): 1001001011011011101010001000100101010010000001111100001110011100\n", + "Elapsed (s): 447.774\n" + ] + }, + { + "data": { + "image/png": "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cOzYMXWEqKKOHTuGzp07623r3Lkzjh07pretdevW6s/29vZwcnJCenq6QeciorvjpGoiqjIvvPACRowYAQB3nfNTEY0bN0bjxo3x4osvYty4cXjggQewYsWKSl2GA26GGgD47bffUL9+fb19NjY2eu/t7e313o8ePRoJCQmYOXMmmjRpAjs7OzzzzDPIz8+vVC3lsbKy0nuvKAqKioqq5FxE5oqBiIiqTFhYGPLz86EoCkJDQ412XF9fX9SuXRtXr16tUHtra2sAQGFhobrN398fNjY2OHPmDB599FGDzr9jxw4MGjQITz31FICb4erUqVMlznn7+UrTokUL7NixAzExMXrH9vf3N6geIrp3DEREVGVq1aqlXv6pVatWpY4xceJEXLt2DREREfDx8UFmZibmzZuHgoICdO/evULH8PHxgaIoWLNmDSIiImBnZwdHR0eMHj0ao0aNQlFRER555BFkZWVhx44dcHJy0gspd2ratClWrlyJyMhIKIqC8ePHlxix8fX1xbZt2xAVFQUbG5tSLxeOGTMG/fr1Q9u2bRESEoJff/0VK1eu1FuxRkT3B+cQEVGVcnJygpOTU6U//+ijj+Lff//FwIED0bx5c4SHh0Or1WL9+vVo1qxZhY5Rv359TJo0Ce+88w7c3d3Vy3jvv/8+xo8fjylTpqBFixYICwvDb7/9Bj8/v7seb9asWXBxcUGnTp0QGRmJ0NBQtGvXTq/Ne++9h1OnTqFx48aoV69eqcfp3bs35s6di5kzZ6Jly5b47LPPEB8fj27dulWoX0RkPIoQQsgugoiIiEgmjhARERGR2WMgIiIiIrPHQERERERmj4GIiIiIzB4DEREREZk9BiIiIiIyewxEREREZPYYiIiIiMjsMRARERGR2WMgIiIiIrPHQERERERmj4GIiIiIzN7/A15Tq4bFrpx9AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAN21JREFUeJzt3Xd8VFX+//H3QGCAkEkCaURKQlCkSBExoFJFQmTpLIu4FAV1/QIKuKtkRQFZDSsK6C7luxZAEbEBuqKwdF2EKGBgo0v9BqUmtCTUUHJ+f/jI/BhSCCHJzMHX8/G4j0fuuWfu/dwzN8k7t0wcxhgjAAAAC5XzdgEAAADFRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkIFP2rt3rxwOh+bOnVuq24mKitKQIUNKdRtlYe7cuXI4HNq7d2+JrbOs3gNcv9J4/wsyZMgQRUVFuedzj5NXXnml1LctSRMmTJDD4SiTbcEOBBl4Re4P3vymsWPHeru8PC6vr1y5coqMjFTnzp21du1ab5d23RYsWKDp06d7uwwPQ4YMKfD4qFSpkrfLK1Vr16712F+n06nw8HC1b99eL730ko4cOVIi2zlz5owmTJjgk8ewL9cG3+Pn7QLw6/bCCy8oOjrao61x48aqU6eOzp49qwoVKnipsrzuu+8+DRo0SMYYpaamaubMmerYsaOWLl2q+Ph4b5dXbAsWLFBKSopGjRrl0e7t98DpdOrNN9/M016+fHkvVFP2nnjiCbVs2VKXLl3SkSNH9M0332j8+PGaOnWqPvzwQ3Xs2NHdd+DAgerfv7+cTmeR13/mzBlNnDhRktS+ffsiv+6NN95QTk5OkfsXR2G1jRs3zif/2IH3EGTgVfHx8brjjjvyXeZrf3nfcsst+v3vf++e79Wrl5o0aaLp06dbHWQK4u2zH35+fh7j7U2nT5+Wv79/mW6zTZs26tu3r0fb1q1b1blzZ/Xp00c//vijatSoIemXcFfaAS93DLz9x4Wfn5/8/PjVhf+PS0vwSfndnzFkyBBVrVpVBw4cUM+ePVW1alWFhobqj3/8oy5duuTx+ldeeUV33XWXqlevrsqVK6tFixb6+OOPS7TG2267TSEhIUpNTXW3rV69Wm3atJG/v7+CgoLUo0cP/fe///V4Xe41/u3bt6tfv35yuVyqXr26nnzySZ07d67QMcjlcDg0YcKEQuv79NNP1bVrV0VGRsrpdComJkaTJk3yGKv27dtr6dKl+umnn9yXMnLvfyho+9eyj7t379aQIUMUFBSkwMBAPfTQQzpz5kyhdV+L3EuU69ev15gxYxQaGip/f3/16tUr30swX375pbv2gIAAde3aVT/88INHn9zjbM+ePbr//vsVEBCgBx98UJJ09uxZPfHEEwoJCVFAQIC6d++uAwcOeLwfa9askcPh0OLFi/Nsf8GCBXI4HNqwYUOx9rdp06aaPn26MjIy9Pe//z3POFx+j8ymTZsUFxenkJAQVa5cWdHR0Xr44Ycl/fLehoaGSpImTpzofu9z96GwMbjyHpnLTZs2TXXq1FHlypXVrl07paSkeCxv3759vmd/Ll/n1WrL7x6ZixcvatKkSYqJiZHT6VRUVJT+/Oc/Kzs726NfVFSUfvOb3+jf//637rzzTlWqVEl169bVO++8k/+AwwrEWnhVZmamjh496tEWEhJSYP9Lly4pLi5OsbGxeuWVV7Ry5Uq9+uqriomJ0eOPP+7u99prr6l79+568MEHdf78eS1cuFC//e1v9fnnn6tr164lUvuJEyd04sQJ1atXT5K0cuVKxcfHq27dupowYYLOnj2rv/3tb7r77ru1ZcuWPD/8+/Xrp6ioKCUmJmrjxo16/fXXdeLEiRL7oTp37lxVrVpVY8aMUdWqVbV69Wo9//zzysrK0pQpUyRJzz77rDIzM7V//35NmzZNklS1atUC11mcfYyOjlZiYqK2bNmiN998U2FhYfrrX/9apH248tiQpIoVK8rlcnm0jRw5UsHBwRo/frz27t2r6dOna8SIEfrggw/cfd59910NHjxYcXFx+utf/6ozZ85o1qxZuueee/T999971H7x4kXFxcXpnnvu0SuvvKIqVapI+uUX7ocffqiBAweqVatWWrduXZ7jqX379qpVq5bee+899erVy2PZe++9p5iYGLVu3bpI+5+fvn37aujQofrXv/6lF198Md8+6enp6ty5s0JDQzV27FgFBQVp7969WrRokSQpNDRUs2bN0uOPP65evXqpd+/ekqQmTZpcdQwK8s477+jkyZMaPny4zp07p9dee00dO3bUf/7zH4WHhxd5/4pS25WGDRumefPmqW/fvnrqqaeUlJSkxMRE/fe//80TKHfv3u0ew8GDB+vtt9/WkCFD1KJFCzVq1KjIdcKHGMAL5syZYyTlOxljTGpqqpFk5syZ437N4MGDjSTzwgsveKyrefPmpkWLFh5tZ86c8Zg/f/68ady4senYsaNHe506dczgwYOvWq8kM3ToUHPkyBGTnp5ukpKSzL333mskmVdffdUYY0yzZs1MWFiYOXbsmPt1W7duNeXKlTODBg1yt40fP95IMt27d/fYxv/8z/8YSWbr1q0FjsHl9YwfP949nzueqampBY6BMcY89thjpkqVKubcuXPutq5du5o6derk6Zvf9q91Hx9++GGPdfbq1ctUr149z7aulPte5zfFxcXl2e9OnTqZnJwcd/vo0aNN+fLlTUZGhjHGmJMnT5qgoCDzyCOPeGzn8OHDJjAw0KM9d9tjx4716Lt582YjyYwaNcqjfciQIXnej4SEBON0Ot3bN8aY9PR04+fn59EvP2vWrDGSzEcffVRgn6ZNm5rg4OA845D7/i9evNhIMt99912B6zhy5EieunMVNAa5yy4/XnKPk8qVK5v9+/e725OSkowkM3r0aHdbu3btTLt27a66zsJqyz22ciUnJxtJZtiwYR79/vjHPxpJZvXq1e62OnXqGEnmq6++crelp6cbp9NpnnrqqTzbgh24tASvmjFjhlasWOExXc0f/vAHj/k2bdro//7v/zzaKleu7P76xIkTyszMVJs2bbRly5Zi1/rWW28pNDRUYWFhio2NdV/OGDVqlA4dOqTk5GQNGTJE1apVc7+mSZMmuu+++/TFF1/kWd/w4cM95keOHClJ+fYtjsvH4OTJkzp69KjatGmjM2fOaPv27de8vuLsY37v1bFjx5SVlXXV7VWqVCnPsbFixQpNnjw5T99HH33U43JDmzZtdOnSJf3000+SpBUrVigjI0MPPPCAjh496p7Kly+v2NhYrVmzJs86Lz/DJ0nLli2TJP3P//yPR3vu+3a5QYMGKTs72+Ny5gcffKCLFy+WyH0/VatW1cmTJwtcHhQUJEn6/PPPdeHChWJv58oxKEzPnj110003uefvvPNOxcbGltjxXJDc9Y8ZM8aj/amnnpIkLV261KO9YcOGatOmjXs+NDRU9evXz/MzBPbg0hK86s477yzwZt/8VKpUyX39PFdwcLBOnDjh0fb555/rL3/5i5KTkz2uk1/P50/06NFDI0aMkMPhUEBAgBo1auS+ATT3F2b9+vXzvK5BgwZavnx5nhtGb775Zo9+MTExKleuXIl9FsgPP/ygcePGafXq1XmCQ2Zm5jWvrzj7WLt2bY9+wcHBkn4Jl1deHrpS+fLl1alTpyLVVth2JGnXrl2S5PGkz+WurMXPz081a9b0aPvpp59Urly5PE/Z5V5avNytt96qli1b6r333tPQoUMl/XJZqVWrVvn2v1anTp1SQEBAgcvbtWunPn36aOLEiZo2bZrat2+vnj17asCAAUV+sim/MSjMlcez9MsN8h9++GGR11Ecue/LleMaERGhoKAg93Gb68pjRcr/ZwjsQZCBVYryZMbXX3+t7t27q23btpo5c6Zq1KihChUqaM6cOVqwYEGxt12zZs0i/2ItjitDVkGh68obm/OTkZGhdu3ayeVy6YUXXlBMTIwqVaqkLVu26Jlnnin1x2dzFfR+GWPKdDu5+/vuu+8qIiIiT78rn4JxOp0qV+76TlgPGjRITz75pPbv36/s7Gxt3LjR4wbd4rpw4YJ27typxo0bF9jH4XDo448/1saNG/XPf/5Ty5cv18MPP6xXX31VGzduLPQ+qFwlMQb51ZXfe1+UY7oo6y6KsjomUXYIMrjhfPLJJ6pUqZKWL1/u8dfnnDlzSm2bderUkSTt2LEjz7Lt27crJCQkz+O7u3bt8vjrfvfu3crJyXHfdJp7ViEjI8PjdVf+hZmftWvX6tixY1q0aJHatm3rbr/8CatcRf0FUJx99BUxMTGSpLCwsGKH0Tp16ignJ0epqakeZx92796db//+/ftrzJgxev/9992fx/O73/2uWNu+3Mcff6yzZ88qLi7uqn1btWqlVq1a6cUXX9SCBQv04IMPauHChRo2bFiJfzpu7lmvy+3cudPjJurg4OB8L+FceUxfS22578uuXbvUoEEDd3taWpoyMjLcxy1uXNwjgxtO+fLl5XA4PP7K27t3r5YsWVJq26xRo4aaNWumefPmeQSPlJQU/etf/9L999+f5zUzZszwmP/b3/4mSe7PpHG5XAoJCdFXX33l0W/mzJlXrSf3r87L/8o8f/58vq/19/cv0qWm4uyjr4iLi5PL5dJLL72U7z0jRfm03NzgcOUY5r5vVwoJCVF8fLzmz5+v9957T126dCn0ibyi2Lp1q0aNGqXg4OA891hd7sSJE3nOMDRr1kyS3Jdac59CujIoF9eSJUt04MAB9/y3336rpKQkj89YiomJ0fbt2z3Ge+vWrVq/fr3Huq6lttzj7spPp546daokldhTivBdnJHBDadr166aOnWqunTpogEDBig9PV0zZsxQvXr1tG3btlLb7pQpUxQfH6/WrVtr6NCh7keTAwMD8/3Ml9TUVHXv3l1dunTRhg0bNH/+fA0YMEBNmzZ19xk2bJgmT56sYcOG6Y477tBXX32lnTt3XrWWu+66S8HBwRo8eLCeeOIJORwOvfvuu/mePm/RooU++OADjRkzRi1btlTVqlXVrVu3EtnH63Hx4kXNnz8/32W9evW6prM/LpdLs2bN0sCBA3X77berf//+Cg0N1c8//6ylS5fq7rvvvuplnxYtWqhPnz6aPn26jh075n78Ovf9yO8swqBBg9wfajdp0qQi1yv9con03LlzunTpko4dO6b169frs88+U2BgoBYvXpzvJbJc8+bN08yZM9WrVy/FxMTo5MmTeuONN+Ryudy/+CtXrqyGDRvqgw8+0C233KJq1aqpcePGhV6yKky9evV0zz336PHHH1d2dramT5+u6tWr6+mnn3b3efjhhzV16lTFxcVp6NChSk9P1+zZs9WoUSOP+7iupbamTZtq8ODB+sc//uG+pPrtt99q3rx56tmzpzp06FCs/YFFvPjEFH7Fch8XLejx0IIev/b398/T98rHMY0x5q233jI333yzcTqd5tZbbzVz5szJt9+1PH49fPjwq/ZbuXKlufvuu03lypWNy+Uy3bp1Mz/++GO+9f7444+mb9++JiAgwAQHB5sRI0aYs2fPevQ9c+aMGTp0qAkMDDQBAQGmX79+Jj09vUiPX69fv960atXKVK5c2URGRpqnn37aLF++3Egya9ascfc7deqUGTBggAkKCjKS3I/BFvT497Xs45EjRzza86szP4U9fn356ws6jnIfYb58P3Pb4+LiTGBgoKlUqZKJiYkxQ4YMMZs2bfLYdn7HmTHGnD592gwfPtxUq1bNVK1a1fTs2dPs2LHDSDKTJ0/O0z87O9sEBwebwMDAPO9tQXJrz50qVKhgQkNDTdu2bc2LL75o0tPT87zmynHdsmWLeeCBB0zt2rWN0+k0YWFh5je/+Y3HfhpjzDfffGNatGhhKlas6HFMFTYGBT1+PWXKFPPqq6+aWrVqGafTadq0aeP+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Llyo06dPq3Xr1tf02smTJ6t69epq3ry5pkyZoosXLxbYNz09XUlJSQoLC9Ndd92l8PBwtWvXTv/+97+vdxesUFbjLEl33XWXPvjgAx0/flw5OTlauHChzp07p/bt21/HHtihOOO8ZcsWHThwQOXKlVPz5s1Vo0YNxcfHKyUlpcDXpKam6vDhw+rUqZO7LTAwULGxsdqwYcN174evK6txzk9mZqYcDsev5v/eleVY5+TkaODAgfrTn/6kRo0alUT59vF2kkLRbdu2zfj7+5vy5cubwMBAs3Tp0jx9CjtT8Oqrr5o1a9aYrVu3mlmzZpmgoCAzevToAre3YcMGI8lUq1bNvP3222bLli1m1KhRpmLFimbnzp0luWs+pazH2RhjTpw4YTp37mwkGT8/P+Nyuczy5ctLapd80vWM8/vvv28kmdq1a5uPP/7YbNq0yTzwwAOmevXq5tixY/lub/369UaSOXjwoEf7b3/7W9OvX78S2y9fU9bjfKWzZ8+a22+/3QwYMKAkdseneWOsX3rpJXPfffeZnJwcY0zxzgjbjiBjkezsbLNr1y6zadMmM3bsWBMSEmJ++OEHjz6F/YK90ltvvWX8/PzMuXPn8l2e+4M/ISHBo/22224zY8eOLfZ++LqyHmdjjBkxYoS58847zcqVK01ycrKZMGGCCQwMNNu2bbve3fFZ1zPO7733npFk/vd//9fddu7cORMSEmJmz56d7/Z+rUGmrMf5cufPnzfdunUzzZs3N5mZmSWyP76srMd606ZNJjw83Bw4cMDd9msMMlxaskjFihVVr149tWjRQomJiWratKlee+21Yq8vNjZWFy9e1N69e/NdXqNGDUlSw4YNPdobNGign3/+udjb9XVlPc579uzR3//+d7399tu699571bRpU40fP1533HGHZsyYUezt+rrrGef8jk2n06m6desWeGxGRERIktLS0jza09LS3MtuRGU9zrkuXLigfv366aefftKKFSvkcrmKvxOWKOux/vrrr5Wenq7atWvLz89Pfn5++umnn/TUU08pKirquvfHFgQZi+Xk5Cg7O7vYr09OTla5cuUUFhaW7/KoqChFRkZqx44dHu07d+5UnTp1ir1d25T2OJ85c0aS8jwJVr58eeXk5BR7u7a5lnFu0aKFnE6nx7F54cIF7d27t8BjMzo6WhEREVq1apW7LSsr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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "#TODO - Write code to perform MTS\n", "import numpy as np\n", @@ -551,14 +602,13 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 20, "id": "c91bbaae-62a1-41e7-a285-af885627a942", "metadata": {}, "outputs": [], "source": [ "# TODO Write CUDA-Q kernels to apply the 2 and 4 qubit operators.\n", "# define rzz\n", - "from numpy import pi\n", "@cudaq.kernel\n", "def rzz(q0: cudaq.qubit, q1: cudaq.qubit, theta: float):# for pi/2\n", " x.ctrl(q0, q1) \n", @@ -567,6 +617,7 @@ "\n", "@cudaq.kernel\n", "def two_qubit_rotation_block(q0: cudaq.qubit, q1: cudaq.qubit, theta: float):\n", + " pi = np.pi\n", " rx(pi/2.0, q1)\n", " rzz(q0, q1, theta)\n", " rx(pi/2.0, q0)\n", @@ -576,6 +627,7 @@ "\n", "@cudaq.kernel\n", "def four_qubit_rotation_block(q0: cudaq.qubit, q1: cudaq.qubit, q2: cudaq.qubit, q3: cudaq.qubit, theta: float):\n", + " pi = np.pi\n", " rx(-pi/2.0, q0)\n", " ry(pi/2.0, q1)\n", " ry(-pi/2.0, q2)\n", @@ -678,10 +730,33 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "id": "abf34168-42f9-4dbf-86e1-99976232ad7e", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "N=6: |G2|=6, |G4|=7\n", + " G2 sample: [[0, 1], [0, 2], [1, 2], [1, 3], [2, 3], [3, 4]]\n", + " G4 sample: [[0, 1, 2, 3], [0, 1, 3, 4], [0, 1, 4, 5], [0, 2, 3, 5], [1, 2, 3, 4], [1, 2, 4, 5]]\n", + "----------------------------------------\n", + "N=7: |G2|=9, |G4|=13\n", + " G2 sample: [[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [2, 3]]\n", + " G4 sample: [[0, 1, 2, 3], [0, 1, 3, 4], [0, 1, 4, 5], [0, 1, 5, 6], [0, 2, 3, 5], [0, 2, 4, 6]]\n", + "----------------------------------------\n", + "N=8: |G2|=12, |G4|=22\n", + " G2 sample: [[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [1, 4]]\n", + " G4 sample: [[0, 1, 2, 3], [0, 1, 3, 4], [0, 1, 4, 5], [0, 1, 5, 6], [0, 1, 6, 7], [0, 2, 3, 5]]\n", + "----------------------------------------\n", + "N=10: |G2|=20, |G4|=50\n", + " G2 sample: [[0, 1], [0, 2], [0, 3], [0, 4], [1, 2], [1, 3]]\n", + " G4 sample: [[0, 1, 2, 3], [0, 1, 3, 4], [0, 1, 4, 5], [0, 1, 5, 6], [0, 1, 6, 7], [0, 1, 7, 8]]\n", + "----------------------------------------\n" + ] + } + ], "source": [ "def get_interactions(N: int):\n", " \"\"\"\n", @@ -791,12 +866,25 @@ " \n", " reg = cudaq.qvector(N)\n", " h(reg)\n", - " \n", - " # TODO - write the full kernel to apply the trotterized circuit\n", - "\n", - "\n", - " \n", "\n", + " nums_g2 = len(G2)\n", + " nums_g4 = len(G4)\n", + " items = nums_g2 + nums_g4\n", + " \n", + " for n in range(steps): # fomula:[1, n]\n", + " step_offset = step * items\n", + " for i in range(nums_g2):\n", + " pair = G2[i] # fomula:[1,N-2] for i and # [1,(N - i) // 2 ] for k\n", + " theta = thetas[step_offset + i]\n", + " two_qubit_rotation_block(reg[pair[0]], reg[pair[1]], theta)\n", + " \n", + " for j in range(nums_g4):#[1,N-3] for j;#[1,(N-i-1)/2] for t and #[t+1,N-i-t]for k\n", + " quad = G4[j]\n", + " theta = thetas[step_offset + nums_g2 + j] # for in utils.compute_theta, the pair appair before quad\n", + " four_qubit_rotation_block(reg[quad[0]], reg[quad[1]], reg[quad[2]], reg[quad[3]], theta) \n", + " mz(reg)\n", + "\n", + "# test it\n", "T=1 # total time\n", "n_steps = 1 # number of trotter steps\n", "dt = T / n_steps\n", @@ -810,7 +898,11 @@ " theta_val = utils.compute_theta(t, dt, T, N, G2, G4)\n", " thetas.append(theta_val)\n", "\n", - "# TODO - Sample your kernel to make sure it works" + "# TODO - Sample your kernel to make sure it works\n", + "counts = cudaq.sample(trotterized_circuit, N, G2, G4, n_steps, dt, T, thetas)\n", + "\n", + "print(\"Completed!\")\n", + "print(counts.most_probable())" ] }, { @@ -882,7 +974,7 @@ "kernelspec": { "display_name": "Python 3 [cuda-q-v0.13.0]", "language": "python", - "name": "python3_p93b" + "name": "python3_tl48" }, "language_info": { "codemirror_mode": { From 336b78d9678e79d1924090b827ea0cd08dbad1c6 Mon Sep 17 00:00:00 2001 From: Katie Jones Date: Sat, 31 Jan 2026 16:10:15 -0500 Subject: [PATCH 10/13] Validation in exercises --- ...1_quantum_enhanced_optimization_LABS.ipynb | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb b/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb index 156e81f3..5cc6b139 100644 --- a/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb +++ b/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb @@ -968,6 +968,95 @@ "\n", "In this section, explain how you verified your results. Did you calculate solutions by hand for small N? Did you create unit tests? Did you cross-reference your Quantum energy values against your Classical MTS results? Did you check known symmetries?" ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d34db9f4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--- Starting Validation Suite for N = 7 ---\n" + ] + }, + { + "ename": "NameError", + "evalue": "name 'labs_energy_pm1' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[3], line 60\u001b[0m\n\u001b[0;32m 57\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Expected: 2, Got: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00me_barker\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m (Match: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00me_barker\u001b[38;5;250m \u001b[39m\u001b[38;5;241m==\u001b[39m\u001b[38;5;250m \u001b[39m\u001b[38;5;241m2\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m)\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 59\u001b[0m \u001b[38;5;66;03m# Run the validation\u001b[39;00m\n\u001b[1;32m---> 60\u001b[0m validation_suite()\n", + "Cell \u001b[1;32mIn[3], line 12\u001b[0m, in \u001b[0;36mvalidation_suite\u001b[1;34m(N_val)\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[38;5;66;03m# 1. Symmetry Checks\u001b[39;00m\n\u001b[0;32m 8\u001b[0m \u001b[38;5;66;03m# LABS energy should be invariant under:\u001b[39;00m\n\u001b[0;32m 9\u001b[0m \u001b[38;5;66;03m# - Bit-flip: s -> -s\u001b[39;00m\n\u001b[0;32m 10\u001b[0m \u001b[38;5;66;03m# - Reversal: s_i -> s_{N-i+1}\u001b[39;00m\n\u001b[0;32m 11\u001b[0m test_seq \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39mchoice( [\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m1\u001b[39m], size \u001b[38;5;241m=\u001b[39m N_val)\n\u001b[1;32m---> 12\u001b[0m energy_orig \u001b[38;5;241m=\u001b[39m labs_energy_pm1(test_seq )\n\u001b[0;32m 14\u001b[0m \u001b[38;5;66;03m# Bit-flip symmetry\u001b[39;00m\n\u001b[0;32m 15\u001b[0m energy_flip \u001b[38;5;241m=\u001b[39m labs_energy_pm1(\u001b[38;5;241m-\u001b[39mtest_seq )\n", + "\u001b[1;31mNameError\u001b[0m: name 'labs_energy_pm1' is not defined" + ] + } + ], + "source": [ + "import unittest\n", + "import numpy as np\n", + "\n", + "def validation_suite(N_val = 7):\n", + " print(f\"--- Starting Validation Suite for N = {N_val} ---\")\n", + " \n", + " # 1. Symmetry Checks\n", + " # LABS energy should be invariant under:\n", + " # - Bit-flip: s -> -s\n", + " # - Reversal: s_i -> s_{N-i+1}\n", + " test_seq = np.random.choice( [-1, 1], size = N_val)\n", + " energy_orig = labs_energy_pm1(test_seq )\n", + " \n", + " # Bit-flip symmetry\n", + " energy_flip = labs_energy_pm1(-test_seq )\n", + " # Reversal symmetry\n", + " energy_rev = labs_energy_pm1(test_seq[::-1])\n", + " # Combined symmetry: Bit-flip + Reversal\n", + " energy_both = labs_energy_pm1(-test_seq[::-1])\n", + " \n", + " print(f\"Symmetry Check:\")\n", + " print(f\" Original Energy: {energy_orig}\")\n", + " print(f\" Bit-flip Energy: {energy_flip} (Match: {energy_orig == energy_flip})\")\n", + " print(f\" Reversal Energy: {energy_rev} (Match: {energy_orig == energy_rev})\")\n", + " print(f\" Both Match: {energy_both } (Match: {energy_orig == energy_both})\")\n", + "\n", + " # 2. CUDA-Q vs Classical Cross-Reference\n", + " # We sample the quantum kernel and ensure the bitstrings produced \n", + " # are evaluated correctly by the classical energy function.\n", + " print(f\"\\nQuantum-Classical Cross-Reference:\")\n", + " # Using small parameters for quick validation\n", + " G2_v, G4_v = get_interactions(N_val)\n", + " # Ensure thetas matches the step count used in the test\n", + " test_steps = 1\n", + " test_thetas = [0.5] # Dummy theta for structural test\n", + " \n", + " # Use cudaq.sample to get the distribution\n", + " counts = cudaq.sample( trotterized_circuit, N_val, G2_v, G4_v, test_steps, 1.0, 1.0, test_thetas)\n", + " \n", + " # Updated: Robust way to get the most frequent bitstring\n", + " # counts.items() returns a list of (bitstring, count) tuples\n", + " sample_bitstring = max(counts.items() , key=lambda item: item[1])[0]\n", + " \n", + " # Convert bitstring '0101...' to pm1 array\n", + " s_sample = bits01_to_pm1( np.array([ int(b) for b in sample_bitstring] ))\n", + " energy_sample = labs_energy_pm1(s_sample )\n", + " print(f\" Sampled Bitstring: {sample_bitstring} \")\n", + " print(f\" Computed Energy: {energy_sample}\")\n", + " print(f\" Status: Success (Kernel produced valid measurable state)\")\n", + "\n", + " # 3. Small n Hand-Verification (N=4)\n", + " # For N=4, the Barker sequence [1, 1, 1, -1] has energy 2.\n", + " # C1=1, C2=0 , C3=-1 -> 1^2 + 0^2 + (-1)^2 =2\n", + " s_barker = np.array([1, 1, 1, -1])\n", + " e_barker = labs_energy_pm1( s_barker)\n", + " print(f\"\\nKnown Solution Verification (N=4 Barker):\")\n", + " print(f\" Expected: 2, Got: {e_barker} (Match: {e_barker == 2})\")\n", + "\n", + "# Run the validation\n", + "validation_suite()" + ] } ], "metadata": { From 85a5ad119c5e38e5b0937bd0d180ed47a48252b4 Mon Sep 17 00:00:00 2001 From: Rebecca922 Date: Sat, 31 Jan 2026 23:57:29 +0000 Subject: [PATCH 11/13] all ex --- ...1_quantum_enhanced_optimization_LABS.ipynb | 461 ++++++++++++++++-- 1 file changed, 419 insertions(+), 42 deletions(-) diff --git a/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb b/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb index 5cc6b139..bf2ae230 100644 --- a/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb +++ b/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 13, + "execution_count": 2, "id": "b1f70ff2-492a-41a4-97db-5da6d5775cb7", "metadata": {}, "outputs": [], @@ -61,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 3, "id": "bfc407dd-113d-485c-88db-7ddbad344ead", "metadata": {}, "outputs": [], @@ -140,7 +140,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 4, "id": "341c9a3f-565c-49ab-9903-0aa9a508722c", "metadata": {}, "outputs": [ @@ -161,17 +161,17 @@ "Ck k=1..6: [6, 5, 4, 3, 2, 1]\n", "aperiodic autocorr lags -6..+6: [1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1]\n", "\n", - "[MTS 50] best_E=372 elapsed=56.05s\n", - "[MTS 100] best_E=372 elapsed=112.10s\n", - "[MTS 150] best_E=368 elapsed=168.20s\n", - "[MTS 200] best_E=316 elapsed=224.17s\n", - "[MTS 250] best_E=316 elapsed=280.15s\n", - "[MTS 300] best_E=316 elapsed=335.95s\n", - "[MTS 350] best_E=316 elapsed=391.85s\n", - "[MTS 400] best_E=316 elapsed=447.77s\n", + "[MTS 50] best_E=372 elapsed=54.16s\n", + "[MTS 100] best_E=372 elapsed=108.37s\n", + "[MTS 150] best_E=368 elapsed=162.49s\n", + "[MTS 200] best_E=316 elapsed=216.62s\n", + "[MTS 250] best_E=316 elapsed=270.59s\n", + "[MTS 300] best_E=316 elapsed=324.42s\n", + "[MTS 350] best_E=316 elapsed=378.45s\n", + "[MTS 400] best_E=316 elapsed=432.39s\n", "Best E: 316\n", "Best bitstring (0/1): 1001001011011011101010001000100101010010000001111100001110011100\n", - "Elapsed (s): 447.774\n" + "Elapsed (s): 432.393\n" ] }, { @@ -240,7 +240,7 @@ " return np.array(out, dtype=int)\n", "\n", "\n", - "# 2) Algorithm 3: Combine & Mutate (as in your screenshot)\n", + "# 2) Algorithm 3: Combine & Mutate \n", "\n", "\n", "def combine_alg3(p1: np.ndarray, p2: np.ndarray, rng: np.random.Generator) -> np.ndarray:\n", @@ -520,6 +520,123 @@ "visualize_mts(res)\n" ] }, + { + "cell_type": "code", + "execution_count": 13, + "id": "bb31d339-f315-4fcb-9fe9-99b2f523e081", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Best E Found: 10\n", + "First reached at iteration: 1\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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Y5bdMrt6uSS16dhMVWtWvOj7rlG3ilped7X1/umnh76gRQv+UJ361WUEBWnvrv1aufRfbV6/XcOevsvnx3xlpn6T2qpWu5J1MbVXx72j3Tv2qmTp4vpmzk8XfH97/pgo3di3kz56+/Rndaf87xTndl2v8Toa6q8zn3gQfzJBa1dv1OLvl8jlclvr+997s1q1b3LB+zkZd0pta9+sKjUrqF6jmipWoojCwkP11x//6OSJeGu76PzpYbZYbFHr65+/+13/9/hkFSgco4KFY2z7eEG7f4bP/pmTpPtve1INm9aRERSkm2673vpEBV9q1K2iFm0b6/eFyyVJb7z0oXZt36sqNSro1x/Tr14uSQMfuCVLZx8AQHYidANADqnToLpad2imxd+fPvK5ad02TRz9lqTTwe3sozU5JX9MlN6e/aIG3ThcJ+JOKTkpxfrs4zOCgoL0xPNDM716cZFihVS8VFF99NbnGdb1G3Kz13vIb7mzu96e9JH1x/mmtdu0ae02BQUFqVX7pl5XyM6KISP7W2HI4/Ho42lfSpLyRUao0w1tNP/LRT5v16F7a706bro8Ho88Ho/enTxL0unTny8UurPjMbNDZlcvl04fmb6U0C1Jr304Vrddf7/Wrt4kj8ejn775TT99k/nZBP54adoz1ud0m6apz//3olRoqFPN2zSyrlydWZi6477eVug+41LDaWafeBAc7NBDT9+lBx6/06/7O7Ov+1KvUU01aVXfWu50Qxvr90NSYrKmvviBJKlKzQq2hO6ChWNUuFhBW3+G6zeto6IlCltvufnh61+ssxiatmpw3tAtSa9+OEZ92t+rTetOP4bffv6zvv38Z69trr+xre5/fEAWpwaA7MNLfQCQg96e/YIGDu2joiUKy+kMUblKpfXoc/fppWlP53RrlibX1NeP/3yqu4fdpio1Kyg8IkxOZ4hiyxTXDbd20le/vat7Hs78Ik+hYU599tObGvTgrdbR4opVy2r0pBF67rVHvLYtXLSgZi98W206NlO+yAhF5AtX8zaN9NnPb6lb78w/1iozjVvU00ffva6GTesoNNSp6PyRatupub787V1Vq5X5R27VrFdVr388TrXrV/Pr84zPuNTHLDcqXLSgvl7ygcZPeUzN2zRSwcIxcjgcisgXrkrVyunGvp302oznNHhEP7/vu27DGvryt3d17fUtlC8y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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "def visualize_classical_mts_results(mts_res):\n", + " \"\"\"\n", + " Visualizes the optimization path and population distribution \n", + " with a 'Quantum Vibe' aesthetic.\n", + " \"\"\"\n", + " # 1. Extraction and Search Logic\n", + " trace = mts_res[\"best_trace\"]\n", + " pop_e = mts_res[\"population_E\"]\n", + " best_e = mts_res[\"best_E\"]\n", + "\n", + "#Dynamically find the first iteration index where the best energy was hit\n", + "#Using np.where is faster and cleaner for finding the first occurrence\n", + " iteration_indices = np.where(trace == best_e)[0]\n", + " best_iteration = iteration_indices[0] if iteration_indices.size > 0 else 0\n", + "\n", + " print(f\"Best E Found: {best_e}\")\n", + " print(f\"First reached at iteration: {best_iteration}\")\n", + "\n", + " bg_color = '#FFFFFF' # White background\n", + " accent_color = '#1c0333' # Deep dark purple for text/lines\n", + " bar_color = '#601f9e' # Vibrant purple for fills/bars\n", + " grid_color = '#F0F0F0' # Light grey for subtle grid\n", + "\n", + " # --- Plot 1: Best-so-far Curve ---\n", + " fig1, ax1 = plt.subplots(figsize=(10, 5))\n", + " fig1.patch.set_facecolor(bg_color)\n", + " ax1.set_facecolor(bg_color)\n", + "\n", + " ax1.plot(trace, color=accent_color, linewidth=2.5, label='Energy Path')\n", + "\n", + "#Highlight the minimum energy point\n", + " ax1.scatter(best_iteration, best_e, color='blue', s=100, zorder=5, \n", + " label=f'Min Energy ({best_iteration}, {best_e})')\n", + "\n", + "#Annotate the minimum point\n", + " ax1.text(best_iteration + (len(trace)*0.05), best_e + (max(trace)*0.05), \n", + " f'Minimum energy at MTS({best_iteration}, {best_e})', \n", + " fontsize=11, color='blue', fontweight='bold')\n", + "\n", + " # Formatting\n", + " ax1.set_xlabel(\"MTS Iteration\", color=accent_color, fontweight='bold')\n", + " ax1.set_ylabel(\"Best-so-far Energy E\", color=accent_color, fontweight='bold')\n", + " ax1.set_title(\"Classical MTS Optimization Path\", color=accent_color, fontsize=14, fontweight='bold')\n", + " ax1.grid(True, linestyle='--', alpha=0.7, color=grid_color)\n", + " ax1.tick_params(colors=accent_color)\n", + " ax1.set_xlim(left=0) # Ensure X-axis starts at 0\n", + "#Modern area fill\n", + " ax1.fill_between(range(len(trace)), trace, color=bar_color, alpha=0.15)\n", + "\n", + " plt.tight_layout()\n", + " plt.show()\n", + "\n", + " # --- Plot 2: Final Population Energy Distribution ---\n", + " fig2, ax2 = plt.subplots(figsize=(10, 5))\n", + " fig2.patch.set_facecolor(bg_color)\n", + " ax2.set_facecolor(bg_color)\n", + "\n", + " # Histogram\n", + " ax2.hist(pop_e, bins=20, color=bar_color, edgecolor=bg_color, linewidth=1.2)\n", + "\n", + " # Formatting\n", + " ax2.set_xlabel(\"Energy E\", color=accent_color, fontweight='bold')\n", + " ax2.set_ylabel(\"Candidate Count\", color=accent_color, fontweight='bold')\n", + " ax2.set_title(\"Final Population Energy Distribution\", color=accent_color, fontsize=14, fontweight='bold')\n", + " ax2.grid(axis='y', linestyle='--', alpha=0.7, color=grid_color)\n", + " ax2.tick_params(colors=accent_color)\n", + "\n", + " # Clean up the spines\n", + " for spine in ax2.spines.values():\n", + " spine.set_edgecolor(accent_color)\n", + "\n", + " plt.tight_layout()\n", + " plt.show()\n", + "\n", + "#Usage:\n", + "visualize_classical_mts_results(res)" + ] + }, { "cell_type": "markdown", "id": "5da2352b-7836-4af5-a7d3-5050a83775f7", @@ -602,7 +719,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 5, "id": "c91bbaae-62a1-41e7-a285-af885627a942", "metadata": {}, "outputs": [], @@ -730,7 +847,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 6, "id": "abf34168-42f9-4dbf-86e1-99976232ad7e", "metadata": {}, "outputs": [ @@ -856,10 +973,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "8c2e6d7d-03b2-482f-bc36-d572e6d4855a", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "First 10 thetas: [1.5394042220828748e-18]\n", + "the size of population: 781\n", + "first 5 MTS instance: ['111111111111', '111111111001', '111111110111', '111111110010', '111111110001']\n" + ] + } + ], "source": [ "@cudaq.kernel\n", "def trotterized_circuit(N: int, G2: list[list[int]], G4: list[list[int]], steps: int, dt: float, T: float, thetas: list[float]):\n", @@ -869,26 +996,22 @@ "\n", " nums_g2 = len(G2)\n", " nums_g4 = len(G4)\n", - " items = nums_g2 + nums_g4\n", " \n", " for n in range(steps): # fomula:[1, n]\n", - " step_offset = step * items\n", + " theta = thetas[n]\n", " for i in range(nums_g2):\n", " pair = G2[i] # fomula:[1,N-2] for i and # [1,(N - i) // 2 ] for k\n", - " theta = thetas[step_offset + i]\n", " two_qubit_rotation_block(reg[pair[0]], reg[pair[1]], theta)\n", " \n", " for j in range(nums_g4):#[1,N-3] for j;#[1,(N-i-1)/2] for t and #[t+1,N-i-t]for k\n", " quad = G4[j]\n", - " theta = thetas[step_offset + nums_g2 + j] # for in utils.compute_theta, the pair appair before quad\n", " four_qubit_rotation_block(reg[quad[0]], reg[quad[1]], reg[quad[2]], reg[quad[3]], theta) \n", - " mz(reg)\n", "\n", "# test it\n", "T=1 # total time\n", "n_steps = 1 # number of trotter steps\n", "dt = T / n_steps\n", - "N = 20\n", + "N = 12 # change from 20\n", "G2, G4 = get_interactions(N)\n", "\n", "thetas =[]\n", @@ -897,14 +1020,24 @@ " t = step * dt\n", " theta_val = utils.compute_theta(t, dt, T, N, G2, G4)\n", " thetas.append(theta_val)\n", + "print(f\"First 10 thetas: {thetas[:10]}\")\n", "\n", "# TODO - Sample your kernel to make sure it works\n", "counts = cudaq.sample(trotterized_circuit, N, G2, G4, n_steps, dt, T, thetas)\n", + "population = [bits for bits, count in counts.items()]\n", "\n", - "print(\"Completed!\")\n", - "print(counts.most_probable())" + "print(f\"the size of population: {len(population)}\")\n", + "print(f\"first 5 MTS instance: {population[:5]}\")\n" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "f626db2c-6a8c-40a0-acdf-6c36404dfa49", + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "id": "fb89d90e-66e2-4700-85b9-40df9fca22c1", @@ -924,12 +1057,247 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "8e5f02e6-41bf-4634-9cb1-f0f543ef2e3f", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[MTS 50] best_E=10 elapsed=8.71s\n", + "[MTS 100] best_E=10 elapsed=17.41s\n", + "[MTS 150] best_E=10 elapsed=26.12s\n", + "[MTS 200] best_E=10 elapsed=34.80s\n", + "[MTS 250] best_E=10 elapsed=43.46s\n", + "[MTS 300] best_E=10 elapsed=52.07s\n", + "[MTS 350] best_E=10 elapsed=60.72s\n", + "[MTS 400] best_E=10 elapsed=69.41s\n", + "Classical MTS\n", + "Best E: 10\n", + "Best bitstring (0/1): 101000001100\n", + "Elapsed (s): 69.414\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAHHCAYAAABKudlQAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAASMlJREFUeJzt3Xl8FdX9//H3QBZCVvYQCQmbYBAioiJCMUiABBo2FRCUsChasIoIVVS2Vr6Rui/8QFoFqQtUBUQslkU2FVTEiCgiYFhkFZAsQMKS8/uDZuBKQnJvEuZeeD0fj/sos9yZz8mkzbtnzpmxjDFGAAAAPqqC0wUAAACUBmEGAAD4NMIMAADwaYQZAADg0wgzAADApxFmAACATyPMAAAAn0aYAQAAPo0wAwAAfBphBsBlb8uWLerUqZPCw8NlWZbmz5/vdEkA3ECYAcrYzJkzZVmWLMvSp59+et52Y4yio6NlWZb++Mc/SpIGDhxof+dCn4EDB0qS8vPzNWvWLLVq1UpVq1ZVaGiorrzySg0YMEBr164ttsbfHzc4OFhxcXF68skndezYsTL9eZzr7bff1gsvvFBux/dUamqqvvvuO02aNEn/+te/dN1115X7ObOysjRx4kTFx8crJCREQUFBuvrqq/XII49oz5495X5+4FLi53QBwKWqUqVKevvtt9W2bVuX9StXrtQvv/yiwMBAe929996rxMREezkjI0Pjxo3T0KFD9Yc//MFe36BBA0nSAw88oClTpqh79+7q37+//Pz8tHnzZi1atEj169fXjTfeWGx9HTt21IABAyRJOTk5Wr16tcaOHatvv/1W7777bqnaXpS3335bGzdu1IgRI8rl+J44fvy41qxZo8cff1z333//RTnnzz//rMTERO3cuVO33367hg4dqoCAAG3YsEGvvfaa5s2bp59++umi1AJcEgyAMjVjxgwjyfTq1ctUr17dnDx50mX7PffcY1q2bGliYmJM165dCz3GV199ZSSZGTNmnLdt3759xrIsc88995y3LT8/3+zfv7/YGiWZ4cOHn7f+tttuMxUqVDDHjx8v9hie6Nq1q4mJiSmXY3tqx44dRpJ5+umny+yYOTk5RW47efKkiY+PN5UrVzarV68+b3tmZqZ57LHHyqSO48ePm9OnT5fJsQBvxm0moJzccccdOnTokJYsWWKvO3HihN577z3169fP4+NmZGTIGKM2bdqct82yLNWsWdPjY0dGRsqyLPn5uXbafvHFF0pKSlJ4eLgqV66sm2++WZ999pnLPtnZ2RoxYoRiY2MVGBiomjVrqmPHjlq/fr0kKSEhQR999JF27Nhh396KjY29YD0nT57UxIkT1ahRI1WqVEnVqlVT27ZtXX6mkvTJJ5/oD3/4g4KDgxUREaHu3btr06ZNxbZ3woQJiomJkSSNHj3apaYdO3Zo2LBhaty4sYKCglStWjXdfvvt2r59u8sxCm4rrly5UsOGDVPNmjVVp06dIs/5/vvv69tvv9Xjjz9+Xq+dJIWFhWnSpEn2cmxsrH178VwJCQlKSEiwl1esWCHLsjR79mw98cQTuuKKK1S5cmWtX79elmXpjTfeOO8Y//3vf2VZlhYuXGiv2717twYPHqxatWopMDBQTZs21euvv15kewBvwG0moJzExsaqdevWeuedd5ScnCxJWrRokTIzM9W3b1+99NJLHh234I/vu+++q9tvv12VK1f26Di5ubk6ePCgJOno0aP67LPP9MYbb6hfv34uYeaTTz5RcnKyWrZsqfHjx6tChQqaMWOGbrnlFq1evVo33HCDJOm+++7Te++9p/vvv19xcXE6dOiQPv30U23atEnXXnutHn/8cWVmZuqXX37R888/L0kKCQm5YI0TJkxQWlqa7r77bt1www3KysrSunXrtH79enXs2FGStHTpUiUnJ6t+/fqaMGGCjh8/rpdffllt2rTR+vXrLxiYevXqpYiICD300EO644471KVLF7umr776Sp9//rn69u2rOnXqaPv27Zo6daoSEhL0ww8/nPdzHzZsmGrUqKFx48bp6NGjRZ5zwYIFkqS77rrrgm331N/+9jcFBARo1KhRysvLU1xcnOrXr69///vfSk1Nddl3zpw5qlKlijp37ixJ2r9/v2688UZZlqX7779fNWrU0KJFizRkyBBlZWV51e1BwIXTXUPApabgNtNXX31lXnnlFRMaGmqOHTtmjDHm9ttvN+3btzfGGI9vMxljzIABA4wkU6VKFdOzZ0/zzDPPmE2bNpW4RkmFfnr06GFyc3Pt/fLz802jRo1M586dTX5+vr3+2LFjpl69eqZjx472uvDw8EJvXZ3L3dtM8fHxRf6MClxzzTWmZs2a5tChQ/a6b7/91lSoUMEMGDCg2HNkZGQU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ZT8C3lvMnDnzvLcEA/AOhBkAtoEDB8qyLN13333nbRs+fLgsy9LAgQMlSZZlXfAzYcIESdK8efN04403Kjw8XKGhoWratKlGjBhRZA3R0dHau3evrr76aknSihUrZFnWeS+1K0+xsbF64YUXXNb16dNHP/3000WrAUDJ+TldAADvEh0drdmzZ+v5559XUFCQJCk3N1dvv/226tata++3d+9e+99z5szRuHHjtHnzZntdSEiIli1bpj59+mjSpEnq1q2bLMvSDz/8oCVLlhR5/ooVK5bLW3WNMTp9+rT8/Dz7n72goCD75wHAu9AzA8DFtddeq+joaM2dO9deN3fuXNWtW1ctWrSw10VGRtqf8PBwWZblsi4kJEQffvih2rRpo9GjR6tx48a68sor1aNHD02ZMqXI8597m2n79u1q3769JKlKlSouPUP5+flKS0tTvXr1FBQUpPj4eL333nv2cQp6dBYtWqSWLVsqMDBQn376qbZt26bu3burVq1aCgkJ0fXXX6+lS5fa30tISNCOHTv00EMP2b1MUuG3maZOnaoGDRooICBAjRs31r/+9S+X7ZZl6Z///Kd69uypypUrq1GjRlqwYIF7FwRAsQgzAM4zePBgzZgxw15+/fXXNWjQILePExkZqe+//14bN270qI7o6Gi9//77kqTNmzdr7969evHFFyVJaWlpmjVrlqZNm6bvv/9eDz30kO68806tXLnS5RiPPvqonnrqKW3atEnNmzdXTk6OunTpomXLlumbb75RUlKSUlJStHPnTklngludOnX017/+VXv37nXpgTrXvHnz9OCDD+rhhx/Wxo0bde+992rQoEFavny5y34TJ05U7969tWHDBnXp0kX9+/fX4cOHPfp5AChCuby+EoBPSk1NNd27dzcHDhwwgYGBZvv27Wb79u2mUqVK5tdffzXdu3e33z5+rhkzZpjw8PDz1ufk5JguXboYSSYmJsb06dPHvPbaayY3N7fIGjIyMowk88033xhjzr4l/LfffrP3yc3NNZUrVzaff/65y3eHDBli7rjjDpfvzZ8/v9h2N23a1Lz88sv2ckxMjHn++ecv2MabbrrJ3HPPPS773H777aZLly72siTzxBNP2Ms5OTlGklm0aFGxNQEoOXpmAJynRo0a6tq1q2bOnKkZM2aoa9euql69utvHCQ4O1kcffaStW7fqiSeeUEhIiB5++GHdcMMNOnbsmMf1bd26VceOHVPHjh0VEhJif2bNmqVt27a57Hvddde5LOfk5GjUqFG66qqrFBERoZCQEG3atMnumSmpTZs2qU2bNi7r2rRpo02bNrmsa968uf3v4OBghYWF6cCBA26dC8CFMQAYQKEGDx6s+++/X5IuOMalJBo0aKAGDRro7rvv1uOPP64rr7xSc+bM8ejWlXQmkEjSRx99pCuuuMJlW2BgoMtycHCwy/KoUaO0ZMkSPfPMM2rYsKGCgoJ022236cSJEx7VUhx/f3+XZcuylJ+fXy7nAi5XhBkAhUpKStKJEydkWZY6d+5cZseNjY1V5cqVdfTo0RLtHxAQIEk6ffq0vS4uLk6BgYHauXOnbr75ZrfO/9lnn2ngwIHq2bOnpDPBaPv27eed89zzFeaqq67SZ599ptTUVJdjx8XFuVUPgNIjzAAoVMWKFe1bJhUrVvToGBMmTNCxY8fUpUsXxcTE6MiRI3rppZd08uRJdezYsUTHiImJkWVZWrhwobp06aKgoCCFhoZq1KhReuihh5Sfn6+2bdsqMzNTn332mcLCwlwCxu81atRIc+fOVUpKiizL0tixY8/rKYmNjdWqVavUt29fBQYGFnqLbfTo0erdu7datGihxMREffjhh5o7d67LzCgAFwdjZgAUKSwsTGFhYR5//+abb9bPP/+sAQMGqEmTJkpOTta+ffu0ePFiNW7cuETHuOKKKzRx4kQ9+uijqlWrln3r629/+5vGjh2rtLQ0XXXVVUpKStJHH32kevXqXfB4zz33nKpUqaKbbrpJKSkp6ty5s6699lqXff76179q+/btatCggWrUqFHocXr06KEXX3xRzzzzjJo2bapXX31VM2bMUEJCQonaBaDsWMYY43QRAAAAnqJnBgAA+DTCDAAA8GmEGQAA4NMIMwAAwKcRZgAAgE8jzAAAAJ9GmAEAAD6NMAMAAHwaYQYAAPg0wgwAAPBphBkAAODTCDMAAMCn/X9TASjcWTBwNQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAANn5JREFUeJzt3Xl8VNX9//H3hMAkQhbWLAIhBEQWAWUXWY2EpQgIX4tSCQpqaUAhWoUvKiC1oaJIsQG+bTVQAUGtoEWBslsRUEBARBAoaBBIAMnCFiA5vz98ZH4MWUhikpkTX8/H4z4e3HPPvfdzzwzJO3eZcRhjjAAAACzk4+kCAAAASoogAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADr3T06FE5HA7Nnz+/TPfToEEDjRgxokz3UR7mz58vh8Oho0ePlto2y+s1wM9XFq9/QUaMGKEGDRq45nPfJ6+88kqZ71uSpkyZIofDUS77gh0IMvCI3B+8+U0TJkzwdHl5XFufj4+PwsPD1atXL23cuNHTpf1sixcv1qxZszxdhpsRI0YU+P7w8/PzdHllauPGjW7H63Q6FRISou7du+uPf/yjTp06VSr7uXDhgqZMmeKV72Fvrg3ex9fTBeCX7cUXX1RkZKRbW4sWLRQREaGLFy+qcuXKHqosr3vuuUfDhw+XMUZHjhzRnDlz1LNnT3300Ufq06ePp8srscWLF2vv3r0aN26cW7unXwOn06m///3vedorVarkgWrK3xNPPKF27dopOztbp06d0meffabJkydr5syZeuedd9SzZ09X34ceekhDhw6V0+ks8vYvXLigqVOnSpK6d+9e5PX+9re/KScnp8j9S6Kw2p577jmv/GMHnkOQgUf16dNHbdu2zXeZt/3lfcstt+g3v/mNa37QoEFq2bKlZs2aZXWQKYinz374+vq6jbcnnT9/XlWrVi3XfXbp0kVDhgxxa9u9e7d69eqlwYMHa9++fQoLC5P0U7gr64CXOwae/uPC19dXvr786sL/x6UleKX87s8YMWKEqlWrph9++EEDBw5UtWrVVLt2bT399NPKzs52W/+VV17RnXfeqZo1a8rf319t2rTRe++9V6o13nbbbapVq5aOHDnialu/fr26dOmiqlWrKjg4WAMGDNA333zjtl7uNf79+/fr/vvvV2BgoGrWrKknn3xSly5dKnQMcjkcDk2ZMqXQ+j744AP169dP4eHhcjqdioqK0rRp09zGqnv37vroo4/03XffuS5l5N7/UND+i3OMhw4d0ogRIxQcHKygoCA9/PDDunDhQqF1F0fuJcrNmzcrPj5etWvXVtWqVTVo0KB8L8GsXLnSVXtAQID69eunr7/+2q1P7vvs8OHD6tu3rwICAjRs2DBJ0sWLF/XEE0+oVq1aCggI0L333qsffvjB7fXYsGGDHA6Hli1blmf/ixcvlsPh0JYtW0p0vK1atdKsWbOUlpamv/zlL3nG4dp7ZLZv366YmBjVqlVL/v7+ioyM1COPPCLpp9e2du3akqSpU6e6XvvcYyhsDK6/R+Zar732miIiIuTv769u3bpp7969bsu7d++e79mfa7d5o9ryu0fm6tWrmjZtmqKiouR0OtWgQQP97//+r7Kystz6NWjQQL/61a/06aefqn379vLz81PDhg31j3/8I/8BhxWItfCo9PR0nT592q2tVq1aBfbPzs5WTEyMOnTooFdeeUVr167Vq6++qqioKI0ePdrV789//rPuvfdeDRs2TJcvX9aSJUv0P//zP1qxYoX69etXKrWfPXtWZ8+eVaNGjSRJa9euVZ8+fdSwYUNNmTJFFy9e1Ouvv67OnTtr586deX7433///WrQoIESEhK0detWzZ49W2fPni21H6rz589XtWrVFB8fr2rVqmn9+vV64YUXlJGRoRkzZkiSJk2apPT0dB07dkyvvfaaJKlatWoFbrMkxxgZGamEhATt3LlTf//731WnTh396U9/KtIxXP/ekKQqVaooMDDQrW3s2LGqXr26Jk+erKNHj2rWrFkaM2aMli5d6urz1ltvKTY2VjExMfrTn/6kCxcuaO7cubrrrrv05ZdfutV+9epVxcTE6K677tIrr7yim266SdJPv3DfeecdPfTQQ+rYsaM2bdqU5/3UvXt31atXT4sWLdKgQYPcli1atEhRUVHq1KlTkY4/P0OGDNHIkSP173//Wy+99FK+fVJTU9WrVy/Vrl1bEyZMUHBwsI4ePar3339fklS7dm3NnTtXo0eP1qBBg3TfffdJklq2bHnDMSjIP/7xD2VmZiouLk6XLl3Sn//8Z/Xs2VNfffWVQkJCinx8RanteqNGjdKCBQs0ZMgQPfXUU9q2bZsS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1K5dO7e29u3b55lv3ry5FixYoAkTJmjhwoWKiIhQ165df/YxAfAcggyAUlO1alU1atSo0D6VK1d2m3c4HMrJyZEknTt3Tv3799ef/vSnPOuFhYW57ackRo0apcTERE2YMEFJSUl6+OGH5XA4Cl2nKMcEwHMIMgC8xh133KF//vOfatCggXx9i/7jqUmTJvr444/d2r744os8/X7zm9/omWee0ezZs7Vv3z7Fxsb+7JoBeBY3+wIoNVlZWTp58qTbdO0TRzcSFxenH3/8UQ888IC++OILHT58WKtXr9bDDz+s7OzsAtd7/PHHtX//fj377LP69ttv9c4772j+/PmS5HbGpXr16rrvvvv0+9//Xr169VLdunXL/JgAlC2CDIBSs2rVKoWFhblNd911V5HXDw8P1+bNm5Wdna1evXrptttu07hx4xQcHCwfn4J/XEVGRuq9997T+++/r5YtW2ru3Lmup5au/8yXkSNH6vLly3rkkUfK5ZgAlC2HMcZ4uggAKG0vvfSS5s2bp+TkZLf2t956S+PHj9fx48fL9IP0AJQP7pEBUCHMmTNH7dq1U82aNbV582bNmDFDY8aMcS2/cOGCTpw4oenTp+vxxx8nxAAVBJeWAFQIBw8e1IABA9SsWTNNmzZNTz31lKZMmeJa/vLLL+vWW29VaGioJk6c6LlCAZQqLi0BAABrcUYGAABYiyADAACsRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFjr/wGsHqgbZbvTwwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using Quantum-enhanced population (size: 791)\n", + "[MTS 50] best_E=10 elapsed=8.64s\n", + "[MTS 100] best_E=10 elapsed=17.20s\n", + "[MTS 150] best_E=10 elapsed=25.81s\n", + "[MTS 200] best_E=10 elapsed=34.39s\n", + "[MTS 250] best_E=10 elapsed=42.92s\n", + "[MTS 300] best_E=10 elapsed=51.59s\n", + "[MTS 350] best_E=10 elapsed=60.15s\n", + "[MTS 400] best_E=10 elapsed=68.73s\n", + "CP + MTS\n", + "Best E: 10\n", + "Best bitstring (0/1): 101001100000\n", + "Elapsed (s): 68.727\n" + ] + }, + { + "data": { + "image/png": "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TF4/efJkdOzYEX379q3QcWJjY6HVauWPj49PpdQr8bXZREREqqCanpmoqCikpKRgz5498roNGzZg+/btOHLkSIWPExMTgylTpsjLOp2u0gINwAHARERESlNFz0x0dDQ2btyIHTt2wNvbW16/fft2nDlzBs7OzrC2toa19b3sNXDgQAQFBZV6LI1GAycnJ71PZeAAYCIiInVQtGdGCIGXX34Z8fHx2LlzJ/z9/fW2T58+HS+++KLeuubNm2PhwoWIiIh4nKWWwAHARERE6qBomImKisLq1avx448/wtHREenp6QAArVYLOzs7eHh4lDrot27duiWCz+P3z3Nm2DVDRESkKEVvMy1duhRZWVkICgqCp6en/Fm7dq2SZVUIe2aIiIjUQfHbTI/jO5WBE7OJiIjUQRUDgC2R/DoDdWQrIiKiKothxkTMMkRERMpimDGSfJuJXTNERESKYpgxEgcAExERqQPDjJHkMMM0Q0REpCiGGSMVv2iSrzMgIiJSFsOMsTg3m4iISBUYZozEdzMRERGpA8OMkficGSIiInVgmDERswwREZGyGGaMdP82E+MMERGRkhhmjCRxADAREZEqMMwYSZ6azY4ZIiIiRTHMGIk9M0REROrAMGMkecwMhwATEREpimHGWHydARERkSowzJiIWYaIiEhZDDNGuj8AmHGGiIhISQwzRpLfmq1sGURERFUew4yR5MlMTDNERESKYpgxksS52URERKrAMGMk3mYiIiJSB4YZI/HdTEREROrAMGMiRhkiIiJlMcwYSeJD84iIiFSBYcZo/zxnhn0zREREimKYMRJ7ZoiIiNSBYcZInJhNRESkDgwzRip+zgx7ZoiIiJTFMGMk9swQERGpA8OMificGSIiImUpGmZiY2PRtm1bODo6ws3NDf369UNqaqq8PTMzEy+//DIaNWoEOzs71K1bF6+88gqysrIUrPoePgGYiIhIHRQNM4mJiYiKisK+ffuQkJCAgoIC9OzZE7m5uQCAS5cu4dKlS3j//feRkpKCFStWYPPmzRg7dqySZQMAJHDMDBERkRpIQkX3Sa5evQo3NzckJiaiS5cupe7z3Xff4fnnn0dubi6sra3LPaZOp4NWq0VWVhacnJzMVmvKxSw8u3gP3J002P9GiNmOS0RERIb9/S4/DTxGxbePXFxcHrmPk5NTmUEmPz8f+fn58rJOpzNvkURERKQqqhkAXFRUhEmTJqFTp05o1qxZqftcu3YNb7/9NsaPH1/mcWJjY6HVauWPj49PpdTLh+YRERGpg2rCTFRUFFJSUrBmzZpSt+t0OvTu3RsBAQGYM2dOmceJiYlBVlaW/Llw4UKl1CuPmamUoxMREVFFqeI2U3R0NDZu3Ihdu3bB29u7xPbs7GyEhYXB0dER8fHxsLGxKfNYGo0GGo2mMsvVw54ZIiIiZSnaMyOEQHR0NOLj47F9+3b4+/uX2Een06Fnz56wtbXFhg0bUL16dQUqLUmSn5rHNENERKQkRXtmoqKisHr1avz4449wdHREeno6AECr1cLOzk4OMrdu3cKqVaug0+nkAb21a9dGtWrVFKudY2aIiIjUQdEws3TpUgBAUFCQ3vq4uDiMGjUKhw8fxv79+wEADRo00NsnLS0Nfn5+j6PMUnHMDBERkTooGmbKe8RNUFCQal8XIPHlTERERKqgmtlMlqY4y6g1bBEREVUVDDNG4ruZiIiI1IFhxkTsmCEiIlIWw4zRil80yTRDRESkJIYZI/E2ExERkTowzBiJz8wjIiJSB4YZI0mcm01ERKQKDDNGkqdmK1oFERERVTjMBAQEIDMzU16eOHEirl27Ji9nZGSgRo0a5q1Oxe6/zoBxhoiISEkVDjN//vkn7t69Ky8XvyupmBACeXl55q1Oxfg6AyIiInUw+jZTaT0SVXEcCTtmiIiIlMUxM0a6PzWbaYaIiEhJFQ4zkiSV6Hmpij0xD2PPDBERkbIq/NZsIQSCg4NhbX3vK7dv30ZERARsbW0BQG88TVXAHEdERKQOFQ4zs2fP1lvu27dviX0GDhxoekUWorhXih0zREREyjI6zFR1fAIwERGROnAAsJE4AJiIiEgdGGZMxAHAREREymKYMRIfmkdERKQODDNG4usMiIiI1MHgMPPXX39VRh0WhzOziYiI1MHgMNOgQQN069YNq1atqlLvYipBHgBMRERESjI4zBw+fBgtWrTAlClT4OHhgZdeegm//fZbZdSmavKYGaYZIiIiRRkcZlq2bIlFixbh0qVL+PLLL3H58mV07twZzZo1w4cffoirV69WRp2qwycAExERqYPRA4Ctra0xYMAAfPfdd1iwYAFOnz6NqVOnwsfHByNHjsTly5fNWaeqcRAwERGRcowOMwcPHsTEiRPh6emJDz/8EFOnTsWZM2eQkJCAS5culfq6gyfJgx0zzDJERETKqfDrDIp9+OGHiIuLQ2pqKnr16oWVK1eiV69esLK6l4v8/f2xYsUK+Pn5mbtWVXnwjeHMMkRERMoxOMwsXboUY8aMwahRo+Dp6VnqPm5ubvjiiy9MLk7NOGSGiIhIHQwOM6dOnSp3H1tbW0RGRhpVkKV4cADwvTEzjDdERERKMDjMHDt2rNT1kiShevXqqFu3LjQajcmFqZ0E3mYiIiJSA4PDTMuWLfXGizzMxsYGQ4YMwaefforq1aubVJyq6fXMKFcGERFRVWfwbKb4+Hg0bNgQy5cvR3JyMpKTk7F8+XI0atQIq1evxhdffIHt27fjzTffLPdYsbGxaNu2LRwdHeHm5oZ+/fohNTVVb5+8vDxERUWhVq1acHBwwMCBA3HlyhVDy65Ugn0zREREijG4Z2bevHlYtGgRQkND5XXNmzeHt7c3Zs6cid9++w329vZ47bXX8P777z/yWImJiYiKikLbtm1x9+5dvPHGG+jZsyf++OMP2NvbAwAmT56Mn3/+Gd999x20Wi2io6MxYMAA7N2719DSzUpizwwREZEqGBxmfv/9d/j6+pZY7+vri99//x3AvVtRFXlo3ubNm/WWV6xYATc3Nxw6dAhdunRBVlYWvvjiC6xevRrdu3cHAMTFxaFJkybYt28fnnnmGUPLNxsO9yUiIlIHg28zNW7cGPPnz8edO3fkdQUFBZg/fz4aN24MALh48SLc3d0NLiYrKwsA4OLiAgA4dOgQCgoKEBISonf+unXrIikpqdRj5OfnQ6fT6X0qw6PGDREREdHjY3DPzJIlS9CnTx94e3ujRYsWAO711hQWFmLjxo0AgL/++gsTJ0406LhFRUWYNGkSOnXqhGbNmgEA0tPTYWtrC2dnZ7193d3dkZ6eXupxYmNjMXfuXANbZTg+AZiIiEgdDA4zHTt2RFpaGr7++mucPHkSADBo0CAMHz4cjo6OAIAXXnjB4EKioqKQkpKCPXv2GPzdB8XExGDKlCnysk6ng4+Pj0nHLI3emBkOACYiIlKMQWGmoKAAjRs3xsaNGzFhwgSzFREdHY2NGzdi165d8Pb2ltd7eHjgzp07uHnzpl7vzJUrV+Dh4VHqsTQazWN5zo3ec2aYZYiIiBRj0JgZGxsb5OXlme3kQghER0cjPj4e27dvh7+/v972Nm3awMbGBtu2bZPXpaam4vz58+jQoYPZ6jAVswwREZFyDB4AHBUVhQULFuDu3bsmnzwqKgqrVq3C6tWr4ejoiPT0dKSnp+P27dsAAK1Wi7Fjx2LKlCnYsWMHDh06hNGjR6NDhw6KzmQCSnudARERESnB4DEzBw4cwLZt27BlyxY0b95cfh5MsXXr1lX4WEuXLgUABAUF6a2Pi4vDqFGjAAALFy6ElZUVBg4ciPz8fISGhuL//u//DC27UjHKEBERKcfgMOPs7IyBAwea5eQV6dGoXr06lixZgiVLlpjlnObCmdlERETqYHCYiYuLq4w6LA4HABMREamDwWNmAODu3bvYunUrPv30U2RnZwMALl26hJycHLMWp2Z6PTMMM0RERIoxuGfm3LlzCAsLw/nz55Gfn48ePXrA0dERCxYsQH5+PpYtW1YZdaqOfpZhmiEiIlKKwT0zr776Kp5++mncuHEDdnZ28vr+/fvrTaGuSnibiYiISDkG98zs3r0bv/76K2xtbfXW+/n54eLFi2YrTO0efDcTswwREZFyDO6ZKSoqQmFhYYn1f//9t/w6g6pA/91MjDNERERKMTjM9OzZEx999JG8LEkScnJyMHv2bPTq1cuctakap2YTERGpg8G3mT744AOEhoYiICAAeXl5GD58OE6dOgVXV1d88803lVGjKvE2ExERkToYHGa8vb1x9OhRrFmzBseOHUNOTg7Gjh2LESNG6A0Irkp4l4mIiEg5BocZALC2tsbzzz9v7losjiTdCzKcmk1ERKQco8LMqVOnsGPHDmRkZKCoqEhv26xZs8xSmCWQ8M8tJmYZIiIixRgcZj777DP8+9//hqurKzw8PPTGjkiSVKXCTDFmGSIiIuUYHGbeeecdzJs3D6+//npl1GNRpH/uM3HMDBERkXIMnpp948YNDBo0qDJqsTicnU1ERKQ8g8PMoEGDsGXLlsqoxeIU32HjAGAiIiLlGHybqUGDBpg5cyb27duH5s2bw8bGRm/7K6+8Yrbi1E76ZwgwbzMREREpx+Aws3z5cjg4OCAxMRGJiYl62yRJqlJhBnLPDBERESnF4DCTlpZWGXVYpOIxM3w3ExERkXIMHjNDJTHLEBERKafCYSYgIACZmZny8sSJE3Ht2jV5OSMjAzVq1DBvdSrHl00SEREpr8Jh5s8//8Tdu3fl5VWrVkGn08nLQgjk5eWZtzqVkzg5m4iISHFG32YqbZyIVMW6KuSp2bzNREREpBiOmTGBPACY85mIiIgUU+EwI0lSiZ6XqtYT87Di9rNnhoiISDkVnpothEBwcDCsre995fbt24iIiICtrS0A6I2nqSru98wQERGRUiocZmbPnq233Ldv3xL7DBw40PSKLBCfM0NERKQco8MMgU8AJiIiUgEOADZB1R4xREREpA4MMybgAGAiIiLlMcyY4P5kLqYZIiIipTDMmOD+iyYVLYOIiKhKMyjMFBQUIDg4GKdOnTLLyXft2oWIiAh4eXlBkiSsX79eb3tOTg6io6Ph7e0NOzs7BAQEYNmyZWY5tznIt5kUroOIiKgqMyjM2NjY4NixY2Y7eW5uLgIDA7FkyZJSt0+ZMgWbN2/GqlWrcOLECUyaNAnR0dHYsGGD2WowB/bMEBERKcfg20zPP/88vvjiC7OcPDw8HO+88w769+9f6vZff/0VkZGRCAoKgp+fH8aPH4/AwED89ttvZjm/qfg6AyIiIuVV+Dkzxe7evYsvv/wSW7duRZs2bWBvb6+3/cMPPzRbcR07dsSGDRswZswYeHl5YefOnTh58iQWLlxY5nfy8/ORn58vLz/4Zm9zq+JvcyAiIlIFg8NMSkoKWrduDQA4efKk3jZzv6tp8eLFGD9+PLy9vWFtbQ0rKyt89tln6NKlS5nfiY2Nxdy5c81aR9k4NZuIiEhpBoeZHTt2VEYdpVq8eDH27duHDRs2wNfXF7t27UJUVBS8vLwQEhJS6ndiYmIwZcoUeVmn08HHx6dS6ivObgwzREREyjE4zDwut2/fxhtvvIH4+Hj07t0bANCiRQskJyfj/fffLzPMaDQaaDSax1Ijx8wQEREpz6gwc/DgQXz77bc4f/487ty5o7dt3bp1ZimsoKAABQUFsLLSH6NcrVo1FBUVmeUcpmLPDBERkfIMns20Zs0adOzYESdOnEB8fDwKCgpw/PhxbN++HVqt1qBj5eTkIDk5GcnJyQCAtLQ0JCcn4/z583ByckLXrl0xbdo07Ny5E2lpaVixYgVWrlxZ5uwnIiIiqnoM7pn5f//v/2HhwoWIioqCo6MjFi1aBH9/f7z00kvw9PQ06FgHDx5Et27d5OXisS6RkZFYsWIF1qxZg5iYGIwYMQKZmZnw9fXFvHnzMGHCBEPLrhQSBwATEREpzuAwc+bMGXkMi62tLXJzcyFJEiZPnozu3bsbNJMoKCgI4hFJwMPDA3FxcYaW+NhwajYREZHyDL7NVLNmTWRnZwMA6tSpg5SUFADAzZs3cevWLfNWp3IcAExERKQ8g3tmunTpgoSEBDRv3hyDBg3Cq6++iu3btyMhIQHBwcGVUaNqye9mYpYhIiJSjMFh5pNPPkFeXh4AYMaMGbCxscGvv/6KgQMH4s033zR7gZaAWYaIiEg5FQozU6ZMwdtvvw17e3ukpKSgY8eOAAArKytMnz69UgtUs/tTsxlniIiIlFKhMTOLFy9GTk4OAKBbt27IzMys1KIsDaMMERGRcirUM+Pn54ePP/4YPXv2hBACSUlJqFmzZqn7Puq9SU8aPjSPiIhIeRUKM++99x4mTJiA2NhYSJJU5kPrJElCYWGhWQtUMwmcm01ERKS0CoWZfv36oV+/fsjJyYGTkxNSU1Ph5uZW2bWp3v3nzLBrhoiISCkGzWZycHDAjh074O/vD2tr1b6j8rGRnzPDLENERKQYgx+a17VrVznI9O7dG5cvXzZ7UZZCfs6MwnUQERFVZQaHmQft2rULt2/fNlctFoc9M0RERMozKcxUeXzODBERkeJMCjO+vr6wsbExVy0Wi1GGiIhIOSaN4i1+yWRVxYnZREREyjM6zBw6dAgnTpwAAAQEBKB169ZmK8pS8EWTREREyjM4zGRkZGDo0KHYuXMnnJ2dAQA3b95Et27dsGbNGtSuXdvcNaqWPACYN5qIiIgUY/CYmZdffhnZ2dk4fvw4MjMzkZmZiZSUFOh0OrzyyiuVUaNqSffTDBERESnE4J6ZzZs3Y+vWrWjSpIm8LiAgAEuWLEHPnj3NWpzaFb/OgFmGiIhIOQb3zBQVFZU6g8nGxgZFRUVmKcpS8EWTREREyjM4zHTv3h2vvvoqLl26JK+7ePEiJk+ejODgYLMWZyk4ZoaIiEg5BoeZTz75BDqdDn5+fqhfvz7q168Pf39/6HQ6LF68uDJqJCIiIiqTwWNmfHx8cPjwYWzduhV//vknAKBJkyYICQkxe3Fqx6nZREREyjPqOTOSJKFHjx7o0aMHgHtTs6siTmYiIiJSnsG3mRYsWIC1a9fKy4MHD0atWrVQp04dHD161KzFqZ3EdzMREREpzuAws2zZMvj4+AAAEhISkJCQgE2bNiE8PBzTpk0ze4FqJocZZcsgIiKq0gy+zZSeni6HmY0bN2Lw4MHo2bMn/Pz80L59e7MXqGYSmGaIiIiUZnDPTM2aNXHhwgUA9x6gVzzwVwiBwsJC81ZnITg1m4iISDkG98wMGDAAw4cPR8OGDXH9+nWEh4cDAI4cOYIGDRqYvUA1k/jabCIiIsUZHGYWLlwIPz8/XLhwAe+++y4cHBwAAJcvX8bEiRPNXqCaybOZ2DFDRESkGIPDjI2NDaZOnVpi/eTJk81SkEXhc2aIiIgUZ/CYmQc5OTnhr7/+MlctFofPmSEiIlKeSWHG1Oer7Nq1CxEREfDy8oIkSVi/fn2JfU6cOIE+ffpAq9XC3t4ebdu2xfnz5006r7nwOTNERETKMynMmCo3NxeBgYFYsmRJqdvPnDmDzp07o3Hjxti5cyeOHTuGmTNnonr16o+50tKxZ4aIiEh5Rr3OoNjzzz8PJycno78fHh4uz4YqzYwZM9CrVy+8++678rr69esbfb7Kwo4ZIiIi5RjcM7Ny5Urk5+cDAJYuXQpXV1cAwJ07d7By5UqzFVZUVISff/4ZTz31FEJDQ+Hm5ob27duXeivqQfn5+dDpdHqfyiJxbjYREZHiDA4zo0ePRlZWVon12dnZGD16tFmKAoCMjAzk5ORg/vz5CAsLw5YtW9C/f38MGDAAiYmJZX4vNjYWWq1W/hQ/rbgy3I8y7JohIiJSisFhRghRao/E33//Da1Wa5aigHs9MwDQt29fTJ48GS1btsT06dPx7LPPYtmyZWV+LyYmBllZWfKn+GnFleH+AOBKOwURERGVo8JjZlq1agVJkiBJEoKDg2Ftff+rhYWFSEtLQ1hYmNkKc3V1hbW1NQICAvTWN2nSBHv27CnzexqNBhqNxmx1PErxu5mYZYiIiJRT4TDTr18/AEBycjJCQ0PlJ/8CgK2tLfz8/DBw4ECzFWZra4u2bdsiNTVVb/3Jkyfh6+trtvOYhD0zREREiqtwmJk9ezYAwM/PD0OHDjVL70dOTg5Onz4tL6elpSE5ORkuLi6oW7cupk2bhiFDhqBLly7o1q0bNm/ejJ9++gk7d+40+dzmcH9qNtMMERGRUgweM9O9e3dcvXpVXv7tt98wadIkLF++3OCTHzx4EK1atUKrVq0AAFOmTEGrVq0wa9YsAED//v2xbNkyvPvuu2jevDk+//xz/PDDD+jcubPB56pM7JkhIiJSjsHPmRk+fDjGjx+PF154Aenp6QgJCUGzZs3w9ddfIz09XQ4iFREUFFTu03PHjBmDMWPGGFrmY8GZ2URERMozuGcmJSUF7dq1AwB8++23aN68OX799Vd8/fXXWLFihbnrUzUOACYiIlKewWGmoKBAHi+zdetW9OnTBwDQuHFjXL582bzVqRzfzURERKQ8g8NM06ZNsWzZMuzevRsJCQnydOxLly6hVq1aZi9QzXibiYiISHkGh5kFCxbg008/RVBQEIYNG4bAwEAAwIYNG+TbT1WFfJuJHTNERESKMXgAcFBQEK5duwadToeaNWvK68ePH48aNWqYtTi1k28zcdQMERGRYgzumQHujRE5dOgQPv30U2RnZwO495C7qhZmirFnhoiISDkG98ycO3cOYWFhOH/+PPLz89GjRw84OjpiwYIFyM/Pf+R7k4iIiIjMzeCemVdffRVPP/00bty4ATs7O3l9//79sW3bNrMWp3bFL9xkzwwREZFyDO6Z2b17N3799VfY2trqrffz88PFixfNVpgluP86AyIiIlKKwT0zRUVFKCwsLLH+77//hqOjo1mKshR8zgwREZHyDA4zPXv2xEcffSQvS5KEnJwczJ49G7169TJnbarHnhkiIiLlGXyb6YMPPkBoaCgCAgKQl5eH4cOH49SpU3B1dcU333xTGTWqlnR/bjYREREpxOAw4+3tjaNHj2Lt2rU4evQocnJyMHbsWIwYMUJvQHBVwufMEBERKcfgMAMA1tbWGDFiBEaMGGHueiwK32ZARESkPIPDzPXr1+V3MF24cAGfffYZbt++jYiICHTp0sXsBarZ/QHAytZBRERUlVV4APDvv/8OPz8/uLm5oXHjxkhOTkbbtm2xcOFCLF++HN27d8f69esrsVQ1+uc5MwpXQUREVJVVOMz85z//QfPmzbFr1y4EBQXh2WefRe/evZGVlYUbN27gpZdewvz58yuzVtVhzwwREZHyKnyb6cCBA9i+fTtatGiBwMBALF++HBMnToSV1b089PLLL+OZZ56ptELV6P7UbKYZIiIipVS4ZyYzMxMeHh4AAAcHB9jb2+u9NbtmzZrySyerCvbMEBERKc+gh+bJz1UpY7mqkThmhoiISHEGzWYaNWoUNBoNACAvLw8TJkyAvb09ACA/P9/81RERERGVo8JhJjIyUm/5+eefL7HP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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAANn5JREFUeJzt3Xl8VNX9//H3hMAkQhbWLAIhBEQWAWUXWY2EpQgIX4tSCQpqaUAhWoUvKiC1oaJIsQG+bTVQAUGtoEWBslsRUEBARBAoaBBIAMnCFiA5vz98ZH4MWUhikpkTX8/H4z4e3HPPvfdzzwzJO3eZcRhjjAAAACzk4+kCAAAASoogAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADr3T06FE5HA7Nnz+/TPfToEEDjRgxokz3UR7mz58vh8Oho0ePlto2y+s1wM9XFq9/QUaMGKEGDRq45nPfJ6+88kqZ71uSpkyZIofDUS77gh0IMvCI3B+8+U0TJkzwdHl5XFufj4+PwsPD1atXL23cuNHTpf1sixcv1qxZszxdhpsRI0YU+P7w8/PzdHllauPGjW7H63Q6FRISou7du+uPf/yjTp06VSr7uXDhgqZMmeKV72Fvrg3ex9fTBeCX7cUXX1RkZKRbW4sWLRQREaGLFy+qcuXKHqosr3vuuUfDhw+XMUZHjhzRnDlz1LNnT3300Ufq06ePp8srscWLF2vv3r0aN26cW7unXwOn06m///3vedorVarkgWrK3xNPPKF27dopOztbp06d0meffabJkydr5syZeuedd9SzZ09X34ceekhDhw6V0+ks8vYvXLigqVOnSpK6d+9e5PX+9re/KScnp8j9S6Kw2p577jmv/GMHnkOQgUf16dNHbdu2zXeZt/3lfcstt+g3v/mNa37QoEFq2bKlZs2aZXWQKYinz374+vq6jbcnnT9/XlWrVi3XfXbp0kVDhgxxa9u9e7d69eqlwYMHa9++fQoLC5P0U7gr64CXOwae/uPC19dXvr786sL/x6UleKX87s8YMWKEqlWrph9++EEDBw5UtWrVVLt2bT399NPKzs52W/+VV17RnXfeqZo1a8rf319t2rTRe++9V6o13nbbbapVq5aOHDnialu/fr26dOmiqlWrKjg4WAMGDNA333zjtl7uNf79+/fr/vvvV2BgoGrWrKknn3xSly5dKnQMcjkcDk2ZMqXQ+j744AP169dP4eHhcjqdioqK0rRp09zGqnv37vroo4/03XffuS5l5N7/UND+i3OMhw4d0ogRIxQcHKygoCA9/PDDunDhQqF1F0fuJcrNmzcrPj5etWvXVtWqVTVo0KB8L8GsXLnSVXtAQID69eunr7/+2q1P7vvs8OHD6tu3rwICAjRs2DBJ0sWLF/XEE0+oVq1aCggI0L333qsffvjB7fXYsGGDHA6Hli1blmf/ixcvlsPh0JYtW0p0vK1atdKsWbOUlpamv/zlL3nG4dp7ZLZv366YmBjVqlVL/v7+ioyM1COPPCLpp9e2du3akqSpU6e6XvvcYyhsDK6/R+Zar732miIiIuTv769u3bpp7969bsu7d++e79mfa7d5o9ryu0fm6tWrmjZtmqKiouR0OtWgQQP97//+r7Kystz6NWjQQL/61a/06aefqn379vLz81PDhg31j3/8I/8BhxWItfCo9PR0nT592q2tVq1aBfbPzs5WTEyMOnTooFdeeUVr167Vq6++qqioKI0ePdrV789//rPuvfdeDRs2TJcvX9aSJUv0P//zP1qxYoX69etXKrWfPXtWZ8+eVaNGjSRJa9euVZ8+fdSwYUNNmTJFFy9e1Ouvv67OnTtr586deX7433///WrQoIESEhK0detWzZ49W2fPni21H6rz589XtWrVFB8fr2rVqmn9+vV64YUXlJGRoRkzZkiSJk2apPT0dB07dkyvvfaaJKlatWoFbrMkxxgZGamEhATt3LlTf//731WnTh396U9/KtIxXP/ekKQqVaooMDDQrW3s2LGqXr26Jk+erKNHj2rWrFkaM2aMli5d6urz1ltvKTY2VjExMfrTn/6kCxcuaO7cubrrrrv05ZdfutV+9epVxcTE6K677tIrr7yim266SdJPv3DfeecdPfTQQ+rYsaM2bdqU5/3UvXt31atXT4sWLdKgQYPcli1atEhRUVHq1KlTkY4/P0OGDNHIkSP173//Wy+99FK+fVJTU9WrVy/Vrl1bEyZMUHBwsI4ePar3339fklS7dm3NnTtXo0eP1qBBg3TfffdJklq2bHnDMSjIP/7xD2VmZiouLk6XLl3Sn//8Z/Xs2VNfffWVQkJCinx8RanteqNGjdKCBQs0ZMgQPfXUU9q2bZsS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1K5dO7e29u3b55lv3ry5FixYoAkTJmjhwoWKiIhQ165df/YxAfAcggyAUlO1alU1atSo0D6VK1d2m3c4HMrJyZEknTt3Tv3799ef/vSnPOuFhYW57ackRo0apcTERE2YMEFJSUl6+OGH5XA4Cl2nKMcEwHMIMgC8xh133KF//vOfatCggXx9i/7jqUmTJvr444/d2r744os8/X7zm9/omWee0ezZs7Vv3z7Fxsb+7JoBeBY3+wIoNVlZWTp58qTbdO0TRzcSFxenH3/8UQ888IC++OILHT58WKtXr9bDDz+s7OzsAtd7/PHHtX//fj377LP69ttv9c4772j+/PmS5HbGpXr16rrvvvv0+9//Xr169VLdunXL/JgAlC2CDIBSs2rVKoWFhblNd911V5HXDw8P1+bNm5Wdna1evXrptttu07hx4xQcHCwfn4J/XEVGRuq9997T+++/r5YtW2ru3Lmup5au/8yXkSNH6vLly3rkkUfK5ZgAlC2HMcZ4uggAKG0vvfSS5s2bp+TkZLf2t956S+PHj9fx48fL9IP0AJQP7pEBUCHMmTNH7dq1U82aNbV582bNmDFDY8aMcS2/cOGCTpw4oenTp+vxxx8nxAAVBJeWAFQIBw8e1IABA9SsWTNNmzZNTz31lKZMmeJa/vLLL+vWW29VaGioJk6c6LlCAZQqLi0BAABrcUYGAABYiyADAACsRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFjr/wGsHqgbZbvTwwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "# TODO - write code here to sample from your CUDA-Q kernel and used the results to seed your MTS population" + "# TODO - write code here to sample from your CUDA-Q kernel and used the results to seed your MTS population\n", + "\n", + "# updated the MTS main loop \n", + "\n", + "def mts_quant1(\n", + " N: int,\n", + " pop_size: int = 32,\n", + " initial_pop: np.ndarray = None, # for quantum algo output \n", + " p_combine: float = 0.7,\n", + " p_mut: float = 1.0/50.0,\n", + " mts_iters: int = 1000,\n", + " tabu_iters: int = 800,\n", + " tabu_tenure: int = 30,\n", + " candidate_size: int = 64,\n", + " target_E: int | None = None,\n", + " seed: int = 0,\n", + " verbose_every: int = 100,\n", + "):\n", + " ## change\n", + " rng = np.random.default_rng(seed)\n", + " ## check if have pop or not\n", + " if initial_pop is not None:\n", + " print(f\"Using Quantum-enhanced population (size: {len(initial_pop)})\")\n", + " pop = initial_pop.copy()\n", + " else:\n", + " print(\"Using Randomly generated population.\")\n", + " pop = rng.choice(np.array([-1, 1], dtype=np.int8), size=(pop_size, N))\n", + "\n", + " if pop.shape[0] < pop_size:\n", + " extra_count = pop_size - pop.shape[0]\n", + " extra = rng.choice(np.array([-1, 1], dtype=np.int8), size=(extra_count, N))\n", + " pop = np.vstack([pop, extra])\n", + " \n", + " # init population: k random bitstrings\n", + " #pop = rng.choice(np.array([-1, 1], dtype=np.int8), size=(pop_size, N))\n", + " pop_E = np.array([labs_energy_pm1(pop[i]) for i in range(pop_size)], dtype=np.int64)\n", + "\n", + " best_idx = int(np.argmin(pop_E))\n", + " best_s = pop[best_idx].copy()\n", + " best_E = int(pop_E[best_idx])\n", + "\n", + " trace = [best_E]\n", + " t0 = time.time()\n", + "\n", + " for it in range(1, mts_iters + 1):\n", + " if target_E is not None and best_E <= target_E:\n", + " break\n", + "\n", + " # ---- Make Child ----\n", + " if rng.random() < p_combine:\n", + " i1, i2 = rng.integers(0, pop_size, size=2)\n", + " child = combine_alg3(pop[i1], pop[i2], rng)\n", + " else:\n", + " i = int(rng.integers(0, pop_size))\n", + " child = pop[i].copy()\n", + "\n", + " # ---- Mutate Child ----\n", + " child = mutate_alg3(child, p_mut, rng)\n", + "\n", + " # ---- Tabu Search with Child ----\n", + " result_s, result_E = tabu_search_pm1(\n", + " child,\n", + " max_iters=tabu_iters,\n", + " tabu_tenure=tabu_tenure,\n", + " candidate_size=candidate_size,\n", + " rng=rng,\n", + " )\n", + "\n", + " # ---- Update best solution ----\n", + " if result_E < best_E:\n", + " best_E = int(result_E)\n", + " best_s = result_s.copy()\n", + "\n", + " # ---- Add result to Population ----\n", + " # randomly replace a member if result is better\n", + " r = int(rng.integers(0, pop_size))\n", + " if result_E < pop_E[r]:\n", + " pop[r] = result_s\n", + " pop_E[r] = result_E\n", + "\n", + " # (optional, helpful) elitism: keep global best in population\n", + " worst = int(np.argmax(pop_E))\n", + " if best_E < pop_E[worst]:\n", + " pop[worst] = best_s\n", + " pop_E[worst] = best_E\n", + "\n", + " trace.append(best_E)\n", + "\n", + " if verbose_every and (it % verbose_every == 0):\n", + " print(f\"[MTS {it:5d}] best_E={best_E} elapsed={time.time()-t0:.2f}s\")\n", + "\n", + " return {\n", + " \"best_s_pm1\": best_s,\n", + " \"best_s_01\": pm1_to_bits01(best_s),\n", + " \"best_E\": best_E,\n", + " \"best_trace\": np.array(trace, dtype=np.int64),\n", + " \"population_pm1\": pop,\n", + " \"population_E\": pop_E.copy(),\n", + " \"elapsed_sec\": time.time() - t0,\n", + " }\n", + "\n", + "# Run Just MTS\n", + "\n", + "N = 12\n", + "res = mts_labs_pm1(\n", + " N=N,\n", + " pop_size=32,\n", + " p_combine=0.7,\n", + " p_mut=1.0/50.0,\n", + " mts_iters=400,\n", + " tabu_iters=800,\n", + " tabu_tenure=30,\n", + " candidate_size=64,\n", + " seed=42,\n", + " verbose_every=50,\n", + ")\n", + "print(\"Classical MTS\")\n", + "visualize_mts(res)\n", + "\n", + "# Run cp + MTS \n", + "# test it\n", + "T=1 # total time\n", + "n_steps = 1 # number of trotter steps\n", + "dt = T / n_steps\n", + "# N\n", + "G2, G4 = get_interactions(N)\n", + "\n", + "thetas =[]\n", + "\n", + "for step in range(1, n_steps + 1):\n", + " t = step * dt\n", + " theta_val = utils.compute_theta(t, dt, T, N, G2, G4)\n", + " thetas.append(theta_val)\n", + "\n", + "# TODO - Sample your kernel to make sure it works\n", + "counts_6 = cudaq.sample(trotterized_circuit, N, G2, G4, n_steps, dt, T, thetas)\n", + "quantum_pop_list = []\n", + "for bitstring, count in counts_6.items():\n", + " bits_01 = np.array([int(b) for b in bitstring], dtype=np.int8)\n", + " s_pm1 = bits01_to_pm1(bits_01)\n", + " quantum_pop_list.append(s_pm1)\n", + "initial_quantum_pop = np.array(quantum_pop_list)\n", + "#N = \n", + "res = mts_quant1(\n", + " N=N,\n", + " pop_size=32,\n", + " initial_pop=initial_quantum_pop,\n", + " p_combine=0.7,\n", + " p_mut=1.0/50.0,\n", + " mts_iters=400,\n", + " tabu_iters=800,\n", + " tabu_tenure=30,\n", + " candidate_size=64,\n", + " seed=42,\n", + " verbose_every=50,\n", + ")\n", + "print(\"CP + MTS\")\n", + "visualize_mts(res)\n" ] }, { @@ -971,7 +1339,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 9, "id": "d34db9f4", "metadata": {}, "outputs": [ @@ -979,19 +1347,20 @@ "name": "stdout", "output_type": "stream", "text": [ - "--- Starting Validation Suite for N = 7 ---\n" - ] - }, - { - "ename": "NameError", - "evalue": "name 'labs_energy_pm1' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[3], line 60\u001b[0m\n\u001b[0;32m 57\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Expected: 2, Got: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00me_barker\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m (Match: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00me_barker\u001b[38;5;250m \u001b[39m\u001b[38;5;241m==\u001b[39m\u001b[38;5;250m \u001b[39m\u001b[38;5;241m2\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m)\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 59\u001b[0m \u001b[38;5;66;03m# Run the validation\u001b[39;00m\n\u001b[1;32m---> 60\u001b[0m validation_suite()\n", - "Cell \u001b[1;32mIn[3], line 12\u001b[0m, in \u001b[0;36mvalidation_suite\u001b[1;34m(N_val)\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[38;5;66;03m# 1. Symmetry Checks\u001b[39;00m\n\u001b[0;32m 8\u001b[0m \u001b[38;5;66;03m# LABS energy should be invariant under:\u001b[39;00m\n\u001b[0;32m 9\u001b[0m \u001b[38;5;66;03m# - Bit-flip: s -> -s\u001b[39;00m\n\u001b[0;32m 10\u001b[0m \u001b[38;5;66;03m# - Reversal: s_i -> s_{N-i+1}\u001b[39;00m\n\u001b[0;32m 11\u001b[0m test_seq \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39mchoice( [\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m1\u001b[39m], size \u001b[38;5;241m=\u001b[39m N_val)\n\u001b[1;32m---> 12\u001b[0m energy_orig \u001b[38;5;241m=\u001b[39m labs_energy_pm1(test_seq )\n\u001b[0;32m 14\u001b[0m \u001b[38;5;66;03m# Bit-flip symmetry\u001b[39;00m\n\u001b[0;32m 15\u001b[0m energy_flip \u001b[38;5;241m=\u001b[39m labs_energy_pm1(\u001b[38;5;241m-\u001b[39mtest_seq )\n", - "\u001b[1;31mNameError\u001b[0m: name 'labs_energy_pm1' is not defined" + "--- Starting Validation Suite for N = 7 ---\n", + "Symmetry Check:\n", + " Original Energy: 19\n", + " Bit-flip Energy: 19 (Match: True)\n", + " Reversal Energy: 19 (Match: True)\n", + " Both Match: 19 (Match: True)\n", + "\n", + "Quantum-Classical Cross-Reference:\n", + " Sampled Bitstring: 1001010 \n", + " Computed Energy: 23\n", + " Status: Success (Kernel produced valid measurable state)\n", + "\n", + "Known Solution Verification (N=4 Barker):\n", + " Expected: 2, Got: 2 (Match: True)\n" ] } ], @@ -1057,6 +1426,14 @@ "# Run the validation\n", "validation_suite()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "15bc79e9-120f-4b5a-b05a-7021aedf787a", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { From bc3f4c701700f8c4c2de323d24f75d0c82570747 Mon Sep 17 00:00:00 2001 From: Katie Jones Date: Sun, 1 Feb 2026 01:34:55 +0000 Subject: [PATCH 12/13] new validation file --- ...1_quantum_enhanced_optimization_LABS.ipynb | 209 ++++++------------ tutorial_notebook/validations.py | 53 +++++ 2 files changed, 120 insertions(+), 142 deletions(-) create mode 100644 tutorial_notebook/validations.py diff --git a/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb b/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb index bf2ae230..c3ce8f37 100644 --- a/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb +++ b/tutorial_notebook/01_quantum_enhanced_optimization_LABS.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "b1f70ff2-492a-41a4-97db-5da6d5775cb7", "metadata": {}, "outputs": [], @@ -61,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 22, "id": "bfc407dd-113d-485c-88db-7ddbad344ead", "metadata": {}, "outputs": [], @@ -140,61 +140,10 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 49, "id": "341c9a3f-565c-49ab-9903-0aa9a508722c", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "N=7 global minE and maxE (by brute force): 3 91\n", - "--- Very good (global optimal) ---\n", - "bits: 0001101\n", - "E: 3\n", - "Ck k=1..6: [0, -1, 0, -1, 0, -1]\n", - "aperiodic autocorr lags -6..+6: [-1, 0, -1, 0, -1, 0, 7, 0, -1, 0, -1, 0, -1]\n", - "\n", - "--- Very poor (max energy) ---\n", - "bits: 0000000\n", - "E: 91\n", - "Ck k=1..6: [6, 5, 4, 3, 2, 1]\n", - "aperiodic autocorr lags -6..+6: [1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1]\n", - "\n", - "[MTS 50] best_E=372 elapsed=54.16s\n", - "[MTS 100] best_E=372 elapsed=108.37s\n", - "[MTS 150] best_E=368 elapsed=162.49s\n", - "[MTS 200] best_E=316 elapsed=216.62s\n", - "[MTS 250] best_E=316 elapsed=270.59s\n", - "[MTS 300] best_E=316 elapsed=324.42s\n", - "[MTS 350] best_E=316 elapsed=378.45s\n", - "[MTS 400] best_E=316 elapsed=432.39s\n", - "Best E: 316\n", - "Best bitstring (0/1): 1001001011011011101010001000100101010010000001111100001110011100\n", - "Elapsed (s): 432.393\n" - ] - }, - { - "data": { - "image/png": "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cOzYMXWEqKKOHTuGzp07623r3Lkzjh07pretdevW6s/29vZwcnJCenq6QeciorvjpGoiqjIvvPACRowYAQB3nfNTEY0bN0bjxo3x4osvYty4cXjggQewYsWKSl2GA26GGgD47bffUL9+fb19NjY2eu/t7e313o8ePRoJCQmYOXMmmjRpAjs7OzzzzDPIz8+vVC3lsbKy0nuvKAqKioqq5FxE5oqBiIiqTFhYGPLz86EoCkJDQ412XF9fX9SuXRtXr16tUHtra2sAQGFhobrN398fNjY2OHPmDB599FGDzr9jxw4MGjQITz31FICb4erUqVMlznn7+UrTokUL7NixAzExMXrH9vf3N6geIrp3DEREVGVq1aqlXv6pVatWpY4xceJEXLt2DREREfDx8UFmZibmzZuHgoICdO/evULH8PHxgaIoWLNmDSIiImBnZwdHR0eMHj0ao0aNQlFRER555BFkZWVhx44dcHJy0gspd2ratClWrlyJyMhIKIqC8ePHlxix8fX1xbZt2xAVFQUbG5tSLxeOGTMG/fr1Q9u2bRESEoJff/0VK1eu1FuxRkT3B+cQEVGVcnJygpOTU6U//+ijj+Lff//FwIED0bx5c4SHh0Or1WL9+vVo1qxZhY5Rv359TJo0Ce+88w7c3d3Vy3jvv/8+xo8fjylTpqBFixYICwvDb7/9Bj8/v7seb9asWXBxcUGnTp0QGRmJ0NBQtGvXTq/Ne++9h1OnTqFx48aoV69eqcfp3bs35s6di5kzZ6Jly5b47LPPEB8fj27dulWoX0RkPIoQQsgugoiIiEgmjhARERGR2WMgIiIiIrPHQERERERmj4GIiIiIzB4DEREREZk9BiIiIiIyewxEREREZPYYiIiIiMjsMRARERGR2WMgIiIiIrPHQERERERmj4GIiIiIzN7/A15Tq4bFrpx9AAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAN21JREFUeJzt3Xd8VFX+//H3QGCAkEkCaURKQlCkSBExoFJFQmTpLIu4FAV1/QIKuKtkRQFZDSsK6C7luxZAEbEBuqKwdF2EKGBgo0v9BqUmtCTUUHJ+f/jI/BhSCCHJzMHX8/G4j0fuuWfu/dwzN8k7t0wcxhgjAAAAC5XzdgEAAADFRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkIFP2rt3rxwOh+bOnVuq24mKitKQIUNKdRtlYe7cuXI4HNq7d2+JrbOs3gNcv9J4/wsyZMgQRUVFuedzj5NXXnml1LctSRMmTJDD4SiTbcEOBBl4Re4P3vymsWPHeru8PC6vr1y5coqMjFTnzp21du1ab5d23RYsWKDp06d7uwwPQ4YMKfD4qFSpkrfLK1Vr16712F+n06nw8HC1b99eL730ko4cOVIi2zlz5owmTJjgk8ewL9cG3+Pn7QLw6/bCCy8oOjrao61x48aqU6eOzp49qwoVKnipsrzuu+8+DRo0SMYYpaamaubMmerYsaOWLl2q+Ph4b5dXbAsWLFBKSopGjRrl0e7t98DpdOrNN9/M016+fHkvVFP2nnjiCbVs2VKXLl3SkSNH9M0332j8+PGaOnWqPvzwQ3Xs2NHdd+DAgerfv7+cTmeR13/mzBlNnDhRktS+ffsiv+6NN95QTk5OkfsXR2G1jRs3zif/2IH3EGTgVfHx8brjjjvyXeZrf3nfcsst+v3vf++e79Wrl5o0aaLp06dbHWQK4u2zH35+fh7j7U2nT5+Wv79/mW6zTZs26tu3r0fb1q1b1blzZ/Xp00c//vijatSoIemXcFfaAS93DLz9x4Wfn5/8/PjVhf+PS0vwSfndnzFkyBBVrVpVBw4cUM+ePVW1alWFhobqj3/8oy5duuTx+ldeeUV33XWXqlevrsqVK6tFixb6+OOPS7TG2267TSEhIUpNTXW3rV69Wm3atJG/v7+CgoLUo0cP/fe///V4Xe41/u3bt6tfv35yuVyqXr26nnzySZ07d67QMcjlcDg0YcKEQuv79NNP1bVrV0VGRsrpdComJkaTJk3yGKv27dtr6dKl+umnn9yXMnLvfyho+9eyj7t379aQIUMUFBSkwMBAPfTQQzpz5kyhdV+L3EuU69ev15gxYxQaGip/f3/16tUr30swX375pbv2gIAAde3aVT/88INHn9zjbM+ePbr//vsVEBCgBx98UJJ09uxZPfHEEwoJCVFAQIC6d++uAwcOeLwfa9askcPh0OLFi/Nsf8GCBXI4HNqwYUOx9rdp06aaPn26MjIy9Pe//z3POFx+j8ymTZsUFxenkJAQVa5cWdHR0Xr44Ycl/fLehoaGSpImTpzofu9z96GwMbjyHpnLTZs2TXXq1FHlypXVrl07paSkeCxv3759vmd/Ll/n1WrL7x6ZixcvatKkSYqJiZHT6VRUVJT+/Oc/Kzs726NfVFSUfvOb3+jf//637rzzTlWqVEl169bVO++8k/+AwwrEWnhVZmamjh496tEWEhJSYP9Lly4pLi5OsbGxeuWVV7Ry5Uq9+uqriomJ0eOPP+7u99prr6l79+568MEHdf78eS1cuFC//e1v9fnnn6tr164lUvuJEyd04sQJ1atXT5K0cuVKxcfHq27dupowYYLOnj2rv/3tb7r77ru1ZcuWPD/8+/Xrp6ioKCUmJmrjxo16/fXXdeLEiRL7oTp37lxVrVpVY8aMUdWqVbV69Wo9//zzysrK0pQpUyRJzz77rDIzM7V//35NmzZNklS1atUC11mcfYyOjlZiYqK2bNmiN998U2FhYfrrX/9apH248tiQpIoVK8rlcnm0jRw5UsHBwRo/frz27t2r6dOna8SIEfrggw/cfd59910NHjxYcXFx+utf/6ozZ85o1qxZuueee/T999971H7x4kXFxcXpnnvu0SuvvKIqVapI+uUX7ocffqiBAweqVatWWrduXZ7jqX379qpVq5bee+899erVy2PZe++9p5iYGLVu3bpI+5+fvn37aujQofrXv/6lF198Md8+6enp6ty5s0JDQzV27FgFBQVp7969WrRokSQpNDRUs2bN0uOPP65evXqpd+/ekqQmTZpcdQwK8s477+jkyZMaPny4zp07p9dee00dO3bUf/7zH4WHhxd5/4pS25WGDRumefPmqW/fvnrqqaeUlJSkxMRE/fe//80TKHfv3u0ew8GDB+vtt9/WkCFD1KJFCzVq1KjIdcKHGMAL5syZYyTlOxljTGpqqpFk5syZ437N4MGDjSTzwgsveKyrefPmpkWLFh5tZ86c8Zg/f/68ady4senYsaNHe506dczgwYOvWq8kM3ToUHPkyBGTnp5ukpKSzL333mskmVdffdUYY0yzZs1MWFiYOXbsmPt1W7duNeXKlTODBg1yt40fP95IMt27d/fYxv/8z/8YSWbr1q0FjsHl9YwfP949nzueqampBY6BMcY89thjpkqVKubcuXPutq5du5o6derk6Zvf9q91Hx9++GGPdfbq1ctUr149z7aulPte5zfFxcXl2e9OnTqZnJwcd/vo0aNN+fLlTUZGhjHGmJMnT5qgoCDzyCOPeGzn8OHDJjAw0KM9d9tjx4716Lt582YjyYwaNcqjfciQIXnej4SEBON0Ot3bN8aY9PR04+fn59EvP2vWrDGSzEcffVRgn6ZNm5rg4OA845D7/i9evNhIMt99912B6zhy5EieunMVNAa5yy4/XnKPk8qVK5v9+/e725OSkowkM3r0aHdbu3btTLt27a66zsJqyz22ciUnJxtJZtiwYR79/vjHPxpJZvXq1e62OnXqGEnmq6++crelp6cbp9NpnnrqqTzbgh24tASvmjFjhlasWOExXc0f/vAHj/k2bdro//7v/zzaKleu7P76xIkTyszMVJs2bbRly5Zi1/rWW28pNDRUYWFhio2NdV/OGDVqlA4dOqTk5GQNGTJE1apVc7+mSZMmuu+++/TFF1/kWd/w4cM95keOHClJ+fYtjsvH4OTJkzp69KjatGmjM2fOaPv27de8vuLsY37v1bFjx5SVlXXV7VWqVCnPsbFixQpNnjw5T99HH33U43JDmzZtdOnSJf3000+SpBUrVigjI0MPPPCAjh496p7Kly+v2NhYrVmzJs86Lz/DJ0nLli2TJP3P//yPR3vu+3a5QYMGKTs72+Ny5gcffKCLFy+WyH0/VatW1cmTJwtcHhQUJEn6/PPPdeHChWJv58oxKEzPnj110003uefvvPNOxcbGltjxXJDc9Y8ZM8aj/amnnpIkLV261KO9YcOGatOmjXs+NDRU9evXz/MzBPbg0hK86s477yzwZt/8VKpUyX39PFdwcLBOnDjh0fb555/rL3/5i5KTkz2uk1/P50/06NFDI0aMkMPhUEBAgBo1auS+ATT3F2b9+vXzvK5BgwZavnx5nhtGb775Zo9+MTExKleuXIl9FsgPP/ygcePGafXq1XmCQ2Zm5jWvrzj7WLt2bY9+wcHBkn4Jl1deHrpS+fLl1alTpyLVVth2JGnXrl2S5PGkz+WurMXPz081a9b0aPvpp59Urly5PE/Z5V5avNytt96qli1b6r333tPQoUMl/XJZqVWrVvn2v1anTp1SQEBAgcvbtWunPn36aOLEiZo2bZrat2+vnj17asCAAUV+sim/MSjMlcez9MsN8h9++GGR11Ecue/LleMaERGhoKAg93Gb68pjRcr/ZwjsQZCBVYryZMbXX3+t7t27q23btpo5c6Zq1KihChUqaM6cOVqwYEGxt12zZs0i/2ItjitDVkGh68obm/OTkZGhdu3ayeVy6YUXXlBMTIwqVaqkLVu26Jlnnin1x2dzFfR+GWPKdDu5+/vuu+8qIiIiT78rn4JxOp0qV+76TlgPGjRITz75pPbv36/s7Gxt3LjR4wbd4rpw4YJ27typxo0bF9jH4XDo448/1saNG/XPf/5Ty5cv18MPP6xXX31VGzduLPQ+qFwlMQb51ZXfe1+UY7oo6y6KsjomUXYIMrjhfPLJJ6pUqZKWL1/u8dfnnDlzSm2bderUkSTt2LEjz7Lt27crJCQkz+O7u3bt8vjrfvfu3crJyXHfdJp7ViEjI8PjdVf+hZmftWvX6tixY1q0aJHatm3rbr/8CatcRf0FUJx99BUxMTGSpLCwsGKH0Tp16ignJ0epqakeZx92796db//+/ftrzJgxev/9992fx/O73/2uWNu+3Mcff6yzZ88qLi7uqn1btWqlVq1a6cUXX9SCBQv04IMPauHChRo2bFiJfzpu7lmvy+3cudPjJurg4OB8L+FceUxfS22578uuXbvUoEEDd3taWpoyMjLcxy1uXNwjgxtO+fLl5XA4PP7K27t3r5YsWVJq26xRo4aaNWumefPmeQSPlJQU/etf/9L999+f5zUzZszwmP/b3/4mSe7PpHG5XAoJCdFXX33l0W/mzJlXrSf3r87L/8o8f/58vq/19/cv0qWm4uyjr4iLi5PL5dJLL72U7z0jRfm03NzgcOUY5r5vVwoJCVF8fLzmz5+v9957T126dCn0ibyi2Lp1q0aNGqXg4OA891hd7sSJE3nOMDRr1kyS3Jdac59CujIoF9eSJUt04MAB9/y3336rpKQkj89YiomJ0fbt2z3Ge+vWrVq/fr3Huq6lttzj7spPp546daokldhTivBdnJHBDadr166aOnWqunTpogEDBig9PV0zZsxQvXr1tG3btlLb7pQpUxQfH6/WrVtr6NCh7keTAwMD8/3Ml9TUVHXv3l1dunTRhg0bNH/+fA0YMEBNmzZ19xk2bJgmT56sYcOG6Y477tBXX32lnTt3XrWWu+66S8HBwRo8eLCeeOIJORwOvfvuu/mePm/RooU++OADjRkzRi1btlTVqlXVrVu3EtnH63Hx4kXNnz8/32W9evW6prM/LpdLs2bN0sCBA3X77berf//+Cg0N1c8//6ylS5fq7rvvvuplnxYtWqhPnz6aPn26jh075n78Ovf9yO8swqBBg9wfajdp0qQi1yv9con03LlzunTpko4dO6b169frs88+U2BgoBYvXpzvJbJc8+bN08yZM9WrVy/FxMTo5MmTeuONN+Ryudy/+CtXrqyGDRvqgw8+0C233KJq1aqpcePGhV6yKky9evV0zz336PHHH1d2dramT5+u6tWr6+mnn3b3efjhhzV16lTFxcVp6NChSk9P1+zZs9WoUSOP+7iupbamTZtq8ODB+sc//uG+pPrtt99q3rx56tmzpzp06FCs/YFFvPjEFH7Fch8XLejx0IIev/b398/T98rHMY0x5q233jI333yzcTqd5tZbbzVz5szJt9+1PH49fPjwq/ZbuXKlufvuu03lypWNy+Uy3bp1Mz/++GO+9f7444+mb9++JiAgwAQHB5sRI0aYs2fPevQ9c+aMGTp0qAkMDDQBAQGmX79+Jj09vUiPX69fv960atXKVK5c2URGRpqnn37aLF++3Egya9ascfc7deqUGTBggAkKCjKS3I/BFvT497Xs45EjRzza86szP4U9fn356ws6jnIfYb58P3Pb4+LiTGBgoKlUqZKJiYkxQ4YMMZs2bfLYdn7HmTHGnD592gwfPtxUq1bNVK1a1fTs2dPs2LHDSDKTJ0/O0z87O9sEBwebwMDAPO9tQXJrz50qVKhgQkNDTdu2bc2LL75o0tPT87zmynHdsmWLeeCBB0zt2rWN0+k0YWFh5je/+Y3HfhpjzDfffGNatGhhKlas6HFMFTYGBT1+PWXKFPPqq6+aWrVqGafTadq0aeP+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Llyo06dPq3Xr1tf02smTJ6t69epq3ry5pkyZoosXLxbYNz09XUlJSQoLC9Ndd92l8PBwtWvXTv/+97+vdxesUFbjLEl33XWXPvjgAx0/flw5OTlauHChzp07p/bt21/HHtihOOO8ZcsWHThwQOXKlVPz5s1Vo0YNxcfHKyUlpcDXpKam6vDhw+rUqZO7LTAwULGxsdqwYcN174evK6txzk9mZqYcDsev5v/eleVY5+TkaODAgfrTn/6kRo0alUT59vF2kkLRbdu2zfj7+5vy5cubwMBAs3Tp0jx9CjtT8Oqrr5o1a9aYrVu3mlmzZpmgoCAzevToAre3YcMGI8lUq1bNvP3222bLli1m1KhRpmLFimbnzp0luWs+pazH2RhjTpw4YTp37mwkGT8/P+Nyuczy5ctLapd80vWM8/vvv28kmdq1a5uPP/7YbNq0yTzwwAOmevXq5tixY/lub/369UaSOXjwoEf7b3/7W9OvX78S2y9fU9bjfKWzZ8+a22+/3QwYMKAkdseneWOsX3rpJXPfffeZnJwcY0zxzgjbjiBjkezsbLNr1y6zadMmM3bsWBMSEmJ++OEHjz6F/YK90ltvvWX8/PzMuXPn8l2e+4M/ISHBo/22224zY8eOLfZ++LqyHmdjjBkxYoS58847zcqVK01ycrKZMGGCCQwMNNu2bbve3fFZ1zPO7733npFk/vd//9fddu7cORMSEmJmz56d7/Z+rUGmrMf5cufPnzfdunUzzZs3N5mZmSWyP76srMd606ZNJjw83Bw4cMDd9msMMlxaskjFihVVr149tWjRQomJiWratKlee+21Yq8vNjZWFy9e1N69e/NdXqNGDUlSw4YNPdobNGign3/+udjb9XVlPc579uzR3//+d7399tu699571bRpU40fP1533HGHZsyYUezt+rrrGef8jk2n06m6desWeGxGRERIktLS0jza09LS3MtuRGU9zrkuXLigfv366aefftKKFSvkcrmKvxOWKOux/vrrr5Wenq7atWvLz89Pfn5++umnn/TUU08pKirquvfHFgQZi+Xk5Cg7O7vYr09OTla5cuUUFhaW7/KoqChFRkZqx44dHu07d+5UnTp1ir1d25T2OJ85c0aS8jwJVr58eeXk5BR7u7a5lnFu0aKFnE6nx7F54cIF7d27t8BjMzo6WhEREVq1apW7LSsr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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "#TODO - Write code to perform MTS\n", "import numpy as np\n", @@ -307,6 +256,7 @@ "\n", " best_s = s.copy()\n", " best_E = int(E)\n", + " print(best_s)\n", "\n", " N = s.size\n", " tabu_until = np.zeros(N, dtype=np.int32)\n", @@ -350,6 +300,7 @@ " if E < best_E:\n", " best_E = int(E)\n", " best_s = s.copy()\n", + " print(best_s)\n", "\n", " return best_s, best_E\n", "\n", @@ -377,6 +328,7 @@ "\n", " best_idx = int(np.argmin(pop_E))\n", " best_s = pop[best_idx].copy()\n", + " print(best_s)\n", " best_E = int(pop_E[best_idx])\n", "\n", " trace = [best_E]\n", @@ -443,7 +395,7 @@ "# 5) Visualization: best curve + final population energy distribution\n", "\n", "def visualize_mts(res: dict):\n", - " print(\"Best E:\", res[\"best_E\"])\n", + " print(\"Best E Via Classification:\", res[\"best_E\"])\n", " print(\"Best bitstring (0/1):\", \"\".join(map(str, res[\"best_s_01\"].tolist())))\n", " print(\"Elapsed (s):\", f\"{res['elapsed_sec']:.3f}\")\n", "\n", @@ -492,11 +444,21 @@ " print(\"aperiodic autocorr lags -6..+6:\", ac.tolist())\n", " print()\n", "\n", + "\n", " print(\"N=7 global minE and maxE (by brute force):\", minE, maxE)\n", " show(good, \"Very good (global optimal)\")\n", " show(bad, \"Very poor (max energy)\")\n", " \n", - "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "da991c1b-0182-41d5-bcfe-1b24d197383d", + "metadata": {}, + "outputs": [], + "source": [ "# Example runs\n", "\n", "\n", @@ -522,7 +484,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 44, "id": "bb31d339-f315-4fcb-9fe9-99b2f523e081", "metadata": {}, "outputs": [ @@ -531,12 +493,12 @@ "output_type": "stream", "text": [ "Best E Found: 10\n", - "First reached at iteration: 1\n" + "First reached at iteration: 0\n" ] }, { "data": { - "image/png": "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", + "image/png": "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Kqv19MOvSAqf637i/ueroDBfR596kObNWaA3X/xAkjTrtzl659WPtffBO69126ufVy5JNVU1uvv6R+Tz+SVJHbu0j5wDHutnre50g4anGGy5w6baasexzd7/rz6dqqvOv12O40iSuvXsrL0P3lmVlVV67rHXVV1Vo/KyCv3roAv12YyXVVK65vnqv0z7TcWlRTrhrMNUU1Orpx96RcFgUI7j6L5b/y8hTffUr36Mut2hUztJktvj1oYjBmr46CFq275UbYoKVFVZrclf/qAv/5mx/s5rH9LBx+2tLt066siTD9D2u2+pay+8M7KtPQ/aUcNHD5EU/qKoMZ+9/7X6D+qtXfbZVtN/mBn5gmzFsjI988irOu3CY9Z7HwEg0Wi6ASAJFs5bHPm974CekcO318fAIX314Y/Pa96chfph8s9avHCZPF6PxmwxUj9O/TXynJ+8+1Wk6W44MnjVHResMUo1d/b8yGhzTYN1x241ao1zfmtrfVq+dOU661y5olxPPfhS5PbQkRvohY8eVEFhfmTZ/LkLlV+QF7n9xBt3qbqqRlMmTdOcWfNUWVGlHr27apNxI/Tua5/8s1+T1vncserUtb12P2AHvfL0RH363leaNuUXPffYa5KkwcMHJGUm7otvOFMHbHNipNlbVV6pT96dFNm/nNwcHX7ivvrPtac367SDxQuXRt3u3rNLk+t269Ul0nQvXrC0yfUuuOoUnXHRcZKkUy44SlsM3CeS/VMPvqwDjtxDh52w7xpN914H7rher9lN91+qfQ/bVVJ45HTKV9Mi99368OXaff8d5DiONum1W+Qc9R++nb7Opnv188oDgYCO2+fcSAZFxYV68s271aYo3OjF+lmrO92g4SkGG282PKbzyx+843+RhruwTYHe+OoJte/YVpK0/a5b6Kg9w18arFxepheeeEMnnHXYGttwuVx65t3/Ro6qycnJjow+/zB5erNraWjm9D91363/F3VOd8Pn22WfbSTVn3Lx58y/9NP3M7R8yQp5vB5tu+s4fffNT6quqlEgENSXH32r/Y/YXXsdtJMkRTXd2+y8+TpnL+/ao5Nen/R45IupXTc5XD99N+Offfw5rn0EgGSj6QYAI1YsW6lzjh2/xiHbq1s4r35W7DFbjNAv036TJB22y2kaNXaY+gzoqQGD+2jTLUdp8LD+kXVHbDxEOTnZqq316ZN3J2n74Qdp0LD+6juglzYcuYG22G4TdenWcZ11fvfVjwo0OIT61H8fE9VwS1pjVu4Hbn9St135gCorqprer78XN3nf+jjujEP0ytMT5TiOjt/vPK0qDx+ae+xpByfl+UaOGarXvnxMt131gD56+4vIudh1amtq9cjdz6i8rEK3PzI+KTWsy/5H7Bb5vU1RoXbYY0s991j4/Nofv/s1Kc/p8bi150E7Rm53790l0nR7vR7tss+2ksKNXs/eXSNNd9nK8piex3EcnX/CVfpo4peSwl9yPPzybVGXUovns7a+Go4gb7PzZpGGW5K23XWc2nUo1bIlKyRJU776USectcYmNHrssKjTWPpt0Cvye92XAbGaNnm6pjXRsJ97+b8izzd39nydeeSlmjxpWqPr1lmwnp/j/Q7fLepIkD4Dekaa7rIVq9Zr2wCQLDTdAJAEnbt11KzfwjNQ//nbHDmOs97nwZ5/4tXrbAIkqbbWH/n9wmtO05w/5+mjiV+qsqJKn73/tT57v34ir7FbjdLjr9+p/II8deneSbc+coUuP+tmLV+6MnJJszoFhfm68f5L1jmquHK1f9yv61JoE1/9WFdfcMc696tuVDLRRo4ZqpFjhuq7b36KjGCWtivWPoftkpTnk6QNR2ygh1+6VdVVNfr+m5809euf9Mm7kzTpkymRdV544g1dfss5Km1bvNZtdezcPur233MWaMhGAxtdd16Dic86dmnf6DqS1K5BwydJHTq2i/xeU13b6Hno66tdx7ZRlzHz/nMERt19brc7ctvtqf89FHJiep6rL7hDL/4zWut2u3X3k9escb3peD5r62vl8vpLvbXv1HaN+9t3ahtpuptqoLuv9lnLbpBR3Sj6+sjO9oav073pMB118gFRRzWcsP/5kYn61sbX4IiaeKz+96Th+zDqXHgASCPrf7wjAGAN47bbJPJ72YpyvfPPIdLxqqqsjjoPeovtxujzma9odu3XmhuYrI02HtLo49oUFeqJN+7SN7Pf1H3P3qB/X32q9j1s18hhy199OlX33vxEZP29D95Zk+dO1EufPKTrJvxHJ559uIaO3ECSVFlRpQtOvHqto9GS1jjXtOHEWI15/bl3I78XFObrf2/fo98qvtDcwGRdc3fLXNbquDMPibp92PH7Ki9v3Yd2r6+8/Fxtts3GOu3CY/TcB/frvPEnR90/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", "text/plain": [ "
" ] @@ -719,7 +681,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 25, "id": "c91bbaae-62a1-41e7-a285-af885627a942", "metadata": {}, "outputs": [], @@ -847,7 +809,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 26, "id": "abf34168-42f9-4dbf-86e1-99976232ad7e", "metadata": {}, "outputs": [ @@ -973,7 +935,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 27, "id": "8c2e6d7d-03b2-482f-bc36-d572e6d4855a", "metadata": {}, "outputs": [ @@ -982,8 +944,8 @@ "output_type": "stream", "text": [ "First 10 thetas: [1.5394042220828748e-18]\n", - "the size of population: 781\n", - "first 5 MTS instance: ['111111111111', '111111111001', '111111110111', '111111110010', '111111110001']\n" + "the size of population: 813\n", + "first 5 MTS instance: ['111111111111', '111111110111', '111111110010', '111111101110', '111111101010']\n" ] } ], @@ -1057,86 +1019,22 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 35, "id": "8e5f02e6-41bf-4634-9cb1-f0f543ef2e3f", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[MTS 50] best_E=10 elapsed=8.71s\n", - "[MTS 100] best_E=10 elapsed=17.41s\n", - "[MTS 150] best_E=10 elapsed=26.12s\n", - "[MTS 200] best_E=10 elapsed=34.80s\n", - "[MTS 250] best_E=10 elapsed=43.46s\n", - "[MTS 300] best_E=10 elapsed=52.07s\n", - "[MTS 350] best_E=10 elapsed=60.72s\n", - "[MTS 400] best_E=10 elapsed=69.41s\n", - "Classical MTS\n", - "Best E: 10\n", - "Best bitstring (0/1): 101000001100\n", - "Elapsed (s): 69.414\n" + "ename": "NameError", + "evalue": "name 'best_S' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[35], line 105\u001b[0m\n\u001b[1;32m 102\u001b[0m \u001b[38;5;66;03m# Run Just MTS\u001b[39;00m\n\u001b[1;32m 104\u001b[0m N \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m12\u001b[39m\n\u001b[0;32m--> 105\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[43mmts_labs_pm1\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 106\u001b[0m \u001b[43m \u001b[49m\u001b[43mN\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mN\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 107\u001b[0m \u001b[43m \u001b[49m\u001b[43mpop_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m32\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 108\u001b[0m \u001b[43m \u001b[49m\u001b[43mp_combine\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0.7\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 109\u001b[0m \u001b[43m \u001b[49m\u001b[43mp_mut\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1.0\u001b[39;49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[38;5;241;43m50.0\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 110\u001b[0m \u001b[43m \u001b[49m\u001b[43mmts_iters\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m400\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 111\u001b[0m \u001b[43m \u001b[49m\u001b[43mtabu_iters\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m800\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 112\u001b[0m \u001b[43m \u001b[49m\u001b[43mtabu_tenure\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 113\u001b[0m \u001b[43m \u001b[49m\u001b[43mcandidate_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m64\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 114\u001b[0m \u001b[43m \u001b[49m\u001b[43mseed\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m42\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 115\u001b[0m \u001b[43m \u001b[49m\u001b[43mverbose_every\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m50\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 116\u001b[0m \u001b[43m)\u001b[49m\n\u001b[1;32m 117\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mClassical MTS\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 118\u001b[0m visualize_mts(res)\n", + "Cell \u001b[0;32mIn[34], line 204\u001b[0m, in \u001b[0;36mmts_labs_pm1\u001b[0;34m(N, pop_size, p_combine, p_mut, mts_iters, tabu_iters, tabu_tenure, candidate_size, target_E, seed, verbose_every)\u001b[0m\n\u001b[1;32m 201\u001b[0m child \u001b[38;5;241m=\u001b[39m mutate_alg3(child, p_mut, rng)\n\u001b[1;32m 203\u001b[0m \u001b[38;5;66;03m# ---- Tabu Search with Child ----\u001b[39;00m\n\u001b[0;32m--> 204\u001b[0m result_s, result_E \u001b[38;5;241m=\u001b[39m \u001b[43mtabu_search_pm1\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 205\u001b[0m \u001b[43m \u001b[49m\u001b[43mchild\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 206\u001b[0m \u001b[43m \u001b[49m\u001b[43mmax_iters\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtabu_iters\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 207\u001b[0m \u001b[43m \u001b[49m\u001b[43mtabu_tenure\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtabu_tenure\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 208\u001b[0m \u001b[43m \u001b[49m\u001b[43mcandidate_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcandidate_size\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 209\u001b[0m \u001b[43m \u001b[49m\u001b[43mrng\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrng\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 210\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 212\u001b[0m \u001b[38;5;66;03m# ---- Update best solution ----\u001b[39;00m\n\u001b[1;32m 213\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result_E \u001b[38;5;241m<\u001b[39m best_E_Class:\n", + "Cell \u001b[0;32mIn[34], line 112\u001b[0m, in \u001b[0;36mtabu_search_pm1\u001b[0;34m(s0, max_iters, tabu_tenure, candidate_size, rng)\u001b[0m\n\u001b[1;32m 110\u001b[0m best_s \u001b[38;5;241m=\u001b[39m s\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[1;32m 111\u001b[0m best_E_Class \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mint\u001b[39m(E)\n\u001b[0;32m--> 112\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43mbest_S\u001b[49m)\n\u001b[1;32m 114\u001b[0m N \u001b[38;5;241m=\u001b[39m s\u001b[38;5;241m.\u001b[39msize\n\u001b[1;32m 115\u001b[0m tabu_until \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mzeros(N, dtype\u001b[38;5;241m=\u001b[39mnp\u001b[38;5;241m.\u001b[39mint32)\n", + "\u001b[0;31mNameError\u001b[0m: name 'best_S' is not defined" ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAHHCAYAAABKudlQAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAASMlJREFUeJzt3Xl8FdX9//H3QBZCVvYQCQmbYBAioiJCMUiABBo2FRCUsChasIoIVVS2Vr6Rui/8QFoFqQtUBUQslkU2FVTEiCgiYFhkFZAsQMKS8/uDZuBKQnJvEuZeeD0fj/sos9yZz8mkzbtnzpmxjDFGAAAAPqqC0wUAAACUBmEGAAD4NMIMAADwaYQZAADg0wgzAADApxFmAACATyPMAAAAn0aYAQAAPo0wAwAAfBphBsBlb8uWLerUqZPCw8NlWZbmz5/vdEkA3ECYAcrYzJkzZVmWLMvSp59+et52Y4yio6NlWZb++Mc/SpIGDhxof+dCn4EDB0qS8vPzNWvWLLVq1UpVq1ZVaGiorrzySg0YMEBr164ttsbfHzc4OFhxcXF68skndezYsTL9eZzr7bff1gsvvFBux/dUamqqvvvuO02aNEn/+te/dN1115X7ObOysjRx4kTFx8crJCREQUFBuvrqq/XII49oz5495X5+4FLi53QBwKWqUqVKevvtt9W2bVuX9StXrtQvv/yiwMBAe929996rxMREezkjI0Pjxo3T0KFD9Yc//MFe36BBA0nSAw88oClTpqh79+7q37+//Pz8tHnzZi1atEj169fXjTfeWGx9HTt21IABAyRJOTk5Wr16tcaOHatvv/1W7777bqnaXpS3335bGzdu1IgRI8rl+J44fvy41qxZo8cff1z333//RTnnzz//rMTERO3cuVO33367hg4dqoCAAG3YsEGvvfaa5s2bp59++umi1AJcEgyAMjVjxgwjyfTq1ctUr17dnDx50mX7PffcY1q2bGliYmJM165dCz3GV199ZSSZGTNmnLdt3759xrIsc88995y3LT8/3+zfv7/YGiWZ4cOHn7f+tttuMxUqVDDHjx8v9hie6Nq1q4mJiSmXY3tqx44dRpJ5+umny+yYOTk5RW47efKkiY+PN5UrVzarV68+b3tmZqZ57LHHyqSO48ePm9OnT5fJsQBvxm0moJzccccdOnTokJYsWWKvO3HihN577z3169fP4+NmZGTIGKM2bdqct82yLNWsWdPjY0dGRsqyLPn5uXbafvHFF0pKSlJ4eLgqV66sm2++WZ999pnLPtnZ2RoxYoRiY2MVGBiomjVrqmPHjlq/fr0kKSEhQR999JF27Nhh396KjY29YD0nT57UxIkT1ahRI1WqVEnVqlVT27ZtXX6mkvTJJ5/oD3/4g4KDgxUREaHu3btr06ZNxbZ3woQJiomJkSSNHj3apaYdO3Zo2LBhaty4sYKCglStWjXdfvvt2r59u8sxCm4rrly5UsOGDVPNmjVVp06dIs/5/vvv69tvv9Xjjz9+Xq+dJIWFhWnSpEn2cmxsrH178VwJCQlKSEiwl1esWCHLsjR79mw98cQTuuKKK1S5cmWtX79elmXpjTfeOO8Y//3vf2VZlhYuXGiv2717twYPHqxatWopMDBQTZs21euvv15kewBvwG0moJzExsaqdevWeuedd5ScnCxJWrRokTIzM9W3b1+99NJLHh234I/vu+++q9tvv12VK1f26Di5ubk6ePCgJOno0aP67LPP9MYbb6hfv34uYeaTTz5RcnKyWrZsqfHjx6tChQqaMWOGbrnlFq1evVo33HCDJOm+++7Te++9p/vvv19xcXE6dOiQPv30U23atEnXXnutHn/8cWVmZuqXX37R888/L0kKCQm5YI0TJkxQWlqa7r77bt1www3KysrSunXrtH79enXs2FGStHTpUiUnJ6t+/fqaMGGCjh8/rpdffllt2rTR+vXrLxiYevXqpYiICD300EO644471KVLF7umr776Sp9//rn69u2rOnXqaPv27Zo6daoSEhL0ww8/nPdzHzZsmGrUqKFx48bp6NGjRZ5zwYIFkqS77rrrgm331N/+9jcFBARo1KhRysvLU1xcnOrXr69///vfSk1Nddl3zpw5qlKlijp37ixJ2r9/v2688UZZlqX7779fNWrU0KJFizRkyBBlZWV51e1BwIXTXUPApabgNtNXX31lXnnlFRMaGmqOHTtmjDHm9ttvN+3btzfGGI9vMxljzIABA4wkU6VKFdOzZ0/zzDPPmE2bNpW4RkmFfnr06GFyc3Pt/fLz802jRo1M586dTX5+vr3+2LFjpl69eqZjx472uvDw8EJvXZ3L3dtM8fHxRf6MClxzzTWmZs2a5tChQ/a6b7/91lSoUMEMGDCg2HNkZGQU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ZT8C3lvMnDnzvLcEA/AOhBkAtoEDB8qyLN13333nbRs+fLgsy9LAgQMlSZZlXfAzYcIESdK8efN04403Kjw8XKGhoWratKlGjBhRZA3R0dHau3evrr76aknSihUrZFnWeS+1K0+xsbF64YUXXNb16dNHP/3000WrAUDJ+TldAADvEh0drdmzZ+v5559XUFCQJCk3N1dvv/226tata++3d+9e+99z5szRuHHjtHnzZntdSEiIli1bpj59+mjSpEnq1q2bLMvSDz/8oCVLlhR5/ooVK5bLW3WNMTp9+rT8/Dz7n72goCD75wHAu9AzA8DFtddeq+joaM2dO9deN3fuXNWtW1ctWrSw10VGRtqf8PBwWZblsi4kJEQffvih2rRpo9GjR6tx48a68sor1aNHD02ZMqXI8597m2n79u1q3769JKlKlSouPUP5+flKS0tTvXr1FBQUpPj4eL333nv2cQp6dBYtWqSWLVsqMDBQn376qbZt26bu3burVq1aCgkJ0fXXX6+lS5fa30tISNCOHTv00EMP2b1MUuG3maZOnaoGDRooICBAjRs31r/+9S+X7ZZl6Z///Kd69uypypUrq1GjRlqwYIF7FwRAsQgzAM4zePBgzZgxw15+/fXXNWjQILePExkZqe+//14bN270qI7o6Gi9//77kqTNmzdr7969evHFFyVJaWlpmjVrlqZNm6bvv/9eDz30kO68806tXLnS5RiPPvqonnrqKW3atEnNmzdXTk6OunTpomXLlumbb75RUlKSUlJStHPnTklngludOnX017/+VXv37nXpgTrXvHnz9OCDD+rhhx/Wxo0bde+992rQoEFavny5y34TJ05U7969tWHDBnXp0kX9+/fX4cOHPfp5AChCuby+EoBPSk1NNd27dzcHDhwwgYGBZvv27Wb79u2mUqVK5tdffzXdu3e33z5+rhkzZpjw8PDz1ufk5JguXboYSSYmJsb06dPHvPbaayY3N7fIGjIyMowk88033xhjzr4l/LfffrP3yc3NNZUrVzaff/65y3eHDBli7rjjDpfvzZ8/v9h2N23a1Lz88sv2ckxMjHn++ecv2MabbrrJ3HPPPS773H777aZLly72siTzxBNP2Ms5OTlGklm0aFGxNQEoOXpmAJynRo0a6tq1q2bOnKkZM2aoa9euql69utvHCQ4O1kcffaStW7fqiSeeUEhIiB5++GHdcMMNOnbsmMf1bd26VceOHVPHjh0VEhJif2bNmqVt27a57Hvddde5LOfk5GjUqFG66qqrFBERoZCQEG3atMnumSmpTZs2qU2bNi7r2rRpo02bNrmsa968uf3v4OBghYWF6cCBA26dC8CFMQAYQKEGDx6s+++/X5IuOMalJBo0aKAGDRro7rvv1uOPP64rr7xSc+bM8ejWlXQmkEjSRx99pCuuuMJlW2BgoMtycHCwy/KoUaO0ZMkSPfPMM2rYsKGCgoJ022236cSJEx7VUhx/f3+XZcuylJ+fXy7nAi5XhBkAhUpKStKJEydkWZY6d+5cZseNjY1V5cqVdfTo0RLtHxAQIEk6ffq0vS4uLk6BgYHauXOnbr75ZrfO/9lnn2ngwIHq2bOnpDPBaPv27eed89zzFeaqq67SZ599ptTUVJdjx8XFuVUPgNIjzAAoVMWKFe1bJhUrVvToGBMmTNCxY8fUpUsXxcTE6MiRI3rppZd08uRJdezYsUTHiImJkWVZWrhwobp06aKgoCCFhoZq1KhReuihh5Sfn6+2bdsqMzNTn332mcLCwlwCxu81atRIc+fOVUpKiizL0tixY8/rKYmNjdWqVavUt29fBQYGFnqLbfTo0erdu7datGihxMREffjhh5o7d67LzCgAFwdjZgAUKSwsTGFhYR5//+abb9bPP/+sAQMGqEmTJkpOTta+ffu0ePFiNW7cuETHuOKKKzRx4kQ9+uijqlWrln3r629/+5vGjh2rtLQ0XXXVVUpKStJHH32kevXqXfB4zz33nKpUqaKbbrpJKSkp6ty5s6699lqXff76179q+/btatCggWrUqFHocXr06KEXX3xRzzzzjJo2bapXX31VM2bMUEJCQonaBaDsWMYY43QRAAAAnqJnBgAA+DTCDAAA8GmEGQAA4NMIMwAAwKcRZgAAgE8jzAAAAJ9GmAEAAD6NMAMAAHwaYQYAAPg0wgwAAPBphBkAAODTCDMAAMCn/X9TASjcWTBwNQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAANn5JREFUeJzt3Xl8VNX9//H3hMAkQhbWLAIhBEQWAWUXWY2EpQgIX4tSCQpqaUAhWoUvKiC1oaJIsQG+bTVQAUGtoEWBslsRUEBARBAoaBBIAMnCFiA5vz98ZH4MWUhikpkTX8/H4z4e3HPPvfdzzwzJO3eZcRhjjAAAACzk4+kCAAAASoogAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADr3T06FE5HA7Nnz+/TPfToEEDjRgxokz3UR7mz58vh8Oho0ePlto2y+s1wM9XFq9/QUaMGKEGDRq45nPfJ6+88kqZ71uSpkyZIofDUS77gh0IMvCI3B+8+U0TJkzwdHl5XFufj4+PwsPD1atXL23cuNHTpf1sixcv1qxZszxdhpsRI0YU+P7w8/PzdHllauPGjW7H63Q6FRISou7du+uPf/yjTp06VSr7uXDhgqZMmeKV72Fvrg3ex9fTBeCX7cUXX1RkZKRbW4sWLRQREaGLFy+qcuXKHqosr3vuuUfDhw+XMUZHjhzRnDlz1LNnT3300Ufq06ePp8srscWLF2vv3r0aN26cW7unXwOn06m///3vedorVarkgWrK3xNPPKF27dopOztbp06d0meffabJkydr5syZeuedd9SzZ09X34ceekhDhw6V0+ks8vYvXLigqVOnSpK6d+9e5PX+9re/KScnp8j9S6Kw2p577jmv/GMHnkOQgUf16dNHbdu2zXeZt/3lfcstt+g3v/mNa37QoEFq2bKlZs2aZXWQKYinz374+vq6jbcnnT9/XlWrVi3XfXbp0kVDhgxxa9u9e7d69eqlwYMHa9++fQoLC5P0U7gr64CXOwae/uPC19dXvr786sL/x6UleKX87s8YMWKEqlWrph9++EEDBw5UtWrVVLt2bT399NPKzs52W/+VV17RnXfeqZo1a8rf319t2rTRe++9V6o13nbbbapVq5aOHDnialu/fr26dOmiqlWrKjg4WAMGDNA333zjtl7uNf79+/fr/vvvV2BgoGrWrKknn3xSly5dKnQMcjkcDk2ZMqXQ+j744AP169dP4eHhcjqdioqK0rRp09zGqnv37vroo4/03XffuS5l5N7/UND+i3OMhw4d0ogRIxQcHKygoCA9/PDDunDhQqF1F0fuJcrNmzcrPj5etWvXVtWqVTVo0KB8L8GsXLnSVXtAQID69eunr7/+2q1P7vvs8OHD6tu3rwICAjRs2DBJ0sWLF/XEE0+oVq1aCggI0L333qsffvjB7fXYsGGDHA6Hli1blmf/ixcvlsPh0JYtW0p0vK1atdKsWbOUlpamv/zlL3nG4dp7ZLZv366YmBjVqlVL/v7+ioyM1COPPCLpp9e2du3akqSpU6e6XvvcYyhsDK6/R+Zar732miIiIuTv769u3bpp7969bsu7d++e79mfa7d5o9ryu0fm6tWrmjZtmqKiouR0OtWgQQP97//+r7Kystz6NWjQQL/61a/06aefqn379vLz81PDhg31j3/8I/8BhxWItfCo9PR0nT592q2tVq1aBfbPzs5WTEyMOnTooFdeeUVr167Vq6++qqioKI0ePdrV789//rPuvfdeDRs2TJcvX9aSJUv0P//zP1qxYoX69etXKrWfPXtWZ8+eVaNGjSRJa9euVZ8+fdSwYUNNmTJFFy9e1Ouvv67OnTtr586deX7433///WrQoIESEhK0detWzZ49W2fPni21H6rz589XtWrVFB8fr2rVqmn9+vV64YUXlJGRoRkzZkiSJk2apPT0dB07dkyvvfaaJKlatWoFbrMkxxgZGamEhATt3LlTf//731WnTh396U9/KtIxXP/ekKQqVaooMDDQrW3s2LGqXr26Jk+erKNHj2rWrFkaM2aMli5d6urz1ltvKTY2VjExMfrTn/6kCxcuaO7cubrrrrv05ZdfutV+9epVxcTE6K677tIrr7yim266SdJPv3DfeecdPfTQQ+rYsaM2bdqU5/3UvXt31atXT4sWLdKgQYPcli1atEhRUVHq1KlTkY4/P0OGDNHIkSP173//Wy+99FK+fVJTU9WrVy/Vrl1bEyZMUHBwsI4ePar3339fklS7dm3NnTtXo0eP1qBBg3TfffdJklq2bHnDMSjIP/7xD2VmZiouLk6XLl3Sn//8Z/Xs2VNfffWVQkJCinx8RanteqNGjdKCBQs0ZMgQPfXUU9q2bZsS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1K5dO7e29u3b55lv3ry5FixYoAkTJmjhwoWKiIhQ165df/YxAfAcggyAUlO1alU1atSo0D6VK1d2m3c4HMrJyZEknTt3Tv3799ef/vSnPOuFhYW57ackRo0apcTERE2YMEFJSUl6+OGH5XA4Cl2nKMcEwHMIMgC8xh133KF//vOfatCggXx9i/7jqUmTJvr444/d2r744os8/X7zm9/omWee0ezZs7Vv3z7Fxsb+7JoBeBY3+wIoNVlZWTp58qTbdO0TRzcSFxenH3/8UQ888IC++OILHT58WKtXr9bDDz+s7OzsAtd7/PHHtX//fj377LP69ttv9c4772j+/PmS5HbGpXr16rrvvvv0+9//Xr169VLdunXL/JgAlC2CDIBSs2rVKoWFhblNd911V5HXDw8P1+bNm5Wdna1evXrptttu07hx4xQcHCwfn4J/XEVGRuq9997T+++/r5YtW2ru3Lmup5au/8yXkSNH6vLly3rkkUfK5ZgAlC2HMcZ4uggAKG0vvfSS5s2bp+TkZLf2t956S+PHj9fx48fL9IP0AJQP7pEBUCHMmTNH7dq1U82aNbV582bNmDFDY8aMcS2/cOGCTpw4oenTp+vxxx8nxAAVBJeWAFQIBw8e1IABA9SsWTNNmzZNTz31lKZMmeJa/vLLL+vWW29VaGioJk6c6LlCAZQqLi0BAABrcUYGAABYiyADAACsRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFjr/wGsHqgbZbvTwwAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Using Quantum-enhanced population (size: 791)\n", - "[MTS 50] best_E=10 elapsed=8.64s\n", - "[MTS 100] best_E=10 elapsed=17.20s\n", - "[MTS 150] best_E=10 elapsed=25.81s\n", - "[MTS 200] best_E=10 elapsed=34.39s\n", - "[MTS 250] best_E=10 elapsed=42.92s\n", - "[MTS 300] best_E=10 elapsed=51.59s\n", - "[MTS 350] best_E=10 elapsed=60.15s\n", - "[MTS 400] best_E=10 elapsed=68.73s\n", - "CP + MTS\n", - "Best E: 10\n", - "Best bitstring (0/1): 101001100000\n", - "Elapsed (s): 68.727\n" - ] - }, - { - "data": { - "image/png": "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TF4/efJkdOzYEX379q3QcWJjY6HVauWPj49PpdQr8bXZREREqqCanpmoqCikpKRgz5498roNGzZg+/btOHLkSIWPExMTgylTpsjLOp2u0gINwAHARERESlNFz0x0dDQ2btyIHTt2wNvbW16/fft2nDlzBs7OzrC2toa19b3sNXDgQAQFBZV6LI1GAycnJ71PZeAAYCIiInVQtGdGCIGXX34Z8fHx2LlzJ/z9/fW2T58+HS+++KLeuubNm2PhwoWIiIh4nKWWwAHARERE6qBomImKisLq1avx448/wtHREenp6QAArVYLOzs7eHh4lDrot27duiWCz+P3z3Nm2DVDRESkKEVvMy1duhRZWVkICgqCp6en/Fm7dq2SZVUIe2aIiIjUQfHbTI/jO5WBE7OJiIjUQRUDgC2R/DoDdWQrIiKiKothxkTMMkRERMpimDGSfJuJXTNERESKYpgxEgcAExERqQPDjJHkMMM0Q0REpCiGGSMVv2iSrzMgIiJSFsOMsTg3m4iISBUYZozEdzMRERGpA8OMkficGSIiInVgmDERswwREZGyGGaMdP82E+MMERGRkhhmjCRxADAREZEqMMwYSZ6azY4ZIiIiRTHMGIk9M0REROrAMGMkecwMhwATEREpimHGWHydARERkSowzJiIWYaIiEhZDDNGuj8AmHGGiIhISQwzRpLfmq1sGURERFUew4yR5MlMTDNERESKYpgxksS52URERKrAMGMk3mYiIiJSB4YZI/HdTEREROrAMGMiRhkiIiJlMcwYSeJD84iIiFSBYcZo/zxnhn0zREREimKYMRJ7ZoiIiNSBYcZInJhNRESkDgwzRip+zgx7ZoiIiJTFMGMk9swQERGpA8OMificGSIiImUpGmZiY2PRtm1bODo6ws3NDf369UNqaqq8PTMzEy+//DIaNWoEOzs71K1bF6+88gqysrIUrPoePgGYiIhIHRQNM4mJiYiKisK+ffuQkJCAgoIC9OzZE7m5uQCAS5cu4dKlS3j//feRkpKCFStWYPPmzRg7dqySZQMAJHDMDBERkRpIQkX3Sa5evQo3NzckJiaiS5cupe7z3Xff4fnnn0dubi6sra3LPaZOp4NWq0VWVhacnJzMVmvKxSw8u3gP3J002P9GiNmOS0RERIb9/S4/DTxGxbePXFxcHrmPk5NTmUEmPz8f+fn58rJO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7JkhIiJSjsHPmRk+fDjGjx+PF154Aenp6QgJCUGzZs3w9ddfIz09XQ4iFREUFFTu03PHjBmDMWPGGFrmY8GZ2URERMozuGcmJSUF7dq1AwB8++23aN68OX799Vd8/fXXWLFihbnrUzUOACYiIlKewWGmoKBAHi+zdetW9OnTBwDQuHFjXL582bzVqRzfzURERKQ8g8NM06ZNsWzZMuzevRsJCQnydOxLly6hVq1aZi9QzXibiYiISHkGh5kFCxbg008/RVBQEIYNG4bAwEAAwIYNG+TbT1WFfJuJHTNERESKMXgAcFBQEK5duwadToeaNWvK68ePH48aNWqYtTi1k28zcdQMERGRYgzumQHujRE5dOgQPv30U2RnZwO495C7qhZmirFnhoiISDkG98ycO3cOYWFhOH/+PPLz89GjRw84OjpiwYIFyM/Pf+R7k4iIiIjMzeCemVdffRVPP/00bty4ATs7O3l9//79sW3bNrMWp3bFL9xkzwwREZFyDO6Z2b17N3799VfY2trqrffz88PFixfNVpgluP86AyIiIlKKwT0zRUVFKCwsLLH+77//hqOjo1mKshR8zgwREZHyDA4zPXv2xEcffSQvS5KEnJwczJ49G7169TJnbarHnhkiIiLlGXyb6YMPPkBoaCgCAgKQl5eH4cOH49SpU3B1dcU333xTGTWqlnR/bjYREREpxOAw4+3tjaNHj2Lt2rU4evQocnJyMHbsWIwYMUJvQHBVwufMEBERKcfgMAMA1tbWGDFiBEaMGGHueiwK32ZARESkPIPDzPXr1+V3MF24cAGfffYZbt++jYiICHTp0sXsBarZ/QHAytZBRERUlVV4APDvv/8OPz8/uLm5oXHjxkhOTkbbtm2xcOFCLF++HN27d8f69esrsVQ1+uc5MwpXQUREVJVVOMz85z//QfPmzbFr1y4EBQXh2WefRe/evZGVlYUbN27gpZdewvz58yuzVtVhzwwREZHyKnyb6cCBA9i+fTtatGiBwMBALF++HBMnToSV1b089PLLL+OZZ56ptELV6P7UbKYZIiIipVS4ZyYzMxMeHh4AAAcHB9jb2+u9NbtmzZrySyerCvbMEBERKc+gh+bJz1UpY7mqkThmhoiISHEGzWYaNWoUNBoNACAvLw8TJkyAvb09ACA/P9/81RERERGVo8JhJjIyUm/5+eefL7HPyJEjTa/IgsgdU7zPREREpJgKh5m4uLjKrMMi8W0GREREyjP4RZN0nzxmhmmGiIhIMQwzppBnMzHNEBERKYVhxgT3nzNDRERESmGYMUHx1HR2zBARESmHYYaIiIgsGsOMCXibiYiISHkMMyaQOACYiIhIcQwzJqjaL3MgIiJSB0XDzK5duxAREQEvLy9IkoT169eXue+ECRMgSRI++uijx1ZfeTgAmIiISHmKhpnc3FwEBgZiyZIlj9wvPj4e+/btg5eX12OqrGLuj5lhmiEiIlKKQS+aNLfw8HCEh4c/cp+LFy/i5Zdfxv/+9z/07t37MVVWQfKYGWXLICIiqsoUDTPlKSoqwgsvvIBp06ahadOmFfpOfn6+3hu8dTpdZZVHREREKqDqAcALFiyAtbU1XnnllQp/JzY2FlqtVv74+PhUWn3yu5kq7QxERERUHtWGmUOHDmHRokVYsWKFPNC2ImJiYpCVlSV/Lly4UGk1SrzNREREpDjVhpndu3cjIyMDdevWhbW1NaytrXHu3Dm89tpr8PPzK/N7Go0GTk5Oep/KwgHAREREylPtmJkXXngBISEheutCQ0PxwgsvYPTo0QpVpY89M0RERMpTNMzk5OTg9OnT8nJaWhqSk5Ph4uKCunXrolatWnr729jYwMPDA40aNXrcpZZK4mPziIiIFKdomDl48CC6desmL0+ZMgUAEBkZiRUrVihUVcXxdQZERETKUzTMBAUFGRQEzp49W3nFEBERkUVS7QBgS8AxM0RERMpjmDEJnzNDRESkNIYZE7BnhoiISHkMMybgc2aIiIiUxzBjAvbMEBERKY9hxgR8NxMREZHyGGaIiIjIojHMmEB+/yXvMxERESmGYcYE9wcAExERkVIYZkwg/dM1w44ZIiIi5TDMmAGnZhMRESmHYcYEnJpNRESkPIYZE3BqNhERkfIYZoiIiMiiMcyYgLeZiIiIlMcwYwK+m4mIiEh5DDMmkPigGSIiIsUxzJhAfs6MwnUQERFVZQwzJrj/NgPGGSIiIqUwzJiCA4CJiIgUxzBjAknumyEiIiKlMMyYATtmiIiIlMMwYwI+Z4aIiEh5DDMm4HNmiIiIlMcwYwL2zBARESmPYcYEHABMRESkPIYZE9zvmWHXDBERkVIYZkzAfhkiIiLlMcyYAftliIiIlMMwY4ridzMxzRARESmGYcYEnJpNRESkPEXDzK5duxAREQEvLy9IkoT169fL2woKCvD666+jefPmsLe3h5eXF0aOHIlLly4pV/BDODWbiIhIeYqGmdzcXAQGBmLJkiUltt26dQuHDx/GzJkzcfjwYaxbtw6pqano06ePApWWrnhqNrMMERGRcqyVPHl4eDjCw8NL3abVapGQkKC37pNPPkG7du1w/vx51K1b93GU+EjsmSEiIlKeomHGUFlZWZAkCc7OzmXuk5+fj/z8fHlZp9NVWj2cmk1ERKQ8ixkAnJeXh9dffx3Dhg2Dk5NTmfvFxsZCq9XKHx8fn8dQHbtmiIiIlGIRYaagoACDBw+GEAJLly595L4xMTHIysqSPxcuXKi0unibiYiISHmqv81UHGTOnTuH7du3P7JXBgA0Gg00Gs1jqU3ic2aIiIgUp+owUxxkTp06hR07dqBWrVpKl1QqPmeGiIhIOYqGmZycHJw+fVpeTktLQ3JyMlxcXODp6YnnnnsOhw8fxsaNG1FYWIj09HQAgIuLC2xtbZUqW8bbTERERMpTNMwcPHgQ3bp1k5enTJkCAIiMjMScOXOwYcMGAEDLli31vrdjxw4EBQU9rjLLxOfMEBERKU/RMBMUFATxiG6NR21TA4lzs4mIiBRnEbOZ1E7lmYuIiOiJxjBjAr5okoiISHkMMyaQ7qcZIiIiUgjDjAk4AJiIiEh5DDMmuD81m3GGiIhIKQwzZsAoQ0REpByGGRNInJtNRESkOIYZM+BdJiIiIuUwzJiAk5mIiIiUxzBjAg4AJiIiUh7DjAnYM0NERKQ8hhkTyAOAmWaIiIgUwzBjgvtZhmmGiIhIKQwzJuDEbCIiIuUxzJgBx/8SEREph2HGFP/cZ2KYISIiUg7DjAnuz2ZimiEiIlIKw4wJ7j9nRtk6iIiIqjKGGRNI//TNMMsQEREph2HGBOyZISIiUh7DjAk4NZuIiEh5DDMmkOQ0w64ZIiIipTDMmAFvMxERESmHYcYEHABMRESkPIYZU8gDgBlniIiIlMIwY4L7D80jIiIipTDMmEDi6wyIiIgUxzBjAk7NJiIiUh7DjAnkh+YpWwYREVGVxjBjBhwATEREpByGGRNIvM9ERESkOEXDzK5duxAREQEvLy9IkoT169frbRdCYNasWfD09ISdnR1CQkJw6tQpZYothfycGXbMEBERKUbRMJObm4vAwEAsWbKk1O3vvvsuPv74Yyxbtgz79++Hvb09QkNDkZeX95grLd39MTNMM0REREqxVvLk4eHhCA8PL3WbEAIfffQR3nzzTfTt2xcAsHLlSri7u2P9+vUYOnTo4yz1kfIKivD3jVtKl0FERKQIR40NtDVsFDu/omHmUdLS0pCeno6QkBB5nVarRfv27ZGUlFRmmMnPz0d+fr68rNPpKq3G4ufMHDp3A50X7Ki08xAREanZxKD6+E9YY8XOr9owk56eDgBwd3fXW+/u7i5vK01sbCzmzp1bqbUVa+NbE3VdauCKTh23vYiIiJRgbaXsjBjVhhljxcTEYMqUKfKyTqeDj49PpZyrjrMddv2nW6Ucm4iIiCpGtVOzPTw8AABXrlzRW3/lyhV5W2k0Gg2cnJz0PkRERPTkUm2Y8ff3h4eHB7Zt2yav0+l02L9/Pzp06KBgZURERKQmit5mysnJwenTp+XltLQ0JCcnw8XFBXXr1sWkSZPwzjvvoGHDhvD398fMmTPh5eWFfv36KVc0ERERqYqiYebgwYPo1u3+mJPisS6RkZFYsWIF/vOf/yA3Nxfjx4/HzZs30blzZ2zevBnVq1dXqmQiIiJSGUk84S8W0ul00Gq1yMrK4vgZIiIiC2HI32/VjpkhIiIiqgiGGSIiIrJoDDNERERk0RhmiIiIyKIxzBAREZFFY5ghIiIii8YwQ0RERBaNYYaIiIgsGsMMERERWTRFX2fwOBQ/4Fin0ylcCREREVVU8d/tiryo4IkPM9nZ2QAAHx8fhSshIiIiQ2VnZ0Or1T5ynyf+3UxFRUW4dOkSHB0dIUmSWY+t0+ng4+ODCxcuPJHvfWL7LN+T3ka2z/I96W1k+4wnhEB2dja8vLxgZfXoUTFPfM+MlZUVvL29K/UcTk5OT+QvaTG2z/I96W1k+yzfk95Gts845fXIFOMAYCIiIrJoDDNERERk0RhmTKDRaDB79mxoNBqlS6kUbJ/le9LbyPZZvie9jWzf4/HEDwAmIiKiJxt7ZoiIiMiiMcwQERGRRWOYISIiIovGMENEREQWjWHGSEuWLIGfnx+qV6+O9u3b47ffflO6JKPMmTMHkiTpfRo3bixvz8vLQ1RUFGrVqgUHBwcMHDgQV65cUbDi8u3atQsRERHw8vKCJElYv3693nYhBGbNmgVPT0/Y2dkhJCQEp06d0tsnMzMTI0aMgJOTE5ydnTF27Fjk5OQ8xlaUrbz2jRo1qsQ1DQsL09tHze2LjY1F27Zt4ejoCDc3N/Tr1w+pqal6+1Tk9/L8+fPo3bs3atSoATc3N0ybNg137959nE0pVUXaFxQUVOIaTpgwQW8ftbYPAJYuXYoWLVrID1Lr0KEDNm3aJG+35OsHlN8+S79+D5s/fz4kScKkSZPkdaq7hoIMtmbNGmFrayu+/PJLcfz4cTFu3Djh7Owsrly5onRpBps9e7Zo2rSpuHz5svy5evWqvH3ChAnCx8dHbNu2TRw8eFA888wzomPHjgpWXL5ffvlFzJgxQ6xbt04AEPHx8Xrb58+fL7RarVi/fr04evSo6NOnj/D39xe3b9+W9wkLCxOBgYFi3759Yvfu3aJBgwZi2LBhj7klpSuvfZGRkSIsLEzvmmZmZurto+b2hYaGiri4OJGSkiKSk5NFr169RN26dUVOTo68T3m/l3fv3hXNmjUTISEh4siRI+KXX34Rrq6uIiYmRokm6alI+7p27SrGjRundw2zsrLk7WpunxBCbNiwQfz888/i5MmTIjU1VbzxxhvCxsZGpKSkCCEs+/oJUX77LP36Pei3334Tfn5+okWLFuLVV1+V16vtGjLMGKFdu3YiKipKXi4sLBReXl4iNjZWwaqMM3v2bBEYGFjqtps3bwobGxvx3XffyetOnDghAIikpKTHVKFpHv5jX1RUJDw8PMR7770nr7t586bQaDTim2++EUII8ccffwgA4sCBA/I+mzZtEpIkiYsXLz622iuirDDTt2/fMr9jSe0TQoiMjAwBQCQmJgohKvZ7+csvvwgrKyuRnp4u77N06VLh5OQk8vPzH28DyvFw+4S498fwwT8cD7Ok9hWrWbOm+Pzzz5+461esuH1CPDnXLzs7WzRs2FAkJCTotUmN15C3mQx0584dHDp0CCEhIfI6KysrhISEICkpScHKjHfq1Cl4eXmhXr16GDFiBM6fPw8AOHToEAoKCvTa2rhxY9StW9di25qWlob09HS9Nmm1WrRv315uU1JSEpydnfH000/L+4SEhMDKygr79+9/7DUbY+fOnXBzc0OjRo3w73//G9evX5e3WVr7srKyAAAuLi4AKvZ7mZSUhObNm8Pd3V3eJzQ0FDqdDsePH3+M1Zfv4fYV+/rrr+Hq6opmzZohJiYGt27dkrdZUvsKCwuxZs0a5ObmokOHDk/c9Xu4fcWehOsXFRWF3r17610rQJ3/HXziXzRpbteuXUNhYaHeBQIAd3d3/PnnnwpVZbz27dtjxYoVaNSoES5fvoy5c+fiX//6F1JSUpCeng5bW1s4Ozvrfcfd3R3p6enKFGyi4rpLu37F29LT0+Hm5qa33draGi4uLhbR7rCwMAwYMAD+/v44c+YM3njjDYSHhyMpKQnVqlWzqPYVFRVh0qRJ6NSpE5o1awYAFfq9TE9PL/UaF29Ti9LaBwDDhw+Hr68vvLy8cOzYMbz++utITU3FunXrAFhG+37//Xd06NABeXl5cHBwQHx8PAICApCcnPxEXL+y2gc8GddvzZo1OHz4MA4cOFBimxr/O8gwU8WFh4fL/27RogXat28PX19ffPvtt7Czs1OwMjLW0KFD5X83b94cLVq0QP369bFz504EBwcrWJnhoqKikJKSgj179ihdSqUoq33jx4+X/928eXN4enoiODgYZ86cQf369R93mUZp1KgRkpOTkZWVhe+//x6RkZFITExUuiyzKat9AQEBFn/9Lly4gFdffRUJCQmoXr260uVUCG8zGcjV1RXVqlUrMWr7ypUr8PDwUKgq83F2dsZTTz2F06dPw8PDA3fu3MHNmzf19rHkthbX/ajr5+HhgYyMDL3td+/eRWZmpkW2u169enB1dcXp06cBWE77oqOjsXHjRuzYsQPe3t7y+or8Xnp4eJR6jYu3qUFZ7StN+/btAUDvGqq9fba2tmjQoAHatGmD2NhYBAYGYtGiRU/M9SurfaWxtOt36NAhZGRkoHXr1rC2toa1tTUSExPx8ccfw9raGu7u7qq7hgwzBrK1tUWbNm2wbds2eV1RURG2bdumd7/UUuXk5ODMmTPw9PREmzZtYGNjo9fW1NRUnD9/3mLb6u/vDw8PD7026XQ67N+/X25Thw4dcPPmTRw6dEjeZ/v27SgqKpL/R8mS/P3337h+/To8PT0BqL99QghER0cjPj4e27dvh7+/v972ivxedujQAb///rteaEtISICTk5N8K0Ap5bWvNMnJyQCgdw3V2r6yFBUVIT8/3+KvX1mK21caS7t+wcHB+P3335GcnCx/nn76aYwYMUL+t+quodmHFFcBa9asERqNRqxYsUL88ccfYvz48cLZ2Vlv1LaleO2118TOnTtFWlqa2Lt3rwgJCRGurq4iIyNDCHFv+l3dunXF9u3bxcGDB0WHDh1Ehw4dFK760bKzs8WRI0fEkSNHBADx4YcfiiNHjohz584JIe5NzXZ2dhY//vijOHbsmOjbt2+pU7NbtWol9u/fL/bs2SMaNmyomqnLj2pfdna2mDp1qkhKShJpaWli69atonXr1qJhw4YiLy9PPoaa2/fvf/9baLVasXPnTr2prbdu3ZL3Ke/3snhaaM+ePUVycrLYvHmzqF27tiqmvpbXvtOnT4u33npLHDx4UKSlpYkff/xR1KtXT3Tp0kU+hprbJ4QQ06dPF4mJiSItLU0cO3ZMTJ8+XUiSJLZs2SKEsOzrJ8Sj2/ckXL/SPDxDS23XkGHGSIsXLxZ169YVtra2ol27dmLfvn1Kl2SUIUOGCE9PT2Frayvq1KkjhgwZIk6fPi1vv337tpg4caKoWbOmqFGjhujfv7+4fPmyghWXb8eOHQJAiU9kZKQQ4t707JkzZwp3d3eh0WhEcHCwSE1N1TvG9evXxbBhw4SDg4NwcnISo0ePFtnZ2Qq0pqRHte/WrVuiZ8+eonbt2sLGxkb4+vqKcePGlQjaam5faW0DIOLi4uR9KvJ7efbsWREeHi7s7OyEq6ureO2110RBQcFjbk1J5bXv/PnzokuXLsLFxUVoNBrRoEEDMW3aNL3nlAih3vYJIcSYMWOEr6+vsLW1FbVr1xbBwcFykBHCsq+fEI9u35Nw/UrzcJhR2zWUhBDC/P09RERERI8Hx8wQERGRRWOYISIiIovGMENEREQWjWGGiIiILBrDDBEREVk0hhkiIiKyaAwzREREZNEYZohIVc6ePQtJkuRHwKvFihUrSrwlmIjUgWGGiGSjRo2CJEmYMGFCiW1RUVGQJAmjRo0CAEiS9MjPnDlzAADx8fF45plnoNVq4ejoiKZNm2LSpEll1uDj44PLly+jWbNmAICdO3dCkqQSL7WrTH5+fvjoo4/01g0ZMgQnT558bDUQUcVZK10AEamLj48P1qxZg4ULF8LOzg4AkJeXh9WrV6Nu3bryfpcvX5b/vXbtWsyaNQupqanyOgcHB2zbtg1DhgzBvHnz0KdPH0iShD/++AMJCQllnr9atWqV8lZdIQQKCwthbW3c/+zZ2dnJPw8iUhf2zBCRntatW8PHxwfr1q2T161btw5169ZFq1at5HUeHh7yR6vVQpIkvXUODg746aef0KlTJ0ybNg2NGjXCU089hX79+mHJkiVlnv/B20xnz55Ft27dAAA1a9bU6xkqKipCbGws/P39YWdnh8DAQHz//ffycYp7dDZt2oQ2bdpAo9Fgz549OHPmDPr27Qt3d3c4ODigbdu22Lp1q/y9oKAgnDt3DpMnT5Z7mYDSbzMtXboU9evXh62tLRo1aoT//ve/etslScLnn3+O/v37o0aNGmjYsCE2bNhg2AUhonIxzBBRCWPGjEFcXJy8/OWXX2L06NEGH8fDwwPHjx9HSkqKUXX4+Pjghx9+AACkpqbi8uXLWLRoEQAgNjYWK1euxLJly3D8+HFMnjwZzz//PBITE/WOMX36dMyfPx8nTpxAixYtkJOTg169emHbtm04cuQIwsLCEBERgfPnzwO4F9y8vb3x1ltv4fLly3o9UA+Kj4/Hq6++itdeew0pKSl46aWXMHr0aOzYsUNvv7lz52Lw4ME4duwYevXqhREjRiAzM9OonwcRlaFSXl9JRBYpMjJS9O3bV2RkZAiNRiPOnj0rzp49K6pXry6uXr0q+vbtK799/EFxcXFCq9WWWJ+TkyN69eolAAhfX18xZMgQ8cUXX4i8vLwya0hLSxMAxJEjR4QQ998SfuPGDXmfvLw8UaNGDfHrr7/qfXfs2LFi2LBhet9bv359ue1u2rSpWLx4sbzs6+srFi5c+Mg2duzYUYwbN05vn0GDBolevXrJywDEm2++KS/n5OQIAGLTpk3l1kREFceeGSIqoXbt2ujduzdWrFiBuLg49O7dG66urgYfx97eHj///DNOnz6NN998Ew4ODnjttdfQrl073Lp1y+j6Tp8+jVu3bqFHjx5wcHCQPytXrsSZM2f09n366af1lnNycjB16lQ0adIEzs7OcHBwwIkTJ+SemYo6ceIEOnXqpLeuU6dOOHHihN66Fi1ayP+2t7eHk5MTMjIyDDoXET0aBwATUanGjBmD6OhoAHjkGJeKqF+/PurXr48XX3wRM2bMwFNPPYW1a9cadesKuBdIAODnn39GnTp19LZpNBq9ZXt7e73lqVOnIiEhAe+//z4aNGgAOzs7PPfcc7hz545RtZTHxsZGb1mSJBQVFVXKuYiqKoYZIipVWFgY7ty5A0mSEBoaarbj+vn5oUaNGsjNza3Q/ra2tgCAwsJCeV1AQAA0Gg3Onz+Prl27GnT+vXv3YtSoUejfvz+Ae8Ho7NmzJc754PlK06RJE+zduxeRkZF6xw4ICDCoHiIyHcMMEZWqWrVq8i2TatWqGXWMOXPm4NatW+jVqxd8fX1x8+ZNfPzxxygoKECPHj0qdAxfX19IkoSNGzeiV69esLOzg6OjI6ZOnYrJkyejqKgInTt3RlZWFvbu3QsnJye9gPGwhg0bYt26dYiIiIAkSZg5c2aJnhI/Pz/s2rULQ4cOhUajKfUW27Rp0zB48GC0atUKISEh+Omnn7Bu3Tq9mVFE9HhwzAwRlcnJyQlOTk5Gf79r167466+/MHLkSDRu3Bjh4eFIT0/Hli1b0KhRowodo06dOpg7dy6mT58Od3d3+dbX22+/jZkzZyI2NhZNmjRBWFgYfv75Z/j7+z/yeB9++CFq1qyJjh07IiIiAqGhoWjdurXePm+99RbOnj2L+vXro3bt2qUep1+/fli0aBHef/99NG3aFJ9++ini4uIQFBRUoXYRkflIQgihdBFERERExmLPDBEREVk0hhkiIiKyaAwzREREZNEYZoiIiMiiMcwQERGRRWOYISIiIovGMENEREQWjWGGiIiILBrDDBEREVk0hhkiIiKyaAwzREREZNEYZoiIiMii/X+7qAvdk1HOrAAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAANn5JREFUeJzt3Xl8VNX9//H3hMAkQhbWLAIhBEQWAWUXWY2EpQgIX4tSCQpqaUAhWoUvKiC1oaJIsQG+bTVQAUGtoEWBslsRUEBARBAoaBBIAMnCFiA5vz98ZH4MWUhikpkTX8/H4z4e3HPPvfdzzwzJO3eZcRhjjAAAACzk4+kCAAAASoogAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADr3T06FE5HA7Nnz+/TPfToEEDjRgxokz3UR7mz58vh8Oho0ePlto2y+s1wM9XFq9/QUaMGKEGDRq45nPfJ6+88kqZ71uSpkyZIofDUS77gh0IMvCI3B+8+U0TJkzwdHl5XFufj4+PwsPD1atXL23cuNHTpf1sixcv1qxZszxdhpsRI0YU+P7w8/PzdHllauPGjW7H63Q6FRISou7du+uPf/yjTp06VSr7uXDhgqZMmeKV72Fvrg3ex9fTBeCX7cUXX1RkZKRbW4sWLRQREaGLFy+qcuXKHqosr3vuuUfDhw+XMUZHjhzRnDlz1LNnT3300Ufq06ePp8srscWLF2vv3r0aN26cW7unXwOn06m///3vedorVarkgWrK3xNPPKF27dopOztbp06d0meffabJkydr5syZeuedd9SzZ09X34ceekhDhw6V0+ks8vYvXLigqVOnSpK6d+9e5PX+9re/KScnp8j9S6Kw2p577jmv/GMHnkOQgUf16dNHbdu2zXeZt/3lfcstt+g3v/mNa37QoEFq2bKlZs2aZXWQKYinz374+vq6jbcnnT9/XlWrVi3XfXbp0kVDhgxxa9u9e7d69eqlwYMHa9++fQoLC5P0U7gr64CXOwae/uPC19dXvr786sL/x6UleKX87s8YMWKEqlWrph9++EEDBw5UtWrVVLt2bT399NPKzs52W/+VV17RnXfeqZo1a8rf319t2rTRe++9V6o13nbbbapVq5aOHDnialu/fr26dOmiqlWrKjg4WAMGDNA333zjtl7uNf79+/fr/vvvV2BgoGrWrKknn3xSly5dKnQMcjkcDk2ZMqXQ+j744AP169dP4eHhcjqdioqK0rRp09zGqnv37vroo4/03XffuS5l5N7/UND+i3OMhw4d0ogRIxQcHKygoCA9/PDDunDhQqF1F0fuJcrNmzcrPj5etWvXVtWqVTVo0KB8L8GsXLnSVXtAQID69eunr7/+2q1P7vvs8OHD6tu3rwICAjRs2DBJ0sWLF/XEE0+oVq1aCggI0L333qsffvjB7fXYsGGDHA6Hli1blmf/ixcvlsPh0JYtW0p0vK1atdKsWbOUlpamv/zlL3nG4dp7ZLZv366YmBjVqlVL/v7+ioyM1COPPCLpp9e2du3akqSpU6e6XvvcYyhsDK6/R+Zar732miIiIuTv769u3bpp7969bsu7d++e79mfa7d5o9ryu0fm6tWrmjZtmqKiouR0OtWgQQP97//+r7Kystz6NWjQQL/61a/06aefqn379vLz81PDhg31j3/8I/8BhxWItfCo9PR0nT592q2tVq1aBfbPzs5WTEyMOnTooFdeeUVr167Vq6++qqioKI0ePdrV789//rPuvfdeDRs2TJcvX9aSJUv0P//zP1qxYoX69etXKrWfPXtWZ8+eVaNGjSRJa9euVZ8+fdSwYUNNmTJFFy9e1Ouvv67OnTtr586deX7433///WrQoIESEhK0detWzZ49W2fPni21H6rz589XtWrVFB8fr2rVqmn9+vV64YUXlJGRoRkzZkiSJk2apPT0dB07dkyvvfaaJKlatWoFbrMkxxgZGamEhATt3LlTf//731WnTh396U9/KtIxXP/ekKQqVaooMDDQrW3s2LGqXr26Jk+erKNHj2rWrFkaM2aMli5d6urz1ltvKTY2VjExMfrTn/6kCxcuaO7cubrrrrv05ZdfutV+9epVxcTE6K677tIrr7yim266SdJPv3DfeecdPfTQQ+rYsaM2bdqU5/3UvXt31atXT4sWLdKgQYPcli1atEhRUVHq1KlTkY4/P0OGDNHIkSP173//Wy+99FK+fVJTU9WrVy/Vrl1bEyZMUHBwsI4ePar3339fklS7dm3NnTtXo0eP1qBBg3TfffdJklq2bHnDMSjIP/7xD2VmZiouLk6XLl3Sn//8Z/Xs2VNfffWVQkJCinx8RanteqNGjdKCBQs0ZMgQPfXUU9q2bZsS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1K5dO7e29u3b55lv3ry5FixYoAkTJmjhwoWKiIhQ165df/YxAfAcggyAUlO1alU1atSo0D6VK1d2m3c4HMrJyZEknTt3Tv3799ef/vSnPOuFhYW57ackRo0apcTERE2YMEFJSUl6+OGH5XA4Cl2nKMcEwHMIMgC8xh133KF//vOfatCggXx9i/7jqUmTJvr444/d2r744os8/X7zm9/omWee0ezZs7Vv3z7Fxsb+7JoBeBY3+wIoNVlZWTp58qTbdO0TRzcSFxenH3/8UQ888IC++OILHT58WKtXr9bDDz+s7OzsAtd7/PHHtX//fj377LP69ttv9c4772j+/PmS5HbGpXr16rrvvvv0+9//Xr169VLdunXL/JgAlC2CDIBSs2rVKoWFhblNd911V5HXDw8P1+bNm5Wdna1evXrptttu07hx4xQcHCwfn4J/XEVGRuq9997T+++/r5YtW2ru3Lmup5au/8yXkSNH6vLly3rkkUfK5ZgAlC2HMcZ4uggAKG0vvfSS5s2bp+TkZLf2t956S+PHj9fx48fL9IP0AJQP7pEBUCHMmTNH7dq1U82aNbV582bNmDFDY8aMcS2/cOGCTpw4oenTp+vxxx8nxAAVBJeWAFQIBw8e1IABA9SsWTNNmzZNTz31lKZMmeJa/vLLL+vWW29VaGioJk6c6LlCAZQqLi0BAABrcUYGAABYiyADAACsRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFjr/wGsHqgbZbvTwwAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ @@ -1424,7 +1322,34 @@ " print(f\" Expected: 2, Got: {e_barker} (Match: {e_barker == 2})\")\n", "\n", "# Run the validation\n", - "validation_suite()" + "validation_suite()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "164b5fa0-fa04-417f-a008-dd5232226a5c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--- Starting Validation Suite (N=7) ---\n", + "[TEST 1] Barker Sequence (N=4): Expected Energy 2, Got 2.\n", + "[TEST 2] Symmetry Check - Bit-flip: PASSED\n", + "[TEST 3] Symmetry Check - Reversal: PASSED\n", + "[TEST 4] Quantum Cross-Ref: Bitstring [1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1] has Classical Energy 10\n" + ] + } + ], + "source": [ + "\n", + "from validations import run_validation\n", + "\n", + "# Example: pass the best bitstring from quantum sampler to cross-reference it\n", + "# best_bitstring = \"1110\" \n", + "run_validation(N=7, quantum_sample_bitstring=res[\"best_s_01\"].tolist())" ] }, { @@ -1440,7 +1365,7 @@ "kernelspec": { "display_name": "Python 3 [cuda-q-v0.13.0]", "language": "python", - "name": "python3_tl48" + "name": "python3_0pt5" }, "language_info": { "codemirror_mode": { diff --git a/tutorial_notebook/validations.py b/tutorial_notebook/validations.py new file mode 100644 index 00000000..68329f67 --- /dev/null +++ b/tutorial_notebook/validations.py @@ -0,0 +1,53 @@ +import numpy as np + +def labs_energy_pm1(s): + """ + Calculates the energy of a binary sequence s in {+1, -1}. + E(s) = sum_{k=1}^{N-1} (sum_{i=1}^{N-k} s_i * s_{i+k})^2 + """ + N = len(s) + total_energy = 0 + for k in range(1, N): + ck = 0 + for i in range(N - k): + ck += s[i] * s[i+k] + total_energy += ck**2 + return total_energy + +def bits01_to_pm1(bits): + """Converts a bitstring of 0s and 1s to +1s and -1s.""" + return 1 - 2 * np.array(bits) + +def run_validation(N=7, quantum_sample_bitstring=None): + print(f"--- Starting Validation Suite (N={N}) ---") + + # 1. Small N Hand-Calculation Verification + # For N=4, the sequence [1, 1, 1, -1] is a known Barker sequence with Energy = 2. + s_barker = np.array([1, 1, 1, -1]) + e_barker = labs_energy_pm1(s_barker) + print(f"[TEST 1] Barker Sequence (N=4): Expected Energy 2, Got {e_barker}.") + assert e_barker == 2, "Energy calculation failed on known N=4 case." + + # 2. Check Symmetries + # The LABS problem is invariant under bit-flip (s -> -s) and reversal. + test_seq = np.random.choice([-1, 1], size=N) + e_orig = labs_energy_pm1(test_seq) + + e_flip = labs_energy_pm1(-test_seq) + e_rev = labs_energy_pm1(test_seq[::-1]) + + print(f"[TEST 2] Symmetry Check - Bit-flip: {'PASSED' if e_orig == e_flip else 'FAILED'}") + print(f"[TEST 3] Symmetry Check - Reversal: {'PASSED' if e_orig == e_rev else 'FAILED'}") + + # 3. Quantum-Classical Cross-Reference + if quantum_sample_bitstring: + # Convert bitstring (e.g., '101') to numerical array + bits = [int(b) for b in quantum_sample_bitstring] + s_quantum = bits01_to_pm1(bits) + e_quantum = labs_energy_pm1(s_quantum) + print(f"[TEST 4] Quantum Cross-Ref: Bitstring {quantum_sample_bitstring} has Classical Energy {e_quantum}") + else: + print("[TEST 4] Quantum Cross-Ref: Skipped (No sample provided)") + +if __name__ == "__main__": + run_validation() \ No newline at end of file From acd7d99b816709826583839fe1d3bd07dc773284 Mon Sep 17 00:00:00 2001 From: Katie Jones Date: Sun, 1 Feb 2026 01:35:51 +0000 Subject: [PATCH 13/13] test commit --- ...nhanced_optimization_LABS-checkpoint.ipynb | 1385 +++++++++++++++++ .../validations-checkpoint.py | 53 + .../validation_tests.cpython-311.pyc | Bin 0 -> 296 bytes .../__pycache__/validations.cpython-311.pyc | Bin 0 -> 3096 bytes .../__pycache__/labs_utils.cpython-311.pyc | Bin 0 -> 2931 bytes 5 files changed, 1438 insertions(+) create mode 100644 tutorial_notebook/.ipynb_checkpoints/01_quantum_enhanced_optimization_LABS-checkpoint.ipynb create mode 100644 tutorial_notebook/.ipynb_checkpoints/validations-checkpoint.py create mode 100644 tutorial_notebook/__pycache__/validation_tests.cpython-311.pyc create mode 100644 tutorial_notebook/__pycache__/validations.cpython-311.pyc create mode 100644 tutorial_notebook/auxiliary_files/__pycache__/labs_utils.cpython-311.pyc diff --git a/tutorial_notebook/.ipynb_checkpoints/01_quantum_enhanced_optimization_LABS-checkpoint.ipynb b/tutorial_notebook/.ipynb_checkpoints/01_quantum_enhanced_optimization_LABS-checkpoint.ipynb new file mode 100644 index 00000000..c3ce8f37 --- /dev/null +++ b/tutorial_notebook/.ipynb_checkpoints/01_quantum_enhanced_optimization_LABS-checkpoint.ipynb @@ -0,0 +1,1385 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "b1f70ff2-492a-41a4-97db-5da6d5775cb7", + "metadata": {}, + "outputs": [], + "source": [ + "# SPDX-License-Identifier: Apache-2.0 AND CC-BY-NC-4.0\n", + "#\n", + "# Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "# you may not use this file except in compliance with the License.\n", + "# You may obtain a copy of the License at\n", + "#\n", + "# http://www.apache.org/licenses/LICENSE-2.0\n", + "#\n", + "# Unless required by applicable law or agreed to in writing, software\n", + "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "# See the License for the specific language governing permissions and\n", + "# limitations under the License." + ] + }, + { + "cell_type": "markdown", + "id": "eaa3992e-c095-4bd7-9f14-60abd0740b64", + "metadata": {}, + "source": [ + "# Quantum Enhanced Optimization for Radar and Communications Applications \n", + "\n", + "\n", + "The Low Autocorrelation Binary Sequences (LABS) is an important and challenging optimization problem with applications related to radar, telecommunications, and other signal related applications. This CUDA-Q Academic module will focus on a clever quantum-enhanced hybrid method developed in a collaboration between Kipu Quantum, University of the Basque Country EHU, and NVIDIA for solving the LABS problem. (This notebook was jointly developed with input from all collaborators.)\n", + "\n", + "Other CUDA-Q Academic modules like [Divide and Conquer MaxCut QAOA](https://github.com/NVIDIA/cuda-q-academic/tree/main/qaoa-for-max-cut) and [Quantum Finance](https://github.com/NVIDIA/cuda-q-academic/blob/main/quantum-applications-to-finance/03_qchop.ipynb), demonstrate how quantum computing can be used outright to solve optimization problems. This notebook demonstrates a slightly different approach. Rather than considering QPUs as the tool to produce the final answer, it demonstrates how quantum can be used to enhance the effectiveness of leading classical methods. \n", + "\n", + "The benefits of such an approach were highlighted in [Scaling advantage with quantum-enhanced memetic tabu search for LABS](https://arxiv.org/html/2511.04553v1). This notebook, co-created with the authors of the paper, will allow you to explore the findings of their research and write your own CUDA-Q code that builds a representative quantum-enhanced workflow for solving the LABS problem. Moreover, it will introduce advancements in counteradiabatic optimization techniques on which reduce the quantum resources required to run on a QPU.\n", + "\n", + "**Prerequisites:** This lab assumes you have a basic knowledge of quantum computing, including operators, gates, etc. For a refresher on some of these topics, explore the [Quick start to Quantum](https://github.com/NVIDIA/cuda-q-academic/tree/main/quick-start-to-quantum) series.\n", + "\n", + "**In this lab you will:**\n", + "* 1. Understand the LABS problem and its relation ot radar and communication applications.\n", + "* 2. Solve LABS classically with memetic tabu search and learn about the limitations of such methods.\n", + "* 3. Code a couteradiabatic algorithm using CUDA-Q to produce approximate solutions to the LABS problem.\n", + "* 4. Use the CUDA-Q results to seed your tabu search and understand the potential benefits of this approach.\n", + "\n", + "\n", + "**Terminology you will use:**\n", + "* Low autocorrelation of binary sequences (LABS)\n", + "* counteradiabatic optimization\n", + "* memetic-tabu search\n", + "\n", + "**CUDA-Q Syntax you will use:**\n", + "* cudaq.sample()\n", + "* @cudaq.kernel\n", + "* ry(), rx(), rz(), x(), h() \n", + "* x.ctrl()\n", + "\n", + "Run the code below to initialize the libraries you will need." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "bfc407dd-113d-485c-88db-7ddbad344ead", + "metadata": {}, + "outputs": [], + "source": [ + "import cudaq\n", + "import numpy as np\n", + "from math import floor\n", + "import auxiliary_files.labs_utils as utils" + ] + }, + { + "cell_type": "markdown", + "id": "e1e821a8-47b4-4e5b-a713-4e1babada01f", + "metadata": {}, + "source": [ + "## The LABS problem and applications\n", + "\n", + "The **Low Autocorrelation Binary Sequences (LABS)** problem is fundamental to many applications, but originated with applications to radar. \n", + "\n", + "Consider a radar that monitors airport traffic. The radar signal sent to detect incoming planes must have as much range as possible to ensure safe approaches are planned well in advance. The range of a radar signal can be increased by sending a longer pulse. However, in order to differentiate between multiple objects, pulses need to be short to provide high resolution. So, how do you handle situations where you need both?\n", + "\n", + "One solution is a technique called pulse compression. The idea is to send a long signal, but vary the phase at regular intervals such that the resolution is increased. Generally, the initial signal will encode a binary sequence of phase shifts, where each interval corresponds to a signal with a 0 or 180 degree phase shift. \n", + "\n", + "The tricky part is selecting an optimal encoding sequence. When the signal returns, it is fed into a matched filter with the hope that a singular sharp peak will appear, indicating clear detection. The autocorrelation of the original signal, or how similar the signal is to itself, determines if a single peak or a messier signal with sidelobes will be detected. A signal should have high autocorrelation when overlayed on top of itself, but low autocorrelation when shifted with a lag. \n", + "\n", + "Consider the image below. The signal on the left has a crisp single peak while the single on the right produces many undesirable sidelobes which can inhibit clear detection. \n", + "\n", + "\n", + "\n", + "\n", + "So, how do you select a good signal? This is where LABS comes in, defining these questions as a binary optimization problem. Given a binary sequence of length $N$, $(s_1 \\cdots s_N) \\in {\\pm 1}^N$, the goal is to minimize the following objective function.\n", + "\n", + "$$ E(s) = \\sum_{k=1}^{N-1} C_k^2 $$\n", + "\n", + "Where $C_k$ is defined as. \n", + "\n", + " $$C_k= \\sum_{i=1}^{N-k} s_is_{i+k}$$\n", + "\n", + "\n", + "So, each $C_k$ computes how similar the original signal is to the shifted one for each offset value $k$. To explore this more, try the interactive widget linked [here](https://nvidia.github.io/cuda-q-academic/interactive_widgets/labs_visualization.html). See if you can select a very good and very poor sequence and see the difference for the case of $N=7$." + ] + }, + { + "cell_type": "markdown", + "id": "84fa6dff-0fee-4251-a006-76d6ad426116", + "metadata": {}, + "source": [ + "## Classical Solution of the LABS problem\n", + "\n", + "The LABS problem is tricky to solve for a few reasons. First, the configuration space grows exponentially. Second, underlying symmetries of the problem result in many degeneracies in the optimization landscape severely inhibiting local search methods. \n", + "\n", + "
\n", + "

Exercise 1:

\n", + "

\n", + "Using the widget above, try to find some of the symmetries for the LABS problem. That is, for a fixed bitstring length, can you find patterns to produce the same energy with different pulse patterns. \n", + "

\n", + "\n", + "The best known performance for a classical optimization technique is Memetic Tabu search (MTS) which exhibits a scaling of $O(1.34^N)$. The MTS algorithm is depicted below. It begins with a randomly selected population of bitstrings and finds the best solution from them. Then, a child is selected by sampling directly from or combining multiple bitstrings from the population. The child is mutated with probability $p_{mutate}$ and then input to a tabu search, which performs a modified greedy local search starting from the child bitstring. If the result is better than the best in the population, it is updated as the new leader and randomly replaces a bitstring in the population.\n", + "\n", + "\n", + "\n", + "\n", + "Such an approach is fast, parallelizable, and allows for exploration with improved searching of the solution landscape. \n", + "\n", + "
\n", + "

Exercise 2:

\n", + "

\n", + "Before exploring any quantum approach, get a sense for how MTS works by coding it yourself based generally on the figure above. Algorithms for the combine and mutate steps are provided below as used in the paper. You may need to research more specific details of the process, especially for how tabu search is performed. The MTS procedure should output and optimal bitstring and its energy. Also, write a function to visualize the results including the energy distribution of the final population.\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "341c9a3f-565c-49ab-9903-0aa9a508722c", + "metadata": {}, + "outputs": [], + "source": [ + "#TODO - Write code to perform MTS\n", + "import numpy as np\n", + "import time\n", + "import matplotlib.pyplot as plt\n", + "import itertools\n", + "\n", + "# 1) LABS objective for ±1 sequences\n", + "\n", + "def pm1_to_bits01(s_pm1: np.ndarray) -> np.ndarray:\n", + " return ((s_pm1 + 1) // 2).astype(np.int8)\n", + "\n", + "def bits01_to_pm1(bits01) -> np.ndarray:\n", + " x = np.array(bits01, dtype=np.int8)\n", + " return (2*x - 1).astype(np.int8) # 0->-1, 1->+1\n", + "\n", + "def labs_correlations_pm1(s: np.ndarray) -> np.ndarray:\n", + " \"\"\"C[k-1] = C_k for k=1..N-1, C_k = sum_i s[i]*s[i+k].\"\"\"\n", + " N = s.size\n", + " C = np.empty(N-1, dtype=np.int32)\n", + " for k in range(1, N):\n", + " C[k-1] = int(np.dot(s[:-k], s[k:]))\n", + " return C\n", + "\n", + "def labs_energy_from_C(C: np.ndarray) -> int:\n", + " C64 = C.astype(np.int64)\n", + " return int(np.sum(C64*C64))\n", + "\n", + "def labs_energy_pm1(s: np.ndarray) -> int:\n", + " return labs_energy_from_C(labs_correlations_pm1(s))\n", + "\n", + "def aperiodic_autocorr_full(s_pm1: np.ndarray) -> np.ndarray:\n", + " \"\"\"lags = -(N-1)..+(N-1)\"\"\"\n", + " N = len(s_pm1)\n", + " out = []\n", + " for lag in range(-(N-1), N):\n", + " if lag < 0:\n", + " out.append(int(np.dot(s_pm1[-lag:], s_pm1[:N+lag])))\n", + " elif lag == 0:\n", + " out.append(int(np.dot(s_pm1, s_pm1)))\n", + " else:\n", + " out.append(int(np.dot(s_pm1[:-lag], s_pm1[lag:])))\n", + " return np.array(out, dtype=int)\n", + "\n", + "\n", + "# 2) Algorithm 3: Combine & Mutate \n", + "\n", + "\n", + "def combine_alg3(p1: np.ndarray, p2: np.ndarray, rng: np.random.Generator) -> np.ndarray:\n", + " N = p1.size\n", + " k = int(rng.integers(1, N)) # k in {1,...,N-1}\n", + " child = np.empty_like(p1)\n", + " child[:k] = p1[:k]\n", + " child[k:] = p2[k:]\n", + " return child\n", + "\n", + "def mutate_alg3(s: np.ndarray, p_mut: float, rng: np.random.Generator) -> np.ndarray:\n", + " out = s.copy()\n", + " if p_mut <= 0.0:\n", + " return out\n", + " mask = rng.random(out.size) < p_mut\n", + " out[mask] *= -1\n", + " return out\n", + "\n", + "# 3) Tabu Search (single-bit flip neighborhood)\n", + "# - aspiration: allow tabu move if it improves best found in this tabu run\n", + "# - candidate_size: evaluate subset of flips each step (CPU-friendly)\n", + "\n", + "\n", + "def delta_energy_single_flip_pm1(s: np.ndarray, C: np.ndarray, E: int, j: int):\n", + " \"\"\"\n", + " After flipping s[j], update correlations deltaC and energy E_new.\n", + " Flip affects C_k terms that involve index j:\n", + " (j, j+k) and (j-k, j) when in bounds.\n", + " Each affected product changes sign => delta contribution = -2*old_term.\n", + " \"\"\"\n", + " N = s.size\n", + " sj = int(s[j])\n", + " deltaC = np.zeros_like(C, dtype=np.int32)\n", + "\n", + " for k in range(1, N):\n", + " d = 0\n", + " jp = j + k\n", + " jm = j - k\n", + " if jp < N:\n", + " d += sj * int(s[jp])\n", + " if jm >= 0:\n", + " d += int(s[jm]) * sj\n", + " if d != 0:\n", + " deltaC[k-1] = -2 * d\n", + "\n", + " C64 = C.astype(np.int64)\n", + " d64 = deltaC.astype(np.int64)\n", + " dE = int(np.sum(2*C64*d64 + d64*d64))\n", + " return E + dE, deltaC\n", + "\n", + "def tabu_search_pm1(\n", + " s0: np.ndarray,\n", + " max_iters: int = 1000,\n", + " tabu_tenure: int = 30,\n", + " candidate_size: int = 64,\n", + " rng: np.random.Generator | None = None,\n", + "):\n", + " if rng is None:\n", + " rng = np.random.default_rng()\n", + "\n", + " s = s0.copy()\n", + " C = labs_correlations_pm1(s)\n", + " E = labs_energy_from_C(C)\n", + "\n", + " best_s = s.copy()\n", + " best_E = int(E)\n", + " print(best_s)\n", + "\n", + " N = s.size\n", + " tabu_until = np.zeros(N, dtype=np.int32)\n", + "\n", + " for it in range(1, max_iters + 1):\n", + " # choose candidate flip indices\n", + " if candidate_size >= N:\n", + " candidates = np.arange(N)\n", + " else:\n", + " candidates = rng.choice(N, size=candidate_size, replace=False)\n", + "\n", + " chosen_j = None\n", + " chosen_E = None\n", + " chosen_dC = None\n", + "\n", + " # pick best admissible (tabu allowed only if aspiration)\n", + " for j in candidates:\n", + " E_new, dC = delta_energy_single_flip_pm1(s, C, E, int(j))\n", + " is_tabu = tabu_until[j] > it\n", + " if is_tabu and (E_new >= best_E):\n", + " continue\n", + " if (chosen_E is None) or (E_new < chosen_E):\n", + " chosen_j, chosen_E, chosen_dC = int(j), int(E_new), dC\n", + "\n", + " # if all were blocked, ignore tabu\n", + " if chosen_j is None:\n", + " for j in candidates:\n", + " E_new, dC = delta_energy_single_flip_pm1(s, C, E, int(j))\n", + " if (chosen_E is None) or (E_new < chosen_E):\n", + " chosen_j, chosen_E, chosen_dC = int(j), int(E_new), dC\n", + "\n", + " # apply flip\n", + " s[chosen_j] *= -1\n", + " C += chosen_dC\n", + " E = chosen_E\n", + "\n", + " # update tabu tenure (with slight randomness)\n", + " tenure = tabu_tenure + int(rng.integers(0, max(1, tabu_tenure // 3)))\n", + " tabu_until[chosen_j] = it + tenure\n", + "\n", + " if E < best_E:\n", + " best_E = int(E)\n", + " best_s = s.copy()\n", + " print(best_s)\n", + "\n", + " return best_s, best_E\n", + "\n", + "\n", + "# 4) MTS main loop (matches your diagram)\n", + "\n", + "def mts_labs_pm1(\n", + " N: int,\n", + " pop_size: int = 32,\n", + " p_combine: float = 0.7,\n", + " p_mut: float = 1.0/50.0,\n", + " mts_iters: int = 1000,\n", + " tabu_iters: int = 800,\n", + " tabu_tenure: int = 30,\n", + " candidate_size: int = 64,\n", + " target_E: int | None = None,\n", + " seed: int = 0,\n", + " verbose_every: int = 100,\n", + "):\n", + " rng = np.random.default_rng(seed)\n", + "\n", + " # init population: k random bitstrings\n", + " pop = rng.choice(np.array([-1, 1], dtype=np.int8), size=(pop_size, N))\n", + " pop_E = np.array([labs_energy_pm1(pop[i]) for i in range(pop_size)], dtype=np.int64)\n", + "\n", + " best_idx = int(np.argmin(pop_E))\n", + " best_s = pop[best_idx].copy()\n", + " print(best_s)\n", + " best_E = int(pop_E[best_idx])\n", + "\n", + " trace = [best_E]\n", + " t0 = time.time()\n", + "\n", + " for it in range(1, mts_iters + 1):\n", + " if target_E is not None and best_E <= target_E:\n", + " break\n", + "\n", + " # ---- Make Child ----\n", + " if rng.random() < p_combine:\n", + " i1, i2 = rng.integers(0, pop_size, size=2)\n", + " child = combine_alg3(pop[i1], pop[i2], rng)\n", + " else:\n", + " i = int(rng.integers(0, pop_size))\n", + " child = pop[i].copy()\n", + "\n", + " # ---- Mutate Child ----\n", + " child = mutate_alg3(child, p_mut, rng)\n", + "\n", + " # ---- Tabu Search with Child ----\n", + " result_s, result_E = tabu_search_pm1(\n", + " child,\n", + " max_iters=tabu_iters,\n", + " tabu_tenure=tabu_tenure,\n", + " candidate_size=candidate_size,\n", + " rng=rng,\n", + " )\n", + "\n", + " # ---- Update best solution ----\n", + " if result_E < best_E:\n", + " best_E = int(result_E)\n", + " best_s = result_s.copy()\n", + "\n", + " # ---- Add result to Population ----\n", + " # randomly replace a member if result is better\n", + " r = int(rng.integers(0, pop_size))\n", + " if result_E < pop_E[r]:\n", + " pop[r] = result_s\n", + " pop_E[r] = result_E\n", + "\n", + " # (optional, helpful) elitism: keep global best in population\n", + " worst = int(np.argmax(pop_E))\n", + " if best_E < pop_E[worst]:\n", + " pop[worst] = best_s\n", + " pop_E[worst] = best_E\n", + "\n", + " trace.append(best_E)\n", + "\n", + " if verbose_every and (it % verbose_every == 0):\n", + " print(f\"[MTS {it:5d}] best_E={best_E} elapsed={time.time()-t0:.2f}s\")\n", + "\n", + " return {\n", + " \"best_s_pm1\": best_s,\n", + " \"best_s_01\": pm1_to_bits01(best_s),\n", + " \"best_E\": best_E,\n", + " \"best_trace\": np.array(trace, dtype=np.int64),\n", + " \"population_pm1\": pop,\n", + " \"population_E\": pop_E.copy(),\n", + " \"elapsed_sec\": time.time() - t0,\n", + " }\n", + "\n", + "\n", + "# 5) Visualization: best curve + final population energy distribution\n", + "\n", + "def visualize_mts(res: dict):\n", + " print(\"Best E Via Classification:\", res[\"best_E\"])\n", + " print(\"Best bitstring (0/1):\", \"\".join(map(str, res[\"best_s_01\"].tolist())))\n", + " print(\"Elapsed (s):\", f\"{res['elapsed_sec']:.3f}\")\n", + "\n", + " trace = res[\"best_trace\"]\n", + " popE = res[\"population_E\"]\n", + "\n", + " plt.figure()\n", + " plt.plot(trace)\n", + " plt.xlabel(\"MTS iteration\")\n", + " plt.ylabel(\"Best-so-far Energy E\")\n", + " plt.title(\"MTS Best-so-far Curve\")\n", + " plt.show()\n", + "\n", + " plt.figure()\n", + " plt.hist(popE, bins=20)\n", + " plt.xlabel(\"Energy E\")\n", + " plt.ylabel(\"Count\")\n", + " plt.title(\"Final Population Energy Distribution\")\n", + " plt.show()\n", + "\n", + "\n", + "# N=7: show a very good and very poor sequence difference\n", + "\n", + "\n", + "def brute_best_worst_N7():\n", + " N = 7\n", + " rows = []\n", + " for bits in itertools.product([0,1], repeat=N):\n", + " s = bits01_to_pm1(bits)\n", + " E = labs_energy_pm1(s)\n", + " rows.append((bits, E))\n", + " minE = min(E for _,E in rows)\n", + " maxE = max(E for _,E in rows)\n", + " good = [b for b,E in rows if E==minE][0]\n", + " bad = [b for b,E in rows if E==maxE][0]\n", + "\n", + " def show(bits, title):\n", + " s = bits01_to_pm1(bits)\n", + " C = labs_correlations_pm1(s)\n", + " E = labs_energy_pm1(s)\n", + " ac = aperiodic_autocorr_full(s)\n", + " print(f\"--- {title} ---\")\n", + " print(\"bits:\", \"\".join(map(str,bits)))\n", + " print(\"E:\", E)\n", + " print(\"Ck k=1..6:\", C.tolist())\n", + " print(\"aperiodic autocorr lags -6..+6:\", ac.tolist())\n", + " print()\n", + "\n", + "\n", + " print(\"N=7 global minE and maxE (by brute force):\", minE, maxE)\n", + " show(good, \"Very good (global optimal)\")\n", + " show(bad, \"Very poor (max energy)\")\n", + " \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "da991c1b-0182-41d5-bcfe-1b24d197383d", + "metadata": {}, + "outputs": [], + "source": [ + "# Example runs\n", + "\n", + "\n", + "# 1) N=7 demo (good vs poor)\n", + "brute_best_worst_N7()\n", + "\n", + "# 2) Run MTS (CPU baseline) - start small\n", + "N = 64\n", + "res = mts_labs_pm1(\n", + " N=N,\n", + " pop_size=32,\n", + " p_combine=0.7,\n", + " p_mut=1.0/50.0,\n", + " mts_iters=400,\n", + " tabu_iters=800,\n", + " tabu_tenure=30,\n", + " candidate_size=64,\n", + " seed=42,\n", + " verbose_every=50,\n", + ")\n", + "visualize_mts(res)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "bb31d339-f315-4fcb-9fe9-99b2f523e081", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Best E Found: 10\n", + "First reached at iteration: 0\n" + ] + }, + { + "data": { + "image/png": "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Kqv19MOvSAqf637i/ueroDBfR596kObNWaA3X/xAkjTrtzl659WPtffBO69126ufVy5JNVU1uvv6R+Tz+SVJHbu0j5wDHutnre50g4anGGy5w6baasexzd7/rz6dqqvOv12O40iSuvXsrL0P3lmVlVV67rHXVV1Vo/KyCv3roAv12YyXVVK65vnqv0z7TcWlRTrhrMNUU1Orpx96RcFgUI7j6L5b/y8hTffUr36Mut2hUztJktvj1oYjBmr46CFq275UbYoKVFVZrclf/qAv/5mx/s5rH9LBx+2tLt066siTD9D2u2+pay+8M7KtPQ/aUcNHD5EU/qKoMZ+9/7X6D+qtXfbZVtN/mBn5gmzFsjI988irOu3CY9Z7HwEg0Wi6ASAJFs5bHPm974CekcO318fAIX314Y/Pa96chfph8s9avHCZPF6PxmwxUj9O/TXynJ+8+1Wk6W44MnjVHResMUo1d/b8yGhzTYN1x241ao1zfmtrfVq+dOU661y5olxPPfhS5PbQkRvohY8eVEFhfmTZ/LkLlV+QF7n9xBt3qbqqRlMmTdOcWfNUWVGlHr27apNxI/Tua5/8s1+T1vncserUtb12P2AHvfL0RH363leaNuUXPffYa5KkwcMHJGUm7otvOFMHbHNipNlbVV6pT96dFNm/nNwcHX7ivvrPtac367SDxQuXRt3u3rNLk+t269Ul0nQvXrC0yfUuuOoUnXHRcZKkUy44SlsM3CeS/VMPvqwDjtxDh52w7xpN914H7rher9lN91+qfQ/bVVJ45HTKV9Mi99368OXaff8d5DiONum1W+Qc9R++nb7Opnv188oDgYCO2+fcSAZFxYV68s271aYo3OjF+lmrO92g4SkGG282PKbzyx+843+RhruwTYHe+OoJte/YVpK0/a5b6Kg9w18arFxepheeeEMnnHXYGttwuVx65t3/Ro6qycnJjow+/zB5erNraWjm9D91363/F3VOd8Pn22WfbSTVn3Lx58y/9NP3M7R8yQp5vB5tu+s4fffNT6quqlEgENSXH32r/Y/YXXsdtJMkRTXd2+y8+TpnL+/ao5Nen/R45IupXTc5XD99N+Offfw5rn0EgGSj6QYAI1YsW6lzjh2/xiHbq1s4r35W7DFbjNAv036TJB22y2kaNXaY+gzoqQGD+2jTLUdp8LD+kXVHbDxEOTnZqq316ZN3J2n74Qdp0LD+6juglzYcuYG22G4TdenWcZ11fvfVjwo0OIT61H8fE9VwS1pjVu4Hbn9St135gCorqprer78XN3nf+jjujEP0ytMT5TiOjt/vPK0qDx+ae+xpByfl+UaOGarXvnxMt131gD56+4vIudh1amtq9cjdz6i8rEK3PzI+KTWsy/5H7Bb5vU1RoXbYY0s991j4/Nofv/s1Kc/p8bi150E7Rm53790l0nR7vR7tss+2ksKNXs/eXSNNd9nK8piex3EcnX/CVfpo4peSwl9yPPzybVGXUovns7a+Go4gb7PzZpGGW5K23XWc2nUo1bIlKyRJU776USectcYmNHrssKjTWPpt0Cvye92XAbGaNnm6pjXRsJ97+b8izzd39nydeeSlmjxpWqPr1lmwnp/j/Q7fLepIkD4Dekaa7rIVq9Zr2wCQLDTdAJAEnbt11KzfwjNQ//nbHDmOs97nwZ5/4tXrbAIkqbbWH/n9wmtO05w/5+mjiV+qsqJKn73/tT57v34ir7FbjdLjr9+p/II8deneSbc+coUuP+tmLV+6MnJJszoFhfm68f5L1jmquHK1f9yv61JoE1/9WFdfcMc696tuVDLRRo4ZqpFjhuq7b36KjGCWtivWPoftkpTnk6QNR2ygh1+6VdVVNfr+m5809euf9Mm7kzTpkymRdV544g1dfss5Km1bvNZtdezcPur233MWaMhGAxtdd16Dic86dmnf6DqS1K5BwydJHTq2i/xeU13b6Hno66tdx7ZRlzHz/nMERt19brc7ctvtqf89FHJiep6rL7hDL/4zWut2u3X3k9escb3peD5r62vl8vpLvbXv1HaN+9t3ahtpuptqoLuv9lnLbpBR3Sj6+sjO9oav073pMB118gFRRzWcsP/5kYn61sbX4IiaeKz+96Th+zDqXHgASCPrf7wjAGAN47bbJPJ72YpyvfPPIdLxqqqsjjoPeovtxujzma9odu3XmhuYrI02HtLo49oUFeqJN+7SN7Pf1H3P3qB/X32q9j1s18hhy199OlX33vxEZP29D95Zk+dO1EufPKTrJvxHJ559uIaO3ECSVFlRpQtOvHqto9GS1jjXtOHEWI15/bl3I78XFObrf2/fo98qvtDcwGRdc3fLXNbquDMPibp92PH7Ki9v3Yd2r6+8/Fxtts3GOu3CY/TcB/frvPEnR90/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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAHqCAYAAAAZLi26AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAV+tJREFUeJzt3Xd8E4X/x/H3NW06aEvZo+y9QZZMGcqSqSKIKIigggNFwK0ICD9RERXBgbhQRMGBqOACXIAIiCJ77w0Fupvkfn/w5UpoCg30aFpez8eDh73PXdLPJ7nWvnOXi2GapikAAAAAAJDtgnK6AQAAAAAA8ipCNwAAAAAANiF0AwAAAABgE0I3AAAAAAA2IXQDAAAAAGATQjcAAAAAADYhdAMAAAAAYBNCNwAAAAAANiF0AwAAAABgE0I3AGTR7h37VDq4ofVv6eIVOdLHy6PfsnpoWrFrjvQQaG5ue7f1mAy789nL8j2H3fms9T1vbnv3ZfmeyL2WLl7h9ftj9459Od3SeX+nBeLvmc8+mOfVLwDkFsE53QAA5ISli1eo13WDL7hdz35dNOndZ+1v6DLI7I/U0FCnChcrqPpNaqvf4JvV5Jr6l7mzwDPszmc158NvJElNrqmv2QvfztmGLtLNbe/Wsl9XXXC7JVu+VulyJS9DR7mXr98ZISHBCgsPVYFCMSpTPlaNW9RT7wHdVLJ0cVt7Oft5zSu/oz77YJ6GDxxtLe925cyLmgBgB0I3AGRRTMFoPTnhQWu5bMVSOdhN9klJSdXeXQe0d9cBzfvsR40cM0RDnxiY020FvG692qtqzYqSpJKli+VwN8gJaWkupaW5dOpkgnZt36vfFy7Xq+Om68EnB+rBpwYpKCj9hMKyFUt5/f6IKRidEy17yW2/0+o2rOHVLwDkFoRuAJDUtVc71WlQI0P9TKiSpKjoSA0efvvlbMs2dRrWUNeb28n0eLR9y2598dF3SklJlSS9NOpNte3UXLWuqpbDXQa2Nh2bqU3HZjndRpblLxCt+x8b4HNdIARAX06djFdUdGROt+HTmd8Zp07E67+/N+iXH5bJ7XbL7Xbr5TFv69DBo/q/KY9b25csXTxgfn+kpqbJNM1c9zutas2KXr+TASC34D3dACCpdYdmGjz89gz/zg5V/rz/8eSJeD33yKtqUqGLKoQ3UfPK3TX5/96VaZpe33ft6o164v7n1bVpfzUs00mVIpurUr5malKhi4b0eVzLf19ty7xValTQ4OG3a8jI/nrhrac09rVHrHWmaWrBV4u9tt+/95Cee+RVXVevt6rmb6lK+ZqpacWuGtrvaf29/L8M93/u43Ei7pRGDXtJjcper4oRTdW29s16f8qnGR6P8703+2Lfz/nmSx9q4I3DdU31G1WrSFuVD7taNQu1Vpcm/fTa+OlKTEjK8D3OnFouSct+XeXzeb/Qe7ov9THL6j6UVVHR+Xzu44OH3+4VbM+d6+D+I3p08Dg1KNVBFSOaqk2tnpr5zpc+v0dKSqren/Kpbmp9l2oVaasK4U3UoFQHDe79qFYu/TfD9uc+p0mJyZrw1BQ1r9xd5cOu1sRn37K2Xb9miwZ0H6bqBVqpeoFWur3zUK1dvdHne49PnYxXtZhrrPrH077I8L0H937UWn9756F+P55nfmeMHDNEH8x7VT+unqUy5WOt9R+99bkWLVhiLZ/vPd2JCUl6Zew0dWrUV9VirlH5sKtVr0Q7dWhwqx655znrfs7MevZbBuZ8+I3P+z33Z2nDf1s08Mbhql30WlWMaKot67f7dZ2K+FMJGjNikhqX66xK+Zpl28/wmR7OPrVcktd2L49+K9Pbny0pKVnTXvlYN7S8U7UKt1GF8Ca6qmR79esyVPNm/5hh+3Ofk53b9uiDN2ar3VW3qFK+ZqpXop1G3j1WccdPZvq4AEBWcKQbALJZQnyierQYoM3rt1u1Xdv36oWnpyolOVUjRqe/L/SvP1ZrxptzMtzHmdO9v53zk1565xn16m/vhYzqN6nttXz44FHr62W/rtKgm0boxDl/eO7ZuV97du7X3Fnf68kJQ3X3sNt83ndSYrJuaj1IG//batU2r9+upx98Uds279KYV0Zm4yQZTX3xAx0/esKrdvJEvP5ZsU7/rFinebN/1Fe/vat8kRHZ9j0v9THzZx+y0749B3V949t0aP8Rq7Zlww49OnicghxBumVAd6t+9PBx9e10n9au3uR1H4cOHNW3n/+s+V8u0jMvDdPAoX0y/X63Xf+Alv/+d4b6PyvWqfd1g5UQn2jVFn+/REt/WanGLepl2D4qOlI9+3XWB1NnS5I+mf6V+t51o7U+MSFJC+f/YS33HtDtPI9C1lSuXl5TZo5X16b9rdo7r87M0tkQd3R7SEt/WelVO3r4uI4ePq51/2xS/KmESzqrYsOazerefIDXC0z+SElOVe92Q/TvinVW7XL+DGfFoQNH1KfDvdq0dptX/cihY1q0YIkWLViib2b/qCkzxys42Pefv8MGPKu//lhtLaccTtWsd+dq++bdmrMod17XAUBgIHQDgE7/AX/sSFyGerde7fy+KNLxoyd04vgp9by9s4qVKKJP3v3Kuu93J3+ioU8OlNMZIklyhjpV/+raqlGvigoUzK98kRE6dSJevy9crn9WrJNpmho78hV17dVO4eFhlzpmplYtW+O1XKRYIUnSibhTuvvmkVZ4DAsPVa87uikqKp/mfvq99uzcL4/Ho+ceeVW161dX01YNMtz30cPHFX8yQbfdc5Py54/SFzPna/+eg5Kk917/VJ1uaOvzdtmlRKliata6oWLLlFD+AlEyTVO7d+zTvM9+VGJCkjas2aIP35itISP7W+8ZnTf7RytglKkQq9vv6Wnd34Xe95odj5k/+1BWnTqZoDcnzshQL1m6mLr1au/zNru27VVoWKhuH9xTYWGhmvHWHCUnpUg6fQbB2aH7wf7PWIE7MiqfevTpoOKxRbViyb9a/P0SeTwejR7+suo0qK5Gzev5/H7Lf/9bVzWupZbXXa3EhCTFliku0zQ14q4xXoG7+y0dVKZ8rL6Z85N+++lPn/d1x7299eEbc2Sapv5ZsU7r12xR9dqVJEk/f/e7khKTJUkxBfOrXddrLvDoZU29RjVVo24Vrfvn9OPw529/y+12y+FwZHqbzeu3W4E7KChIN93eWRUql9GxI3HavWOfVxi/pl0TRURGaMZbc7Rr215J6W8VOcPXWwX++3ujgoMduum261WuUhlt3bhDoWGhWZ7r8MGjOhl3ypaf4TPvK/935TrN+yz9aPTZ791u2LTOBe9n6O1PewXuzjddq8rVK+i3n/7UymWnz7L47ouFev3/3tNDT9/l8z7++mO1WrRtrAZN6+j7rxdrw5otkqQ/f1ulVcvWZHhxEgCyitANAJLmffaj1x98Z9RtUP2irkR89hG9q5rU0qAbR0g6HXy2btxp/fF/66AbdOugG7T+383a8N8WHT96Qo5gh9p3a6V//hf64o6d0L8r1uvqlldd7HgZbFq3TW9OnOH1nu4zDMNQxx6tJUmzP5jndZT47c9eUJtOzSVJgx66VS2q9FBCfKJM09Q7r87M9A/vF995Rjf06ShJ6nv3jWpV/UalpbkknT4KaWfo/n7lTJ08Ea+VS/7R3t0HlJiQpErVyqt2/er687fTp+n+8sMyDRnZ33rP6Ma1W63QXbJUMb/e95pdj1lW96GsOnH8pMY9+mqGepNr6mcauiVpysxx6tCttSQptkxxPfvwREnS1o07FX8qQZFR+bT+38365Yel1m2mfzFRzdqkn/7bv+uDWjj/D5mmqbcnfZxp6O50Qxu9+ekErwuQrVq2xgo/knTvyP56/P8ekCTd/fBtalGlR4YzCiSpUrVyanFtYyuUfzL9S+uI7DdnnWp8w60dFRrqzHR+f1WoUtYK3SnJKYo7dlKFihTIdPuU5BTr64pVy2riO8/IMAyr5na7tX/PIUlSw2Z11bBZXf387W9W6D7zVpELefOzCdbzeIY/H1tm18/wmfeVf/bBPK/fwf78zK1dvVF/LPrLWh4yop+eeP70WwYeenqQbmp1lxW8p0+epaFPDvTax87o2KON3p79ggzD0MAH++iqEu3ldrslSf+sWEvoBnDRCN0AkM0cDof63p1+KmvFKuW81p8dENas2qCHBjyT4ZTIc+3fezBbe/x3xTqvU0XP9vAzd1sXUVt51hHwQkUKWOFRkgoXLag2HZvpmzk/Scp4tPyMkJBgdeuVfiSudLmSatS8npb87/2ja1atv7RhzsPj8ej/Hp+sdyfPUmpqWqbbZefjmx2PmT/7kJ2KlSziFdQqVCl7Th+nFBmVT38t+cer3rtd5qe/+3pv9xn3P3ZnhjD070rv/fSm2ztbX8cUiFb7bq00+4N5Pu9vwH29rdD9xcfz9cTzQ+Vxe7xOLc/2t274+Z77StXLq0Ch/Dp+9IQ2r9+uFlV7qFa9qipfuayq16mkltderVJlS1xSS1VrVcwQuP2Rkz/DWbHynJ+jnv26WF87HA7d0LeTFbrjjp3Q1o07Vbl6+Qz3c/s9N1kveBQomF8FC8dYb7U5cfyUXe0DuAIQugFA0sTpo7Ltj+/CxQoq7KxTN52h3qcBmx6PpNMX/bmj+0Ne75fNTGpK5oHxUjmdIac/p/vq2uo3uKeatk4/QnniWPoR28LFCma47dm1zIJggUL5M5xee/btTsZl8sfsOeEl9X9XV/fHu5Nn+Tyl+lzZ+fhmx2OW1X3IH6XKltDSrb7DaWZKnxP2zj0i7PlfH3HHvN8zfz5HDx/PdF2lauUy1E6cs38UKV7Ia7loMe/ls13buYXKVIjVrm17deL4Sc3/YqEcwQ7rFPma9apk+1X6t23eZX0dGhaqAoXyn3f7sLBQvfHJ8xo+aLT27jqgXdv2WkexpdM/n4+Ouy/T9/9nRaWq5S76tlLO/gxnxbn7X5Fzfu7OXc7s5+7cz6o/++fOcxE/cwBwBqEbALJZSIj3r9azTxU925+//u0VuO8edpvue/QOFSwco6TEZFWJbmFbjz37ddGkd5+94Hb5C6YHhiMHj2VYf3YtfwHfHzt1/OiJDO9rPft20TFR1tdnH+U8E4zO2L559wX7PdfZp6sWK1lE0+a8qJr1qsrpDNG4R1/NUiD3V3Y8Zlndh+wWnKEP39vFFPQOlsOfHayw8Ky/Z/iMiHzhGWr5z9o/JOnooeMqcNb3O3TWRf/OFRQUpP5DbtbYka9IOn0a9NkhuFf/S7+A2tn+WbHOOrVcOn3qvq/TmM/VvG0jLdnytdas2qB1/2zSji27tWLpv1r++99KTU3TuEdfU7uurVS+UumL6ivcx+Pqj5z8Gc6Kc/e/wwePqUChGK/ls2X2c5dxf8+ZnzsAeQ8fGQYAOeT4OUdnbri1owoWjpEknx9vkxPOvoDR0cPHteis03LPXBX4jAaZXOwoLc2lr88Kv7t37PO6QnDt+tWtr8/+4/2/1RutU8L37z2kOTPSP8Yrq85+jOs0qK6rGteS0xmi5OQU/fTtb5ne7uzQe+aCW1mVHY9ZbnPuha4KFo7J9CP46l/t3/ti6zSo4bU8d9b31tdxx0/qh69/Oe/tew/oboX5pb+s1M/f/i7p9BHkG27t6Fcv57N14w7d1/cJr9pdD/W94O2Sk1O0ef12BQUFqW7DGuozsIce/78HNGfR24rOf/qj3Dwej9b/mx7mz94/k/3cPy/G5fgZPveFJn9+7s7d/87+yD+3260vP55vLccUzK+KVb3fJgEAduNINwDkkIrnvD/2wf7PqOvN7bR75z6vC5vlpJ79uujVce9YFwa7u9cj6j2gmyKjIjV31gLritKGYZz3o6BGDhqj5b//bV35+MwFmCSpz53pV8Cu27CGFny1SJK0Y8tudWrUV5WrldeSxSsyfOxXVlSsUlbb/3e678/f/q7HhoxTkWKF9d0XP2vLhh2Z3q54ySLW12tWbdCoYS+pRKlicjpDdOcDt5z3e2bXY5bdMrt6uSS16dhMVWtWvOj7rlG3ilped7X1/umnh76gRQv+UJ361WUEBWnvrv1aufRfbV6/XcOevsvnx3xlpn6T2qpWu5J1MbVXx72j3Tv2qmTp4vpmzk8XfH97/pgo3di3kz56+/Rndaf87xTndl2v8Toa6q8zn3gQfzJBa1dv1OLvl8jlclvr+997s1q1b3LB+zkZd0pta9+sKjUrqF6jmipWoojCwkP11x//6OSJeGu76PzpYbZYbFHr65+/+13/9/hkFSgco4KFY2z7eEG7f4bP/pmTpPtve1INm9aRERSkm2673vpEBV9q1K2iFm0b6/eFyyVJb7z0oXZt36sqNSro1x/Tr14uSQMfuCVLZx8AQHYidANADqnToLpad2imxd+fPvK5ad02TRz9lqTTwe3sozU5JX9MlN6e/aIG3ThcJ+JOKTkpxfrs4zOCgoL0xPNDM716cZFihVS8VFF99NbnGdb1G3Kz13vIb7mzu96e9JH1x/mmtdu0ae02BQUFqVX7pl5XyM6KISP7W2HI4/Ho42lfSpLyRUao0w1tNP/LRT5v16F7a706bro8Ho88Ho/enTxL0unTny8UurPjMbNDZlcvl04fmb6U0C1Jr304Vrddf7/Wrt4kj8ejn775TT99k/nZBP54adoz1ud0m6apz//3olRoqFPN2zSyrlydWZi6477eVug+41LDaWafeBAc7NBDT9+lBx6/06/7O7Ov+1KvUU01aVXfWu50Qxvr90NSYrKmvviBJKlKzQq2hO6ChWNUuFhBW3+G6zeto6IlCltvufnh61+ssxiatmpw3tAtSa9+OEZ92t+rTetOP4bffv6zvv38Z69trr+xre5/fEAWpwaA7MNLfQCQg96e/YIGDu2joiUKy+kMUblKpfXoc/fppWlP53RrlibX1NeP/3yqu4fdpio1Kyg8IkxOZ4hiyxTXDbd20le/vat7Hs78Ik+hYU599tObGvTgrdbR4opVy2r0pBF67rVHvLYtXLSgZi98W206NlO+yAhF5AtX8zaN9NnPb6lb78w/1iozjVvU00ffva6GTesoNNSp6PyRatupub787V1Vq5X5R27VrFdVr388TrXrV/Pr84zPuNTHLDcqXLSgvl7ygcZPeUzN2zRSwcIxcjgcisgXrkrVyunGvp302oznNHhEP7/vu27DGvryt3d17fUtlC8y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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "def visualize_classical_mts_results(mts_res):\n", + " \"\"\"\n", + " Visualizes the optimization path and population distribution \n", + " with a 'Quantum Vibe' aesthetic.\n", + " \"\"\"\n", + " # 1. Extraction and Search Logic\n", + " trace = mts_res[\"best_trace\"]\n", + " pop_e = mts_res[\"population_E\"]\n", + " best_e = mts_res[\"best_E\"]\n", + "\n", + "#Dynamically find the first iteration index where the best energy was hit\n", + "#Using np.where is faster and cleaner for finding the first occurrence\n", + " iteration_indices = np.where(trace == best_e)[0]\n", + " best_iteration = iteration_indices[0] if iteration_indices.size > 0 else 0\n", + "\n", + " print(f\"Best E Found: {best_e}\")\n", + " print(f\"First reached at iteration: {best_iteration}\")\n", + "\n", + " bg_color = '#FFFFFF' # White background\n", + " accent_color = '#1c0333' # Deep dark purple for text/lines\n", + " bar_color = '#601f9e' # Vibrant purple for fills/bars\n", + " grid_color = '#F0F0F0' # Light grey for subtle grid\n", + "\n", + " # --- Plot 1: Best-so-far Curve ---\n", + " fig1, ax1 = plt.subplots(figsize=(10, 5))\n", + " fig1.patch.set_facecolor(bg_color)\n", + " ax1.set_facecolor(bg_color)\n", + "\n", + " ax1.plot(trace, color=accent_color, linewidth=2.5, label='Energy Path')\n", + "\n", + "#Highlight the minimum energy point\n", + " ax1.scatter(best_iteration, best_e, color='blue', s=100, zorder=5, \n", + " label=f'Min Energy ({best_iteration}, {best_e})')\n", + "\n", + "#Annotate the minimum point\n", + " ax1.text(best_iteration + (len(trace)*0.05), best_e + (max(trace)*0.05), \n", + " f'Minimum energy at MTS({best_iteration}, {best_e})', \n", + " fontsize=11, color='blue', fontweight='bold')\n", + "\n", + " # Formatting\n", + " ax1.set_xlabel(\"MTS Iteration\", color=accent_color, fontweight='bold')\n", + " ax1.set_ylabel(\"Best-so-far Energy E\", color=accent_color, fontweight='bold')\n", + " ax1.set_title(\"Classical MTS Optimization Path\", color=accent_color, fontsize=14, fontweight='bold')\n", + " ax1.grid(True, linestyle='--', alpha=0.7, color=grid_color)\n", + " ax1.tick_params(colors=accent_color)\n", + " ax1.set_xlim(left=0) # Ensure X-axis starts at 0\n", + "#Modern area fill\n", + " ax1.fill_between(range(len(trace)), trace, color=bar_color, alpha=0.15)\n", + "\n", + " plt.tight_layout()\n", + " plt.show()\n", + "\n", + " # --- Plot 2: Final Population Energy Distribution ---\n", + " fig2, ax2 = plt.subplots(figsize=(10, 5))\n", + " fig2.patch.set_facecolor(bg_color)\n", + " ax2.set_facecolor(bg_color)\n", + "\n", + " # Histogram\n", + " ax2.hist(pop_e, bins=20, color=bar_color, edgecolor=bg_color, linewidth=1.2)\n", + "\n", + " # Formatting\n", + " ax2.set_xlabel(\"Energy E\", color=accent_color, fontweight='bold')\n", + " ax2.set_ylabel(\"Candidate Count\", color=accent_color, fontweight='bold')\n", + " ax2.set_title(\"Final Population Energy Distribution\", color=accent_color, fontsize=14, fontweight='bold')\n", + " ax2.grid(axis='y', linestyle='--', alpha=0.7, color=grid_color)\n", + " ax2.tick_params(colors=accent_color)\n", + "\n", + " # Clean up the spines\n", + " for spine in ax2.spines.values():\n", + " spine.set_edgecolor(accent_color)\n", + "\n", + " plt.tight_layout()\n", + " plt.show()\n", + "\n", + "#Usage:\n", + "visualize_classical_mts_results(res)" + ] + }, + { + "cell_type": "markdown", + "id": "5da2352b-7836-4af5-a7d3-5050a83775f7", + "metadata": {}, + "source": [ + "## Building a Quantum Enhanced Workflow\n", + "\n", + "Despite the effectiveness of MTS, it still exhibits exponential scaling $O(1.34^N)$ behavior and becomes intractable for large $N$. Quantum computing provides a potential alternative method for solving the LABS problem because the properties of entanglement, interference, and superpositon may allow for a better global search. Recent demonstrations have even produced evidence that the quantum approximate optimization algorithm (QAOA) can be used to reduce the scaling of the LABS problem to $O(1.21^N)$ for $N$ between 28 and 40 with quantum minimum finding.\n", + "\n", + "However, current quantum hardware limitations restrict solution to problems of greater than about $N=20$, meaning that it will be some time before quantum approaches can outperform the classical state of the art. It should also be noted that standard QAOA can struggle with LABS and require many layers to converge the parameters if other tricks are not employed.\n", + "\n", + "The authors of [Scaling advantage with quantum-enhanced memetic tabu search for LABS](https://arxiv.org/html/2511.04553v1) cleverly explored an alternate path that combines quantum and classical approaches and might be able to provide a more near-term benefit. Instead of expecting the quantum computer to solve the problem entirely, they asked how a quantum approach might enhance MTS.\n", + "\n", + "The basic idea is that a quantum optimization routine could run first and the resulting state be sampled to produce a better population for MTS. Many such heuristics for defining the initial population are possible, but the rest of this notebook will explore their methodology, help you to build the workflow yourself, and allow you to analyze the benefits of their approach.\n", + "\n", + "The first step of quantum enhanced MTS (QE-MTS) is to prepare a circuit with CUDA-Q that approximates the ground state of the Hamiltonian corresponding to the LABS problem. You could do this with any optimization algorithm such as QAOA or using an adiabatic approach. (See the [Quantum Portfolio Optimization](https://github.com/NVIDIA/cuda-q-academic/blob/main/quantum-applications-to-finance/03_qchop.ipynb) CUDA-Q Academic lab for a detailed comparison of these two common approaches.)\n", + "\n", + "The authors of this work opted for an adiabatic approach (More on why later). Recall that the goal of an adiabatic optimization is to begin with a Hamiltonian that has an easily prepared ground state ($H_i$). Then, the adiabatic Hamiltonian $H_{ad}$ can be constructed as $H_{ad}(\\lambda) = (1-\\lambda)H_i +\\lambda H_f $, where $\\lambda$ is a function of time and $H_f$ is the Hamiltonian representing a qubit encoding of the LABS problem. \n", + "\n", + "$$H_f = 2 \\sum_{i=1}^{N-2} \\sigma_i^z \\sum_{k=1}^{\\lfloor \\frac{N-i}{2} \\rfloor} \\sigma_{i+k}^z \n", + "+ 4 \\sum_{i=1}^{N-3} \\sigma_i^z \\sum_{t=1}^{\\lfloor \\frac{N-i-1}{2} \\rfloor} \\sum_{k=t+1}^{N-i-t} \\sigma_{i+t}^z \\sigma_{i+k}^z \\sigma_{i+k+t}^z$$\n", + "\n", + "The authors also selected $H_i = \\sum_i h^x_i \\sigma^x_i $ which has an easily prepared ground state of $\\ket{+}^{\\otimes N}$.\n", + "\n", + "The challenge for implementing the optimization procedure becomes selection of an operator that will quickly and accurately evolve to the ground state of $H_f$. One approach is to use a so-called auxiliary countradiabatic (CD) term $H_{CD}$, which corrects diabatic transitions that jump out of the ground state during the evolution. The figure below demonstrates the benefit of using a CD correction.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "An operator called the adiabatic gauge potential $A_{\\lambda}$ is the ideal choice for the CD term as it suppresses all possible diabatic transitions, resulting in the following total system to evolve.\n", + "\n", + "$$ H(\\lambda) = H_{ad}(\\lambda) + \\lambda H_{CD} (\\lambda) $$\n", + "\n", + "$A(\\lambda)$ is derrived from $H_{ad}(\\lambda)$ (see paper for details) as it contains information about underlying physics of the problem. \n", + "\n", + "There is a problem though. The $A(\\lambda)$ term cannot be efficiently expressed exactly and needs to be approximated. It also turns out that in the so called impulse regime, where the adiabatic evolution is very fast, $H_{cd} (\\lambda)$ dominates $H_{ad}(\\lambda)$, meaning that the final implementation corresponds to the operator $H(\\lambda) = H^1_{cd}(\\lambda)$ where $H^1_{cd}(\\lambda)$ is a first order approximation of $A(\\lambda)$ (see equation 7 in the paper).\n", + "\n", + "A final step is to use Trotterization to define the quantum circuit to apply $e^{-\\theta (t) i H_{cd}}$. The details for this derivation are shown in the appendix of the paper. and result from equation B3 is shown below. \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\begin{aligned}\n", + "U(0, T) = \\prod_{n=1}^{n_{\\text{trot}}} & \\left[ \\prod_{i=1}^{N-2} \\prod_{k=1}^{\\lfloor \\frac{N-i}{2} \\rfloor} R_{Y_i Z_{i+k}}\\big(4\\theta(n\\Delta t)h_i^x\\big) R_{Z_i Y_{i+k}}\\big(4\\theta(n\\Delta t)h_{i+k}^x\\big) \\right] \\\\\n", + "& \\times \\prod_{i=1}^{N-3} \\prod_{t=1}^{\\lfloor \\frac{N-i-1}{2} \\rfloor} \\prod_{k=t+1}^{N-i-t} \\bigg( R_{Y_i Z_{i+t} Z_{i+k} Z_{i+k+t}}\\big(8\\theta(n\\Delta t)h_i^x\\big) \\\\\n", + "& \\quad \\times R_{Z_i Y_{i+t} Z_{i+k} Z_{i+k+t}}\\big(8\\theta(n\\Delta t)h_{i+t}^x\\big) \\\\\n", + "& \\quad \\times R_{Z_i Z_{i+t} Y_{i+k} Z_{i+k+t}}\\big(8\\theta(n\\Delta t)h_{i+k}^x\\big) \\\\\n", + "& \\quad \\times R_{Z_i Z_{i+t} Z_{i+k} Y_{i+k+t}}\\big(8\\theta(n\\Delta t)h_{i+k+t}^x\\big) \\bigg)\n", + "\\end{aligned}\n", + "\\end{equation}\n", + "$$\n", + "\n", + "It turns out that this implementation is more efficient than QAOA in terms of gate count. The authors calculated that for $N=67$, QAOA would require 1.4 million entangling gates while the CD approach derived here requires only 236 thousand entangling gates.\n", + "\n", + "\n", + "
\n", + "

Exercise 3:

\n", + "

\n", + "At first glance, this equation might looks quite complicated. However, observe the structure and note two \"blocks\" of terms. Can you spot them? \n", + "\n", + "They are 2 qubit terms that look like $R_{YZ}(\\theta)$ or $R_{ZY}(\\theta)$.\n", + "\n", + "As well as 4 qubit terms that look like $R_{YZZZ}(\\theta)$, $R_{ZYZZ}(\\theta)$, $R_{ZZYZ}(\\theta)$, or $R_{ZZZY}(\\theta)$.\n", + "\n", + "Thankfully the authors derive a pair of circuit implementations for the two and four qubit terms respectively, shown in the figures below.\n", + "\n", + "Using CUDA-Q, write a kernel for each which will be used later to construct the full implementation.\n", + "\n", + "* Hint: Remember that the adjoint of a rotation gate is the same as rotating in the opposite direction. \n", + "\n", + "* Hint: You may also want to define a CUDA-Q kernel for an R$_{ZZ}$ gate.\n", + "\n", + "* Hint: Implementing a circuit from a paper is a great place where AI can help accelerate your work. If you have access to a coding assistant, feel free to use it here.\n", + "

\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "c91bbaae-62a1-41e7-a285-af885627a942", + "metadata": {}, + "outputs": [], + "source": [ + "# TODO Write CUDA-Q kernels to apply the 2 and 4 qubit operators.\n", + "# define rzz\n", + "@cudaq.kernel\n", + "def rzz(q0: cudaq.qubit, q1: cudaq.qubit, theta: float):# for pi/2\n", + " x.ctrl(q0, q1) \n", + " rz(theta, q1) \n", + " x.ctrl(q0, q1)\n", + "\n", + "@cudaq.kernel\n", + "def two_qubit_rotation_block(q0: cudaq.qubit, q1: cudaq.qubit, theta: float):\n", + " pi = np.pi\n", + " rx(pi/2.0, q1)\n", + " rzz(q0, q1, theta)\n", + " rx(pi/2.0, q0)\n", + " rx(-pi/2.0, q1)\n", + " rzz(q0, q1, theta)\n", + " rx(-pi/2.0, q0)\n", + "\n", + "@cudaq.kernel\n", + "def four_qubit_rotation_block(q0: cudaq.qubit, q1: cudaq.qubit, q2: cudaq.qubit, q3: cudaq.qubit, theta: float):\n", + " pi = np.pi\n", + " rx(-pi/2.0, q0)\n", + " ry(pi/2.0, q1)\n", + " ry(-pi/2.0, q2)\n", + " \n", + " rzz(q0, q1, -pi/2.0)\n", + " rzz(q2, q3, -pi/2.0)\n", + "\n", + " rx(pi/2.0, q0)\n", + " ry(-pi/2.0, q1) \n", + " ry(pi/2.0, q2)\n", + " rx(-pi/2.0, q3) \n", + "\n", + " rx(-pi/2.0, q1) \n", + " rx(-pi/2.0, q2) \n", + " \n", + " rzz(q1, q2, theta)\n", + "\n", + " rx(pi/2.0, q1) \n", + " rx(pi, q2) \n", + "\n", + " ry(pi/2.0, q1)\n", + " \n", + " rzz(q0, q1, pi/2.0)\n", + " \n", + " rx(pi/2.0, q0)\n", + " ry(-pi/2.0, q2) \n", + " \n", + " rzz(q1, q2, -theta)\n", + " \n", + " rx(pi/2.0, q1)\n", + " rx(-pi, q2) \n", + " \n", + " rzz(q1, q2, -theta)\n", + " \n", + " rx(-pi, q1)\n", + " ry(pi/2.0, q2)\n", + " \n", + " rzz(q2, q3, -pi/2.0)\n", + " \n", + " ry(-pi/2.0, q2) # Ry_dagger\n", + " rx(-pi/2.0, q3)\n", + "\n", + " rx(-pi/2.0, q2)\n", + " \n", + " rzz(q1, q2, theta)\n", + "\n", + " rx(pi/2.0, q1)\n", + " rx(pi/2.0, q2)\n", + " \n", + " ry(-pi/2.0, q1)\n", + " ry(pi/2.0, q2)\n", + " \n", + " rzz(q0, q1, pi/2.0)\n", + " rzz(q2, q3, pi/2.0)\n", + "\n", + " \n", + " ry(pi/2.0, q1)\n", + " ry(-pi/2.0, q2)\n", + " rx(pi/2.0, q3)" + ] + }, + { + "cell_type": "markdown", + "id": "f113f324-6f58-4b5e-ab93-339d70f88c46", + "metadata": {}, + "source": [ + "There are a few additional items we need to consider before completing the final implementation of the entire circuit. One simplification we can make is that for our problem the $h_i^x$ terms are all 1 and any $h_b^x$ terms are 0, and are only there for generalizations of this model. \n", + "\n", + "The remaining challenge is derivation of the angles that are used to apply each of the circuits you defined above. These are obtained from two terms $\\lambda(t)$ and $\\alpha(t)$. \n", + "\n", + "\n", + "The $\\lambda(t)$ defines an annealing schedule and is generally a Sin function which slowly \"turns on\" the problem Hamiltonian. For computing our angles, we need the derivative of $\\lambda(t)$.\n", + "\n", + "The $\\alpha$ term is a bit trickier and is the solution to a set of differential equations which minimize the distance between $H^1_{CD}(\\lambda)$ and $A(\\lambda)$. The result is \n", + "\n", + "$$\\alpha(t) = \\frac{-\\Gamma_1(t)}{\\Gamma_2(t)} $$\n", + "\n", + "Where $\\Gamma_1(t)$ and $\\Gamma_2(t)$ are defined in equations 16 and 17 of the paper and essentially depend on the structure of the optimization problem. Curious learners can look at the functions in `labs_utils.py` to see how these are computed, based on the problem size and specific time step in the Trotter process. \n", + "\n", + "\n", + "
\n", + "

Exercise 4:

\n", + "

\n", + "The `compute_theta` function, called in the following cells, requires all indices of the two and four body terms. These will be used again in our main kernel to apply the respective gates. Use the products in the formula below to finish the function in the cell below. Save them as `G2` and `G4` where each is a list of lists of indices defining the two and four term interactions. As you are translating an equation to a set of loops, this is a great opportunity to use an AI coding assistant.\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\begin{aligned}\n", + "U(0, T) = \\prod_{n=1}^{n_{\\text{trot}}} & \\left[ \\prod_{i=1}^{N-2} \\prod_{k=1}^{\\lfloor \\frac{N-i}{2} \\rfloor} R_{Y_i Z_{i+k}}\\big(4\\theta(n\\Delta t)h_i^x\\big) R_{Z_i Y_{i+k}}\\big(4\\theta(n\\Delta t)h_{i+k}^x\\big) \\right] \\\\\n", + "& \\times \\prod_{i=1}^{N-3} \\prod_{t=1}^{\\lfloor \\frac{N-i-1}{2} \\rfloor} \\prod_{k=t+1}^{N-i-t} \\bigg( R_{Y_i Z_{i+t} Z_{i+k} Z_{i+k+t}}\\big(8\\theta(n\\Delta t)h_i^x\\big) \\\\\n", + "& \\quad \\times R_{Z_i Y_{i+t} Z_{i+k} Z_{i+k+t}}\\big(8\\theta(n\\Delta t)h_{i+t}^x\\big) \\\\\n", + "& \\quad \\times R_{Z_i Z_{i+t} Y_{i+k} Z_{i+k+t}}\\big(8\\theta(n\\Delta t)h_{i+k}^x\\big) \\\\\n", + "& \\quad \\times R_{Z_i Z_{i+t} Z_{i+k} Y_{i+k+t}}\\big(8\\theta(n\\Delta t)h_{i+k+t}^x\\big) \\bigg)\n", + "\\end{aligned}\n", + "\\end{equation}\n", + "$$\n", + "\n", + "

\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "abf34168-42f9-4dbf-86e1-99976232ad7e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "N=6: |G2|=6, |G4|=7\n", + " G2 sample: [[0, 1], [0, 2], [1, 2], [1, 3], [2, 3], [3, 4]]\n", + " G4 sample: [[0, 1, 2, 3], [0, 1, 3, 4], [0, 1, 4, 5], [0, 2, 3, 5], [1, 2, 3, 4], [1, 2, 4, 5]]\n", + "----------------------------------------\n", + "N=7: |G2|=9, |G4|=13\n", + " G2 sample: [[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [2, 3]]\n", + " G4 sample: [[0, 1, 2, 3], [0, 1, 3, 4], [0, 1, 4, 5], [0, 1, 5, 6], [0, 2, 3, 5], [0, 2, 4, 6]]\n", + "----------------------------------------\n", + "N=8: |G2|=12, |G4|=22\n", + " G2 sample: [[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [1, 4]]\n", + " G4 sample: [[0, 1, 2, 3], [0, 1, 3, 4], [0, 1, 4, 5], [0, 1, 5, 6], [0, 1, 6, 7], [0, 2, 3, 5]]\n", + "----------------------------------------\n", + "N=10: |G2|=20, |G4|=50\n", + " G2 sample: [[0, 1], [0, 2], [0, 3], [0, 4], [1, 2], [1, 3]]\n", + " G4 sample: [[0, 1, 2, 3], [0, 1, 3, 4], [0, 1, 4, 5], [0, 1, 5, 6], [0, 1, 6, 7], [0, 1, 7, 8]]\n", + "----------------------------------------\n" + ] + } + ], + "source": [ + "def get_interactions(N: int):\n", + " \"\"\"\n", + " Generates the interaction sets G2 and G4 based on the loop limits in Eq.15 (noted in the notebook).\n", + " Returns standard 0-based indices as lists of lists of ints.\n", + "\n", + " Args:\n", + " N (int): Sequence length.\n", + "\n", + " Returns:\n", + " G2: List of [i, i+k] two-body index pairs (0-based).\n", + " G4: List of [i, i+t, i+k, i+k+t] four-body index quadruples (0-based).\n", + " \"\"\"\n", + " if not isinstance(N, int) or N < 4:\n", + " # N must be at least 4 for non-empty G4; G2 exists for N>=3, but we choose N>=4 here as safe min.\n", + " raise ValueError(\"N must be an integer >= 4\")\n", + "\n", + " G2 = []\n", + " G4 = []\n", + "\n", + " # Build G2\n", + " # 1-based loops in the guide: i = 1..N-2, k = 1..floor((N-i)/2)\n", + " # Convert to 0-based: i0 = i-1 in range(0, N-2), k runs 1..floor((N-(i))/2)\n", + " for i0 in range(0, N - 2): # i0 corresponds to i=1..N-2\n", + " max_k = (N - (i0 + 1)) // 2 # floor((N-i)/2) where i = i0+1\n", + " for k in range(1, max_k + 1):\n", + " j0 = i0 + k\n", + " # sanity: ensure indices inside [0, N-1]\n", + " if 0 <= j0 < N:\n", + " G2.append([i0, j0])\n", + "\n", + " # Build G4\n", + " # 1-based loops in the guide: i = 1..N-3, t = 1..floor((N-i-1)/2), k = t+1..N-i-t\n", + " # Convert to 0-based: i0 in 0..N-4, t,k as below.\n", + " for i0 in range(0, N - 3): # i0 corresponds to i=1..N-3\n", + " max_t = (N - (i0 + 1) - 1) // 2 # floor((N-i-1)/2) with i=i0+1\n", + " for t in range(1, max_t + 1):\n", + " # k loop (1-based): k = t+1 .. N - i - t\n", + " # convert bounds to 0-based arithmetic: iterate over k in that integer range\n", + " k_min = t + 1\n", + " k_max = (N - (i0 + 1) - t) # inclusive in 1-based formula\n", + " # k_min..k_max (both inclusive) in 1-based; iterate accordingly\n", + " for k in range(k_min, k_max + 1):\n", + " # map to 0-based indices for the four-body term:\n", + " # (i, i+t, i+k, i+k+t) in 1-based -> subtract 1 for 0-based:\n", + " a = i0\n", + " b = i0 + t\n", + " c = i0 + k\n", + " d = i0 + k + t\n", + " # ensure within bounds\n", + " if 0 <= a < N and 0 <= b < N and 0 <= c < N and 0 <= d < N:\n", + " G4.append([a, b, c, d])\n", + "\n", + " # Sanity checks (counts)\n", + " # expected_G2_len = sum_{i=1}^{N-2} floor((N-i)/2)\n", + " expected_G2 = sum(((N - i) // 2) for i in range(1, N - 1))\n", + " # expected_G4_len = sum_{i=1}^{N-3} sum_{t=1}^{floor((N-i-1)/2)} (N - i - 2*t)\n", + " expected_G4 = 0\n", + " for i in range(1, N - 2):\n", + " max_t = (N - i - 1) // 2\n", + " for t in range(1, max_t + 1):\n", + " expected_G4 += max(0, N - i - 2 * t)\n", + "\n", + " assert len(G2) == expected_G2, f\"G2 length mismatch: got {len(G2)}, expected {expected_G2}\"\n", + " assert len(G4) == expected_G4, f\"G4 length mismatch: got {len(G4)}, expected {expected_G4}\"\n", + "\n", + " return G2, G4\n", + "\n", + "\n", + "# Quick usage example/smoke test:\n", + "\n", + "if __name__ == \"__main__\":\n", + " for Ntest in [6, 7, 8, 10]:\n", + " G2, G4 = get_interactions(Ntest)\n", + " print(f\"N={Ntest}: |G2|={len(G2)}, |G4|={len(G4)}\")\n", + " # print a few examples\n", + " print(\" G2 sample:\", G2[:6])\n", + " print(\" G4 sample:\", G4[:6])\n", + " print(\"-\" * 40)\n" + ] + }, + { + "cell_type": "markdown", + "id": "3450f200-b191-41f5-88d2-974052ee45ac", + "metadata": {}, + "source": [ + "\n", + "\n", + "
\n", + "

Exercise 5:

\n", + "

\n", + "You are now ready to construct the entire circuit and run the counteradiabatic optimization procedure. The final kernel needs to apply Equation 15 for a specified total evolution time $T$ and the `n_steps` number of Trotter steps. It must also take as input, the indices for the two and four body terms and the thetas to be applied each step, as these cannot be computed within a CUDA-Q kernel.\n", + "\n", + "The helper function `compute_theta` computes the theta parameters for you, using a few additional functions in accordance with the equations defined in the paper.\n", + "

\n" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "8c2e6d7d-03b2-482f-bc36-d572e6d4855a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "First 10 thetas: [1.5394042220828748e-18]\n", + "the size of population: 813\n", + "first 5 MTS instance: ['111111111111', '111111110111', '111111110010', '111111101110', '111111101010']\n" + ] + } + ], + "source": [ + "@cudaq.kernel\n", + "def trotterized_circuit(N: int, G2: list[list[int]], G4: list[list[int]], steps: int, dt: float, T: float, thetas: list[float]):\n", + " \n", + " reg = cudaq.qvector(N)\n", + " h(reg)\n", + "\n", + " nums_g2 = len(G2)\n", + " nums_g4 = len(G4)\n", + " \n", + " for n in range(steps): # fomula:[1, n]\n", + " theta = thetas[n]\n", + " for i in range(nums_g2):\n", + " pair = G2[i] # fomula:[1,N-2] for i and # [1,(N - i) // 2 ] for k\n", + " two_qubit_rotation_block(reg[pair[0]], reg[pair[1]], theta)\n", + " \n", + " for j in range(nums_g4):#[1,N-3] for j;#[1,(N-i-1)/2] for t and #[t+1,N-i-t]for k\n", + " quad = G4[j]\n", + " four_qubit_rotation_block(reg[quad[0]], reg[quad[1]], reg[quad[2]], reg[quad[3]], theta) \n", + "\n", + "# test it\n", + "T=1 # total time\n", + "n_steps = 1 # number of trotter steps\n", + "dt = T / n_steps\n", + "N = 12 # change from 20\n", + "G2, G4 = get_interactions(N)\n", + "\n", + "thetas =[]\n", + "\n", + "for step in range(1, n_steps + 1):\n", + " t = step * dt\n", + " theta_val = utils.compute_theta(t, dt, T, N, G2, G4)\n", + " thetas.append(theta_val)\n", + "print(f\"First 10 thetas: {thetas[:10]}\")\n", + "\n", + "# TODO - Sample your kernel to make sure it works\n", + "counts = cudaq.sample(trotterized_circuit, N, G2, G4, n_steps, dt, T, thetas)\n", + "population = [bits for bits, count in counts.items()]\n", + "\n", + "print(f\"the size of population: {len(population)}\")\n", + "print(f\"first 5 MTS instance: {population[:5]}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f626db2c-6a8c-40a0-acdf-6c36404dfa49", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "fb89d90e-66e2-4700-85b9-40df9fca22c1", + "metadata": {}, + "source": [ + "## Generating Quantum Enhanced Results\n", + "\n", + "Recall that the point of this lab is to demonstrate the potential benefits of running a quantum subroutine as a preprocessing step for classical optimization of a challenging problem like LABS. you now have all of the tools you need to try this for yourself.\n", + "\n", + "
\n", + "

Exercise 6:

\n", + "

\n", + "Use your CUDA-Q code to prepare an initial population for your memetic search algorithm and see if you can improve the results relative to a random initial population. If you are running on a CPU, you will need to run smaller problem instances. The code below sets up the problem\n", + "\n", + "

\n" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "8e5f02e6-41bf-4634-9cb1-f0f543ef2e3f", + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'best_S' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[35], line 105\u001b[0m\n\u001b[1;32m 102\u001b[0m \u001b[38;5;66;03m# Run Just MTS\u001b[39;00m\n\u001b[1;32m 104\u001b[0m N \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m12\u001b[39m\n\u001b[0;32m--> 105\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[43mmts_labs_pm1\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 106\u001b[0m \u001b[43m \u001b[49m\u001b[43mN\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mN\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 107\u001b[0m \u001b[43m \u001b[49m\u001b[43mpop_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m32\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 108\u001b[0m \u001b[43m \u001b[49m\u001b[43mp_combine\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0.7\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 109\u001b[0m \u001b[43m \u001b[49m\u001b[43mp_mut\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1.0\u001b[39;49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[38;5;241;43m50.0\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 110\u001b[0m \u001b[43m \u001b[49m\u001b[43mmts_iters\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m400\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 111\u001b[0m \u001b[43m \u001b[49m\u001b[43mtabu_iters\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m800\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 112\u001b[0m \u001b[43m \u001b[49m\u001b[43mtabu_tenure\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 113\u001b[0m \u001b[43m \u001b[49m\u001b[43mcandidate_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m64\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 114\u001b[0m \u001b[43m \u001b[49m\u001b[43mseed\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m42\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 115\u001b[0m \u001b[43m \u001b[49m\u001b[43mverbose_every\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m50\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 116\u001b[0m \u001b[43m)\u001b[49m\n\u001b[1;32m 117\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mClassical MTS\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 118\u001b[0m visualize_mts(res)\n", + "Cell \u001b[0;32mIn[34], line 204\u001b[0m, in \u001b[0;36mmts_labs_pm1\u001b[0;34m(N, pop_size, p_combine, p_mut, mts_iters, tabu_iters, tabu_tenure, candidate_size, target_E, seed, verbose_every)\u001b[0m\n\u001b[1;32m 201\u001b[0m child \u001b[38;5;241m=\u001b[39m mutate_alg3(child, p_mut, rng)\n\u001b[1;32m 203\u001b[0m \u001b[38;5;66;03m# ---- Tabu Search with Child ----\u001b[39;00m\n\u001b[0;32m--> 204\u001b[0m result_s, result_E \u001b[38;5;241m=\u001b[39m \u001b[43mtabu_search_pm1\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 205\u001b[0m \u001b[43m \u001b[49m\u001b[43mchild\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 206\u001b[0m \u001b[43m \u001b[49m\u001b[43mmax_iters\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtabu_iters\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 207\u001b[0m \u001b[43m \u001b[49m\u001b[43mtabu_tenure\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtabu_tenure\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 208\u001b[0m \u001b[43m \u001b[49m\u001b[43mcandidate_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcandidate_size\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 209\u001b[0m \u001b[43m \u001b[49m\u001b[43mrng\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrng\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 210\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 212\u001b[0m \u001b[38;5;66;03m# ---- Update best solution ----\u001b[39;00m\n\u001b[1;32m 213\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result_E \u001b[38;5;241m<\u001b[39m best_E_Class:\n", + "Cell \u001b[0;32mIn[34], line 112\u001b[0m, in \u001b[0;36mtabu_search_pm1\u001b[0;34m(s0, max_iters, tabu_tenure, candidate_size, rng)\u001b[0m\n\u001b[1;32m 110\u001b[0m best_s \u001b[38;5;241m=\u001b[39m s\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[1;32m 111\u001b[0m best_E_Class \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mint\u001b[39m(E)\n\u001b[0;32m--> 112\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43mbest_S\u001b[49m)\n\u001b[1;32m 114\u001b[0m N \u001b[38;5;241m=\u001b[39m s\u001b[38;5;241m.\u001b[39msize\n\u001b[1;32m 115\u001b[0m tabu_until \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mzeros(N, dtype\u001b[38;5;241m=\u001b[39mnp\u001b[38;5;241m.\u001b[39mint32)\n", + "\u001b[0;31mNameError\u001b[0m: name 'best_S' is not defined" + ] + } + ], + "source": [ + "# TODO - write code here to sample from your CUDA-Q kernel and used the results to seed your MTS population\n", + "\n", + "# updated the MTS main loop \n", + "\n", + "def mts_quant1(\n", + " N: int,\n", + " pop_size: int = 32,\n", + " initial_pop: np.ndarray = None, # for quantum algo output \n", + " p_combine: float = 0.7,\n", + " p_mut: float = 1.0/50.0,\n", + " mts_iters: int = 1000,\n", + " tabu_iters: int = 800,\n", + " tabu_tenure: int = 30,\n", + " candidate_size: int = 64,\n", + " target_E: int | None = None,\n", + " seed: int = 0,\n", + " verbose_every: int = 100,\n", + "):\n", + " ## change\n", + " rng = np.random.default_rng(seed)\n", + " ## check if have pop or not\n", + " if initial_pop is not None:\n", + " print(f\"Using Quantum-enhanced population (size: {len(initial_pop)})\")\n", + " pop = initial_pop.copy()\n", + " else:\n", + " print(\"Using Randomly generated population.\")\n", + " pop = rng.choice(np.array([-1, 1], dtype=np.int8), size=(pop_size, N))\n", + "\n", + " if pop.shape[0] < pop_size:\n", + " extra_count = pop_size - pop.shape[0]\n", + " extra = rng.choice(np.array([-1, 1], dtype=np.int8), size=(extra_count, N))\n", + " pop = np.vstack([pop, extra])\n", + " \n", + " # init population: k random bitstrings\n", + " #pop = rng.choice(np.array([-1, 1], dtype=np.int8), size=(pop_size, N))\n", + " pop_E = np.array([labs_energy_pm1(pop[i]) for i in range(pop_size)], dtype=np.int64)\n", + "\n", + " best_idx = int(np.argmin(pop_E))\n", + " best_s = pop[best_idx].copy()\n", + " best_E = int(pop_E[best_idx])\n", + "\n", + " trace = [best_E]\n", + " t0 = time.time()\n", + "\n", + " for it in range(1, mts_iters + 1):\n", + " if target_E is not None and best_E <= target_E:\n", + " break\n", + "\n", + " # ---- Make Child ----\n", + " if rng.random() < p_combine:\n", + " i1, i2 = rng.integers(0, pop_size, size=2)\n", + " child = combine_alg3(pop[i1], pop[i2], rng)\n", + " else:\n", + " i = int(rng.integers(0, pop_size))\n", + " child = pop[i].copy()\n", + "\n", + " # ---- Mutate Child ----\n", + " child = mutate_alg3(child, p_mut, rng)\n", + "\n", + " # ---- Tabu Search with Child ----\n", + " result_s, result_E = tabu_search_pm1(\n", + " child,\n", + " max_iters=tabu_iters,\n", + " tabu_tenure=tabu_tenure,\n", + " candidate_size=candidate_size,\n", + " rng=rng,\n", + " )\n", + "\n", + " # ---- Update best solution ----\n", + " if result_E < best_E:\n", + " best_E = int(result_E)\n", + " best_s = result_s.copy()\n", + "\n", + " # ---- Add result to Population ----\n", + " # randomly replace a member if result is better\n", + " r = int(rng.integers(0, pop_size))\n", + " if result_E < pop_E[r]:\n", + " pop[r] = result_s\n", + " pop_E[r] = result_E\n", + "\n", + " # (optional, helpful) elitism: keep global best in population\n", + " worst = int(np.argmax(pop_E))\n", + " if best_E < pop_E[worst]:\n", + " pop[worst] = best_s\n", + " pop_E[worst] = best_E\n", + "\n", + " trace.append(best_E)\n", + "\n", + " if verbose_every and (it % verbose_every == 0):\n", + " print(f\"[MTS {it:5d}] best_E={best_E} elapsed={time.time()-t0:.2f}s\")\n", + "\n", + " return {\n", + " \"best_s_pm1\": best_s,\n", + " \"best_s_01\": pm1_to_bits01(best_s),\n", + " \"best_E\": best_E,\n", + " \"best_trace\": np.array(trace, dtype=np.int64),\n", + " \"population_pm1\": pop,\n", + " \"population_E\": pop_E.copy(),\n", + " \"elapsed_sec\": time.time() - t0,\n", + " }\n", + "\n", + "# Run Just MTS\n", + "\n", + "N = 12\n", + "res = mts_labs_pm1(\n", + " N=N,\n", + " pop_size=32,\n", + " p_combine=0.7,\n", + " p_mut=1.0/50.0,\n", + " mts_iters=400,\n", + " tabu_iters=800,\n", + " tabu_tenure=30,\n", + " candidate_size=64,\n", + " seed=42,\n", + " verbose_every=50,\n", + ")\n", + "print(\"Classical MTS\")\n", + "visualize_mts(res)\n", + "\n", + "# Run cp + MTS \n", + "# test it\n", + "T=1 # total time\n", + "n_steps = 1 # number of trotter steps\n", + "dt = T / n_steps\n", + "# N\n", + "G2, G4 = get_interactions(N)\n", + "\n", + "thetas =[]\n", + "\n", + "for step in range(1, n_steps + 1):\n", + " t = step * dt\n", + " theta_val = utils.compute_theta(t, dt, T, N, G2, G4)\n", + " thetas.append(theta_val)\n", + "\n", + "# TODO - Sample your kernel to make sure it works\n", + "counts_6 = cudaq.sample(trotterized_circuit, N, G2, G4, n_steps, dt, T, thetas)\n", + "quantum_pop_list = []\n", + "for bitstring, count in counts_6.items():\n", + " bits_01 = np.array([int(b) for b in bitstring], dtype=np.int8)\n", + " s_pm1 = bits01_to_pm1(bits_01)\n", + " quantum_pop_list.append(s_pm1)\n", + "initial_quantum_pop = np.array(quantum_pop_list)\n", + "#N = \n", + "res = mts_quant1(\n", + " N=N,\n", + " pop_size=32,\n", + " initial_pop=initial_quantum_pop,\n", + " p_combine=0.7,\n", + " p_mut=1.0/50.0,\n", + " mts_iters=400,\n", + " tabu_iters=800,\n", + " tabu_tenure=30,\n", + " candidate_size=64,\n", + " seed=42,\n", + " verbose_every=50,\n", + ")\n", + "print(\"CP + MTS\")\n", + "visualize_mts(res)\n" + ] + }, + { + "cell_type": "markdown", + "id": "0a5756e2-e4cb-42f4-a4b3-7f627095f4f4", + "metadata": {}, + "source": [ + "The results clearly show that a population sampled from CUDA-Q results in an improved distribution and a lower energy final result. This is exactly the goal of quantum enhanced optimization. To not necessarily solve the problem, but improve the effectiveness of state-of-the-art classical approaches. \n", + "\n", + "A few major caveats need to be mentioned here. First, We are comparing a quantum generated population to a random sample. It is quite likely that other classical or quantum heuristics could be used to produce an initial population that might even beat the counteradiabatic method you used, so we cannot make any claims that this is the best. \n", + "\n", + "Recall that the point of the counteradiabatic approach derived in the paper is that it is more efficient in terms of two-qubit gates relative to QAOA. The benefits of this regime would only truly come into play in a setting (e.g. larger problem instance) where it is too difficult to produce a good initial population with any know classical heuristic, and the counteradiabatic approach is more efficiently run on a QPU compared to alternatives.\n", + "\n", + "We should also note that we are comparing a single sample of each approach. Maybe the quantum sample got lucky or the randomly generated population was unlucky and a more rigorous comparison would need to repeat the analysis many times to draw any confidently conclusions. \n", + "\n", + "The authors of the paper discuss all of these considerations, but propose an analysis that is quite interesting related to the scaling of the technique. Rather than run large simulations ourselves, examine their results below. \n", + "\n", + "\n", + "\n", + "\n", + "The authors computed replicate median (median of solving the problem repeated with same setup) time to solutions (excluding time to sample from QPU) for problem sizes $N=27$ to $N=37$. Two interesting conclusions can be drawn from this. First, standard memetic tabu search (MTS) is generally faster than quantum enhanced (QE) MTS. But there are two promising trends. For larger problems, the QE-MTS experiments occasionally have excellent performance with times to solution much smaller than all of the MTS data points. These outliers indicate there are certain instances where QE-MTS could provide much faster time-to-solution. \n", + "\n", + "More importantly, if a line of best fit is calculated using the median of each set of medians, the slope of the QE-MTS line is smaller than the MTS! This seems to indicate that QE solution of this problem scales $O(1.24^N)$ which is better than the best known classical heuristic ($O(1.34^N)$) and the best known quantum approach (QAOA - $O(1.46^N)$).\n", + "\n", + "For problems of size of $N=47$ or greater, the authors anticipate that QE-MTS could be a promising technique and produce good initial populations that are difficult to obtain classically. \n", + "\n", + "The study reinforces the potential of hybrid workflows enhanced by quantum data such that a classical routine is still the primary solver, but quantum computers make it much more effective. Future work can explore improvements to both the quantum and classical sides, such as including GPU accelerated memetic search on the classical side." + ] + }, + { + "cell_type": "markdown", + "id": "7aab7af9", + "metadata": {}, + "source": [ + "## Self-validation To Be Completed for Phase 1\n", + "\n", + "In this section, explain how you verified your results. Did you calculate solutions by hand for small N? Did you create unit tests? Did you cross-reference your Quantum energy values against your Classical MTS results? Did you check known symmetries?" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "d34db9f4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--- Starting Validation Suite for N = 7 ---\n", + "Symmetry Check:\n", + " Original Energy: 19\n", + " Bit-flip Energy: 19 (Match: True)\n", + " Reversal Energy: 19 (Match: True)\n", + " Both Match: 19 (Match: True)\n", + "\n", + "Quantum-Classical Cross-Reference:\n", + " Sampled Bitstring: 1001010 \n", + " Computed Energy: 23\n", + " Status: Success (Kernel produced valid measurable state)\n", + "\n", + "Known Solution Verification (N=4 Barker):\n", + " Expected: 2, Got: 2 (Match: True)\n" + ] + } + ], + "source": [ + "import unittest\n", + "import numpy as np\n", + "\n", + "def validation_suite(N_val = 7):\n", + " print(f\"--- Starting Validation Suite for N = {N_val} ---\")\n", + " \n", + " # 1. Symmetry Checks\n", + " # LABS energy should be invariant under:\n", + " # - Bit-flip: s -> -s\n", + " # - Reversal: s_i -> s_{N-i+1}\n", + " test_seq = np.random.choice( [-1, 1], size = N_val)\n", + " energy_orig = labs_energy_pm1(test_seq )\n", + " \n", + " # Bit-flip symmetry\n", + " energy_flip = labs_energy_pm1(-test_seq )\n", + " # Reversal symmetry\n", + " energy_rev = labs_energy_pm1(test_seq[::-1])\n", + " # Combined symmetry: Bit-flip + Reversal\n", + " energy_both = labs_energy_pm1(-test_seq[::-1])\n", + " \n", + " print(f\"Symmetry Check:\")\n", + " print(f\" Original Energy: {energy_orig}\")\n", + " print(f\" Bit-flip Energy: {energy_flip} (Match: {energy_orig == energy_flip})\")\n", + " print(f\" Reversal Energy: {energy_rev} (Match: {energy_orig == energy_rev})\")\n", + " print(f\" Both Match: {energy_both } (Match: {energy_orig == energy_both})\")\n", + "\n", + " # 2. CUDA-Q vs Classical Cross-Reference\n", + " # We sample the quantum kernel and ensure the bitstrings produced \n", + " # are evaluated correctly by the classical energy function.\n", + " print(f\"\\nQuantum-Classical Cross-Reference:\")\n", + " # Using small parameters for quick validation\n", + " G2_v, G4_v = get_interactions(N_val)\n", + " # Ensure thetas matches the step count used in the test\n", + " test_steps = 1\n", + " test_thetas = [0.5] # Dummy theta for structural test\n", + " \n", + " # Use cudaq.sample to get the distribution\n", + " counts = cudaq.sample( trotterized_circuit, N_val, G2_v, G4_v, test_steps, 1.0, 1.0, test_thetas)\n", + " \n", + " # Updated: Robust way to get the most frequent bitstring\n", + " # counts.items() returns a list of (bitstring, count) tuples\n", + " sample_bitstring = max(counts.items() , key=lambda item: item[1])[0]\n", + " \n", + " # Convert bitstring '0101...' to pm1 array\n", + " s_sample = bits01_to_pm1( np.array([ int(b) for b in sample_bitstring] ))\n", + " energy_sample = labs_energy_pm1(s_sample )\n", + " print(f\" Sampled Bitstring: {sample_bitstring} \")\n", + " print(f\" Computed Energy: {energy_sample}\")\n", + " print(f\" Status: Success (Kernel produced valid measurable state)\")\n", + "\n", + " # 3. Small n Hand-Verification (N=4)\n", + " # For N=4, the Barker sequence [1, 1, 1, -1] has energy 2.\n", + " # C1=1, C2=0 , C3=-1 -> 1^2 + 0^2 + (-1)^2 =2\n", + " s_barker = np.array([1, 1, 1, -1])\n", + " e_barker = labs_energy_pm1( s_barker)\n", + " print(f\"\\nKnown Solution Verification (N=4 Barker):\")\n", + " print(f\" Expected: 2, Got: {e_barker} (Match: {e_barker == 2})\")\n", + "\n", + "# Run the validation\n", + "validation_suite()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "164b5fa0-fa04-417f-a008-dd5232226a5c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--- Starting Validation Suite (N=7) ---\n", + "[TEST 1] Barker Sequence (N=4): Expected Energy 2, Got 2.\n", + "[TEST 2] Symmetry Check - Bit-flip: PASSED\n", + "[TEST 3] Symmetry Check - Reversal: PASSED\n", + "[TEST 4] Quantum Cross-Ref: Bitstring [1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1] has Classical Energy 10\n" + ] + } + ], + "source": [ + "\n", + "from validations import run_validation\n", + "\n", + "# Example: pass the best bitstring from quantum sampler to cross-reference it\n", + "# best_bitstring = \"1110\" \n", + "run_validation(N=7, quantum_sample_bitstring=res[\"best_s_01\"].tolist())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "15bc79e9-120f-4b5a-b05a-7021aedf787a", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 [cuda-q-v0.13.0]", + "language": "python", + "name": "python3_0pt5" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorial_notebook/.ipynb_checkpoints/validations-checkpoint.py b/tutorial_notebook/.ipynb_checkpoints/validations-checkpoint.py new file mode 100644 index 00000000..68329f67 --- /dev/null +++ b/tutorial_notebook/.ipynb_checkpoints/validations-checkpoint.py @@ -0,0 +1,53 @@ +import numpy as np + +def labs_energy_pm1(s): + """ + Calculates the energy of a binary sequence s in {+1, -1}. + E(s) = sum_{k=1}^{N-1} (sum_{i=1}^{N-k} s_i * s_{i+k})^2 + """ + N = len(s) + total_energy = 0 + for k in range(1, N): + ck = 0 + for i in range(N - k): + ck += s[i] * s[i+k] + total_energy += ck**2 + return total_energy + +def bits01_to_pm1(bits): + """Converts a bitstring of 0s and 1s to +1s and -1s.""" + return 1 - 2 * np.array(bits) + +def run_validation(N=7, quantum_sample_bitstring=None): + print(f"--- Starting Validation Suite (N={N}) ---") + + # 1. Small N Hand-Calculation Verification + # For N=4, the sequence [1, 1, 1, -1] is a known Barker sequence with Energy = 2. + s_barker = np.array([1, 1, 1, -1]) + e_barker = labs_energy_pm1(s_barker) + print(f"[TEST 1] Barker Sequence (N=4): Expected Energy 2, Got {e_barker}.") + assert e_barker == 2, "Energy calculation failed on known N=4 case." + + # 2. Check Symmetries + # The LABS problem is invariant under bit-flip (s -> -s) and reversal. + test_seq = np.random.choice([-1, 1], size=N) + e_orig = labs_energy_pm1(test_seq) + + e_flip = labs_energy_pm1(-test_seq) + e_rev = labs_energy_pm1(test_seq[::-1]) + + print(f"[TEST 2] Symmetry Check - Bit-flip: {'PASSED' if e_orig == e_flip else 'FAILED'}") + print(f"[TEST 3] Symmetry Check - Reversal: {'PASSED' if e_orig == e_rev else 'FAILED'}") + + # 3. Quantum-Classical Cross-Reference + if quantum_sample_bitstring: + # Convert bitstring (e.g., '101') to numerical array + bits = [int(b) for b in quantum_sample_bitstring] + s_quantum = bits01_to_pm1(bits) + e_quantum = labs_energy_pm1(s_quantum) + print(f"[TEST 4] Quantum Cross-Ref: Bitstring {quantum_sample_bitstring} has Classical Energy {e_quantum}") + else: + print("[TEST 4] Quantum Cross-Ref: Skipped (No sample provided)") + +if __name__ == "__main__": + run_validation() \ No newline at end of file diff --git a/tutorial_notebook/__pycache__/validation_tests.cpython-311.pyc b/tutorial_notebook/__pycache__/validation_tests.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d9abaa1d37cdde4eb5d039b0758ec873b3ead000 GIT binary patch literal 296 zcmZ3^%ge<81iKg2WqJVV#~=<2utFK1MSzUy4CxG+3@HpLj44cWSQr^nn1dNKSzfXL zrCx#*YO>s7O-{|pDZa&#n_7~Xl30>>iz6>7Ex#x?vE&vXj1`}onU`PWx00cV1E}dU z5HtLW*3Zb#P1VoJFRM(<(>F3OGSl@7^K|ia)DKE6$VV2?_4N$V%?vE{NKDSwFDWg_ zFUm~JiOe#0gXm0D|^U`v3p{ literal 0 HcmV?d00001 diff --git a/tutorial_notebook/__pycache__/validations.cpython-311.pyc b/tutorial_notebook/__pycache__/validations.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..97a15968310ae12cd977aeeefae787097ab2ccc1 GIT binary patch literal 3096 zcmaJ@-%lIK9iRPSvoaDjq=M6rb)+LRFQvN+0g=bWf-L1>VR~(Mm`sRe9hI3EfLx+V8A?1e5A! zXTP5L&iB`T=R2SA--1Cuf~NoV3-wpjnnvHD?4sXHW1(K1>WY9xKW}l<jq!B zMjCsf_9@(3A<&6M~6#gY>ylUD(3}`0ZHzMp)ZX(6B77+r!h=cd=2Ouwyd1TE( zFJbno#VIl}Q)Epl-DomvF)zXMt7f!l3e8_Fav;Yam9rR&E5Nt5+XLCtMUTZ>$nujN#55_LxXskHoYEKW42p-2IpB2~BkUi;;yXm^GP4`(Dzkgtr#4qAv90{p z+3m9ji1A^Ul;gXBuFby9`1XZLcO_Q2_toWZPHjc)!1?mc^37c#TwyEmuRON!VL4C^ z>~?-oI5lc zBqo}=o6BDTuNz)+21p70)EOwRd^x&(wKBCeu{~jj`s~iWD&J?EfaQI9>Qb#k0~5OY zbSDli;IOVL$mo_lLgtg#9HW|{&oNX;5Zs7e=Jf@`)cPg zNGW>T*8w(>Ec}Uk2PMbsb+mnXCqPdVN?AFeF>>&0^zE^1LEc-{hmhO_Ivox8{RJJ1 zG2(LQ8M2ru)SkDZU;?x?nEqjg^a7$H*TI(`qOPJ;KtOF&+rCAhriyNk@xEW-r} z)$;BV-C{R-lIR}@V&zoLq$o2q;xLPZo*i6=mbd;J8I_nRJ)4^-d}QP`@g0y4-N@*W z7BT^Yrc4x6$vGe;R1ICL_e$(bZZp2+-S)OvF7y=o>$&-O9^cDLnwihyNkb=%P2T!=&P!%$dO2g()eyxh{%30udM8>T(37 zHG*s36ybt*yov~S;S&9&yX|-s(NI>6FtzC;V#BKAQ<_842}|_$ZL~VZceN+q7zQC4 z9{B<`wS@L~U)6u*?-G!DxB0OeKUU?(eiqP)o{guKAbspme=XEsn%N7Tt30(s1GUfq zOsMW>Kh6NDcbmUk7&-6`uVgDUvJx>Bm;>cx@}P8ONl|Qa%`t8dZ!HIxT;JThfbKpOLST!ON>dGw8@Cn7Zj{S7k9iIv{_Zj7Ys?~j5Ucf)VwOItJ#bobJ^Uw zpk;-ep>t_Ik$4kh5@RyStq8g#a%zs#C4*DfB~2Fcdd$(6<^?&wCh#kgA#fSBfaTZJ z-*JkN+raEPr>_Z`#HCa3%zu!coq3;=WJ!^LttH>*x(hsxVAr?Wu9rxIfML7gEj5W0 zdIwU==I zTKa?Y+3SUOh0N`^Q7}|EXqnHchP0xpx8p+LZdT3;+6I3sD@%G@7FKk=U}R-Imfv_j zaCueANq6(wba6J*iXOflI2(L77%s~yM3Funb7Fv31S7L1>9H=ktHck+>yrTgf?pZc zBUA9~hj!liH%BCQ+G<*P>8xt7YC1-Vm7ux-b z?QUCOGr-BO*mTyA6di{FTmp{M@O`$~K4XiM|F3%kphRB=D5FL=QgMGDjI{l^1-%uS zIsgn#9R#N;Ok-%QiO7ND4pdVA2n_8k)>7La-~ZSOoH_`c+LP*mbMQ2RqqPg${;K=O zMqs2esNwx`Vh_9~6A7D4CZSJ$iJ~r>oP+sXQX9g~(D>S71O_}#>Ue(~Z`*eadP$FIQ0FS#@N3V3RY%fo19asfc=+}tXEqO%df29-0M%v*V5M6zo%&Xc& zx5Mc*2TX4fd@T9;Bwk8Yrn}`6Al?CNjbC*4N&L4pn2sEl5Iy36=`KS2w{$t0U}Z-e zYvAkDZn%29R96N?cb_h|IVgIMb_5(9K=JiZ;G46mt5*(q{5?F_7vL)eMAi(Lempi= zjE+q~17EXtGlTtmC=T9szGxIwyim?%`h3U?Im>!IfR0GB9uhc+8IBP_? zf}YK-Iweua3G#;FR772sAqlEEox7!K+?=2&!UayqiLGIxRll68x!N(WGkE(D$M9hg z!`m2eQ9p!eL>g2Tq>W-2#xMeqMK4~wSPlLA{O7w5?z|Ocw3GPD2>_dtrJQp)Z3>cd zG;9-wO^Sx?HBoRTghym-8x&H**pi+ zK&ZM6jIpwcbb_ypgg7Q{_2O9E$8L)WX|K_m{T)wL4aj zE2kU5@T)X-q;}L|PnECy;6;O>YIt*LYpF)nuJ5{_1bHp?boojXz65q6)f?NR_eVEB zs{MNJ^xmC6P3&IVpLuffN#?6FPiMY5X1zIW9hM)CR;n-Etbej{u#~ap zGS*P0e60!U!quC5i`MYD{ae;>(qgBaMLfRB#m_&z_i6Pve|L}7-D8blq{38~@4`o_ zp4vq#coN1ww#sZ?s<|!Si8_6vm4iJtlPf6s4V%p6TLDEwg