{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Landscape Analysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load in Raw Data\n", "Go through each record, load in supporting objects, flatten everything into records, and put into a massive dataframe." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
timestampbitstringsqubitsfinal_qubitsexecution_timeproblemproblem_typedataset_iddevice_namen_shotsgammabetaline_placement_strategygeneration_task.dataset_idinstance_in_qubitsrogeneration_task.device_name
02020-05-16 18:39:09.140680[[1, 0, 0], [1, 0, 1], [0, 0, 1], [0, 0, 0], [...[(4, 1), (4, 2), (3, 2)][(3, 2), (4, 2), (4, 1)]0.234015(0, 1, 2)SKProblem2020-03-tutorialSyc23-simulator500000.628319-0.157080None2020-03-tutorial03{'timestamp': 2020-05-16 18:38:45.218225, 'tas...NaN
12020-05-16 18:40:53.197716[[1, 0, 1], [0, 0, 1], [1, 0, 0], [1, 1, 0], [...[(4, 1), (4, 2), (3, 2)][(3, 2), (4, 2), (4, 1)]0.244440(0, 1, 2)SKProblem2020-03-tutorialSyc23-simulator500001.5707960.785398None2020-03-tutorial03{'timestamp': 2020-05-16 18:40:46.466873, 'tas...NaN
22020-05-16 18:38:54.274562[[0, 0, 1], [0, 1, 0], [1, 1, 1], [0, 0, 1], [...[(4, 1), (4, 2), (3, 2)][(3, 2), (4, 2), (4, 1)]0.333645(0, 1, 2)SKProblem2020-03-tutorialSyc23-simulator500001.099557-0.157080None2020-03-tutorial03{'timestamp': 2020-05-16 18:38:45.218225, 'tas...NaN
32020-05-16 18:40:52.750232[[1, 0, 1], [0, 1, 0], [1, 0, 1], [0, 1, 0], [...[(4, 1), (4, 2), (3, 2)][(3, 2), (4, 2), (4, 1)]0.303454(0, 1, 2)SKProblem2020-03-tutorialSyc23-simulator500000.000000-0.628319None2020-03-tutorial03{'timestamp': 2020-05-16 18:40:46.466873, 'tas...NaN
42020-05-16 18:40:54.116035[[1, 1, 1], [1, 0, 1], [0, 0, 0], [1, 1, 0], [...[(4, 1), (4, 2), (3, 2)][(3, 2), (4, 2), (4, 1)]0.227513(0, 1, 2)SKProblem2020-03-tutorialSyc23-simulator500000.9424780.628319None2020-03-tutorial03{'timestamp': 2020-05-16 18:40:46.466873, 'tas...NaN
\n", "
" ], "text/plain": [ " timestamp \\\n", "0 2020-05-16 18:39:09.140680 \n", "1 2020-05-16 18:40:53.197716 \n", "2 2020-05-16 18:38:54.274562 \n", "3 2020-05-16 18:40:52.750232 \n", "4 2020-05-16 18:40:54.116035 \n", "\n", " bitstrings \\\n", "0 [[1, 0, 0], [1, 0, 1], [0, 0, 1], [0, 0, 0], [... \n", "1 [[1, 0, 1], [0, 0, 1], [1, 0, 0], [1, 1, 0], [... \n", "2 [[0, 0, 1], [0, 1, 0], [1, 1, 1], [0, 0, 1], [... \n", "3 [[1, 0, 1], [0, 1, 0], [1, 0, 1], [0, 1, 0], [... \n", "4 [[1, 1, 1], [1, 0, 1], [0, 0, 0], [1, 1, 0], [... \n", "\n", " qubits final_qubits execution_time \\\n", "0 [(4, 1), (4, 2), (3, 2)] [(3, 2), (4, 2), (4, 1)] 0.234015 \n", "1 [(4, 1), (4, 2), (3, 2)] [(3, 2), (4, 2), (4, 1)] 0.244440 \n", "2 [(4, 1), (4, 2), (3, 2)] [(3, 2), (4, 2), (4, 1)] 0.333645 \n", "3 [(4, 1), (4, 2), (3, 2)] [(3, 2), (4, 2), (4, 1)] 0.303454 \n", "4 [(4, 1), (4, 2), (3, 2)] [(3, 2), (4, 2), (4, 1)] 0.227513 \n", "\n", " problem problem_type dataset_id device_name n_shots \\\n", "0 (0, 1, 2) SKProblem 2020-03-tutorial Syc23-simulator 50000 \n", "1 (0, 1, 2) SKProblem 2020-03-tutorial Syc23-simulator 50000 \n", "2 (0, 1, 2) SKProblem 2020-03-tutorial Syc23-simulator 50000 \n", "3 (0, 1, 2) SKProblem 2020-03-tutorial Syc23-simulator 50000 \n", "4 (0, 1, 2) SKProblem 2020-03-tutorial Syc23-simulator 50000 \n", "\n", " gamma beta line_placement_strategy generation_task.dataset_id \\\n", "0 0.628319 -0.157080 None 2020-03-tutorial \n", "1 1.570796 0.785398 None 2020-03-tutorial \n", "2 1.099557 -0.157080 None 2020-03-tutorial \n", "3 0.000000 -0.628319 None 2020-03-tutorial \n", "4 0.942478 0.628319 None 2020-03-tutorial \n", "\n", " instance_i n_qubits ro \\\n", "0 0 3 {'timestamp': 2020-05-16 18:38:45.218225, 'tas... \n", "1 0 3 {'timestamp': 2020-05-16 18:40:46.466873, 'tas... \n", "2 0 3 {'timestamp': 2020-05-16 18:38:45.218225, 'tas... \n", "3 0 3 {'timestamp': 2020-05-16 18:40:46.466873, 'tas... \n", "4 0 3 {'timestamp': 2020-05-16 18:40:46.466873, 'tas... \n", "\n", " generation_task.device_name \n", "0 NaN \n", "1 NaN \n", "2 NaN \n", "3 NaN \n", "4 NaN " ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import recirq\n", "import cirq\n", "import numpy as np\n", "import pandas as pd\n", "from datetime import datetime\n", "from recirq.qaoa.experiments.p1_landscape_tasks import \\\n", " DEFAULT_BASE_DIR, DEFAULT_PROBLEM_GENERATION_BASE_DIR, DEFAULT_PRECOMPUTATION_BASE_DIR, \\\n", " ReadoutCalibrationTask\n", "\n", "records = []\n", "ro_records = []\n", "for record in recirq.iterload_records(dataset_id=\"2020-03-tutorial\", base_dir=DEFAULT_BASE_DIR):\n", " record['timestamp'] = datetime.fromisoformat(record['timestamp'])\n", " dc_task = record['task']\n", " \n", " if isinstance(dc_task, ReadoutCalibrationTask):\n", " ro_records.append(record)\n", " continue\n", " \n", " pgen_task = dc_task.generation_task \n", " problem = recirq.load(pgen_task, base_dir=DEFAULT_PROBLEM_GENERATION_BASE_DIR)['problem']\n", " record['problem'] = problem.graph\n", " record['problem_type'] = problem.__class__.__name__\n", " record['bitstrings'] = record['bitstrings'].bits\n", " recirq.flatten_dataclass_into_record(record, 'task')\n", " recirq.flatten_dataclass_into_record(record, 'generation_task') \n", " records.append(record)\n", " \n", "# Associate each data collection task with its nearest readout calibration\n", "for record in sorted(records, key=lambda x: x['timestamp']):\n", " record['ro'] = min(ro_records, key=lambda x: abs((x['timestamp']-record['timestamp']).total_seconds()))\n", " \n", "df_raw = pd.DataFrame(records) \n", "df_raw.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Narrow down to Relevant Data\n", "Drop unnecessary metadata and use bitstrings to compute the expected value of the energy. In general, it's better to save the raw data and lots of metadata so we can use it if it becomes necessary in the future." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
timestampproblem_typedataset_iddevice_namen_shotsgammabetainstance_in_qubitsenergy
02020-05-16 18:39:09.140680SKProblem2020-03-tutorialSyc23-simulator500000.628319-0.15708003-0.226636
12020-05-16 18:40:53.197716SKProblem2020-03-tutorialSyc23-simulator500001.5707960.785398030.004430
22020-05-16 18:38:54.274562SKProblem2020-03-tutorialSyc23-simulator500001.099557-0.157080030.812318
32020-05-16 18:40:52.750232SKProblem2020-03-tutorialSyc23-simulator500000.000000-0.628319030.004591
42020-05-16 18:40:54.116035SKProblem2020-03-tutorialSyc23-simulator500000.9424780.628319031.369136
.................................
3582020-05-16 18:48:30.402142ThreeRegularProblem2020-03-tutorialSyc23-simulator500000.314159-0.785398041.538373
3592020-05-16 18:50:13.035131ThreeRegularProblem2020-03-tutorialSyc23-simulator500000.6283190.785398040.568978
3602020-05-16 18:45:00.639575ThreeRegularProblem2020-03-tutorialSyc23-simulator500001.4137170.00000004-0.026658
3612020-05-16 18:44:46.659427ThreeRegularProblem2020-03-tutorialSyc23-simulator500000.6283190.157080040.273670
3622020-05-16 18:48:14.641629ThreeRegularProblem2020-03-tutorialSyc23-simulator500001.4137170.157080040.707080
\n", "

363 rows × 10 columns

\n", "
" ], "text/plain": [ " timestamp problem_type dataset_id \\\n", "0 2020-05-16 18:39:09.140680 SKProblem 2020-03-tutorial \n", "1 2020-05-16 18:40:53.197716 SKProblem 2020-03-tutorial \n", "2 2020-05-16 18:38:54.274562 SKProblem 2020-03-tutorial \n", "3 2020-05-16 18:40:52.750232 SKProblem 2020-03-tutorial \n", "4 2020-05-16 18:40:54.116035 SKProblem 2020-03-tutorial \n", ".. ... ... ... \n", "358 2020-05-16 18:48:30.402142 ThreeRegularProblem 2020-03-tutorial \n", "359 2020-05-16 18:50:13.035131 ThreeRegularProblem 2020-03-tutorial \n", "360 2020-05-16 18:45:00.639575 ThreeRegularProblem 2020-03-tutorial \n", "361 2020-05-16 18:44:46.659427 ThreeRegularProblem 2020-03-tutorial \n", "362 2020-05-16 18:48:14.641629 ThreeRegularProblem 2020-03-tutorial \n", "\n", " device_name n_shots gamma beta instance_i n_qubits \\\n", "0 Syc23-simulator 50000 0.628319 -0.157080 0 3 \n", "1 Syc23-simulator 50000 1.570796 0.785398 0 3 \n", "2 Syc23-simulator 50000 1.099557 -0.157080 0 3 \n", "3 Syc23-simulator 50000 0.000000 -0.628319 0 3 \n", "4 Syc23-simulator 50000 0.942478 0.628319 0 3 \n", ".. ... ... ... ... ... ... \n", "358 Syc23-simulator 50000 0.314159 -0.785398 0 4 \n", "359 Syc23-simulator 50000 0.628319 0.785398 0 4 \n", "360 Syc23-simulator 50000 1.413717 0.000000 0 4 \n", "361 Syc23-simulator 50000 0.628319 0.157080 0 4 \n", "362 Syc23-simulator 50000 1.413717 0.157080 0 4 \n", "\n", " energy \n", "0 -0.226636 \n", "1 0.004430 \n", "2 0.812318 \n", "3 0.004591 \n", "4 1.369136 \n", ".. ... \n", "358 1.538373 \n", "359 0.568978 \n", "360 -0.026658 \n", "361 0.273670 \n", "362 0.707080 \n", "\n", "[363 rows x 10 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from recirq.qaoa.simulation import hamiltonian_objectives\n", "\n", "def compute_energies(row):\n", " permutation = []\n", " qubit_map = {}\n", " for i, q in enumerate(row['qubits']):\n", " fi = row['final_qubits'].index(q)\n", " permutation.append(fi)\n", " qubit_map[i] = q\n", " \n", " return hamiltonian_objectives(row['bitstrings'], \n", " row['problem'], \n", " permutation,\n", " row['ro']['calibration'],\n", " qubit_map)\n", "\n", "# Start cleaning up the raw data\n", "df = df_raw.copy()\n", "df = df.drop(['line_placement_strategy', \n", " 'generation_task.dataset_id', \n", " 'generation_task.device_name'], axis=1)\n", "\n", "# Compute energies\n", "df['energies'] = df.apply(compute_energies, axis=1)\n", "df = df.drop(['bitstrings', 'problem', 'ro', 'qubits', 'final_qubits'], axis=1)\n", "df['energy'] = df.apply(lambda row: np.mean(row['energies']), axis=1)\n", "\n", "# We won't do anything with raw energies right now\n", "df = df.drop('energies', axis=1)\n", "\n", "# Do timing somewhere else\n", "df = df.drop([col for col in df.columns if col.endswith('_time')], axis=1)\n", "\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Compute theoretical landscape\n", "\n", "Use a simulator to compute the noiseless landscape. This can get quite expensive, so it would be better practice to factor this out into Tasks in their own right: https://github.com/quantumlib/ReCirq/issues/21" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def get_problem_graph(problem_type,\n", " n=None,\n", " instance_i=0):\n", " if n is None:\n", " if problem_type == 'HardwareGridProblem':\n", " n = 4\n", " elif problem_type == 'SKProblem':\n", " n = 3\n", " elif problem_type == 'ThreeRegularProblem':\n", " n = 4\n", " else:\n", " raise ValueError(repr(problem_type))\n", " \n", " r = df_raw[\n", " (df_raw['problem_type']==problem_type)&\n", " (df_raw['n_qubits']==n)&\n", " (df_raw['instance_i']==instance_i)\n", " ]['problem']\n", " return r.iloc[0]\n", "\n", "\n", "from recirq.qaoa.simulation import exact_qaoa_values_on_grid, lowest_and_highest_energy\n", "import itertools\n", "\n", "def compute_exact_values(problem_type, x_grid_num=23, y_grid_num=21):\n", " exact = exact_qaoa_values_on_grid(\n", " graph=get_problem_graph(problem_type),\n", " num_processors=12,\n", " x_grid_num=x_grid_num,\n", " y_grid_num=y_grid_num,\n", " ).T.reshape(-1)\n", " \n", " exact_gammas = np.linspace(0, np.pi/2, x_grid_num)\n", " exact_betas = np.linspace(-np.pi/4, np.pi/4, y_grid_num)\n", " exact_points = np.asarray(list(itertools.product(exact_gammas, exact_betas)))\n", " min_c, max_c = lowest_and_highest_energy(get_problem_graph(problem_type))\n", " return exact_points, exact, min_c, max_c\n", "\n", "EXACT_VALS_CACHE = {k: compute_exact_values(k) \n", " for k in ['HardwareGridProblem', 'SKProblem', 'ThreeRegularProblem']}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "from matplotlib import pyplot as plt\n", "\n", "import seaborn as sns\n", "sns.set_style('ticks')\n", "\n", "plt.rc('axes', labelsize=16, titlesize=16)\n", "plt.rc('xtick', labelsize=14)\n", "plt.rc('ytick', labelsize=14)\n", "plt.rc('legend', fontsize=14, title_fontsize=16)\n", "\n", "# Note: I ran into https://github.com/matplotlib/matplotlib/issues/15410\n", "# if I imported matplotlib before using multiprocessing in `exact_qaoa_values_on_grid`, YMMV." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import scipy.interpolate\n", "\n", "def plot_landscape(problem_type, res=200, method='nearest', cmap='PuOr'):\n", " dfb = df\n", " dfb = dfb[dfb['problem_type'] == problem_type]\n", " xx, yy = np.meshgrid(np.linspace(0, np.pi/2, res), np.linspace(-np.pi/4, np.pi/4, res))\n", " exact_points, exact, min_c, max_c = EXACT_VALS_CACHE[problem_type]\n", "\n", " zz = scipy.interpolate.griddata(\n", " points=dfb[['gamma', 'beta']].values,\n", " values=dfb['energy'].values / min_c,\n", " xi=(xx, yy),\n", " method=method,\n", " )\n", "\n", " fig, (axl, axr) = plt.subplots(1, 2, figsize=(5*2, 5), sharey=True)\n", " norm = plt.Normalize(max_c/min_c, min_c/min_c)\n", " cmap = 'RdBu'\n", " extent=(0, 4, -2, 2)\n", " \n", " axl.imshow(zz, extent=extent, origin='lower', cmap=cmap, norm=norm, interpolation='none')\n", " axl.set_xlabel(r'$\\gamma\\ /\\ (\\pi/8)$')\n", " axl.set_ylabel(r'$\\beta\\ /\\ (\\pi/8)$')\n", " axl.set_title('Experiment')\n", " \n", " zz_exact = scipy.interpolate.griddata(\n", " points=exact_points,\n", " values=(exact/min_c),\n", " xi=(xx, yy),\n", " method=method,\n", " )\n", "\n", " g = axr.imshow(zz_exact, extent=extent, origin='lower', cmap=cmap, norm=norm, interpolation='none')\n", " axr.set_xlabel(r'$\\gamma\\ /\\ (\\pi/8)$')\n", " axr.set_title('Theory')\n", "\n", " fig.colorbar(g, ax=[axl, axr], shrink=0.8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Hardware Grid" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_landscape('HardwareGridProblem')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SK Model" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_landscape('SKProblem')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3 Regular MaxCut" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_landscape('ThreeRegularProblem')" ] } ], "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.7.7" } }, "nbformat": 4, "nbformat_minor": 4 }