diff --git a/example/QAOAs_advantages/QAOAs_advantages.ipynb b/example/QAOAs_advantages/QAOAs_advantages.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..deaf1898213261880f7660c1f83d46975543ccb2
--- /dev/null
+++ b/example/QAOAs_advantages/QAOAs_advantages.ipynb
@@ -0,0 +1,1242 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "7f3912d7-38a3-491a-a2dd-4c58768437e8",
+ "metadata": {},
+ "source": [
+ "【开源实习】QAOA量子优势的衡量\n",
+ "\n",
+ "1 任务背景\n",
+ "\n",
+ "QAOA是常用的量子近似优化算法,它可以看作是在经典平均场算法上添加量子涨落。而为了衡量QAOA在哪些问题上能展现量子优势,可以使用《Mean-Field Approximate Optimization Algorithm》文中提出的Lyapunov指数(文中式70)进行衡量。用随机SK模型作为例子,用Lyapunov指数来衡量QAOA的量子优势,最终复现FIG.7的四幅图\n",
+ "\n",
+ "2 任务需求及实现方案\n",
+ "\n",
+ "基于mindquantum的Hamiltonian构造哈密顿量来求解QAOA的基态能量E0。Mean-Field AOA算法的能量和Lyapunov指数只需通过矩阵运算即可得到 最终用matplotlib输出关于时间的函数E(t)即可\n",
+ "\n",
+ "3 算法实现及效果\n",
+ "\n",
+ "下面基于mindquantum来实现该算法"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "cd9d8d1c-2c28-4b1b-9141-1723ae43d42a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "from scipy.linalg import expm, eigvals\n",
+ "from mindquantum.core.gates import X\n",
+ "import matplotlib.pyplot as plt\n",
+ "from mindquantum import Hamiltonian\n",
+ "from mindquantum.core.operators import QubitOperator\n",
+ "from scipy.sparse.linalg import eigsh"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7bbe149f-898b-47c3-a0e4-fd89b86f8672",
+ "metadata": {},
+ "source": [
+ "这是两个输出最终结果图的函数\n",
+ "\n",
+ "第一个函数输出的是FIG7.3和FIG7.4,横坐标是归一化的时间s,纵坐标是Lyapunov指数,最终输出了Mean-field AOA算法的前三个Lyapunov指数\n",
+ "\n",
+ "第二个函数输出的是FIG7.1和FIG7.2,横坐标是归一化的时间,纵坐标是E-E0,QAOA算法的20条蓝线输出的是QAOA算法前第2-21个能量E-E0 红线输出的是Mean-field AOA算法的能量E-E0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "d5915105-3369-4234-b10f-89dcb1881b93",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def draw_graph(lamda_first, lamda_second, lamda_third):\n",
+ " \"\"\"\n",
+ " Show the top three lyapunov exponents over time.\n",
+ "\n",
+ " Args:\n",
+ " lamda_first: The largest Lyapunov exponents.\n",
+ " lamda_second: The second largest Lyapunov exponents.\n",
+ " lamda_third: The third largest Lyapunov exponents.\n",
+ " \"\"\"\n",
+ " x_label = [i / len(lamda_first) for i in range(len(lamda_first))]\n",
+ " plt.figure(figsize=(8, 8))\n",
+ " plt.plot(x_label, lamda_first, label=\"first\", color=\"red\")\n",
+ " plt.plot(x_label, lamda_second, label=\"second\", color=\"gray\")\n",
+ " plt.plot(x_label, lamda_third, label=\"third\", color=\"gray\")\n",
+ " plt.xlim(0, 1)\n",
+ " plt.ylim(0, 1)\n",
+ " plt.xlabel(\"s\")\n",
+ " plt.ylabel(\"λ\")\n",
+ " plt.show()\n",
+ "\n",
+ "\n",
+ "def draw_graph1(eig_all, E_meanfield):\n",
+ " \"\"\"\n",
+ " Show the top twenty exact eigen spectrum and the energy returned by the mean-field AOA over time.\n",
+ "\n",
+ " Args:\n",
+ " eig_all: the exact eigen spectrum.\n",
+ " E_meanfield: the energy returned by the mean-field AOA.\n",
+ " \"\"\"\n",
+ " x_label = [i / eig_all.shape[0] for i in range(eig_all.shape[0])]\n",
+ " plt.figure(figsize=(8, 8))\n",
+ " for i in range(20):\n",
+ " plt.plot(x_label, eig_all[:, i + 1], color=\"blue\")\n",
+ " plt.plot(x_label, E_meanfield, color=\"red\", linestyle=\"--\")\n",
+ " plt.xlim(0, 1)\n",
+ " plt.ylim(0, 4)\n",
+ " plt.xlabel(\"s\")\n",
+ " plt.ylabel(\"E-E0\")\n",
+ " plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "0a6c2fbf-d5bd-4f73-ae62-10d14df62ad6",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "class Problem:\n",
+ " def __init__(self, num_layers, couplings, driver=X):\n",
+ " self.num_qubits = len(couplings) - 1\n",
+ " self.num_layers = num_layers\n",
+ " self.local_fields = couplings[:-1, -1]\n",
+ " self.couplings = couplings[:-1, :-1]\n",
+ " self.driver = driver"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7bcc315c-c621-497e-8f7d-eefc63926809",
+ "metadata": {},
+ "source": [
+ "这个函数实现了量子涨落矩阵的计算"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "bb3e31fa-4975-41d7-818d-a8d78fdcccb8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def fluctuation_matrix(problem, S, solution, beta, gamma):\n",
+ " \"\"\"\n",
+ " Returns the Gaussian fluctuation matrix for a given point along the mean-field trajectories.\n",
+ "\n",
+ " Args:\n",
+ " problem (Problem)\n",
+ " S (np.ndarray), the initial vector of all spin vectors.\n",
+ " solution (List), the solution vector.\n",
+ " beta (List), the vector of QAOA driver parameters.\n",
+ " gamma (List), the vector of QAOA problem parameters.\n",
+ "\n",
+ " Returns:\n",
+ " matrix, the fluctuation_matrix L.\n",
+ " \"\"\"\n",
+ " num_qubits = problem.num_qubits\n",
+ " local_fields = problem.local_fields\n",
+ " couplings = problem.couplings\n",
+ " A = np.zeros((num_qubits, num_qubits), dtype=complex)\n",
+ " B = np.zeros((num_qubits, num_qubits), dtype=complex)\n",
+ " t_3 = np.diag(np.concatenate([np.ones(num_qubits), -np.ones(num_qubits)]))\n",
+ "\n",
+ " def n_ij_pm(idx, pm):\n",
+ " return solution[idx] * S[idx, 0] + pm * 1j * S[idx, 1]\n",
+ "\n",
+ " for i in range(num_qubits):\n",
+ " A[i, i] = (\n",
+ " -beta * S[i, 0] / (1 + solution[i] * S[i, 2])\n",
+ " - gamma\n",
+ " * solution[i]\n",
+ " * magnetization(S, local_fields, couplings, num_qubits)[i]\n",
+ " )\n",
+ " for j in range(i + 1, num_qubits):\n",
+ " A[i, j] = gamma * couplings[i, j] * n_ij_pm(i, 1) * n_ij_pm(j, -1)\n",
+ " B[i, j] = gamma * couplings[i, j] * n_ij_pm(i, 1) * n_ij_pm(j, 1)\n",
+ " A += np.conj(A).T\n",
+ " B += B.T\n",
+ " top_block = np.hstack((A, B))\n",
+ " bottom_block = np.hstack((B.conj().T, A.conj()))\n",
+ " L = t_3 @ np.vstack((top_block, bottom_block))\n",
+ " return L"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9dce6c07-d77c-47d0-83b0-9c792d38eb1e",
+ "metadata": {},
+ "source": [
+ "这个函数利用上面的量子涨落矩阵来计算出lyapunov指数"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "f6978af5-a220-4bc4-9e30-5aad170aae1c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def evolve_fluctuations(problem, t, beta, gamma):\n",
+ " \"\"\"\n",
+ " Calculate the evolution of Gaussian fluctuations over time.\n",
+ "\n",
+ " Args:\n",
+ " problem(Problem)\n",
+ " t (float), the time-step of the considered annealing schedule.\n",
+ " beta (List), the vector of QAOA driver parameters.\n",
+ " gamma (List), the vector of QAOA problem parameters.\n",
+ "\n",
+ " Returns:\n",
+ " The Lyapunov exponents characterizing the dynamics of the Gaussian fluctuations.\n",
+ " \"\"\"\n",
+ " num_qubits = problem.num_qubits\n",
+ " local_fields = problem.local_fields\n",
+ " couplings = problem.couplings\n",
+ " num_layers = problem.num_layers\n",
+ " Lyapunov_exponent = np.zeros((num_layers, 2 * num_qubits))\n",
+ " S = np.zeros((num_layers + 1, num_qubits, 3), dtype=np.float64)\n",
+ " S[0, :, :] = np.array([[1.0, 0.0, 0.0] for _ in range(num_qubits)])\n",
+ " S = evolve(S, local_fields, couplings, beta, gamma)\n",
+ " solutions = mean_field_solution(S[-1, :, :])\n",
+ " m = np.eye(2 * num_qubits, dtype=np.complex128)\n",
+ " for k in range(len(gamma)):\n",
+ " L = fluctuation_matrix(problem, S[k, :, :], solutions, beta[k], gamma[k])\n",
+ " m = expm(-1j * t * L) @ m\n",
+ " lyapunov_exponential_eig = eigvals(m @ m.conj().T)\n",
+ " Lyapunov_exponent[k] = np.sort(np.real(np.log(lyapunov_exponential_eig) / 2))\n",
+ " return Lyapunov_exponent"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "20fcba55-374b-46fc-8ba3-65ffa1463d92",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def magnetization(S, h, J, num_qubits):\n",
+ " \"\"\"Returns the magnetization vector belonging to the input 'S'.\"\"\"\n",
+ " return np.array(h) + np.array(\n",
+ " [sum(J[i, j] * S[j, 2] for j in range(num_qubits)) for i in range(num_qubits)]\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "3bea2f31-1705-4d14-b26b-0fd40ff64327",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def V_P(alpha):\n",
+ " \"\"\"Returns the rotation matrix resulting from the problem Hamiltonian.\"\"\"\n",
+ " return np.array(\n",
+ " [\n",
+ " [np.cos(alpha), -np.sin(alpha), 0],\n",
+ " [np.sin(alpha), np.cos(alpha), 0],\n",
+ " [0, 0, 1],\n",
+ " ]\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "391beb94-5f8b-49f5-8a5e-8df3b4d5294c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def V_D(alpha):\n",
+ " \"\"\"Returns the rotation matrix resulting from the driver Hamiltonian.\"\"\"\n",
+ " return np.array(\n",
+ " [\n",
+ " [1, 0, 0],\n",
+ " [0, np.cos(alpha), -np.sin(alpha)],\n",
+ " [0, np.sin(alpha), np.cos(alpha)],\n",
+ " ]\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7475058d-9209-419e-9b62-12c96d8ad2f7",
+ "metadata": {},
+ "source": [
+ "这个函数是用来计算在演化过程中的所有量子的状态"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "16c608e7-c129-4f13-a901-749c9ec0369b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def evolve(S, h, J, beta, gamma):\n",
+ " \"\"\"\n",
+ " Returns the full history of the vector of spin vectors.\n",
+ "\n",
+ " Args:\n",
+ " S (np.ndarray), the initial vector of all spin vectors.\n",
+ " h (list), the vector of local magnetic fields of the problem Hamiltonian.\n",
+ " J (np.ndarray), The coupling matrix of the problem Hamiltonian.\n",
+ " beta (List), the vector of QAOA driver parameters.\n",
+ " gamma (List), the vector of QAOA problem parameters.\n",
+ "\n",
+ " Returns:\n",
+ " the full history of the vector of all spin vectors after a full mean-field AOA evolution.\n",
+ " \"\"\"\n",
+ " for k in range(len(beta)):\n",
+ " current_S = S[k, :, :]\n",
+ " m = magnetization(current_S, h, J, len(h))\n",
+ " next_S = []\n",
+ " for i in range(len(h)):\n",
+ " theta = -2 * gamma[k] * m[i]\n",
+ " phi = -2 * beta[k]\n",
+ " v_P = V_P(theta)\n",
+ " v_D = V_D(phi)\n",
+ " new_spin = np.dot(v_D, np.dot(v_P, S[k, i, :]))\n",
+ " next_S.append(new_spin.tolist())\n",
+ " S[k + 1, :, :] = next_S\n",
+ " return S"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "bf6421c3-12dd-45c3-9547-057cddc7ac57",
+ "metadata": {},
+ "source": [
+ "这个函数是用来计算问题的能量"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "3a5d877d-c8e1-4718-903a-96f170c2fad5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def expectation(S, h, J):\n",
+ " \"\"\"\n",
+ " Args:\n",
+ " S (np.ndarray), a vector of all spin vectors.\n",
+ " h (list), the vector of local magnetic fields of the problem Hamiltonian.\n",
+ " J (np.ndarray), The coupling matrix of the problem Hamiltonian.\n",
+ "\n",
+ " return:\n",
+ " result (float), The energy expectation value corresponding to the supplied spin configuration.\n",
+ " \"\"\"\n",
+ " S_z = np.array([S[i][2] for i in range(S.shape[0])])\n",
+ " result = -(\n",
+ " (np.transpose(h) + 0.5 * np.transpose(S_z) @ J[: len(S), : len(S)]) @ S_z\n",
+ " )\n",
+ " return result"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "04feaed7-c499-44e5-b464-2922cb491e1a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def mean_field_solution(S):\n",
+ " \"\"\"Return the solution bitstring computed from a given vector of spin vectors\"\"\"\n",
+ " S_z = [s[2] for s in S]\n",
+ " return np.sign(S_z)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dfe6966e-198b-4d9a-b39d-c2cfe614875a",
+ "metadata": {},
+ "source": [
+ "这个函数是用来计算问题哈密顿量"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "61fd24d9-3b03-4726-a99a-16a6e4af0048",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def problem_hamiltonian(problem):\n",
+ " \"\"\"Returns the problem Hamiltonian corresponding to 'problem'.\"\"\"\n",
+ " num_qubits = problem.num_qubits\n",
+ " local_fields = problem.local_fields\n",
+ " couplings = problem.couplings\n",
+ " H = QubitOperator()\n",
+ " for i in range(num_qubits):\n",
+ " H += QubitOperator(f\"Z{i}\", coefficient=local_fields[i])\n",
+ " for i in range(num_qubits):\n",
+ " for j in range(i + 1, num_qubits):\n",
+ " H += QubitOperator(f\"Z{i} Z{j}\", coefficient=couplings[i][j])\n",
+ " return H"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "45204ada-d15e-4ed3-8f05-98170b6a1458",
+ "metadata": {},
+ "source": [
+ "这个函数是用来计算驱动哈密顿量"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "80981fe1-7678-4a9b-a461-f36e7d6bb4d4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def driver_hamiltonian(problem):\n",
+ " \"\"\"Returns the driver Hamiltonian corresponding to 'problem'.\"\"\"\n",
+ " num_qubits = problem.num_qubits\n",
+ " H = QubitOperator()\n",
+ " for i in range(num_qubits):\n",
+ " H += QubitOperator(f\"X{i}\", coefficient=1)\n",
+ " return H"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "bc3e26f7-7fdd-4068-9b29-eb54e3fac5c2",
+ "metadata": {},
+ "source": [
+ "4 输出结果\n",
+ "\n",
+ "J矩阵是原论文中的标记为\"easy\"的例子,来实现第一幅图的复现\n",
+ "\n",
+ "步骤是:\n",
+ "\n",
+ "1.初始化全体旋转量子的坐标为[1,0,0]\n",
+ "\n",
+ "2.进行演化迭代,得到每一次迭代返回的量子状态\n",
+ "\n",
+ "3.计算问题层能量(包括局域场和耦合矩阵)\n",
+ "\n",
+ "4.计算驱动层的能量(只关于量子的x分量和)\n",
+ "\n",
+ "5.计算总能量E(t)=-2*(γ(t)*问题层能量+β(t)*驱动层能量) 其中γ(t)是从0到0.5的线性函数 β(t)是从0.5到0的线性函数\n",
+ "\n",
+ "横坐标是归一化的时间,纵坐标是E-E0,QAOA算法的20条蓝线输出的是QAOA算法前第2-21个能量E-E0,红线输出的是Mean-field AOA算法的能量E-E0,其中E0始终为QAOA的第一能量"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "ce239652-ecd7-4c83-b834-81fc07a124dc",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def fig7_1(t=0.5):\n",
+ " \"\"\"Use the J in the 'easy' instance\"\"\"\n",
+ " num_layers = 2000\n",
+ " J = np.array(\n",
+ " [\n",
+ " [\n",
+ " 0.0,\n",
+ " 0.42132292,\n",
+ " -0.25571582,\n",
+ " -0.16267926,\n",
+ " -0.77219702,\n",
+ " 0.06310006,\n",
+ " 0.03975859,\n",
+ " 0.14472543,\n",
+ " 0.52842128,\n",
+ " 0.2399146,\n",
+ " -0.5426827,\n",
+ " ],\n",
+ " [\n",
+ " 0.42132292,\n",
+ " 0.0,\n",
+ " -0.04705895,\n",
+ " -0.28587394,\n",
+ " 0.50008779,\n",
+ " 0.19371417,\n",
+ " 0.43070882,\n",
+ " 0.21708425,\n",
+ " -0.09432905,\n",
+ " -0.07647162,\n",
+ " 0.0410539,\n",
+ " ],\n",
+ " [\n",
+ " -0.25571582,\n",
+ " -0.04705895,\n",
+ " 0.0,\n",
+ " 0.04119337,\n",
+ " -0.03143317,\n",
+ " -0.69452537,\n",
+ " -0.20650927,\n",
+ " 0.03894435,\n",
+ " -0.03114271,\n",
+ " 0.31022423,\n",
+ " -0.25880392,\n",
+ " ],\n",
+ " [\n",
+ " -0.16267926,\n",
+ " -0.28587394,\n",
+ " 0.04119337,\n",
+ " 0.0,\n",
+ " 0.46391918,\n",
+ " -0.46363437,\n",
+ " -0.02663793,\n",
+ " 0.05954145,\n",
+ " -0.35251299,\n",
+ " -0.13726513,\n",
+ " -0.07634969,\n",
+ " ],\n",
+ " [\n",
+ " -0.77219702,\n",
+ " 0.50008779,\n",
+ " -0.03143317,\n",
+ " 0.46391918,\n",
+ " 0.0,\n",
+ " 0.07847923,\n",
+ " 0.18372387,\n",
+ " -0.47860755,\n",
+ " -0.24819476,\n",
+ " 0.27132491,\n",
+ " -0.22750873,\n",
+ " ],\n",
+ " [\n",
+ " 0.06310006,\n",
+ " 0.19371417,\n",
+ " -0.69452537,\n",
+ " -0.46363437,\n",
+ " 0.07847923,\n",
+ " 0.0,\n",
+ " 0.01450035,\n",
+ " 0.29893034,\n",
+ " 0.12659777,\n",
+ " -0.20628129,\n",
+ " -0.17935806,\n",
+ " ],\n",
+ " [\n",
+ " 0.03975859,\n",
+ " 0.43070882,\n",
+ " -0.20650927,\n",
+ " -0.02663793,\n",
+ " 0.18372387,\n",
+ " 0.01450035,\n",
+ " 0.0,\n",
+ " 0.51434209,\n",
+ " -0.13210798,\n",
+ " 0.28592817,\n",
+ " 0.1470975,\n",
+ " ],\n",
+ " [\n",
+ " 0.14472543,\n",
+ " 0.21708425,\n",
+ " 0.03894435,\n",
+ " 0.05954145,\n",
+ " -0.47860755,\n",
+ " 0.29893034,\n",
+ " 0.51434209,\n",
+ " 0.0,\n",
+ " -0.250012,\n",
+ " 0.0366756,\n",
+ " -0.59322573,\n",
+ " ],\n",
+ " [\n",
+ " 0.52842128,\n",
+ " -0.09432905,\n",
+ " -0.03114271,\n",
+ " -0.35251299,\n",
+ " -0.24819476,\n",
+ " 0.12659777,\n",
+ " -0.13210798,\n",
+ " -0.250012,\n",
+ " 0.0,\n",
+ " 0.26835453,\n",
+ " 0.00088238,\n",
+ " ],\n",
+ " [\n",
+ " 0.2399146,\n",
+ " -0.07647162,\n",
+ " 0.31022423,\n",
+ " -0.13726513,\n",
+ " 0.27132491,\n",
+ " -0.20628129,\n",
+ " 0.28592817,\n",
+ " 0.0366756,\n",
+ " 0.26835453,\n",
+ " 0.0,\n",
+ " -0.48081058,\n",
+ " ],\n",
+ " [\n",
+ " -0.5426827,\n",
+ " 0.0410539,\n",
+ " -0.25880392,\n",
+ " -0.07634969,\n",
+ " -0.22750873,\n",
+ " -0.17935806,\n",
+ " 0.1470975,\n",
+ " -0.59322573,\n",
+ " 0.00088238,\n",
+ " -0.48081058,\n",
+ " 0.0,\n",
+ " ],\n",
+ " ]\n",
+ " )\n",
+ " problem = Problem(num_layers=num_layers, couplings=J)\n",
+ " local_fields = problem.local_fields\n",
+ " couplings = J\n",
+ " num_qubits = problem.num_qubits\n",
+ " beta = [t * (1 - i / num_layers) for i in range(num_layers)]\n",
+ " gamma = [t * (i + 1) / num_layers for i in range(num_layers)]\n",
+ " S = np.zeros((num_layers + 1, num_qubits, 3), dtype=np.float64)\n",
+ " S[0, :, :] = np.array([[1, 0, 0] for _ in range(num_qubits)])\n",
+ " S = evolve(S, local_fields, couplings, beta, gamma)\n",
+ " Ep = [expectation(S[i], local_fields, J) for i in range(num_layers)]\n",
+ " Ed = [-sum([S[i, j, 0] for j in range(num_qubits)]) for i in range(num_layers)]\n",
+ " hamiltonian = [\n",
+ " Hamiltonian(\n",
+ " -2 * gamma[i] * problem_hamiltonian(problem)\n",
+ " - 2 * beta[i] * driver_hamiltonian(problem)\n",
+ " )\n",
+ " for i in range(len(beta))\n",
+ " ]\n",
+ " eig_all = np.zeros((num_layers, 21))\n",
+ " for i in range(len(gamma)):\n",
+ " eigenvalues, _ = eigsh(hamiltonian[i].sparse_matrix, k=21, which=\"SA\")\n",
+ " E0 = eigenvalues[0]\n",
+ " eig_all[i, 0] = E0\n",
+ " for j in range(20):\n",
+ " eig_all[i, j + 1] = eigenvalues[j + 1] - E0\n",
+ " E0 = eig_all[:, 0]\n",
+ " E_meanfield = [2 * gamma[i] * Ep[i] + 2 * beta[i] * Ed[i] for i in range(len(Ep))]\n",
+ " draw_graph1(eig_all, E_meanfield - E0)\n",
+ "\n",
+ "\n",
+ "# t = 0.5\n",
+ "# fig7_1(t)\n",
+ "# remove the annotations to present FIG 7.1"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "488ae4e1-a8fb-4843-9c2a-b2a67cb0ae29",
+ "metadata": {},
+ "source": [
+ "J矩阵是原论文中的标记为\"hard\"的例子,来实现第一幅图的复现\n",
+ "\n",
+ "步骤:\n",
+ "\n",
+ "1.初始化全体旋转量子的坐标为[1,0,0]\n",
+ "\n",
+ "2.进行演化迭代,得到每一次迭代返回的量子状态\n",
+ "\n",
+ "3.计算问题层能量(包括局域场和耦合矩阵)\n",
+ "\n",
+ "4.计算驱动层的能量(只关于量子的x分量和)\n",
+ "\n",
+ "5.计算总能量E(t)=-2*(γ(t)*问题层能量+β(t)*驱动层能量) 其中γ(t)是从0到0.5的线性函数 β(t)是从0.5到0的线性函数\n",
+ "\n",
+ "横坐标是归一化的时间,纵坐标是E-E0,QAOA算法的20条蓝线输出的是QAOA算法前第2-21个能量E-E0 红线输出的是Mean-field AOA算法的能量E-E0,其中E0始终为QAOA的第一能量"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "6a23aebc-3962-4387-b205-e307c6908085",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def fig7_2(t=0.5):\n",
+ " \"\"\"Use the J in the 'hard' instance\"\"\"\n",
+ " num_layers = 5000\n",
+ " J = np.array(\n",
+ " [\n",
+ " [\n",
+ " 0.0,\n",
+ " 0.20437418,\n",
+ " 0.18668785,\n",
+ " -0.42714492,\n",
+ " -0.49929211,\n",
+ " -0.05025879,\n",
+ " -0.08892105,\n",
+ " -0.39034422,\n",
+ " 0.45183176,\n",
+ " 0.13354867,\n",
+ " 0.15657114,\n",
+ " ],\n",
+ " [\n",
+ " 0.20437418,\n",
+ " 0.0,\n",
+ " 0.47448795,\n",
+ " -0.11285034,\n",
+ " -0.19304397,\n",
+ " -0.54407782,\n",
+ " -0.10369845,\n",
+ " -0.35005243,\n",
+ " 0.56644052,\n",
+ " 0.07814467,\n",
+ " -0.23853172,\n",
+ " ],\n",
+ " [\n",
+ " 0.18668785,\n",
+ " 0.47448795,\n",
+ " 0.0,\n",
+ " 0.09938403,\n",
+ " -0.66523568,\n",
+ " -0.19274242,\n",
+ " -0.08422971,\n",
+ " 0.16213894,\n",
+ " -0.03594969,\n",
+ " 0.05643456,\n",
+ " 0.03460391,\n",
+ " ],\n",
+ " [\n",
+ " -0.42714492,\n",
+ " -0.11285034,\n",
+ " 0.09938403,\n",
+ " 0.0,\n",
+ " -0.14651126,\n",
+ " -0.57655351,\n",
+ " -0.06858528,\n",
+ " 0.02506287,\n",
+ " 0.15807228,\n",
+ " -0.05411843,\n",
+ " 0.10554402,\n",
+ " ],\n",
+ " [\n",
+ " -0.49929211,\n",
+ " -0.19304397,\n",
+ " -0.66523568,\n",
+ " -0.14651126,\n",
+ " 0.0,\n",
+ " -0.42172937,\n",
+ " -0.07213464,\n",
+ " 0.19051599,\n",
+ " 0.29572682,\n",
+ " -0.46951685,\n",
+ " -0.01001654,\n",
+ " ],\n",
+ " [\n",
+ " -0.05025879,\n",
+ " -0.54407782,\n",
+ " -0.19274242,\n",
+ " -0.57655351,\n",
+ " -0.42172937,\n",
+ " 0.0,\n",
+ " 0.22313245,\n",
+ " -0.11621411,\n",
+ " -0.58635984,\n",
+ " -0.24611057,\n",
+ " -0.32501641,\n",
+ " ],\n",
+ " [\n",
+ " -0.08892105,\n",
+ " -0.10369845,\n",
+ " -0.08422971,\n",
+ " -0.06858528,\n",
+ " -0.07213464,\n",
+ " 0.22313245,\n",
+ " 0.0,\n",
+ " -0.3046252,\n",
+ " -0.0152095,\n",
+ " -0.22280432,\n",
+ " -0.43076371,\n",
+ " ],\n",
+ " [\n",
+ " -0.39034422,\n",
+ " -0.35005243,\n",
+ " 0.16213894,\n",
+ " 0.02506287,\n",
+ " 0.19051599,\n",
+ " -0.11621411,\n",
+ " -0.3046252,\n",
+ " 0.0,\n",
+ " -0.64309655,\n",
+ " 0.24139295,\n",
+ " -0.11473274,\n",
+ " ],\n",
+ " [\n",
+ " 0.45183176,\n",
+ " 0.56644052,\n",
+ " -0.03594969,\n",
+ " 0.15807228,\n",
+ " 0.29572682,\n",
+ " -0.58635984,\n",
+ " -0.0152095,\n",
+ " -0.64309655,\n",
+ " 0.0,\n",
+ " -0.09709491,\n",
+ " -0.39243752,\n",
+ " ],\n",
+ " [\n",
+ " 0.13354867,\n",
+ " 0.07814467,\n",
+ " 0.05643456,\n",
+ " -0.05411843,\n",
+ " -0.46951685,\n",
+ " -0.24611057,\n",
+ " -0.22280432,\n",
+ " 0.24139295,\n",
+ " -0.09709491,\n",
+ " 0.0,\n",
+ " 0.43852014,\n",
+ " ],\n",
+ " [\n",
+ " 0.15657114,\n",
+ " -0.23853172,\n",
+ " 0.03460391,\n",
+ " 0.10554402,\n",
+ " -0.01001654,\n",
+ " -0.32501641,\n",
+ " -0.43076371,\n",
+ " -0.11473274,\n",
+ " -0.39243752,\n",
+ " 0.43852014,\n",
+ " 0.0,\n",
+ " ],\n",
+ " ]\n",
+ " )\n",
+ " problem = Problem(num_layers=num_layers, couplings=J)\n",
+ " local_fields = problem.local_fields\n",
+ " couplings = J\n",
+ " num_qubits = problem.num_qubits\n",
+ " beta = [t * (1 - i / num_layers) for i in range(num_layers)]\n",
+ " gamma = [t * (i + 1) / num_layers for i in range(num_layers)]\n",
+ " S = np.zeros((num_layers + 1, num_qubits, 3), dtype=np.float64)\n",
+ " S[0, :, :] = np.array([[1.0, 0.0, 0.0] for _ in range(num_qubits)])\n",
+ " S = evolve(S, local_fields, couplings, beta, gamma)\n",
+ " Ep = [expectation(S[i], local_fields, J) for i in range(num_layers)]\n",
+ " Ed = [-sum([S[i, j, 0] for j in range(num_qubits)]) for i in range(num_layers)]\n",
+ " hamiltonian = [\n",
+ " Hamiltonian(\n",
+ " -2 * gamma[i] * problem_hamiltonian(problem)\n",
+ " - 2 * beta[i] * driver_hamiltonian(problem)\n",
+ " )\n",
+ " for i in range(len(beta))\n",
+ " ]\n",
+ " eig_all = np.zeros((num_layers, 21))\n",
+ " for i in range(len(gamma)):\n",
+ " eigenvalues, _ = eigsh(hamiltonian[i].sparse_matrix, k=21, which=\"SA\")\n",
+ " E0 = eigenvalues[0]\n",
+ " eig_all[i, 0] = E0\n",
+ " for j in range(20):\n",
+ " eig_all[i, j + 1] = eigenvalues[j + 1] - E0\n",
+ " E0 = eig_all[:, 0]\n",
+ " E_meanfield = [2 * gamma[i] * Ep[i] + 2 * beta[i] * Ed[i] for i in range(len(Ep))]\n",
+ " draw_graph1(eig_all, E_meanfield - E0)\n",
+ "\n",
+ "\n",
+ "# t = 0.5\n",
+ "# fig7_2(t)\n",
+ "# remove the annotations to present FIG 7.2"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ae14eb96-c54d-4a3c-9175-9cbd9d046b35",
+ "metadata": {},
+ "source": [
+ "J矩阵是原论文中的标记为\"easy\"的例子(同FIG7.1),来实现第三幅图的复现\n",
+ "\n",
+ "步骤:\n",
+ "\n",
+ "1.初始化全体旋转量子的坐标为[1,0,0]\n",
+ "\n",
+ "2.进行演化迭代,得到每一次迭代返回的量子状态\n",
+ "\n",
+ "3.用每一次迭代的量子状态计算每一次迭代的lyapunov矩阵\n",
+ "\n",
+ "横坐标是归一化的时间s,纵坐标是Lyapunov指数,最终输出了Mean-field AOA算法的前三个Lyapunov指数"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "93c69a0a-4495-49ed-a2d7-679039a8b2a9",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def fig7_3(t=0.5):\n",
+ " \"\"\"Use the J in the 'easy' instance\"\"\"\n",
+ " num_layers = 2000\n",
+ " J = np.array(\n",
+ " [\n",
+ " [\n",
+ " 0.0,\n",
+ " 0.42132292,\n",
+ " -0.25571582,\n",
+ " -0.16267926,\n",
+ " -0.77219702,\n",
+ " 0.06310006,\n",
+ " 0.03975859,\n",
+ " 0.14472543,\n",
+ " 0.52842128,\n",
+ " 0.2399146,\n",
+ " -0.5426827,\n",
+ " ],\n",
+ " [\n",
+ " 0.42132292,\n",
+ " 0.0,\n",
+ " -0.04705895,\n",
+ " -0.28587394,\n",
+ " 0.50008779,\n",
+ " 0.19371417,\n",
+ " 0.43070882,\n",
+ " 0.21708425,\n",
+ " -0.09432905,\n",
+ " -0.07647162,\n",
+ " 0.0410539,\n",
+ " ],\n",
+ " [\n",
+ " -0.25571582,\n",
+ " -0.04705895,\n",
+ " 0.0,\n",
+ " 0.04119337,\n",
+ " -0.03143317,\n",
+ " -0.69452537,\n",
+ " -0.20650927,\n",
+ " 0.03894435,\n",
+ " -0.03114271,\n",
+ " 0.31022423,\n",
+ " -0.25880392,\n",
+ " ],\n",
+ " [\n",
+ " -0.16267926,\n",
+ " -0.28587394,\n",
+ " 0.04119337,\n",
+ " 0.0,\n",
+ " 0.46391918,\n",
+ " -0.46363437,\n",
+ " -0.02663793,\n",
+ " 0.05954145,\n",
+ " -0.35251299,\n",
+ " -0.13726513,\n",
+ " -0.07634969,\n",
+ " ],\n",
+ " [\n",
+ " -0.77219702,\n",
+ " 0.50008779,\n",
+ " -0.03143317,\n",
+ " 0.46391918,\n",
+ " 0.0,\n",
+ " 0.07847923,\n",
+ " 0.18372387,\n",
+ " -0.47860755,\n",
+ " -0.24819476,\n",
+ " 0.27132491,\n",
+ " -0.22750873,\n",
+ " ],\n",
+ " [\n",
+ " 0.06310006,\n",
+ " 0.19371417,\n",
+ " -0.69452537,\n",
+ " -0.46363437,\n",
+ " 0.07847923,\n",
+ " 0.0,\n",
+ " 0.01450035,\n",
+ " 0.29893034,\n",
+ " 0.12659777,\n",
+ " -0.20628129,\n",
+ " -0.17935806,\n",
+ " ],\n",
+ " [\n",
+ " 0.03975859,\n",
+ " 0.43070882,\n",
+ " -0.20650927,\n",
+ " -0.02663793,\n",
+ " 0.18372387,\n",
+ " 0.01450035,\n",
+ " 0.0,\n",
+ " 0.51434209,\n",
+ " -0.13210798,\n",
+ " 0.28592817,\n",
+ " 0.1470975,\n",
+ " ],\n",
+ " [\n",
+ " 0.14472543,\n",
+ " 0.21708425,\n",
+ " 0.03894435,\n",
+ " 0.05954145,\n",
+ " -0.47860755,\n",
+ " 0.29893034,\n",
+ " 0.51434209,\n",
+ " 0.0,\n",
+ " -0.250012,\n",
+ " 0.0366756,\n",
+ " -0.59322573,\n",
+ " ],\n",
+ " [\n",
+ " 0.52842128,\n",
+ " -0.09432905,\n",
+ " -0.03114271,\n",
+ " -0.35251299,\n",
+ " -0.24819476,\n",
+ " 0.12659777,\n",
+ " -0.13210798,\n",
+ " -0.250012,\n",
+ " 0.0,\n",
+ " 0.26835453,\n",
+ " 0.00088238,\n",
+ " ],\n",
+ " [\n",
+ " 0.2399146,\n",
+ " -0.07647162,\n",
+ " 0.31022423,\n",
+ " -0.13726513,\n",
+ " 0.27132491,\n",
+ " -0.20628129,\n",
+ " 0.28592817,\n",
+ " 0.0366756,\n",
+ " 0.26835453,\n",
+ " 0.0,\n",
+ " -0.48081058,\n",
+ " ],\n",
+ " [\n",
+ " -0.5426827,\n",
+ " 0.0410539,\n",
+ " -0.25880392,\n",
+ " -0.07634969,\n",
+ " -0.22750873,\n",
+ " -0.17935806,\n",
+ " 0.1470975,\n",
+ " -0.59322573,\n",
+ " 0.00088238,\n",
+ " -0.48081058,\n",
+ " 0.0,\n",
+ " ],\n",
+ " ]\n",
+ " )\n",
+ " problem = Problem(num_layers=num_layers, couplings=J)\n",
+ " beta = [t * (1 - i / problem.num_layers) for i in range(problem.num_layers)]\n",
+ " gamma = [t * (i + 1) / problem.num_layers for i in range(problem.num_layers)]\n",
+ " lamda = evolve_fluctuations(problem, t, beta, gamma)\n",
+ " lamda_first = lamda[:, -1]\n",
+ " lamda_second = lamda[:, -2]\n",
+ " lamda_third = lamda[:, -3]\n",
+ " draw_graph(lamda_first, lamda_second, lamda_third)\n",
+ "\n",
+ "\n",
+ "# t = 0.5\n",
+ "# fig7_3(t)\n",
+ "# remove the annotations to present FIG 7.3"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "32180d90-c76e-4bfd-b43b-76cb568bcbf4",
+ "metadata": {},
+ "source": [
+ "J矩阵是原论文中的标记为\"hard\"的例子(同FIG7.2),来实现第四幅图的复现\n",
+ "\n",
+ "步骤:\n",
+ "\n",
+ "1.初始化全体旋转量子的坐标为[1,0,0]\n",
+ "\n",
+ "2.进行演化迭代,得到每一次迭代返回的量子状态\n",
+ "\n",
+ "3.用每一次迭代的量子状态计算每一次迭代的lyapunov矩阵\n",
+ "\n",
+ "横坐标是归一化的时间s,纵坐标是Lyapunov指数,最终输出了Mean-field AOA算法的前三个Lyapunov指数"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "97f82ec8-0268-4586-bd32-442b1dcac074",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def fig7_4(t=0.5):\n",
+ " \"\"\"Use the J in the 'hard' instance\"\"\"\n",
+ " num_layers = 5000\n",
+ " J = np.array(\n",
+ " [\n",
+ " [\n",
+ " 0.0,\n",
+ " 0.20437418,\n",
+ " 0.18668785,\n",
+ " -0.42714492,\n",
+ " -0.49929211,\n",
+ " -0.05025879,\n",
+ " -0.08892105,\n",
+ " -0.39034422,\n",
+ " 0.45183176,\n",
+ " 0.13354867,\n",
+ " 0.15657114,\n",
+ " ],\n",
+ " [\n",
+ " 0.20437418,\n",
+ " 0.0,\n",
+ " 0.47448795,\n",
+ " -0.11285034,\n",
+ " -0.19304397,\n",
+ " -0.54407782,\n",
+ " -0.10369845,\n",
+ " -0.35005243,\n",
+ " 0.56644052,\n",
+ " 0.07814467,\n",
+ " -0.23853172,\n",
+ " ],\n",
+ " [\n",
+ " 0.18668785,\n",
+ " 0.47448795,\n",
+ " 0.0,\n",
+ " 0.09938403,\n",
+ " -0.66523568,\n",
+ " -0.19274242,\n",
+ " -0.08422971,\n",
+ " 0.16213894,\n",
+ " -0.03594969,\n",
+ " 0.05643456,\n",
+ " 0.03460391,\n",
+ " ],\n",
+ " [\n",
+ " -0.42714492,\n",
+ " -0.11285034,\n",
+ " 0.09938403,\n",
+ " 0.0,\n",
+ " -0.14651126,\n",
+ " -0.57655351,\n",
+ " -0.06858528,\n",
+ " 0.02506287,\n",
+ " 0.15807228,\n",
+ " -0.05411843,\n",
+ " 0.10554402,\n",
+ " ],\n",
+ " [\n",
+ " -0.49929211,\n",
+ " -0.19304397,\n",
+ " -0.66523568,\n",
+ " -0.14651126,\n",
+ " 0.0,\n",
+ " -0.42172937,\n",
+ " -0.07213464,\n",
+ " 0.19051599,\n",
+ " 0.29572682,\n",
+ " -0.46951685,\n",
+ " -0.01001654,\n",
+ " ],\n",
+ " [\n",
+ " -0.05025879,\n",
+ " -0.54407782,\n",
+ " -0.19274242,\n",
+ " -0.57655351,\n",
+ " -0.42172937,\n",
+ " 0.0,\n",
+ " 0.22313245,\n",
+ " -0.11621411,\n",
+ " -0.58635984,\n",
+ " -0.24611057,\n",
+ " -0.32501641,\n",
+ " ],\n",
+ " [\n",
+ " -0.08892105,\n",
+ " -0.10369845,\n",
+ " -0.08422971,\n",
+ " -0.06858528,\n",
+ " -0.07213464,\n",
+ " 0.22313245,\n",
+ " 0.0,\n",
+ " -0.3046252,\n",
+ " -0.0152095,\n",
+ " -0.22280432,\n",
+ " -0.43076371,\n",
+ " ],\n",
+ " [\n",
+ " -0.39034422,\n",
+ " -0.35005243,\n",
+ " 0.16213894,\n",
+ " 0.02506287,\n",
+ " 0.19051599,\n",
+ " -0.11621411,\n",
+ " -0.3046252,\n",
+ " 0.0,\n",
+ " -0.64309655,\n",
+ " 0.24139295,\n",
+ " -0.11473274,\n",
+ " ],\n",
+ " [\n",
+ " 0.45183176,\n",
+ " 0.56644052,\n",
+ " -0.03594969,\n",
+ " 0.15807228,\n",
+ " 0.29572682,\n",
+ " -0.58635984,\n",
+ " -0.0152095,\n",
+ " -0.64309655,\n",
+ " 0.0,\n",
+ " -0.09709491,\n",
+ " -0.39243752,\n",
+ " ],\n",
+ " [\n",
+ " 0.13354867,\n",
+ " 0.07814467,\n",
+ " 0.05643456,\n",
+ " -0.05411843,\n",
+ " -0.46951685,\n",
+ " -0.24611057,\n",
+ " -0.22280432,\n",
+ " 0.24139295,\n",
+ " -0.09709491,\n",
+ " 0.0,\n",
+ " 0.43852014,\n",
+ " ],\n",
+ " [\n",
+ " 0.15657114,\n",
+ " -0.23853172,\n",
+ " 0.03460391,\n",
+ " 0.10554402,\n",
+ " -0.01001654,\n",
+ " -0.32501641,\n",
+ " -0.43076371,\n",
+ " -0.11473274,\n",
+ " -0.39243752,\n",
+ " 0.43852014,\n",
+ " 0.0,\n",
+ " ],\n",
+ " ]\n",
+ " )\n",
+ " problem = Problem(num_layers=num_layers, couplings=J)\n",
+ " beta = [t * (1 - i / problem.num_layers) for i in range(problem.num_layers)]\n",
+ " gamma = [t * (i + 1) / problem.num_layers for i in range(problem.num_layers)]\n",
+ " lamda = evolve_fluctuations(problem, t, beta, gamma)\n",
+ " lamda_first = lamda[:, -1]\n",
+ " lamda_second = lamda[:, -2]\n",
+ " lamda_third = lamda[:, -3]\n",
+ " draw_graph(lamda_first, lamda_second, lamda_third)\n",
+ "\n",
+ "\n",
+ "# t = 0.5\n",
+ "# fig7_4(t)\n",
+ "# remove the annotations to present FIG 7.4"
+ ]
+ }
+ ],
+ "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.9.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/example/QAOAs_advantages/image/7_1.png b/example/QAOAs_advantages/image/7_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..bb584b7a094fb1243460a8079b76d59d2db51594
Binary files /dev/null and b/example/QAOAs_advantages/image/7_1.png differ
diff --git a/example/QAOAs_advantages/image/7_2.png b/example/QAOAs_advantages/image/7_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..a70f4a771cba0aac658ad20b7c900e70a0916222
Binary files /dev/null and b/example/QAOAs_advantages/image/7_2.png differ
diff --git a/example/QAOAs_advantages/image/7_3.png b/example/QAOAs_advantages/image/7_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..27dc7d8e3665709eaaa7a8284d8e2aa19518caa7
Binary files /dev/null and b/example/QAOAs_advantages/image/7_3.png differ
diff --git a/example/QAOAs_advantages/image/7_4.png b/example/QAOAs_advantages/image/7_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..671efe7b1636c59b884325ef1d4927fa3d474c65
Binary files /dev/null and b/example/QAOAs_advantages/image/7_4.png differ