{ "cells": [ { "cell_type": "markdown", "id": "5adb79be-6fa6-4a43-99bf-e6bf1b2b2d8b", "metadata": {}, "source": [ "# Initialization" ] }, { "cell_type": "code", "execution_count": 1, "id": "f8f4679d-2924-42d0-b165-80750e0ffd8f", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "('1.32.0', '0.12.20')" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from juniqutils import save_ising_file, load_ising_file\n", "import json\n", "import dimod\n", "import dwave\n", "from dwave.system import DWaveSampler,EmbeddingComposite\n", "dwave.system.__version__, dimod.__version__" ] }, { "cell_type": "markdown", "id": "031d06a5-be48-43aa-b716-8ccf58d1e2e4", "metadata": {}, "source": [ "# Verification" ] }, { "cell_type": "code", "execution_count": 2, "id": "88f5160f-4e44-4dfb-aea0-1cd21b1c0b91", "metadata": { "tags": [] }, "outputs": [], "source": [ "TSP_DATA = json.load(open('tsp_data.json'))\n", "CITIES = TSP_DATA['CITIES']" ] }, { "cell_type": "markdown", "id": "23748ea5-6820-4ec9-acee-627fe873e911", "metadata": {}, "source": [ "## Exact solver" ] }, { "cell_type": "code", "execution_count": 3, "id": "36536e07-b956-46e1-be3b-efcd7ddc5f84", "metadata": {}, "outputs": [], "source": [ "problem = load_ising_file('../problems/001.ising')\n", "bqm = dimod.BQM.from_ising(problem['hs'], problem['Js'], problem['OFFSET'])" ] }, { "cell_type": "code", "execution_count": 4, "id": "0a053f91-fa0d-4035-97ed-d1d02493a8e9", "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", " \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", "
x0,0x0,1x0,2x0,3x1,0x1,1x1,2x1,3x2,0x2,1x2,2x2,3x3,0x3,1x3,2x3,3energynum_occurrences
0-1-11-11-1-1-1-1-1-11-11-1-10.59221
1-1-11-11-1-1-1-11-1-1-1-1-110.59221
2-11-1-1-1-1-111-1-1-1-1-11-10.59221
3-11-1-1-1-1-11-1-11-11-1-1-10.59221
41-1-1-1-1-11-1-1-1-11-11-1-10.59221
.........................................................
6553111111111111111-1168.98841
65532111111111111-111168.98841
655331111111111111-11168.98841
65534111111111111111-168.98841
65535111111111111111179.74721
\n", "

65536 rows × 18 columns

\n", "
" ], "text/plain": [ " x0,0 x0,1 x0,2 x0,3 x1,0 x1,1 x1,2 x1,3 x2,0 x2,1 x2,2 x2,3 \\\n", "0 -1 -1 1 -1 1 -1 -1 -1 -1 -1 -1 1 \n", "1 -1 -1 1 -1 1 -1 -1 -1 -1 1 -1 -1 \n", "2 -1 1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 \n", "3 -1 1 -1 -1 -1 -1 -1 1 -1 -1 1 -1 \n", "4 1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 1 \n", "... ... ... ... ... ... ... ... ... ... ... ... ... \n", "65531 1 1 1 1 1 1 1 1 1 1 1 1 \n", "65532 1 1 1 1 1 1 1 1 1 1 1 1 \n", "65533 1 1 1 1 1 1 1 1 1 1 1 1 \n", "65534 1 1 1 1 1 1 1 1 1 1 1 1 \n", "65535 1 1 1 1 1 1 1 1 1 1 1 1 \n", "\n", " x3,0 x3,1 x3,2 x3,3 energy num_occurrences \n", "0 -1 1 -1 -1 0.5922 1 \n", "1 -1 -1 -1 1 0.5922 1 \n", "2 -1 -1 1 -1 0.5922 1 \n", "3 1 -1 -1 -1 0.5922 1 \n", "4 -1 1 -1 -1 0.5922 1 \n", "... ... ... ... ... ... ... \n", "65531 1 1 -1 1 68.9884 1 \n", "65532 -1 1 1 1 68.9884 1 \n", "65533 1 -1 1 1 68.9884 1 \n", "65534 1 1 1 -1 68.9884 1 \n", "65535 1 1 1 1 79.7472 1 \n", "\n", "[65536 rows x 18 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = dimod.ExactSolver().sample(bqm).to_pandas_dataframe().sort_values('energy').reset_index(drop=True)\n", "result" ] }, { "cell_type": "code", "execution_count": 5, "id": "44abe029-743d-4842-ad4b-ebbd57057e35", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-1., -1., 1., -1.],\n", " [ 1., -1., -1., -1.],\n", " [-1., -1., -1., 1.],\n", " [-1., 1., -1., -1.]])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n = problem['METADATA']['n']\n", "tourmatrix = result.loc[0][:n**2].to_numpy().reshape((n,n))\n", "tourmatrix" ] }, { "cell_type": "code", "execution_count": 6, "id": "db083c5e-aea4-4f1a-b8c6-16d2144ed57a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "At time 0, we are in city 1 (Madrid)\n", "At time 1, we are in city 3 (Paris)\n", "At time 2, we are in city 0 (Berlin)\n", "At time 3, we are in city 2 (Rome)\n" ] } ], "source": [ "for t in range(n):\n", " for i in range(n):\n", " if tourmatrix[i,t] == 1:\n", " print(f'At time {t}, we are in city {i} ({CITIES[i]})')" ] }, { "cell_type": "code", "execution_count": 7, "id": "a58c28e9-60e0-4170-85af-4a978b13f542", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "59.21999999999896\n", "59.22\n" ] } ], "source": [ "print(result.loc[0].energy / problem['METADATA']['scale'])\n", "print(problem['METADATA']['optimal_cost'])" ] }, { "cell_type": "markdown", "id": "223e506e-20af-4754-a3b3-5b909ffd1d16", "metadata": {}, "source": [ "## QPU" ] }, { "cell_type": "code", "execution_count": 8, "id": "81b3f436-cf7e-4dfa-b641-42397c18a5b0", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Selected QPU Advantage_system4.1 with 5627 qubits\n" ] } ], "source": [ "sampler = DWaveSampler(profile='defaults')\n", "solver = EmbeddingComposite(sampler)\n", "print(f'Selected QPU {sampler.properties[\"chip_id\"]} with {len(sampler.nodelist)} qubits')" ] }, { "cell_type": "code", "execution_count": 9, "id": "fd2efa81-754d-4529-bbce-2ca44ca56897", "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", " \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", "
x0,0x0,1x0,2x0,3x0,4x1,0x1,1x1,2x1,3x1,4...x3,3x3,4x4,0x4,1x4,2x4,3x4,4chain_break_fractionenergynum_occurrences
0-1-1-1-11-11-1-1-1...-1-1-1-1-11-10.00.62323
1-11-1-1-1-1-1-11-1...-1-11-1-1-1-10.00.623217
2-11-1-1-1-1-1-1-11...-1-1-1-11-1-10.00.62329
3-1-1-1-11-1-11-1-1...1-11-1-1-1-10.00.623214
4-1-11-1-1-1-1-1-11...1-1-11-1-1-10.00.62328
..................................................................
3961-1-1-1-1-1-1-1-11...1-1-11-1-110.05.21551
3971-1-1-1-1-1-1-1-11...1-11-1-1-110.05.21641
398-1-1-11-1-1-1-11-1...-1-11-11-1-10.05.27101
3991-1-1-1-1-1-1-111...-1-1-111-1-10.05.30111
400-1-1-1-111-11-1-1...-1-1-11-11-10.05.60111
\n", "

401 rows × 28 columns

\n", "
" ], "text/plain": [ " x0,0 x0,1 x0,2 x0,3 x0,4 x1,0 x1,1 x1,2 x1,3 x1,4 ... x3,3 \\\n", "0 -1 -1 -1 -1 1 -1 1 -1 -1 -1 ... -1 \n", "1 -1 1 -1 -1 -1 -1 -1 -1 1 -1 ... -1 \n", "2 -1 1 -1 -1 -1 -1 -1 -1 -1 1 ... -1 \n", "3 -1 -1 -1 -1 1 -1 -1 1 -1 -1 ... 1 \n", "4 -1 -1 1 -1 -1 -1 -1 -1 -1 1 ... 1 \n", ".. ... ... ... ... ... ... ... ... ... ... ... ... \n", "396 1 -1 -1 -1 -1 -1 -1 -1 -1 1 ... 1 \n", "397 1 -1 -1 -1 -1 -1 -1 -1 -1 1 ... 1 \n", "398 -1 -1 -1 1 -1 -1 -1 -1 1 -1 ... -1 \n", "399 1 -1 -1 -1 -1 -1 -1 -1 1 1 ... -1 \n", "400 -1 -1 -1 -1 1 1 -1 1 -1 -1 ... -1 \n", "\n", " x3,4 x4,0 x4,1 x4,2 x4,3 x4,4 chain_break_fraction energy \\\n", "0 -1 -1 -1 -1 1 -1 0.0 0.6232 \n", "1 -1 1 -1 -1 -1 -1 0.0 0.6232 \n", "2 -1 -1 -1 1 -1 -1 0.0 0.6232 \n", "3 -1 1 -1 -1 -1 -1 0.0 0.6232 \n", "4 -1 -1 1 -1 -1 -1 0.0 0.6232 \n", ".. ... ... ... ... ... ... ... ... \n", "396 -1 -1 1 -1 -1 1 0.0 5.2155 \n", "397 -1 1 -1 -1 -1 1 0.0 5.2164 \n", "398 -1 1 -1 1 -1 -1 0.0 5.2710 \n", "399 -1 -1 1 1 -1 -1 0.0 5.3011 \n", "400 -1 -1 1 -1 1 -1 0.0 5.6011 \n", "\n", " num_occurrences \n", "0 3 \n", "1 17 \n", "2 9 \n", "3 14 \n", "4 8 \n", ".. ... \n", "396 1 \n", "397 1 \n", "398 1 \n", "399 1 \n", "400 1 \n", "\n", "[401 rows x 28 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "problem = load_ising_file('../problems/002.ising')\n", "bqm = dimod.BQM.from_ising(problem['hs'], problem['Js'], problem['OFFSET'])\n", "result = solver.sample(bqm,num_reads=1000).to_pandas_dataframe()\n", "result" ] }, { "cell_type": "code", "execution_count": 10, "id": "085e3514-5a9a-44d9-85b5-3741ce34eadf", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "62.32" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# the states with energy 0.6232 are the ground sate, corresponding to the optimal cost\n", "problem['METADATA']['optimal_cost']" ] }, { "cell_type": "code", "execution_count": null, "id": "9168b7b7-da92-4820-90b6-2cc809f2dbb7", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "dwave-1.32.0", "language": "python", "name": "dwave-1.32.0" }, "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.3" } }, "nbformat": 4, "nbformat_minor": 5 }