diff --git a/notebooks/digital_demo.ipynb b/notebooks/digital_demo.ipynb index 7055ca4..b0e8369 100644 --- a/notebooks/digital_demo.ipynb +++ b/notebooks/digital_demo.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ @@ -29,7 +29,6 @@ "\n", "from aquapointer.digital.qubo import Qubo\n", "from aquapointer.digital.vqe import VQE\n", - "from aquapointer.digital.qubo_utils import get_ising_hamiltonian\n", "from aquapointer.digital.ansatz import QAOA_ansatz\n", "from aquapointer.density_canvas.DensityCanvas import DensityCanvas, Lattice" ] @@ -43,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -139,7 +138,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -162,7 +161,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -201,7 +200,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -226,7 +225,7 @@ " (8, 8))" ] }, - "execution_count": 5, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -249,7 +248,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 34, "metadata": {}, "outputs": [ { @@ -258,7 +257,7 @@ "('00010000', -0.02404680978135616)" ] }, - "execution_count": 6, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -278,7 +277,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 35, "metadata": {}, "outputs": [ { @@ -288,7 +287,7 @@ "
" ] }, - "execution_count": 7, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -312,25 +311,25 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[['00010000', 0.0029, -0.02404680978135616],\n", - " ['00010000', 0.0032, -0.02404680978135616],\n", - " ['00010000', 0.0082, -0.02404680978135616],\n", - " ['00010000', 0.019, -0.02404680978135616],\n", - " ['00010000', 0.0036, -0.02404680978135616],\n", - " ['00010000', 0.0007, -0.02404680978135616],\n", - " ['00010000', 0.0186, -0.02404680978135616],\n", - " ['00010000', 0.0223, -0.02404680978135616],\n", - " ['00010000', 0.0245, -0.02404680978135616],\n", + "[['00010000', 0.0039, -0.02404680978135616],\n", + " ['00010000', 0.0047, -0.02404680978135616],\n", + " ['00010000', 0.0071, -0.02404680978135616],\n", + " ['00010000', 0.0196, -0.02404680978135616],\n", + " ['00010000', 0.0049, -0.02404680978135616],\n", + " ['00010000', 0.0012, -0.02404680978135616],\n", + " ['00010000', 0.0213, -0.02404680978135616],\n", + " ['00010000', 0.02, -0.02404680978135616],\n", + " ['00010000', 0.013, -0.02404680978135616],\n", " ['00010000', 0.023, -0.02404680978135616]]" ] }, - "execution_count": 8, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -362,25 +361,25 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[['00010000', 0.0008, -0.02404680978135616],\n", - " ['00010000', 0.005, -0.02404680978135616],\n", - " ['00010000', 0.0061, -0.02404680978135616],\n", - " ['00010000', 0.0033, -0.02404680978135616],\n", - " ['00000100', 0.0021, -0.023073821946831514],\n", - " ['00010000', 0.0349, -0.02404680978135616],\n", - " ['00010000', 0.0288, -0.02404680978135616],\n", - " ['00010000', 0.0201, -0.02404680978135616],\n", - " ['00010000', 0.0209, -0.02404680978135616],\n", - " ['00010000', 0.034, -0.02404680978135616]]" + " ['00010000', 0.0062, -0.02404680978135616],\n", + " ['00010000', 0.0054, -0.02404680978135616],\n", + " ['00010000', 0.0032, -0.02404680978135616],\n", + " ['00010000', 0.0001, -0.02404680978135616],\n", + " ['00010000', 0.0348, -0.02404680978135616],\n", + " ['00010000', 0.0279, -0.02404680978135616],\n", + " ['00010000', 0.0239, -0.02404680978135616],\n", + " ['00010000', 0.023, -0.02404680978135616],\n", + " ['00010000', 0.0309, -0.02404680978135616]]" ] }, - "execution_count": 9, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -417,25 +416,30 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[['00010000', 0.0048, -0.02404680978135616],\n", - " ['00010000', 0.0017, -0.02404680978135616],\n", - " ['00010000', 0.0016, -0.02404680978135616],\n", - " ['01000001', 0.0001, -0.019880084695360865],\n", - " ['00010000', 0.0058, -0.02404680978135616],\n", - " ['00000100', 0.996, -0.023073821946831514],\n", - " ['00010000', 0.0035, -0.02404680978135616],\n", - " ['00000100', 0.9972, -0.023073821946831514],\n", - " ['00010000', 0.0029, -0.02404680978135616],\n", - " ['00010000', 0.0006, -0.02404680978135616]]" + "[['00010000', 0.0038, -0.02404680978135616],\n", + " ['00010000', 0.0023, -0.02404680978135616],\n", + " ['00010000', 0.0019, -0.02404680978135616],\n", + " ['10000001', 0.0001, -0.006002565905518864],\n", + " ['00010000', 0.0071, -0.02404680978135616],\n", + " ['00000100', 0.995, -0.023073821946831514],\n", + " ['00010000', 0.0036, -0.02404680978135616],\n", + " ['00000100', 0.9967, -0.023073821946831514],\n", + " ['00010000', 0.004, -0.02404680978135616],\n", + " ['00010000', 0.0008, -0.02404680978135616],\n", + " ['00000100', 0.9874, -0.023073821946831514],\n", + " ['00000100', 0.9952, -0.023073821946831514],\n", + " ['00000100', 0.9979, -0.023073821946831514],\n", + " ['00000100', 0.9963, -0.023073821946831514],\n", + " ['00000100', 0.996, -0.023073821946831514]]" ] }, - "execution_count": 10, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -456,7 +460,7 @@ "params = np.array(beta+gamma)\n", "vqe_qaoa = VQE(qubo=qubo, ansatz=qaoa_ansatz, sampler=sampler, params=params, track_opt_solution=True)\n", "\n", - "vqe_qaoa.run(alpha=alpha, maxiter=10)\n", + "vqe_qaoa.run(alpha=alpha, maxiter=15)\n", "vqe_qaoa.history" ] }, @@ -469,7 +473,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 39, "metadata": {}, "outputs": [ { @@ -500,7 +504,7 @@ "\n", "# extract random centers with a minimal distance\n", "# and a padding from border\n", - "seed = 6942\n", + "seed = 42\n", "n_centers = 4 #number of Gaussians\n", "min_dist = 10 #minimal distance between gaussians\n", "padding = 6 #minimal distance of Gaussian centers from border\n", @@ -524,7 +528,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 40, "metadata": {}, "outputs": [], "source": [ @@ -562,7 +566,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 41, "metadata": {}, "outputs": [], "source": [ @@ -615,7 +619,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 42, "metadata": {}, "outputs": [ { @@ -642,37 +646,30 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 15, + "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[[1.0, -0.007920490607354854],\n", - " [1.0, -0.008994188504706041],\n", - " [1.0, -0.008948858568804195],\n", - " [1.0, -0.06820746085313031],\n", - " [1.0, -0.0062547115613805545],\n", - " [1.0, -0.02436396403434026],\n", - " [1.0, -0.2421858489781493],\n", - " [1.0, -0.14876183508338225],\n", - " [1.0, -0.017048763630746314],\n", - " [1.0, -0.38851135624190847],\n", - " [1.0, -0.06708901115144252],\n", - " [1.0, -0.15478972252893702],\n", - " [1.0, -0.3527719795886619],\n", - " [1.0, -0.10147450158344096],\n", - " [1.0, -0.14313639184735738]]" + "[[1.0, -0.007715942402936036],\n", + " [1.0, -0.009294460599961864],\n", + " [1.0, -0.00905770986451118],\n", + " [1.0, -0.14861034290097122],\n", + " [1.0, -0.006378140588867349],\n", + " [1.0, -0.014921516073108909],\n", + " [1.0, -0.01636571913278202],\n", + " [1.0, -0.07201969447019674],\n", + " [1.0, -0.08742648590344891],\n", + " [1.0, -0.04979407793279561],\n", + " [1.0, -0.3886086790017593],\n", + " [1.0, -0.38865582758160444],\n", + " [1.0, -1.944639375859959],\n", + " [1.0, -0.3883046302306793],\n", + " [1.0, -0.2769548136481686]]" ] }, - "execution_count": 15, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -692,30 +689,30 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[[1.0, -0.007917308726831702],\n", - " [1.0, -0.00904425129597306],\n", - " [1.0, -0.009064503866857579],\n", - " [1.0, -0.006577687994789803],\n", - " [1.0, -0.006547645153396153],\n", - " [1.0, -0.005755265528138666],\n", - " [1.0, -0.00564854906348037],\n", - " [1.0, -0.005479890783262982],\n", - " [1.0, -0.005635797131098759],\n", - " [1.0, -0.005508803562995465],\n", - " [1.0, -0.005577742590879908],\n", - " [1.0, -0.005558926307125881],\n", - " [1.0, -0.005596133962248382],\n", - " [1.0, -0.005557148252263868],\n", - " [1.0, -0.0055159651691098705]]" + "[[1.0, -0.007758034926243161],\n", + " [1.0, -0.009071280715609776],\n", + " [1.0, -0.009169396446117382],\n", + " [1.0, -0.006635225112019546],\n", + " [1.0, -0.006296695618837746],\n", + " [1.0, -0.00576976379615938],\n", + " [1.0, -0.007190660327209755],\n", + " [1.0, -0.006120475368745179],\n", + " [1.0, -0.007168427515127433],\n", + " [1.0, -0.0063828130496554536],\n", + " [1.0, -0.006897187288597483],\n", + " [1.0, -0.007257832066800078],\n", + " [1.0, -0.006824294652107388],\n", + " [1.0, -0.006658788362188953],\n", + " [1.0, -0.00688927010567094]]" ] }, - "execution_count": 16, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -735,7 +732,41 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANNxWsCZOXOmunTpIl9fXwUGBl6yfX5+viZOnKi2bdvqmmuuUVhYmIYMGaL09HSHds2aNZPFYnG4Pf/8806aBQAAqImcFnDOnz+v++67TyNHjrys9mfOnNGuXbs0ZcoU7dq1Sx9++KFSU1PVt2/fEm1nzJihjIwM++3xxx+v7PIBAEAN5uGsjqdPny5JWrx48WW1DwgIUFJSksO2V155RZ06dVJaWpqaNGli3+7n56fQ0NBKqxUAAJhLtV6DY7VaZbFYShziev7551W/fn21b99es2fP1oULF8rtJy8vTzabzeEGAADMy2l7cK7WuXPnNHHiRA0aNEj+/v727WPGjNFNN92koKAgbdmyRZMnT1ZGRoZefvnlMvtKTEy071ECAADmZzEMw7jcxpMmTdKsWbPKbbN//35FRETY7y9evFhjx45VTk7OZReVn5+v/v376+eff9bGjRsdAs7FFi1apEceeUS5ubny9vYutU1eXp7y8vLs9202mxo3biyr1Vpu3wAAoPqw2WwKCAi4rM/vCu3BSUhI0NChQ8tt07x584p0WUJ+fr4GDBigI0eOaP369ZecQHR0tC5cuKDDhw/r+uuvL7WNt7d3meEHAACYT4UCTnBwsIKDg51Viz3c/PDDD9qwYYPq169/yeekpKTIzc1NISEhTqsLAADULE5bg5OWlqbs7GylpaWpoKBAKSkpkqSWLVuqbt26kqSIiAglJibq7rvvVn5+vu69917t2rVLq1evVkFBgTIzMyVJQUFB8vLyUnJysrZt26bbbrtNfn5+Sk5O1rhx4zR48GDVq1fPWVMBAAA1jNMCztSpU7VkyRL7/fbt20uSNmzYoO7du0uSUlNTZbVaJUnHjh3TypUrJUnt2rVz6Kv4Od7e3lq+fLmefvpp5eXlKTw8XOPGjdP48eOdNQ0AAFADVWiRsVlUZJESAACoHiry+V2tr4MDAABwJQg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADA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9Ouvv+qzzz6Tm5ubBgwYoGXLlikzM9Ohr7Nnz+q1115TbGysgoKCtGfPHn399dfauHGjQ38bN25UcnJypX11BwAAFUHAqUTubhZNuytKkkqEnOL70+6Kkrubc7476ZVXXlFeXp5iY2O1efNmHT16VGvWrNHtt9+uVq1aaerUqfr3v/+t+vXra8CAAWrTpo39duONN6p37972xcHPPfecQkNDdfvtt+vTTz/V0aNHtXnzZsXGxio/P1+vvvqqpKK9N506ddKtt97q0N+tt96qm2++mcXGAACXIOBUsrg2jfT64JsUGuB4GCo0wEevD77JqdfBue6667Rjxw41b95cAwYMUNOmTdWrVy+1atVKX331lerWratFixbp7rvvLvULKvv376+VK1fql19+Uf369bV161bddttteuSRR9SiRQsNGDBALVq0sI9x/vx5vf322+rfv3+p9fTv319vvfWW/RvaAQCoKlzozwkX+pOKThnffihbWafOKcSv6LCUs/bclGfatGl6+eWXlZSUpM6dO1f5+FWBC/0BQO1QkQv9VejLNnH53N0simlR39VlaPr06WrWrJm2bt2qTp06yc2NnXYAAPMj4NQCDz30kKtLAACgSvHfeQAAYDoEHAAAYDoEHAAAYDoEHAAAYDoEHAAAYDoEHAAAYDoEHAAAYDoEHAAAYDoEHGcpLJAOfSHt+aDoz8ICV1dUIUuWLNHNN98sX19f+fn5qVu3blq9enWZ7SMiIuTt7V3i28eLrV69Wt26dZOfn598fX118803a/HixaW2PXv2rIKCgtSgQQPl5eVVxnQAALUMAccZ9q2U5rSRltwp/WdY0Z9z2hRtrwGefPJJPfLII7r//vv17bffavv27brlllv05z//Wa+88kqJ9l9++aXOnj2re++9V0uWLCnx+Lx58/TnP/9ZXbt21bZt2/Ttt99q4MCBevTRR/Xkk0+WaP+f//xHrVu3VkREhD766CNnTBEAYHZGLWS1Wg1JhtVqLfHY2bNnjX379hlnz569ss73fmwY0wIMY5r/RbeAotvej6+m9DKtWrXKCAgIMC5cuGAYhmF88803hiRj4sSJ9jbDhg0z4uPjjcOHDxt33nmnERgYaPj6+hpRUVHGJ598YhiGYSQnJxuSjLlz55YYY/z48Yanp6eRlpbmsH3o0KHGpEmTjE8//dRo1aqVw2NpaWmGp6enMX78+BL9zZ0715BkbN261WF79+7djfnz5xuvv/66cfvtt19y7lf9MwOAylJwwTB+2mwY375f9GfBBVdXZCrlfX5fjD04lamwQFozUVJpX9D+27Y1k5xyuOqPf/yjTp06pW+++UaStGnTJjVo0EAbN260t9m0aZO6d++uUaNGKS8vT5s3b9aePXs0a9Ys1a1bV5L0zjvvqG7dunrkkUdKjJGQkKD8/Hz95z//sW87deqU3n//fQ0ePFi33367rFarvvjiC/vjH3zwgfLz80vdU/PII4+obt26euedd+zbfvzxRyUnJ2vAgAEaMGCAvvjiCx05cuSqXx8AcLoavvfebAg4lenIFsmWXk4DQ7IdK2pXyQICAtSuXTt7oNm4caPGjRunb775Rrm5uTp27JgOHjyobt26KS0tTV27dlXbtm3VvHlz3Xnnnbr11lslSd9//71atGghLy+vEmOEhYXJ399f33//vX3b8uXLdd1116l169Zyd3fXwIEDtXDhQvvj33//vQICAtSoUaMS/Xl5eal58+YO/S1atEi9evVSvXr1FBQUpNjYWL355puV9TIBgHPsWym9N6TkZ4Ato2g7IafKEXAqU+7xym1XQd26ddPGjRtlGIa++OIL3XPPPYqMjNSXX36pTZs2KSwsTNddd53GjBmjZ599Vl27dtW0adP07bffOvRjGKXtgfqf34efRYsWafDgwfb7gwcP1vvvv69Tp05VuP6CggItWbKkRH+LFy9WYWFhhfsDgCrhwr33KBsBpzLVbVi57Sqoe/fu+vLLL7V79255enoqIiJC3bt318aNG7Vp0yZ169ZNkvTXv/5VP/30kx544AHt2bNHHTt21Lx58yRJ1113nX766SedP3++RP/p6emy2Wxq1aqVJGnfvn3aunWrnnrqKXl4eMjDw0OdO3fWmTNntHz5cklSq1atZLValZ5ecs/W+fPn9eOPP9r7W7t2rY4dO6b777/f3t/AgQN15MgRrVu3zimvGQBcNRfuvUfZCDiVqWkXyT9MkqWMBhbJ/w9F7ZygeB3OP/7xD3uYKQ44GzduVPfu3e1tGzdurEcffVQffvihEhIS9K9//UuSNGjQIOXm5uqNN94o0f+LL74oHx8f3X///ZKkhQsX6tZbb9Xu3buVkpJiv40fP95+mKp///7y9PTUSy+9VKK/+fPn6/Tp0xo0aJC9v4EDBzr0lZKSUuKwFwBUKy7ee4/Sebi6AFNxc5fiZhUdb5VFjrsrfws9cc8XtXOCevXq6YYbbtDSpUvtp3PfeuutGjBggPLz8+2hZ+zYserVq5datWqlX3/9VRs2bFBkZKQkKSYmRk888YQmTJig8+fPq1+/fsrPz9fbb7+tuXPnavHixapfv77y8/P173//WzNmzFCbNm0c6vjrX/+ql19+WXv37lXr1q31wgsvKCEhQT4+PnrggQfk6empjz/+WP/3f/+nhIQERUdH68SJE1q1apVWrlxZor8hQ4bo7rvvVnZ2toKCgpzy2gHAFXPx3nuUjj04lS2qrzTgLcn/okW1/mFF26P6OnX4bt26qaCgwL63JigoSFFRUQoNDdX1118vqWity6hRoxQZGam4uDi1atVKr732mr2POXPm6LXXXtM777yjNm3aKDIyUrNnz9b69evt62NWrlypkydP6u677y5RQ2RkpCIjI+17XcaOHasVK1boiy++UMeOHdWmTRstW7ZMr7/+ul588UVJ0ltvvaVrrrlGPXr0KNFfjx49VKdOHb399tuV+loBQKVw8d57lM5iXGpFqQnZbDYFBATIarXK39/f4bFz587p0KFDCg8Pl4+Pz5UPUlhQdLw193hRam/axWl7bpzt8OHD6tatm2JiYrR06VK5u1eveVTazwwArlTxWVSSSt17XwX/wa0Nyvv8vhh7cJzFzV0K/6PU9t6iP2touJGkZs2aaePGjYqIiFBKSoqrywGA6sfFe+9REmtwcFnCw8P19NNPu7oMAKi+ovpKEX1Ms/e+pnPaHpzDhw9r2LBhCg8PV506ddSiRQtNmzat1NOPf+/cuXMaNWqU6tevr7p166p///46ftxx5XlaWpr69OkjX19fhYSEaMKECbpw4YKzpgIAwOUx0d77ms5pe3AOHDigwsJCvfHGG2rZsqW+++47DR8+XKdPn7YvLC3NuHHj9Mknn+j9999XQECARo8erXvuuUdfffWVpKIFsn369FFoaKi2bNmijIwMDRkyRJ6ennruueecNR0AAFCDVOki49mzZ+v111/XTz/9VOrjVqtVwcHBWrZsme69915JRUEpMjJSycnJ6ty5sz799FPdeeedSk9PV8OGRafczZ8/XxMnTtSJEydK/YqBi13OIuOmTZvK19f3KmeMqnDmzBkdOXKERcYAYHIVWWRcpWtwrFZrudcx2blzp/Lz89WzZ0/7toiICDVp0sQecJKTk9W2bVt7uJGk2NhYjRw5Unv37lX79u1L9JuXl6e8vDz7fZvNVmYNXl5ecnNzU3p6uoKDg+Xl5SWLpaxT/+BKhmHo/PnzOnHihNzc3C4r3AIAaocqCzgHDx7UvHnzyj08lZmZKS8vLwUGBjpsb9iwoTIzM+1tfh9uih8vfqw0iYmJmj59+mXV6ebmpvDwcGVkZJT69QKofnx9fdWkSRO5uXFSIACgSIUDzqRJkzRr1qxy2+zfv18RERH2+8eOHVNcXJzuu+8+DR8+vOJVXqXJkydr/Pjx9vs2m02NGzcus72Xl5eaNGmiCxcuqKCAL0erztzd3eXh4cFeNgCAgwoHnISEBA0dOrTcNs2bN7f/PT09Xbfddpu6dOmiBQsWlPu80NBQnT9/Xjk5OQ57cY4fP67Q0FB7m+3btzs8r/gsq+I2F/P29pa3t3e5Y1/MYrHI09NTnp6eFXoeAABwvQoHnODgYAUHB19W22PHjum2225Thw4d9Oabb17yEEKHDh3k6empdevWqX///pKk1NRUpaWlKSYmRlLRdyXNnDlTWVlZCgkJkSQlJSXJ399fUVFRFZ0OAAAwIactWjh27Ji6d++uJk2a6MUXX9SJEyeUmZnpsE7m2LFjioiIsO+RCQgI0LBhwzR+/Hht2LBBO3fu1EMPPaSYmBh17txZknTHHXcoKipKDzzwgHbv3q21a9fq73//u0aNGlXhvTQAAMCcnLbIOCkpSQcPHtTBgwd17bXXOjxWfGZ6fn6+UlNTdebMGftj//jHP+Tm5qb+/fsrLy9PsbGxDl8E6e7urtWrV2vkyJGKiYnRNddcowcffFAzZsxw1lQAAEANUyu/bNNqtSowMFBHjx695Hn0AACgeig+SSgnJ0cBAQHltq2V30V16tQpSSr3TCoAAFA9nTp16pIBp1buwSksLFR6err8/Pwq/fTi4nRZW/cOMf/aPX+J16C2z1/iNajt85ec9xoYhqFTp04pLCzskicu1co9OG5ubiXWBVU2f3//WvvGlph/bZ+/xGtQ2+cv8RrU9vlLznkNLrXnphiXfgUAAKZDwAEAAKZDwKlk3t7emjZtWq29Jg/zr93zl3gNavv8JV6D2j5/qXq8BrVykTEAADA39uAAAADTIeAAAADTIeAAAADTIeAAAADTIeBUoldffVXNmjWTj4+PoqOj7d+SXhskJibq5ptvlp+fn0JCQtSvXz+lpqa6uiyXef7552WxWDR27FhXl1Jljh07psGDB6t+/fqqU6eO2rZtq6+//trVZVWZgoICTZkyReHh4apTp45atGihZ555RmY9j2Pz5s266667FBYWJovFoo8++sjhccMwNHXqVDVq1Eh16tRRz5499cMPP7imWCcp7zXIz8/XxIkT1bZtW11zzTUKCwvTkCFDlJ6e7rqCK9ml3gO/9+ijj8pisWjOnDlVVh8Bp5K8++67Gj9+vKZNm6Zdu3bpxhtvVGxsrLKyslxdWpXYtGmTRo0apa1btyopKUn5+fm64447dPr0aVeXVuV27NihN954QzfccIOrS6kyv/76q7p27SpPT099+umn2rdvn1566SXVq1fP1aVVmVmzZun111/XK6+8ov3792vWrFl64YUXNG/ePFeX5hSnT5/WjTfeqFdffbXUx1944QXNnTtX8+fP17Zt23TNNdcoNjZW586dq+JKnae81+DMmTPatWuXpkyZol27dunDDz9Uamqq+vbt64JKneNS74FiK1as0NatWxUWFlZFlf3GQKXo1KmTMWrUKPv9goICIywszEhMTHRhVa6TlZVlSDI2bdrk6lKq1KlTp4zrrrvOSEpKMrp162Y88cQTri6pSkycONG45ZZbXF2GS/Xp08d4+OGHHbbdc889Rnx8vIsqqjqSjBUrVtjvFxYWGqGhocbs2bPt23Jycgxvb2/jnXfecUGFznfxa1Ca7du3G5KMI0eOVE1RVais+f/888/GH/7wB+O7774zmjZtavzjH/+osprYg1MJzp8/r507d6pnz572bW5uburZs6eSk5NdWJnrWK1WSVJQUJCLK6lao0aNUp8+fRzeC7XBypUr1bFjR913330KCQlR+/bt9a9//cvVZVWpLl26aN26dfr+++8lSbt379aXX36pXr16ubiyqnfo0CFlZmY6/DsICAhQdHR0rf2dKBX9XrRYLAoMDHR1KVWisLBQDzzwgCZMmKDWrVtX+fi18ss2K9svv/yigoICNWzY0GF7w4YNdeDAARdV5TqFhYUaO3asunbtqjZt2ri6nCqzfPly7dq1Szt27HB1KVXup59+0uuvv67x48fr//7v/7Rjxw6NGTNGXl5eevDBB11dXpWYNGmSbDabIiIi5O7uroKCAs2cOVPx8fGuLq3KZWZmSlKpvxOLH6ttzp07p4kTJ2rQoEG15gs4Z82aJQ8PD40ZM8Yl4xNwUOlGjRql7777Tl9++aWrS6kyR48e1RNPPKGkpCT5+Pi4upwqV1hYqI4dO+q5556TJLVv317fffed5s+fX2sCznvvvaelS5dq2bJlat26tVJSUjR27FiFhYXVmtcApcvPz9eAAQNkGIZef/11V5dTJXbu3Kl//vOf2rVrlywWi0tq4BBVJWjQoIHc3d11/Phxh+3Hjx9XaGioi6pyjdGjR2v16tXasGGDrr32WleXU2V27typrKws3XTTTfLw8JCHh4c2bdqkuXPnysPDQwUFBa4u0akaNWqkqKgoh22RkZFKS0tzUUVVb8KECZo0aZIGDhyotm3b6oEHHtC4ceOUmJjo6tKqXPHvPX4n/i/cHDlyRElJSbVm780XX3yhrKwsNWnSxP478ciRI0pISFCzZs2qpAYCTiXw8vJShw4dtG7dOvu2wsJCrVu3TjExMS6srOoYhqHRo0drxYoVWr9+vcLDw11dUpXq0aOH9uzZo5SUFPutY8eOio+PV0pKitzd3V1dolN17dq1xGUBvv/+ezVt2tRFFVW9M2fOyM3N8Vequ7u7CgsLXVSR64SHhys0NNThd6LNZtO2bdtqze9E6X/h5ocfftDnn3+u+vXru7qkKvPAAw/o22+/dfidGBYWpgkTJmjt2rVVUgOHqCrJ+PHj9eCDD6pjx47q1KmT5syZo9OnT+uhhx5ydWlVYtSoUVq2bJk+/vhj+fn52Y+zBwQEqE6dOi6uzvn8/PxKrDe65pprVL9+/VqxDmncuHHq0qWLnnvuOQ0YMEDbt2/XggULtGDBAleXVmXuuusuzZw5U02aNFHr1q31zTff6OWXX9bDDz/s6tKcIjc3VwcPHrTfP3TokFJSUhQUFKQmTZpo7NixevbZZ3XdddcpPDxcU6ZMUVhYmPr16+e6oitZea9Bo0aNdO+992rXrl1avXq1CgoK7L8Xg4KC5OXl5aqyK82l3gMXBzpPT0+Fhobq+uuvr5oCq+x8rVpg3rx5RpMmTQwvLy+jU6dOxtatW11dUpWRVOrtzTffdHVpLlObThM3DMNYtWqV0aZNG8Pb29uIiIgwFixY4OqSqpTNZjOeeOIJo0mTJoaPj4/RvHlz429/+5uRl5fn6tKcYsOGDaX+m3/wwQcNwyg6VXzKlClGw4YNDW9vb6NHjx5Gamqqa4uuZOW9BocOHSrz9+KGDRtcXXqluNR74GJVfZq4xTBMeplNAABQa7EGBwAAmA4BBwAAmA4BBwAAmA4BBwAAmA4BBwAAmA4BBwAAmA4BBwAAmA4BBwAAmA4BBwAAmA4BBwAAmA4BBwAAmA4BBwAAmM7/B8MwO83g/E62AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.scatter(range(len(vqe_qaoa.history)), np.array(vqe_qaoa.history)[:, 1], label='QAOA')\n", + "plt.scatter(range(len(vqe_wsqaoa.history)), np.array(vqe_wsqaoa.history)[:, 1], label='wsQAOA')\n", + "plt.legend()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, "metadata": {}, "outputs": [ { @@ -744,7 +775,7 @@ "('111001110', -4.304706868417688)" ] }, - "execution_count": 17, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" }