Skip to content

Instantly share code, notes, and snippets.

@mino98
Last active April 20, 2019 14:11
Show Gist options
  • Save mino98/ba209a470808d77295653eb99a43e041 to your computer and use it in GitHub Desktop.
Save mino98/ba209a470808d77295653eb99a43e041 to your computer and use it in GitHub Desktop.
Helloworld quantum annnealing on networkx :)
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import networkx as nx # vanilla networkx\n",
"import dwave_networkx as dnx # dwave's networkx\n",
"\n",
"import time\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### CPU solver:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from dimod.reference.samplers import ExactSolver\n",
"cpu_sampler = ExactSolver()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### QPU solver:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from dwave.system.samplers import DWaveSampler\n",
"from dwave.system.composites import EmbeddingComposite"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"qpu_sampler = EmbeddingComposite(DWaveSampler())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Create a wheel graph:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is how a wheel graph (e.g., with 25 nodes) look:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"G = nx.wheel_graph(25)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"nx.draw(G)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Now let's compare:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's create graphs from 2 to 24 nodes (I'm too lazy to wait for graphs larger than this) and see how long it takes with CPU and QPU:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"max_size = 24"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"cpu_times = []\n",
"qpu_times = []"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Graph size: 2\n",
" CPU completed: 0.01s\n",
" QPU completed: 0.71s\n",
"Graph size: 3\n",
" CPU completed: 0.00s\n",
" QPU completed: 0.53s\n",
"Graph size: 4\n",
" CPU completed: 0.00s\n",
" QPU completed: 0.55s\n",
"Graph size: 5\n",
" CPU completed: 0.00s\n",
" QPU completed: 0.52s\n",
"Graph size: 6\n",
" CPU completed: 0.00s\n",
" QPU completed: 0.55s\n",
"Graph size: 7\n",
" CPU completed: 0.00s\n",
" QPU completed: 1.50s\n",
"Graph size: 8\n",
" CPU completed: 0.01s\n",
" QPU completed: 0.69s\n",
"Graph size: 9\n",
" CPU completed: 0.00s\n",
" QPU completed: 0.55s\n",
"Graph size: 10\n",
" CPU completed: 0.01s\n",
" QPU completed: 0.59s\n",
"Graph size: 11\n",
" CPU completed: 0.01s\n",
" QPU completed: 1.08s\n",
"Graph size: 12\n",
" CPU completed: 0.02s\n",
" QPU completed: 0.69s\n",
"Graph size: 13\n",
" CPU completed: 0.05s\n",
" QPU completed: 0.54s\n",
"Graph size: 14\n",
" CPU completed: 0.18s\n",
" QPU completed: 0.54s\n",
"Graph size: 15\n",
" CPU completed: 0.19s\n",
" QPU completed: 0.57s\n",
"Graph size: 16\n",
" CPU completed: 0.57s\n",
" QPU completed: 0.72s\n",
"Graph size: 17\n",
" CPU completed: 0.96s\n",
" QPU completed: 0.75s\n",
"Graph size: 18\n",
" CPU completed: 1.90s\n",
" QPU completed: 0.70s\n",
"Graph size: 19\n",
" CPU completed: 3.66s\n",
" QPU completed: 0.71s\n",
"Graph size: 20\n",
" CPU completed: 7.59s\n",
" QPU completed: 0.72s\n",
"Graph size: 21\n",
" CPU completed: 14.77s\n",
" QPU completed: 0.73s\n",
"Graph size: 22\n",
" CPU completed: 29.86s\n",
" QPU completed: 0.75s\n",
"Graph size: 23\n",
" CPU completed: 58.74s\n",
" QPU completed: 0.73s\n",
"Graph size: 24\n",
" CPU completed: 117.68s\n",
" QPU completed: 1.32s\n"
]
}
],
"source": [
"for nodes in range(2, max_size + 1):\n",
" print(\"Graph size: %d\" % nodes)\n",
" G = nx.wheel_graph(nodes)\n",
" \n",
" t1 = time.time()\n",
" dnx.min_vertex_cover(G, cpu_sampler)\n",
" t2 = time.time()\n",
" \n",
" print(\" CPU completed: %.2fs\" % (t2 - t1))\n",
" cpu_times.append(t2 - t1)\n",
" \n",
" t1 = time.time()\n",
" dnx.maximum_independent_set(G, sampler=qpu_sampler)\n",
" t2 = time.time()\n",
" \n",
" print(\" QPU completed: %.2fs\" % (t2 - t1))\n",
" qpu_times.append(t2 - t1)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1008x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(14, 6))\n",
" \n",
"network_sizes = list(range(2, max_size + 1))\n",
"plt.bar(network_sizes, cpu_times, label=\"CPU\")\n",
"plt.bar(network_sizes, qpu_times, label=\"QPU\")\n",
"plt.xticks(network_sizes)\n",
"plt.grid(axis='y')\n",
"plt.xlabel(\"Network size\")\n",
"plt.ylabel(\"Seconds\")\n",
"plt.legend()\n",
"\n",
"fig.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Of course, this method only works for \"smaller-than-QPU\" problems, otherwise I guess I'd have to use their [hybrid](https://github.com/dwavesystems/dwave-hybrid) solver."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@charleswhchan
Copy link

Hi @mino98, should the text say "QPU completed" instead of "GPU completed"? :)

@mino98
Copy link
Author

mino98 commented Apr 20, 2019

Whoops, you're right @charleswhchan... typical Freudian slip :)

@charleswhchan
Copy link

Haha. No worries!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment