{ "cells": [ { "cell_type": "markdown", "id": "9e40af77-7f0f-4dd6-ab0a-420cf396050e", "metadata": {}, "source": [ "# Optimize Hamiltonian basis with orbital optimization\n", "\n", "In this tutorial, we will show how to use the `sqd` package to post-process quantum samples using the [self-consistent configuration recovery technique](https://arxiv.org/abs/2405.05068) and then further optimize the ground state approximation using orbital optimization\n", "\n", "Refer to [Sec. II A 4](https://arxiv.org/pdf/2405.05068) for a more detailed discussion on this technique." ] }, { "cell_type": "markdown", "id": "a6755afb-ca1e-4473-974b-ba89acc8abce", "metadata": {}, "source": [ "### First we will specify the molecule and its properties\n", "\n", "In this example, we will approximate the ground state energy of an $N_2$ molecule and then improve the answer using orbital optimization. This guide studies $N_2$ at equilibrium, which is mean-field dominated. This means the MO basis is already a good choice for our integrals; therefore, we will rotate our integrals **out** of the MO basis in order to illustrate the effects of orbital optimization." ] }, { "cell_type": "code", "execution_count": 1, "id": "677f54ac-b4ed-47e3-b5ba-5366d3a520f9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Parsing ../molecules/n2_fci.txt\n" ] } ], "source": [ "import numpy as np\n", "from pyscf import ao2mo, tools\n", "from qiskit_addon_sqd.fermion import rotate_integrals\n", "\n", "# Specify molecule properties\n", "num_orbitals = 16\n", "num_elec_a = num_elec_b = 5\n", "open_shell = False\n", "spin_sq = 0\n", "\n", "# Read in molecule from disk\n", "mf_as = tools.fcidump.to_scf(\"../molecules/n2_fci.txt\")\n", "hcore = mf_as.get_hcore()\n", "eri = ao2mo.restore(1, mf_as._eri, num_orbitals)\n", "\n", "# Rotate our integrals out of MO basis\n", "k_rot = (np.random.rand(num_orbitals**2) - 0.5) * 0.1\n", "hcore_rot, eri_rot = rotate_integrals(hcore, eri, k_rot)\n", "\n", "nuclear_repulsion_energy = mf_as.mol.energy_nuc()" ] }, { "cell_type": "markdown", "id": "c58e988c-a109-44cd-a975-9df43250c318", "metadata": {}, "source": [ "### Generate a dummy counts dictionary and create the bitstring matrix and probability array" ] }, { "cell_type": "code", "execution_count": 2, "id": "e9506e0b-ed64-48bb-a97a-ef851b604af1", "metadata": {}, "outputs": [], "source": [ "from qiskit_addon_sqd.counts import counts_to_arrays, generate_counts_uniform\n", "\n", "# Create a seed to control randomness throughout this workflow\n", "rand_seed = 42\n", "\n", "# Generate random samples\n", "counts_dict = generate_counts_uniform(10_000, num_orbitals * 2, rand_seed=rand_seed)\n", "\n", "# Convert counts into bitstring and probability arrays\n", "bitstring_matrix_full, probs_arr_full = counts_to_arrays(counts_dict)" ] }, { "cell_type": "markdown", "id": "eb704101-0fe8-4d12-b572-b1d844e35a90", "metadata": {}, "source": [ "### Iteratively refine the samples using SQD and approximate the ground state" ] }, { "cell_type": "code", "execution_count": 3, "id": "b72c048e-fe8e-4fc2-b28b-03138249074e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Starting configuration recovery iteration 0\n", "Starting configuration recovery iteration 1\n", "Starting configuration recovery iteration 2\n", "Starting configuration recovery iteration 3\n", "Starting configuration recovery iteration 4\n" ] } ], "source": [ "from qiskit_addon_sqd.configuration_recovery import recover_configurations\n", "from qiskit_addon_sqd.fermion import flip_orbital_occupancies, solve_fermion\n", "from qiskit_addon_sqd.subsampling import postselect_and_subsample\n", "\n", "# SQSD options\n", "iterations = 5\n", "\n", "# Eigenstate solver options\n", "n_batches = 10\n", "samples_per_batch = 300\n", "max_davidson_cycles = 200\n", "\n", "# Self-consistent configuration recovery loop\n", "e_hist = np.zeros((iterations, n_batches)) # energy history\n", "s_hist = np.zeros((iterations, n_batches)) # spin history\n", "occupancy_hist = np.zeros((iterations, 2 * num_orbitals))\n", "occupancies_bitwise = None # orbital i corresponds to column i in bitstring matrix\n", "for i in range(iterations):\n", " print(f\"Starting configuration recovery iteration {i}\")\n", " # On the first iteration, we have no orbital occupancy information from the\n", " # solver, so we just post-select from the full bitstring set based on hamming weight.\n", " if occupancies_bitwise is None:\n", " bs_mat_tmp = bitstring_matrix_full\n", " probs_arr_tmp = probs_arr_full\n", "\n", " # In following iterations, we use both the occupancy info and the target hamming\n", " # weight to refine bitstrings.\n", " else:\n", " bs_mat_tmp, probs_arr_tmp = recover_configurations(\n", " bitstring_matrix_full,\n", " probs_arr_full,\n", " occupancies_bitwise,\n", " num_elec_a,\n", " num_elec_b,\n", " rand_seed=rand_seed,\n", " )\n", "\n", " # Throw out samples with incorrect hamming weight and create batches of subsamples.\n", " batches = postselect_and_subsample(\n", " bs_mat_tmp,\n", " probs_arr_tmp,\n", " hamming_right=num_elec_a,\n", " hamming_left=num_elec_b,\n", " samples_per_batch=samples_per_batch,\n", " num_batches=n_batches,\n", " rand_seed=rand_seed,\n", " )\n", "\n", " # Run eigenstate solvers in a loop. This loop should be parallelized for larger problems.\n", " int_e = np.zeros(n_batches)\n", " int_s = np.zeros(n_batches)\n", " int_occs = np.zeros((n_batches, 2 * num_orbitals))\n", " cs = []\n", " for j in range(n_batches):\n", " energy_sci, coeffs_sci, avg_occs, spin = solve_fermion(\n", " batches[j],\n", " hcore_rot,\n", " eri_rot,\n", " open_shell=open_shell,\n", " spin_sq=spin_sq,\n", " max_davidson=max_davidson_cycles,\n", " )\n", " energy_sci += nuclear_repulsion_energy\n", " int_e[j] = energy_sci\n", " int_s[j] = spin\n", " int_occs[j, :num_orbitals] = avg_occs[0]\n", " int_occs[j, num_orbitals:] = avg_occs[1]\n", " cs.append(coeffs_sci)\n", "\n", " # Combine batch results\n", " avg_occupancy = np.mean(int_occs, axis=0)\n", " # The occupancies from the solver should be flipped to match the bits in the bitstring matrix.\n", " occupancies_bitwise = flip_orbital_occupancies(avg_occupancy)\n", "\n", " # Track optimization history\n", " e_hist[i, :] = int_e\n", " s_hist[i, :] = int_s\n", " occupancy_hist[i, :] = avg_occupancy" ] }, { "cell_type": "markdown", "id": "9d78906b-4759-4506-9c69-85d4e67766b3", "metadata": {}, "source": [ "### Visualize the results with no orbital optimization" ] }, { "cell_type": "code", "execution_count": 4, "id": "caffd888-e89c-4aa9-8bae-4d1bb723b35e", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAP3RFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMS5wb3N0MSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8kixA/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAC7+ElEQVR4nOzdd3gUVfv/8c+mF1IIJIRQkkCA0EFApHdDLyICFuqD5QGVpo+g0kQRLKCCgIqgAtKlSBdBRJAeqiC9954ACUnO7w9+2S9LEkggyULyfl3XXDBnzszcs7OZPXvvmTMWY4wRAAAAAAAAkIkc7B0AAAAAAAAAsh+SUgAAAAAAAMh0JKUAAAAAAACQ6UhKAQAAAAAAINORlAIAAAAAAECmIykFAAAAAACATEdSCgAAAAAAAJmOpBQAAAAAAAAyHUkpAAAAAAAAZDqSUnisWSwWDRo0yN5hpKtJkybJYrHo8OHD9g7Frg4fPiyLxaJJkybZOxQAyeBvFACAe6tdu7Zq1679QOva43tO4veQTZs23bfuwxxbSgYNGiSLxZKu28Sjj6RUFvf111/LYrGocuXK9g4lS7l+/boGDRqkVatW2TsUbd++XZ07d1ZoaKjc3NyUI0cOlStXTm+//bYOHjxo7/AyxeHDh9W5c2cVLlxYbm5uCgwMVM2aNTVw4ECbel9//fVDfYE+efKkBg0apMjIyIcL+C6JX+5Tmj7++ON03V92Exsbqy+++ELly5eXt7e3fH19VbJkSb388svas2dPkvq7du3Siy++qHz58snV1VVBQUF68cUXtXv37iR1ExtviZObm5uCgoIUERGhL7/8UteuXUtVjKtWrZLFYtGsWbOsZWvXrtWgQYN0+fLlBz729DB16lSNGjXKrjEAeDQ9Su3M5K7dL7zwgnbt2mXv0JBJduzYoWeffVbBwcFyc3NTvnz51KBBA3311VcZut/du3dr0KBBdv1B+cKFC3rrrbdUrFgxubm5yc/PTxEREfr1118zLYaMaicj63OydwDIWFOmTFFISIg2bNig/fv3KywszN4hpasbN27IySnz38bXr1/X4MGDJSndfyFIi2+//VavvfaacufOrRdeeEHh4eGKi4vTzp079eOPP2rUqFG6ceOGHB0d7RZjRtu/f78qVaokd3d3denSRSEhITp16pS2bNmi4cOHW8+TdLvxnDt3bnXq1OmB9nXy5EkNHjxYISEhKleuXPocwB3at2+vxo0bJykvX758uu8rO2ndurUWL16s9u3bq1u3brp165b27NmjX3/9VVWrVlV4eLi17pw5c9S+fXv5+fmpa9euCg0N1eHDhzVhwgTNmjVL06dPV4sWLZLsY8iQIQoNDdWtW7d0+vRprVq1Sj179tTnn3+u+fPnq0yZMmmOe+3atRo8eLA6deokX1/fh3kJHsrUqVO1c+dO9ezZ06Y8ODhYN27ckLOzs30CA2B3j0o7837X7mnTpqlVq1Z2iQ2ZY+3atapTp44KFiyobt26KTAwUMeOHdPff/+tL774Qq+//nqG7Xv37t0aPHiwateurZCQEJtly5Yty7D9Jtq7d6/q1aunc+fOqXPnzqpYsaIuX76sKVOmqFmzZurbt68++eSTdN/v3ceW0e1kZF0kpbKwQ4cOae3atZozZ45eeeUVTZkyJUnPkcwSFxenhIQEubi4pOt23dzc0nV7j5O1a9fqtddeU7Vq1fTrr7/Ky8vLZvlnn32mDz/88L7buX79ujw8PDIqzAw3cuRIRUVFKTIyUsHBwTbLzp49a6eoHswTTzyhF1980d5hZNjfqz1s3LhRv/76qz788EP179/fZtno0aNteiEdOHBAL730kgoVKqTVq1fL39/fuuzNN99UjRo19OKLL2r79u0KDQ212VajRo1UsWJF63y/fv30+++/q2nTpmrevLn++ecfubu7Z8xBplF6/c0n9gwDkD09Ku3M1Fy7X3rpJW3fvl2FChXK9PiQfqKjo+Xp6Znssg8//FA+Pj7auHFjkh9y7NkezOi21K1bt/Tss8/q0qVLWr16tU2vxV69eumFF17Qp59+qooVK6pt27YpbufmzZtpjjUrtBPxaOD2vSxsypQpypkzp5o0aaJnn31WU6ZMSVIn8bahTz/9VCNHjlRwcLDc3d1Vq1Yt7dy506Zup06dlCNHDh08eFARERHy9PRUUFCQhgwZImNMstscNWqUChcuLFdXV+utL7///rtq1KghT09P+fr6qkWLFvrnn3+s60+cOFEWi0Xff/+9zf4/+ugjWSwWLVq0yFp2973Wifch//vvv3rxxRfl4+Mjf39/vf/++zLG6NixY2rRooW8vb0VGBiozz77zGYfsbGxGjBggCpUqCAfHx95enqqRo0aWrlypc3x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zZkzx6ahcfeHWEqNkMReZM7Ozvf9Mh4cHJzs657c63M3T09P1a5dW3/88YdOnDhhc+vlgwgODtb27duTJP4Sb+FJPHeJv77d/WS8B+1JlbjtFStWKCoqyubLdGpeh3tJ7JJ/6tQpa1lK523WrFmqU6eOJkyYYFN++fJlmx4xKa1fuHBhSbdvRUtNEiYzFC5cWFFRUQ8cT0BAgNzc3LR///4ky5Irc3R01PPPP69JkyZp+PDhmjt3rrp165aqpIGnp6eaNm2qmTNn6vPPP9f06dNVo0YNm9sGpds9NevVq6d69erp888/10cffaR3331XK1euTPNxOjs7q0yZMtq3b5/11rdmzZpp/PjxWrNmjapXr55knT///FOHDx9O03Xop59+kqR7PoEwJfd6vxljFBoamiS5mFqrVq3ShQsXNGfOHNWsWdNafujQoVTHcbe0XuNTKz3PO4CHl5Z2Zs2aNZU3b15Nnz5d1atX1++//2594lui4OBg7d69W8YYm+tNcp81yWnatKm+/fbb+167E2+b8/f3l7e3d7I/7N2pcOHC962T1nbRyZMnFR0dbXMtvLsdndq2aGoltk3vdyzS7SRi79699fPPP+vGjRtydna26dV2P/v27bPe0ind7il86tQpNW7cWNL/tZcCAgIy7fqdXHswMda7/fvvv/Lw8LD28p81a5Y6duxo87TumzdvJjnfabmdM73Pb9OmTfXzzz/rxx9/1HvvvZdk+dWrVzVv3jyFh4en6Qey+53L5KT0OuzYsUP//vuvfvjhB3Xo0MFavnz58lTHg6yN2/eymBs3bmjOnDlq2rSpnn322SRTjx49dO3atST3Vs+dO9c61pEkbdiwQevXr08ydowkm19MjDEaPXq0nJ2d73t7Xd68eVWuXDn98MMPNhfznTt3atmyZTYXuVmzZmn69On6+OOP9c4776hdu3Z67733rB/cGSXxC/Sdvy6tX78+yWNwPTw8JCVthAQEBKh27doaP358kg8/SdbuwJLUuHFj/f3339qwYYPN8ju7Td/LgAEDFB8frxdffDHZ2/jS8gtZ48aNdfr0aZtxH+Li4vTVV18pR44c1t5XwcHBcnR0TDIe0ddff53qfSW377i4OI0dO9ZaFh8fr6+++ipV6//555+6detWkvLEe97vvJXI09MzyTmTbp/3u1+vmTNn2vxNJK4vJT3v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xx9/lHT7lr2OHTvqiy++UOXKlXX69GlJkru7u3x8fCRJffv2VbNmzRQcHKyTJ09q4MCBcnR0VPv27R/+4AEAQLZGVgCZ5s36RZQ7h6sOno/W938dsnc4AAA8EkaOHKmTJ09qzJgxySakpNu3zB06dP/Pzk2bNql8+fIqX768JKl3794qX768BgwYIOn27YF3Pjnvm2++UVxcnLp37668efNapzfffNNa5/jx42rfvr2KFSum5557Trly5dLff/8tf3//hzhqAAAAekohE3m7OeudRuHqO3ObvlyxTy3L5VOgj5u9wwIAwK6aN2+u69evy83N9jPx4sWLcnJyStOtb7Vr15YxJsXlkyZNsplftWrVfbc5bdq0VO8fAAAgLegphUz1TPl8eqKgr67HxmvY4n/sHQ4AAHbXrl27ZBM/M2bMULt27ewQEQAAQOYgKYVM5eBg0ZAWpWSxSPMiT2r9wQv2DgkAALtav3696tSpk6S8du3aWr9+vR0iAgAAyBwkpZDpSuXz0fNPFpQkDZy/S3HxCXaOCAAA+4mJiVFcXFyS8lu3bunGjRt2iAgAACBzkJSCXfR9uph8PZy15/Q1Tf77iL3DAQDAbp588kl98803ScrHjRunChUq2CEiAACAzJGmgc4TEhL0xx9/6M8//9SRI0d0/fp1+fv7q3z58qpfv74KFCiQUXEii8np6aK3Iorp3V926rPl/6pp2SDlzuFq77AAAMh0Q4cOVf369bVt2zbVq1dPkrRixQpt3LhRy5Yts3N0AAAAGSdVPaVu3LihoUOHqkCBAmrcuLEWL16sy5cvy9HRUfv379fAgQMVGhqqxo0b6++//87omJFFtKtUUKXyeevazTiNWLLH3uEAAGAX1apV07p161SgQAHNmDFDCxYsUFhYmLZv364aNWrYOzwAAIAMk6qeUkWLFlWVKlX07bffqkGDBnJ2dk5S58iRI5o6daratWund999V926dUv3YJG1ODpYNLh5KbUeu1YzNh1X+ycLqnzBnPYOCwCATFeuXDlNmTLF3mEAAABkqlQlpZYtW6bixYvfs05wcLD69eunvn376ujRo+kSHLK+CsE59WyF/Jq1+bgGzNulud2rydHBYu+wAADIVAkJCdq/f7/Onj2rhATbB4DUrFnTTlEBAABkrFQlpe6XkLqTs7OzChcu/MABIfv5X8NwLd15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uNDhmsrLy0vjx48vcyo8/pz4etYsfD1rFr6eNcuV+vWMj4+v8HK9FStWlJl277336t57761wfRaLRS+++KJefPHFqhqiy7jqe8IVfa+Unq7qy7bWvJ6u6su21ryerur7ZzzusRjV6XOMAQAAAAAAcEVwO38JAAAAAAAAULUIpQAAAAAAAGA6QikAAAAAAACYjlDqT2DGjBmKioqSt7e3OnfurHXr1rl6SLhE33//ve68806Fh4fLYrFo8eLFrh4SLkNiYqKuu+46+fv7q379+urdu7d27Njh6mHhEr3zzjtq27atAgICFBAQoJiYGH311VeuHhaqwOTJk2WxWDRq1ChXDwXVgNnHVa742e+Kn0/VYR9q1nt9woQJslgsDo+WLVs6tackHThwQH//+99Vp04d+fj4qE2bNvr555+d2jMqKqrMtlosFo0YMcJpPUtKSjR27Fg1btxYPj4+atq0qSZOnFjmg6qq2smTJzVq1Cg1atRIPj4+6tKli9avX1+lPc63PzAMQ+PGjVNYWJh8fHwUGxurnTt3OrXnZ599pu7du6tOnTqyWCxKSUm5rH4X0reoqEhPP/202rRpI19fX4WHh2vQoEE6ePCg03pKpe/dli1bytfXV7Vr11ZsbKzWrl3r1J5ne/jhh2WxWDRt2rTL6nkhfYcMGVLmfdujR4/L7usMhFLV3MKFC5WQkKDx48drw4YNio6OVlxcnA4fPuzqoeES5ObmKjo6utp+yiMuzsqVKzVixAitWbNGy5cvV1FRkbp3767c3FxXDw2XoGHDhpo8ebKSk5P1888/67bbblOvXr20detWVw8Nl2H9+vX617/+pbZt27p6KKgGXHFc5Yqf/a74+eTqfajZ7/Wrr75ahw4dsj9WrVrl1H7Hjx/XDTfcIE9PT3311Vf69ddf9eqrr6p27dpO7bt+/XqH7Vy+fLkkVfppnZdrypQpeuedd/TWW29p27ZtmjJliqZOnao333zTaT0l6YEHHtDy5cv10UcfafPmzerevbtiY2N14MCBKutxvv3B1KlTNX36dM2cOVNr166Vr6+v4uLilJ+f77Seubm5uvHGGzVlypRL7nGxffPy8rRhwwaNHTtWGzZs0GeffaYdO3borrvuclpPSbrqqqv01ltvafPmzVq1apWioqLUvXt3HTlyxGk9T1u0aJHWrFmj8PDwS+51sX179Ojh8P5dsGBBlfSucgaqtU6dOhkjRoywvy4pKTHCw8ONxMREF44KVUGSsWjRIlcPA1Xo8OHDhiRj5cqVrh4Kqkjt2rWN9957z9XDwCU6efKk0bx5c2P58uXGzTffbIwcOdLVQ4KLufq4ylU/+13188msfajZ7/Xx48cb0dHRTu1xrqefftq48cYbTe1ZnpEjRxpNmzY1bDab03rccccdxv333+8w7Z577jEGDBjgtJ55eXmGu7u7sWTJEofp1157rfHcc885pee5+wObzWaEhoYaL7/8sn1aVlaW4eXlZSxYsMApPc+2Z88eQ5KxcePGKul1oX1PW7dunSHJ2Ldvn2k9T5w4YUgyvvnmG6f23L9/v9GgQQNjy5YtRqNGjYzXX3+9SvpV1nfw4MFGr169qrSPs3CmVDVWWFio5ORkxcbG2qe5ubkpNjZWq1evduHIAJTnxIkTkqTg4GAXjwSXq6SkRB9//LFyc3MVExPj6uHgEo0YMUJ33HGHw89RXLmu5OMqs38+mb0PdcV7fefOnQoPD1eTJk00YMAApaamOrXfF198oY4dO+ree+9V/fr11b59e7377rtO7XmuwsJC/fvf/9b9998vi8XitD5dunRRUlKSfvvtN0nSL7/8olWrVqlnz55O61lcXKySkhJ5e3s7TPfx8XH6WXCn7dmzR+np6Q7fx4GBgercuXON30dJpfspi8WioKAgU/oVFhZq1qxZCgwMVHR0tNP62Gw2DRw4UKNHj9bVV1/ttD7lWbFiherXr68WLVrokUce0bFjx0ztf6E8XD0AVOzo0aMqKSlRSEiIw/SQkBBt377dRaMCUB6bzaZRo0bphhtu0DXXXOPq4eASbd68WTExMcrPz5efn58WLVqk1q1bu3pYuAQff/yxNmzYUOX3A8Gf15V6XGXmzydX7ENd8V7v3LmzPvzwQ7Vo0UKHDh3SCy+8oK5du2rLli3y9/d3Ss/ff/9d77zzjhISEvTss89q/fr1euyxx2S1WjV48GCn9DzX4sWLlZWVpSFDhji1zzPPPKPs7Gy1bNlS7u7uKikp0aRJkzRgwACn9fT391dMTIwmTpyoVq1aKSQkRAsWLNDq1avVrFkzp/U9W3p6uiSVu486Pa+mys/P19NPP6377rtPAQEBTu21ZMkS9e/fX3l5eQoLC9Py5ctVt25dp/WbMmWKPDw89NhjjzmtR3l69Oihe+65R40bN9bu3bv17LPPqmfPnlq9erXc3d1NHcv5EEoBQBUYMWKEtmzZYtpf0+AcLVq0UEpKik6cOKH//Oc/Gjx4sFauXEkw9SeTlpamkSNHavny5WX+6g1cacz8+WT2PtRV7/Wzz9hp27atOnfurEaNGumTTz7RsGHDnNLTZrOpY8eOeumllyRJ7du315YtWzRz5kzTQqn3339fPXv2rLJ74lTkk08+0bx58zR//nxdffXVSklJ0ahRoxQeHu7Ubf3oo490//33q0GDBnJ3d9e1116r++67T8nJyU7ridKbnvft21eGYeidd95xer9bb71VKSkpOnr0qN5991317dtXa9euVf369au8V3Jyst544w1t2LDBqWcXlqd///72523atFHbtm3VtGlTrVixQt26dTN1LOfD5XvVWN26deXu7q6MjAyH6RkZGQoNDXXRqACcKz4+XkuWLNF3332nhg0buno4uAxWq1XNmjVThw4dlJiYqOjoaL3xxhuuHhYuUnJysg4fPqxrr71WHh4e8vDw0MqVKzV9+nR5eHiopKTE1UOEC1yJx1Vm/3wyex9aXd7rQUFBuuqqq7Rr1y6n9QgLCysT7rVq1crplw2etm/fPn3zzTd64IEHnN5r9OjReuaZZ9S/f3+1adNGAwcO1OOPP67ExESn9m3atKlWrlypnJwcpaWlad26dSoqKlKTJk2c2ve00/uhK2kfdTqQ2rdvn5YvX+70s6QkydfXV82aNdP111+v999/Xx4eHnr//fed0uuHH37Q4cOHFRkZad9H7du3T0888YSioqKc0rMiTZo0Ud26dZ26n7pUhFLVmNVqVYcOHZSUlGSfZrPZlJSUxD1OgGrAMAzFx8dr0aJF+vbbb9W4cWNXDwlVzGazqaCgwNXDwEXq1q2bNm/erJSUFPujY8eOGjBggFJSUqrdaeswx5V0XFVdfj45ex9aXd7rOTk52r17t8LCwpzW44YbbtCOHTscpv32229q1KiR03qebfbs2apfv77uuOMOp/fKy8uTm5vjr6nu7u6y2WxO7y2VhhZhYWE6fvy4li1bpl69epnSt3HjxgoNDXXYR2VnZ2vt2rU1bh8lnQmkdu7cqW+++UZ16tRxyTicuZ8aOHCgNm3a5LCPCg8P1+jRo7Vs2TKn9KzI/v37dezYMafupy4Vl+9VcwkJCRo8eLA6duyoTp06adq0acrNzdXQoUNdPTRcgpycHId0es+ePUpJSVFwcLAiIyNdODJcihEjRmj+/Pn6/PPP5e/vb7/ePzAwUD4+Pi4eHS7WmDFj1LNnT0VGRurkyZOaP3++VqxYYfpBAy6fv79/mXvn+Pr6qk6dOtzz7QrniuMqV/zsd8XPJ1fsQ131Xn/yySd15513qlGjRjp48KDGjx8vd3d33XfffU7r+fjjj6tLly566aWX1LdvX61bt06zZs3SrFmznNbzNJvNptmzZ2vw4MHy8HD+r4933nmnJk2apMjISF199dXauHGjXnvtNd1///1O7bts2TIZhqEWLVpo165dGj16tFq2bFml+4fz7Q9GjRqlf/7zn2revLkaN26ssWPHKjw8XL1793Zaz8zMTKWmpurgwYOSZA8/Q0NDL+sMrcr6hoWF6a9//as2bNigJUuWqKSkxL6fCg4OltVqrfKederU0aRJk3TXXXcpLCxMR48e1YwZM3TgwAHde++9TtnOyMjIMmGbp6enQkND1aJFi0vueb6+wcHBeuGFF9SnTx+FhoZq9+7deuqpp9SsWTPFxcVdVl+ncO2H/+FCvPnmm0ZkZKRhtVqNTp06GWvWrHH1kHCJvvvuO0NSmcfgwYNdPTRcgvK+lpKM2bNnu3pouAT333+/0ahRI8NqtRr16tUzunXrZnz99deuHhaqiBkfE48/B7OPq1zxs98VP5+qyz7UjPd6v379jLCwMMNqtRoNGjQw+vXrZ+zatcupPQ3DMP773/8a11xzjeHl5WW0bNnSmDVrltN7GoZhLFu2zJBk7Nixw5R+2dnZxsiRI43IyEjD29vbaNKkifHcc88ZBQUFTu27cOFCo0mTJobVajVCQ0ONESNGGFlZWVXa43z7A5vNZowdO9YICQkxvLy8jG7dul32//v5es6ePbvc+ePHj3da3z179lS4n/ruu++c0vOPP/4w7r77biM8PNywWq1GWFiYcddddxnr1q1z2naWp1GjRsbrr79+WT3P1zcvL8/o3r27Ua9ePcPT09No1KiRMXz4cCM9Pf2y+zqDxTAM4/KjLQAAAAAAAODCcU8pAAAAAAAAmI5QCgAAAAAAAKYjlAIAAAAAAIDpCKUAAAAAAABgOkIpAAAAAAAAmI5QCgAAAAAAAKYjlAIAAAAAAIDpCKUAAAAAAABgOkIpAChHVFSUpk2b5uphXJAhQ4aod+/erh4GAAD4k9i7d68sFotSUlIqrFmxYoUsFouysrIuq1dVrae69AFQtQilALjUuYHKLbfcolGjRpnW/8MPP1RQUFCZ6evXr9eDDz7o1N4cPAEAgEuVlpam+++/X+Hh4bJarWrUqJFGjhypY8eOVcn6u3TpokOHDikwMFBSxcdMVeHP9MdAAFWLUApAjVRYWHhZy9erV0+1atWqotEAAABUnd9//10dO3bUzp07tWDBAu3atUszZ85UUlKSYmJilJmZWeGyF3qMZLVaFRoaKovFUlXDBoAyCKUAVBtDhgzRypUr9cYbb8hischisWjv3r2SpC1btqhnz57y8/NTSEiIBg4cqKNHj9qXveWWWxQfH69Ro0apbt26iouLkyS99tpratOmjXx9fRUREaFHH31UOTk5kkrPVBo6dKhOnDhh7zdhwgRJZf9il5qaql69esnPz08BAQHq27evMjIy7PMnTJigdu3a6aOPPlJUVJQCAwPVv39/nTx58oK3//RfIJctW6ZWrVrJz89PPXr00KFDh+w1JSUlSkhIUFBQkOrUqaOnnnpKhmE4rMdmsykxMVGNGzeWj4+PoqOj9Z///EeSZBiGYmNjFRcXZ18uMzNTDRs21Lhx4y54rAAAwHVGjBghq9Wqr7/+WjfffLMiIyPVs2dPffPNNzpw4ICee+45e21UVJQmTpyoQYMGKSAgwOFM8O3bt6tLly7y9vbWNddco5UrV9rnnX1Gd2XHTB999JE6duwof39/hYaG6m9/+5sOHz58WdtnsVj03nvv6e6771atWrXUvHlzffHFFw41//vf/3TVVVfJx8dHt956q/2Y8WyrVq1S165d5ePjo4iICD322GPKzc2VJM2dO1d+fn7auXOnvf7RRx9Vy5YtlZeXd1njB3DhCKUAVBtvvPGGYmJiNHz4cB06dEiHDh1SRESEsrKydNttt6l9+/b6+eeftXTpUmVkZKhv374Oy8+ZM0dWq1U//vijZs6cKUlyc3PT9OnTtXXrVs2ZM0fffvutnnrqKUmlp6VPmzZNAQEB9n5PPvlkmXHZbDb16tVLmZmZWrlypZYvX67ff/9d/fr1c6jbvXu3Fi9erCVLlmjJkiVauXKlJk+efFH/B3l5eXrllVf00Ucf6fvvv1dqaqrDmF599VV9+OGH+uCDD7Rq1SplZmZq0aJFDutITEzU3LlzNXPmTG3dulWPP/64/v73v2vlypWyWCyaM2eO1q9fr+nTp0uSHn74YTVo0IBQCgCAP4HMzEwtW7ZMjz76qHx8fBzmhYaGasCAAVq4cKHDH61eeeUVRUdHa+PGjRo7dqx9+ujRo/XEE09o48aNiomJ0Z133lnu5X+VHTMVFRVp4sSJ+uWXX7R48WLt3btXQ4YMueztfOGFF9S3b19t2rRJf/nLXzRgwAD7GWBpaWm65557dOeddyolJUUPPPCAnnnmGYfld+/erR49eqhPnz7atGmTFi5cqFWrVik+Pl6SNGjQIPt6i4uL9eWXX+q9997TvHnzOFseMJMBAC40ePBgo1evXvbXN998szFy5EiHmokTJxrdu3d3mJaWlmZIMnbs2GFfrn379uft9+mnnxp16tSxv549e7YRGBhYpq5Ro0bG66+/bhiGYXz99deGu7u7kZqaap+/detWQ5Kxbt06wzAMY/z48UatWrWM7Oxse83o0aONzp07VziW7777zpBkHD9+3D4WScauXbvsNTNmzDBCQkLsr8PCwoypU6faXxcVFRkNGza0/x/m5+cbtWrVMn766SeHXsOGDTPuu+8+++tPPvnE8Pb2Np555hnD19fX+O233yocJwAAqD7WrFljSDIWLVpU7vzXXnvNkGRkZGQYhlF6TNO7d2+Hmj179hiSjMmTJ9unnT6mmDJlimEY5R+nlHfMdK7169cbkoyTJ0+Wu57ynH3cZRiGIcl4/vnn7a9zcnIMScZXX31lGIZhjBkzxmjdurXDOp5++mmHPsOGDTMefPBBh5offvjBcHNzM/744w/DMAwjMzPTaNiwofHII48YISEhxqRJk867fQCqlodLkjAAuAi//PKLvvvuO/n5+ZWZt3v3bl111VWSpA4dOpSZ/8033ygxMVHbt29Xdna2iouLlZ+fr7y8vAv+K9i2bdsUERGhiIgI+7TWrVsrKChI27Zt03XXXSep9PR4f39/e01YWNhFn75eq1YtNW3atNx1nDhxQocOHVLnzp3t8z08PNSxY0f7X0N37dqlvLw83X777Q7rLSwsVPv27e2v7733Xi1atEiTJ0/WO++8o+bNm1/UOAEAgGsZ51y+X5mOHTuWOz0mJsb+/PQxxbZt2y5qHMnJyZowYYJ++eUXHT9+XDabTVLprQ9at259Ues6W9u2be3PfX19FRAQYD8m2rZtm8PxkOS4LVLp8eOmTZs0b948+zTDMGSz2bRnzx61atVKtWvX1vvvv6+4uDh16dKlzNlWAJyPUApAtZeTk6M777xTU6ZMKTMvLCzM/tzX19dh3t69e/V///d/euSRRzRp0iQFBwdr1apVGjZsmAoLC6v81GxPT0+H1xaLxX5gdjnruJiDztP3y/ryyy/VoEEDh3leXl7253l5eUpOTpa7u7vDvRQAAED11qxZM1ksFm3btk133313mfnbtm1T7dq1Va9ePfu0c4+Rqkpubq7i4uIUFxenefPmqV69ekpNTVVcXNxlf+jM5R5X5eTk6KGHHtJjjz1WZl5kZKT9+ffffy93d3cdOnRIubm5Dn9gBOB83FMKQLVitVpVUlLiMO3aa6/V1q1bFRUVpWbNmjk8KjvISk5Ols1m06uvvqrrr79eV111lQ4ePHjefudq1aqV0tLSlJaWZp/266+/Kisr67L+AnixAgMDFRYWprVr19qnFRcXKzk52f66devW8vLyUmpqapn/q7PP9HriiSfk5uamr776StOnT9e3335r2nYAAIBLV6dOHd1+++16++239ccffzjMS09P17x589SvX78L+tS8NWvW2J+fPqZo1apVubXlHTNt375dx44d0+TJk9W1a1e1bNnysm9yfiFatWqldevWOUw7e1uk0uPHX3/9tczxULNmzWS1WiVJP/30k6ZMmaL//ve/8vPzs99vCoB5CKUAVCtRUVFau3at9u7dq6NHj8pms2nEiBHKzMzUfffdp/Xr12v37t1atmyZhg4dWmmg1KxZMxUVFenNN9/U77//ro8++sh+A/Sz++Xk5CgpKUlHjx4t99NWYmNj1aZNGw0YMEAbNmzQunXrNGjQIN18880Vng7vLCNHjtTkyZO1ePFibd++XY8++qiysrLs8/39/fXkk0/q8ccf15w5c7R7925t2LBBb775pubMmSOp9CyqDz74QPPmzdPtt9+u0aNHa/DgwTp+/Lip2wIAAC7NW2+9pYKCAsXFxen7779XWlqali5dqttvv10NGjTQpEmTLmg9M2bM0KJFi7R9+3aNGDFCx48f1/33319ubXnHTJGRkbJarfZjrS+++EITJ06syk0t18MPP6ydO3dq9OjR2rFjh+bPn68PP/zQoebpp5/WTz/9pPj4eKWkpGjnzp36/PPP7cHTyZMnNXDgQD322GPq2bOn5s2bp4ULF9o/sRiAOQilAFQrTz75pNzd3dW6dWv7KeDh4eH68ccfVVJSou7du6tNmzYaNWqUgoKC5OZW8W4sOjpar732mqZMmaJrrrlG8+bNU2JiokNNly5d9PDDD6tfv36qV6+epk6dWmY9FotFn3/+uWrXrq2bbrpJsbGxatKkiRYuXFjl238+TzzxhAYOHKjBgwcrJiZG/v7+ZU7dnzhxosaOHavExES1atVKPXr00JdffqnGjRvryJEjGjZsmCZMmKBrr71WUumn24SEhOjhhx82fXsAAMDFa968uX7++Wc1adJEffv2VdOmTfXggw/q1ltv1erVqxUcHHxB65k8ebImT56s6OhorVq1Sl988YXq1q1bbm15x0z16tXThx9+qE8//VStW7fW5MmT9corr1TlppYrMjJS/+///T8tXrxY0dHRmjlzpl566SWHmrZt22rlypX67bff1LVrV7Vv317jxo1TeHi4pNI/9Pn6+tqXa9OmjV566SU99NBDOnDggNO3AUApi3ExNysBAAAAAAAAqgBnSgEAAAAAAMB0hFIAAAAAAAAwHaEUAAAAAAAATEcoBQAAAAAAANMRSgEAAAAAAMB0hFIAAAAAAAAwHaEUAAAAAAAATEcoBQAAAAAAANMRSgEAAAAAAMB0hFIAAAAAAAAwHaEUAAAAAAAATEcoBQAAAAAAANP9f8y4hJ+PWxD5AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "# Data for energies plot\n", "x1 = range(iterations)\n", "n2_exact = -109.10288938\n", "y1 = [np.min(energies) for energies in e_hist]\n", "yt1 = [float(i) for i in range(-110, -106)]\n", "\n", "# Data for avg spatial orbital occupancy\n", "y2 = avg_occupancy[:num_orbitals] + avg_occupancy[num_orbitals:]\n", "x2 = range(len(y2))\n", "\n", "fig, axs = plt.subplots(1, 2, figsize=(12, 6))\n", "\n", "# Plot energies\n", "axs[0].plot(x1, y1, label=\"Estimated\")\n", "axs[0].set_xticks(x1)\n", "axs[0].set_xticklabels(x1)\n", "axs[0].set_yticks(yt1)\n", "axs[0].set_yticklabels(yt1)\n", "axs[0].axhline(y=n2_exact, color=\"red\", linestyle=\"--\", label=\"Exact\")\n", "axs[0].set_title(\"Approximated Ground State Energy vs SQD Iterations\")\n", "axs[0].set_xlabel(\"Iteration Index\")\n", "axs[0].set_ylabel(\"Energy (Ha)\")\n", "axs[0].legend()\n", "\n", "# Plot orbital occupancy\n", "axs[1].bar(x2, y2, width=0.8)\n", "axs[1].set_xticks(x2)\n", "axs[1].set_xticklabels(x2)\n", "axs[1].set_title(\"Avg Occupancy per Spatial Orbital\")\n", "axs[1].set_xlabel(\"Orbital Index\")\n", "axs[1].set_ylabel(\"Avg Occupancy\")\n", "\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "e8c6d5e4", "metadata": {}, "source": [ "### Orbital optimization\n", "\n", "We now describe how to optimize the orbitals to further improve the quality of the sqd calculation.\n", "\n", "The orbital rotations that are implemented in this package are those described by:\n", "$$\n", "U(\\kappa) = e^{\\sum_{pq, \\sigma} \\kappa_{pq} c^\\dagger_{p\\sigma} c_{q\\sigma}},\n", "$$\n", "where $\\kappa_{p, q} \\in \\mathbb{R}$ and $\\kappa_{p, q} = -\\kappa_{q, p}$. The orbitals are optimized to \n", "minimize the variational energy:\n", "$$\n", "E(\\kappa) = \\langle \\psi | U^\\dagger(\\kappa) H U(\\kappa) |\\psi \\rangle,\n", "$$\n", "with respect to $\\kappa$ using gradient descent with momentum. Recall that \n", "$|\\psi\\rangle$ is spanned in a subspace defined by determinants.\n", "\n", "Since the change of basis alters the Hamiltonian, we allow $|\\psi\\rangle$ to \n", "respond to the change in the Hamiltonian. This is done by performing a number of alternating\n", "self-consistent optimizations of $\\kappa$ and $|\\psi\\rangle$. We recall that the optimal\n", "$|\\psi\\rangle$ is given by the lowest eigenvector of the Hamiltonian projected into the\n", "subspace.\n", "\n", "The ``sqd.fermion.fermion`` module provides the tools to perform this alternating\n", "optimization. In particular, the function ``sqd.fermion.optimize_orbitals()``.\n", "\n", "Some of the arguments that define the optimization are:\n", "\n", "- ``num_iters``: number of self-consistent iterations.\n", "- ``num_steps_grad``: number of gradient step updates performed when optimizing \n", "$\\kappa$ on each self-consistent iteration.\n", "- ``learning_rate``: step-size in the gradient descent optimization of $\\kappa$." ] }, { "cell_type": "markdown", "id": "917cf2d0", "metadata": {}, "source": [ "#### Setup of the subspace\n", "\n", "To define the subspace, we will take the CI strings of the batch with the lowest energy\n", "from the last configuration recovery step. Other strategies may be used, like taking the union \n", "of the CI strings of the batches in the last configuration recovery iteration." ] }, { "cell_type": "code", "execution_count": 5, "id": "2a587030", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Subspace dimension: 213444\n", "Energy of that batch from SQD: -108.99034160888203\n" ] } ], "source": [ "from qiskit_addon_sqd.fermion import bitstring_matrix_to_ci_strs\n", "\n", "best_batch = batches[np.argmin(e_hist[-1])]\n", "ci_strs_up, ci_strs_dn = bitstring_matrix_to_ci_strs(best_batch, open_shell=open_shell)\n", "print(f\"Subspace dimension: {len(ci_strs_up) * len(ci_strs_dn)}\")\n", "print(f\"Energy of that batch from SQD: {e_hist[-1, np.argmin(e_hist[-1])]}\")\n", "\n", "# Union strategy\n", "\n", "# batches_union = np.concatenate((batches[0], batches[1]), axis = 0)\n", "# for i in range(n_batches-2):\n", "# batches_union = np.concatenate((batches_union, batches[ i+ 2]))\n", "# ci_strs_up, ci_strs_dn = bitstring_matrix_to_ci_strs(\n", "# batches_union, open_shell=open_shell\n", "# )\n", "# print (f\"Subspace dimension: {len(ci_strs_up) * len(ci_strs_dn)}\")" ] }, { "cell_type": "code", "execution_count": 6, "id": "b5e56baf", "metadata": {}, "outputs": [], "source": [ "from qiskit_addon_sqd.fermion import optimize_orbitals\n", "\n", "k_flat = (np.random.rand(num_orbitals**2) - 0.5) * 0.01 # initial guess for rotation params\n", "num_iters = 10\n", "num_steps_grad = 10_000 # relatively cheap to execute\n", "learning_rate = 0.1\n", "\n", "e_improved, k_flat, orbital_occupancies = optimize_orbitals(\n", " best_batch,\n", " hcore_rot,\n", " eri_rot,\n", " k_flat,\n", " open_shell=open_shell,\n", " spin_sq=spin_sq,\n", " num_iters=num_iters,\n", " num_steps_grad=num_steps_grad,\n", " learning_rate=learning_rate,\n", " max_davidson=max_davidson_cycles,\n", ")" ] }, { "cell_type": "markdown", "id": "e06f5c28-83d0-4dc2-b2bd-2ec92676745d", "metadata": {}, "source": [ "Here we see that by optimizing rotation parameters for our Hamiltonian, we can improve the result from SQD." ] }, { "cell_type": "code", "execution_count": 7, "id": "78a80e64", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "improved_energy in the new basis: -108.98995482831833\n" ] } ], "source": [ "print(f\"improved_energy in the new basis: {e_improved + nuclear_repulsion_energy}\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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 }