diff --git a/QAlpha/COVID19_D_Wave.ipynb b/QAlpha/COVID19_D_Wave.ipynb
new file mode 100644
index 0000000..9d731a3
--- /dev/null
+++ b/QAlpha/COVID19_D_Wave.ipynb
@@ -0,0 +1,1884 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "anaconda-cloud": {},
+ "colab": {
+ "name": "COVID19_D-Wave.ipynb",
+ "provenance": [],
+ "collapsed_sections": [],
+ "toc_visible": true,
+ "include_colab_link": true
+ },
+ "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.7.6"
+ },
+ "papermill": {
+ "duration": 14348.105008,
+ "end_time": "2020-03-12T07:55:21.779384",
+ "environment_variables": {},
+ "exception": null,
+ "input_path": "max_cut_only_15q.ipynb",
+ "output_path": "max_cut_only_15q-background-results.ipynb",
+ "parameters": {},
+ "start_time": "2020-03-12T03:56:13.674376",
+ "version": "2.0.0"
+ },
+ "varInspector": {
+ "cols": {
+ "lenName": 16,
+ "lenType": 16,
+ "lenVar": 40
+ },
+ "kernels_config": {
+ "python": {
+ "delete_cmd_postfix": "",
+ "delete_cmd_prefix": "del ",
+ "library": "var_list.py",
+ "varRefreshCmd": "print(var_dic_list())"
+ },
+ "r": {
+ "delete_cmd_postfix": ") ",
+ "delete_cmd_prefix": "rm(",
+ "library": "var_list.r",
+ "varRefreshCmd": "cat(var_dic_list()) "
+ }
+ },
+ "types_to_exclude": [
+ "module",
+ "function",
+ "builtin_function_or_method",
+ "instance",
+ "_Feature"
+ ],
+ "window_display": false
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "VVcS5Y9QxQH-",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "source": [
+ "#https://www.youtube.com/watch?v=bErs0dxC1aY&list=PLPvKnT7dgEsuhec_yW9oxcZ6gg9SfRFFV\n",
+ "#https://docs.ocean.dwavesys.com/en/latest/overview/install.html#installoceansoftware\n",
+ "#!python -m venv ocean\n",
+ "#!\\Scripts\\activate\n",
+ "\n",
+ "!pip install dwave-ocean-sdk"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "wACQyPzq4wIO",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 527
+ },
+ "outputId": "17a7ba2c-e815-4242-d249-6da6dba03ee3"
+ },
+ "source": [
+ "!dwave setup #API endpoint URL: https://cloud.dwavesys.com/sapi/"
+ ],
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Optionally install non-open-source packages and configure your environment.\n",
+ "\n",
+ "Do you want to select non-open-source packages to install (y/n)? [y]: y\n",
+ "\n",
+ "D-Wave Drivers\n",
+ "These drivers enable some automated performance-tuning features.\n",
+ "This package is available under the D-Wave EULA license.\n",
+ "The terms of the license are available online: https://docs.ocean.dwavesys.com/eula\n",
+ "Install (y/n)? [y]: y\n",
+ "Installing: D-Wave Drivers\n",
+ "Successfully installed D-Wave Drivers.\n",
+ "\n",
+ "D-Wave Problem Inspector\n",
+ "This tool visualizes problems submitted to the quantum computer and the results returned.\n",
+ "This package is available under the D-Wave EULA license.\n",
+ "The terms of the license are available online: https://docs.ocean.dwavesys.com/eula\n",
+ "Install (y/n)? [y]: y\n",
+ "Installing: D-Wave Problem Inspector\n",
+ "Successfully installed D-Wave Problem Inspector.\n",
+ "\n",
+ "Creating the D-Wave configuration file.\n",
+ "Configuration file not found; the default location is: /root/.config/dwave/dwave.conf\n",
+ "Configuration file path [/root/.config/dwave/dwave.conf]: \n",
+ "Configuration file path does not exist. Create it? [y/N]: y\n",
+ "Profile (create new) [prod]: prod\n",
+ "API endpoint URL [skip]: https://cloud.dwavesys.com/sapi/\n",
+ "Default client class [skip]: \n",
+ "Default solver [skip]: \n",
+ "Configuration saved.\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "w7N4B6Ez8_dh",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 119
+ },
+ "outputId": "f69a56cc-fee0-4669-95f8-4dfbf110b34e"
+ },
+ "source": [
+ "#Use !git clone https://Userneme:Pasword@github.com/Q-Alpha/Q-Alpha.git"
+ ],
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Cloning into 'Q-Alpha'...\n",
+ "remote: Enumerating objects: 31, done.\u001b[K\n",
+ "remote: Counting objects: 100% (31/31), done.\u001b[K\n",
+ "remote: Compressing objects: 100% (16/16), done.\u001b[K\n",
+ "remote: Total 31 (delta 10), reused 31 (delta 10), pack-reused 0\u001b[K\n",
+ "Unpacking objects: 100% (31/31), done.\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "JEUVj6hv944E",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 51
+ },
+ "outputId": "6e7ac46c-4f18-48f8-99cb-98b0f3f7e05c"
+ },
+ "source": [
+ "import sys\n",
+ "!pwd\n",
+ "!ls"
+ ],
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "/content\n",
+ "sample_data\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "4u9kPXac9_aX",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "source": [
+ "f_loc=\"/content/Q-Alpha/QAlpha/solvers/\"\n",
+ "if f_loc not in sys.path: sys.path.append(f_loc)"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "DMVjV4Zs-KU-",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 119
+ },
+ "outputId": "33a7b235-04ad-4bdf-a972-30e612a7bf4f"
+ },
+ "source": [
+ "import os\n",
+ "print(os.getcwd())\n",
+ "\n",
+ "for dirname, _, filenames in os.walk(f_loc): #f_loc\n",
+ " for filename in filenames:\n",
+ " print(os.path.join(dirname, filename))\n",
+ " try: \n",
+ " if filename.index('knapsack') >= 0:\n",
+ " print(os.path.join(dirname, filename))\n",
+ " pass\n",
+ " except:\n",
+ " pass\n"
+ ],
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "/content\n",
+ "/content/Q-Alpha/QAlpha/solvers/knapsack.py\n",
+ "/content/Q-Alpha/QAlpha/solvers/knapsack.py\n",
+ "/content/Q-Alpha/QAlpha/solvers/__init__.py\n",
+ "/content/Q-Alpha/QAlpha/solvers/__pycache__/knapsack.cpython-36.pyc\n",
+ "/content/Q-Alpha/QAlpha/solvers/__pycache__/knapsack.cpython-36.pyc\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "h_XKrDQf9Ycz",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "source": [
+ "from knapsack import *"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "lVmVSuUv9g6R",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 275
+ },
+ "outputId": "7f08c8ae-3d3e-4362-ac83-63a4d9e86c6c"
+ },
+ "source": [
+ "csv_data_file=\"/content/Q-Alpha/QAlpha/data.csv\"\n",
+ "\n",
+ "number_of_symulations=100\n",
+ "\n",
+ "hospital_beds_max=336000\n",
+ "sick_piple_max=int(hospital_beds_max/(39/100)) \n",
+ "#assuming 3x13% are hospitalized and maxout the full hospital capacity!\n",
+ "#we use a fudge factor of 3 insted of the 13% statistical value\n",
+ "\n",
+ "print(f'Performing of {number_of_symulations} simulations.',\n",
+ " f'Considering full capacity for {sick_piple_max} sick people at one time.')\n",
+ "\n",
+ "%time solution=solve_cities_from_csv(csv_data_file,sick_piple_max,number_of_symulations,verbose=True)"
+ ],
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Performing of 100 simulations. Considering full capacity for 861538 sick people at one time.\n",
+ "BEST SOLUTION\n",
+ "Open cities\n",
+ "['Baltimore', 'Boston', 'Cleveland', 'Columbus', 'Detroit', 'Indianapolis', 'Kansas City', 'Los Angeles', 'Louisville', 'Memphis', 'New York', 'Oklahoma City', 'Philadelphia', 'Portland', 'Sacramento', 'San Francisco', 'San Jose', 'Seattle', 'St Louis', 'Washington DC']\n",
+ "\n",
+ "\n",
+ "Closed cities\n",
+ "['Atlanta', 'Austin', 'Charlotte', 'Chicago', 'Cincinnati', 'Dallas', 'Denver', 'Hartford', 'Houston', 'Jacksonville', 'Las Vegas', 'Miami', 'Milwaukee', 'Minneapolis', 'Nashville', 'New Orleans', 'Orlando', 'Phoenix', 'Pittsburgh', 'Providence', 'Raleigh', 'Richmond', 'Riverside', 'Salt Lake City', 'San Antonio', 'San Diego', 'Stamford', 'Tampa', 'Virginia Beach']\n",
+ "\n",
+ "\n",
+ "Salvaged GDP: 7259852 (55.6%)\n",
+ "Used up hospital capacity: 860322 of 861538 (99.9%)\n",
+ "CPU times: user 12.9 s, sys: 3.69 s, total: 16.6 s\n",
+ "Wall time: 5min 42s\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "kFoygqLuAfOV",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1000
+ },
+ "outputId": "0362620c-15e1-4f02-8be4-b9f79a87de6d"
+ },
+ "source": [
+ "for sol_n in range(len(solution)):\n",
+ " print(\"\\nSolution:\",sol_n, \n",
+ " \"\\nNumber of closed cities:\",len(solution[sol_n]['closed_cities']),\n",
+ " \"\\nNumber of open cities:\",len(solution[sol_n]['open_cities']),\n",
+ " \"\\nEnergy indicator:\",solution[sol_n]['energy'],\n",
+ " \"\\nAnticipated GDP:\",solution[sol_n]['salvaged_gdp'],\n",
+ " \"\\nHospitalizations:\",solution[sol_n]['used_capacity'],\"\\n\")"
+ ],
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Solution: 0 \n",
+ "Number of closed cities: 29 \n",
+ "Number of open cities: 20 \n",
+ "Energy indicator: -7259574.0 \n",
+ "Anticipated GDP: 7259852 \n",
+ "Hospitalizations: 860322 \n",
+ "\n",
+ "\n",
+ "Solution: 1 \n",
+ "Number of closed cities: 25 \n",
+ "Number of open cities: 24 \n",
+ "Energy indicator: -7176517.0 \n",
+ "Anticipated GDP: 7176833 \n",
+ "Hospitalizations: 860092 \n",
+ "\n",
+ "\n",
+ "Solution: 2 \n",
+ "Number of closed cities: 20 \n",
+ "Number of open cities: 29 \n",
+ "Energy indicator: -7150809.0 \n",
+ "Anticipated GDP: 7151356 \n",
+ "Hospitalizations: 856582 \n",
+ "\n",
+ "\n",
+ "Solution: 3 \n",
+ "Number of closed cities: 23 \n",
+ "Number of open cities: 26 \n",
+ "Energy indicator: -7136026.0 \n",
+ "Anticipated GDP: 7136273 \n",
+ "Hospitalizations: 858077 \n",
+ "\n",
+ "\n",
+ "Solution: 4 \n",
+ "Number of closed cities: 23 \n",
+ "Number of open cities: 26 \n",
+ "Energy indicator: -7109297.0 \n",
+ "Anticipated GDP: 7109772 \n",
+ "Hospitalizations: 857125 \n",
+ "\n",
+ "\n",
+ "Solution: 5 \n",
+ "Number of closed cities: 27 \n",
+ "Number of open cities: 22 \n",
+ "Energy indicator: -7075794.0 \n",
+ "Anticipated GDP: 7076325 \n",
+ "Hospitalizations: 861385 \n",
+ "\n",
+ "\n",
+ "Solution: 6 \n",
+ "Number of closed cities: 22 \n",
+ "Number of open cities: 27 \n",
+ "Energy indicator: -7074110.0 \n",
+ "Anticipated GDP: 7074420 \n",
+ "Hospitalizations: 856518 \n",
+ "\n",
+ "\n",
+ "Solution: 7 \n",
+ "Number of closed cities: 22 \n",
+ "Number of open cities: 27 \n",
+ "Energy indicator: -7034493.0 \n",
+ "Anticipated GDP: 7034443 \n",
+ "Hospitalizations: 857625 \n",
+ "\n",
+ "\n",
+ "Solution: 8 \n",
+ "Number of closed cities: 21 \n",
+ "Number of open cities: 28 \n",
+ "Energy indicator: -7018419.0 \n",
+ "Anticipated GDP: 7018421 \n",
+ "Hospitalizations: 854720 \n",
+ "\n",
+ "\n",
+ "Solution: 9 \n",
+ "Number of closed cities: 22 \n",
+ "Number of open cities: 27 \n",
+ "Energy indicator: -7017096.0 \n",
+ "Anticipated GDP: 7017770 \n",
+ "Hospitalizations: 854630 \n",
+ "\n",
+ "\n",
+ "Solution: 10 \n",
+ "Number of closed cities: 20 \n",
+ "Number of open cities: 29 \n",
+ "Energy indicator: -7006777.0 \n",
+ "Anticipated GDP: 7006699 \n",
+ "Hospitalizations: 861189 \n",
+ "\n",
+ "\n",
+ "Solution: 11 \n",
+ "Number of closed cities: 23 \n",
+ "Number of open cities: 26 \n",
+ "Energy indicator: -7000370.0 \n",
+ "Anticipated GDP: 7000768 \n",
+ "Hospitalizations: 856091 \n",
+ "\n",
+ "\n",
+ "Solution: 12 \n",
+ "Number of closed cities: 26 \n",
+ "Number of open cities: 23 \n",
+ "Energy indicator: -6998714.0 \n",
+ "Anticipated GDP: 6998776 \n",
+ "Hospitalizations: 860024 \n",
+ "\n",
+ "\n",
+ "Solution: 13 \n",
+ "Number of closed cities: 17 \n",
+ "Number of open cities: 32 \n",
+ "Energy indicator: -6993503.0 \n",
+ "Anticipated GDP: 6993751 \n",
+ "Hospitalizations: 858726 \n",
+ "\n",
+ "\n",
+ "Solution: 14 \n",
+ "Number of closed cities: 26 \n",
+ "Number of open cities: 23 \n",
+ "Energy indicator: -6992245.0 \n",
+ "Anticipated GDP: 6993003 \n",
+ "Hospitalizations: 856410 \n",
+ "\n",
+ "\n",
+ "Solution: 15 \n",
+ "Number of closed cities: 27 \n",
+ "Number of open cities: 22 \n",
+ "Energy indicator: -6991633.0 \n",
+ "Anticipated GDP: 6991660 \n",
+ "Hospitalizations: 853576 \n",
+ "\n",
+ "\n",
+ "Solution: 16 \n",
+ "Number of closed cities: 27 \n",
+ "Number of open cities: 22 \n",
+ "Energy indicator: -6989392.0 \n",
+ "Anticipated GDP: 6989809 \n",
+ "Hospitalizations: 853889 \n",
+ "\n",
+ "\n",
+ "Solution: 17 \n",
+ "Number of closed cities: 23 \n",
+ "Number of open cities: 26 \n",
+ "Energy indicator: -6987789.0 \n",
+ "Anticipated GDP: 6988053 \n",
+ "Hospitalizations: 859250 \n",
+ "\n",
+ "\n",
+ "Solution: 18 \n",
+ "Number of closed cities: 28 \n",
+ "Number of open cities: 21 \n",
+ "Energy indicator: -6987177.0 \n",
+ "Anticipated GDP: 6987425 \n",
+ "Hospitalizations: 853466 \n",
+ "\n",
+ "\n",
+ "Solution: 19 \n",
+ "Number of closed cities: 23 \n",
+ "Number of open cities: 26 \n",
+ "Energy indicator: -6985066.0 \n",
+ "Anticipated GDP: 6985023 \n",
+ "Hospitalizations: 861063 \n",
+ "\n",
+ "\n",
+ "Solution: 20 \n",
+ "Number of closed cities: 26 \n",
+ "Number of open cities: 23 \n",
+ "Energy indicator: -6975851.0 \n",
+ "Anticipated GDP: 6976360 \n",
+ "Hospitalizations: 854421 \n",
+ "\n",
+ "\n",
+ "Solution: 21 \n",
+ "Number of closed cities: 29 \n",
+ "Number of open cities: 20 \n",
+ "Energy indicator: -6973505.0 \n",
+ "Anticipated GDP: 6973994 \n",
+ "Hospitalizations: 856102 \n",
+ "\n",
+ "\n",
+ "Solution: 22 \n",
+ "Number of closed cities: 28 \n",
+ "Number of open cities: 21 \n",
+ "Energy indicator: -6970790.0 \n",
+ "Anticipated GDP: 6971363 \n",
+ "Hospitalizations: 861245 \n",
+ "\n",
+ "\n",
+ "Solution: 23 \n",
+ "Number of closed cities: 33 \n",
+ "Number of open cities: 16 \n",
+ "Energy indicator: -6968629.0 \n",
+ "Anticipated GDP: 6968886 \n",
+ "Hospitalizations: 861526 \n",
+ "\n",
+ "\n",
+ "Solution: 24 \n",
+ "Number of closed cities: 26 \n",
+ "Number of open cities: 23 \n",
+ "Energy indicator: -6968152.0 \n",
+ "Anticipated GDP: 6968719 \n",
+ "Hospitalizations: 854011 \n",
+ "\n",
+ "\n",
+ "Solution: 25 \n",
+ "Number of closed cities: 25 \n",
+ "Number of open cities: 24 \n",
+ "Energy indicator: -6964477.0 \n",
+ "Anticipated GDP: 6964707 \n",
+ "Hospitalizations: 858067 \n",
+ "\n",
+ "\n",
+ "Solution: 26 \n",
+ "Number of closed cities: 24 \n",
+ "Number of open cities: 25 \n",
+ "Energy indicator: -6963202.0 \n",
+ "Anticipated GDP: 6963811 \n",
+ "Hospitalizations: 855718 \n",
+ "\n",
+ "\n",
+ "Solution: 27 \n",
+ "Number of closed cities: 24 \n",
+ "Number of open cities: 25 \n",
+ "Energy indicator: -6961022.0 \n",
+ "Anticipated GDP: 6961579 \n",
+ "Hospitalizations: 859221 \n",
+ "\n",
+ "\n",
+ "Solution: 28 \n",
+ "Number of closed cities: 22 \n",
+ "Number of open cities: 27 \n",
+ "Energy indicator: -6955667.0 \n",
+ "Anticipated GDP: 6956298 \n",
+ "Hospitalizations: 855605 \n",
+ "\n",
+ "\n",
+ "Solution: 29 \n",
+ "Number of closed cities: 17 \n",
+ "Number of open cities: 32 \n",
+ "Energy indicator: -6941985.0 \n",
+ "Anticipated GDP: 6942431 \n",
+ "Hospitalizations: 859322 \n",
+ "\n",
+ "\n",
+ "Solution: 30 \n",
+ "Number of closed cities: 17 \n",
+ "Number of open cities: 32 \n",
+ "Energy indicator: -6941092.0 \n",
+ "Anticipated GDP: 6941622 \n",
+ "Hospitalizations: 858163 \n",
+ "\n",
+ "\n",
+ "Solution: 31 \n",
+ "Number of closed cities: 22 \n",
+ "Number of open cities: 27 \n",
+ "Energy indicator: -6936577.0 \n",
+ "Anticipated GDP: 6937327 \n",
+ "Hospitalizations: 860500 \n",
+ "\n",
+ "\n",
+ "Solution: 32 \n",
+ "Number of closed cities: 23 \n",
+ "Number of open cities: 26 \n",
+ "Energy indicator: -6936307.0 \n",
+ "Anticipated GDP: 6937066 \n",
+ "Hospitalizations: 858757 \n",
+ "\n",
+ "\n",
+ "Solution: 33 \n",
+ "Number of closed cities: 23 \n",
+ "Number of open cities: 26 \n",
+ "Energy indicator: -6934316.0 \n",
+ "Anticipated GDP: 6934863 \n",
+ "Hospitalizations: 856433 \n",
+ "\n",
+ "\n",
+ "Solution: 34 \n",
+ "Number of closed cities: 20 \n",
+ "Number of open cities: 29 \n",
+ "Energy indicator: -6926248.0 \n",
+ "Anticipated GDP: 6926787 \n",
+ "Hospitalizations: 856993 \n",
+ "\n",
+ "\n",
+ "Solution: 35 \n",
+ "Number of closed cities: 25 \n",
+ "Number of open cities: 24 \n",
+ "Energy indicator: -6924218.0 \n",
+ "Anticipated GDP: 6924116 \n",
+ "Hospitalizations: 854512 \n",
+ "\n",
+ "\n",
+ "Solution: 36 \n",
+ "Number of closed cities: 24 \n",
+ "Number of open cities: 25 \n",
+ "Energy indicator: -6922574.0 \n",
+ "Anticipated GDP: 6922591 \n",
+ "Hospitalizations: 861176 \n",
+ "\n",
+ "\n",
+ "Solution: 37 \n",
+ "Number of closed cities: 25 \n",
+ "Number of open cities: 24 \n",
+ "Energy indicator: -6920368.0 \n",
+ "Anticipated GDP: 6920680 \n",
+ "Hospitalizations: 854356 \n",
+ "\n",
+ "\n",
+ "Solution: 38 \n",
+ "Number of closed cities: 28 \n",
+ "Number of open cities: 21 \n",
+ "Energy indicator: -6918377.0 \n",
+ "Anticipated GDP: 6918853 \n",
+ "Hospitalizations: 853357 \n",
+ "\n",
+ "\n",
+ "Solution: 39 \n",
+ "Number of closed cities: 28 \n",
+ "Number of open cities: 21 \n",
+ "Energy indicator: -6918243.0 \n",
+ "Anticipated GDP: 6918559 \n",
+ "Hospitalizations: 856850 \n",
+ "\n",
+ "\n",
+ "Solution: 40 \n",
+ "Number of closed cities: 19 \n",
+ "Number of open cities: 30 \n",
+ "Energy indicator: -6918108.0 \n",
+ "Anticipated GDP: 6918402 \n",
+ "Hospitalizations: 857372 \n",
+ "\n",
+ "\n",
+ "Solution: 41 \n",
+ "Number of closed cities: 22 \n",
+ "Number of open cities: 27 \n",
+ "Energy indicator: -6916156.0 \n",
+ "Anticipated GDP: 6916305 \n",
+ "Hospitalizations: 858231 \n",
+ "\n",
+ "\n",
+ "Solution: 42 \n",
+ "Number of closed cities: 23 \n",
+ "Number of open cities: 26 \n",
+ "Energy indicator: -6913898.0 \n",
+ "Anticipated GDP: 6914251 \n",
+ "Hospitalizations: 859618 \n",
+ "\n",
+ "\n",
+ "Solution: 43 \n",
+ "Number of closed cities: 30 \n",
+ "Number of open cities: 19 \n",
+ "Energy indicator: -6910285.0 \n",
+ "Anticipated GDP: 6910263 \n",
+ "Hospitalizations: 853997 \n",
+ "\n",
+ "\n",
+ "Solution: 44 \n",
+ "Number of closed cities: 30 \n",
+ "Number of open cities: 19 \n",
+ "Energy indicator: -6903015.0 \n",
+ "Anticipated GDP: 6903257 \n",
+ "Hospitalizations: 854642 \n",
+ "\n",
+ "\n",
+ "Solution: 45 \n",
+ "Number of closed cities: 26 \n",
+ "Number of open cities: 23 \n",
+ "Energy indicator: -6899905.0 \n",
+ "Anticipated GDP: 6900364 \n",
+ "Hospitalizations: 859698 \n",
+ "\n",
+ "\n",
+ "Solution: 46 \n",
+ "Number of closed cities: 18 \n",
+ "Number of open cities: 31 \n",
+ "Energy indicator: -6897570.0 \n",
+ "Anticipated GDP: 6898081 \n",
+ "Hospitalizations: 854896 \n",
+ "\n",
+ "\n",
+ "Solution: 47 \n",
+ "Number of closed cities: 24 \n",
+ "Number of open cities: 25 \n",
+ "Energy indicator: -6897495.0 \n",
+ "Anticipated GDP: 6897720 \n",
+ "Hospitalizations: 854973 \n",
+ "\n",
+ "\n",
+ "Solution: 48 \n",
+ "Number of closed cities: 20 \n",
+ "Number of open cities: 29 \n",
+ "Energy indicator: -6886660.0 \n",
+ "Anticipated GDP: 6886880 \n",
+ "Hospitalizations: 854445 \n",
+ "\n",
+ "\n",
+ "Solution: 49 \n",
+ "Number of closed cities: 20 \n",
+ "Number of open cities: 29 \n",
+ "Energy indicator: -6883464.0 \n",
+ "Anticipated GDP: 6883707 \n",
+ "Hospitalizations: 861147 \n",
+ "\n",
+ "\n",
+ "Solution: 50 \n",
+ "Number of closed cities: 22 \n",
+ "Number of open cities: 27 \n",
+ "Energy indicator: -6882984.0 \n",
+ "Anticipated GDP: 6883464 \n",
+ "Hospitalizations: 855033 \n",
+ "\n",
+ "\n",
+ "Solution: 51 \n",
+ "Number of closed cities: 26 \n",
+ "Number of open cities: 23 \n",
+ "Energy indicator: -6879320.0 \n",
+ "Anticipated GDP: 6879616 \n",
+ "Hospitalizations: 857533 \n",
+ "\n",
+ "\n",
+ "Solution: 52 \n",
+ "Number of closed cities: 30 \n",
+ "Number of open cities: 19 \n",
+ "Energy indicator: -6871056.0 \n",
+ "Anticipated GDP: 6871316 \n",
+ "Hospitalizations: 854834 \n",
+ "\n",
+ "\n",
+ "Solution: 53 \n",
+ "Number of closed cities: 25 \n",
+ "Number of open cities: 24 \n",
+ "Energy indicator: -6869934.0 \n",
+ "Anticipated GDP: 6870232 \n",
+ "Hospitalizations: 860420 \n",
+ "\n",
+ "\n",
+ "Solution: 54 \n",
+ "Number of closed cities: 22 \n",
+ "Number of open cities: 27 \n",
+ "Energy indicator: -6867298.0 \n",
+ "Anticipated GDP: 6867614 \n",
+ "Hospitalizations: 860780 \n",
+ "\n",
+ "\n",
+ "Solution: 55 \n",
+ "Number of closed cities: 23 \n",
+ "Number of open cities: 26 \n",
+ "Energy indicator: -6866329.0 \n",
+ "Anticipated GDP: 6866887 \n",
+ "Hospitalizations: 855112 \n",
+ "\n",
+ "\n",
+ "Solution: 56 \n",
+ "Number of closed cities: 25 \n",
+ "Number of open cities: 24 \n",
+ "Energy indicator: -6865068.0 \n",
+ "Anticipated GDP: 6865545 \n",
+ "Hospitalizations: 857696 \n",
+ "\n",
+ "\n",
+ "Solution: 57 \n",
+ "Number of closed cities: 28 \n",
+ "Number of open cities: 21 \n",
+ "Energy indicator: -6853592.0 \n",
+ "Anticipated GDP: 6853861 \n",
+ "Hospitalizations: 853456 \n",
+ "\n",
+ "\n",
+ "Solution: 58 \n",
+ "Number of closed cities: 27 \n",
+ "Number of open cities: 22 \n",
+ "Energy indicator: -6853293.0 \n",
+ "Anticipated GDP: 6853469 \n",
+ "Hospitalizations: 861428 \n",
+ "\n",
+ "\n",
+ "Solution: 59 \n",
+ "Number of closed cities: 20 \n",
+ "Number of open cities: 29 \n",
+ "Energy indicator: -6846641.0 \n",
+ "Anticipated GDP: 6847190 \n",
+ "Hospitalizations: 853596 \n",
+ "\n",
+ "\n",
+ "Solution: 60 \n",
+ "Number of closed cities: 25 \n",
+ "Number of open cities: 24 \n",
+ "Energy indicator: -6846289.0 \n",
+ "Anticipated GDP: 6846440 \n",
+ "Hospitalizations: 857939 \n",
+ "\n",
+ "\n",
+ "Solution: 61 \n",
+ "Number of closed cities: 27 \n",
+ "Number of open cities: 22 \n",
+ "Energy indicator: -6841713.0 \n",
+ "Anticipated GDP: 6842104 \n",
+ "Hospitalizations: 861025 \n",
+ "\n",
+ "\n",
+ "Solution: 62 \n",
+ "Number of closed cities: 24 \n",
+ "Number of open cities: 25 \n",
+ "Energy indicator: -6834247.0 \n",
+ "Anticipated GDP: 6834678 \n",
+ "Hospitalizations: 856131 \n",
+ "\n",
+ "\n",
+ "Solution: 63 \n",
+ "Number of closed cities: 27 \n",
+ "Number of open cities: 22 \n",
+ "Energy indicator: -6832471.0 \n",
+ "Anticipated GDP: 6832401 \n",
+ "Hospitalizations: 861389 \n",
+ "\n",
+ "\n",
+ "Solution: 64 \n",
+ "Number of closed cities: 26 \n",
+ "Number of open cities: 23 \n",
+ "Energy indicator: -6828885.0 \n",
+ "Anticipated GDP: 6829379 \n",
+ "Hospitalizations: 857973 \n",
+ "\n",
+ "\n",
+ "Solution: 65 \n",
+ "Number of closed cities: 28 \n",
+ "Number of open cities: 21 \n",
+ "Energy indicator: -6824845.0 \n",
+ "Anticipated GDP: 6825411 \n",
+ "Hospitalizations: 860637 \n",
+ "\n",
+ "\n",
+ "Solution: 66 \n",
+ "Number of closed cities: 28 \n",
+ "Number of open cities: 21 \n",
+ "Energy indicator: -6824448.0 \n",
+ "Anticipated GDP: 6824833 \n",
+ "Hospitalizations: 861126 \n",
+ "\n",
+ "\n",
+ "Solution: 67 \n",
+ "Number of closed cities: 21 \n",
+ "Number of open cities: 28 \n",
+ "Energy indicator: -6816040.0 \n",
+ "Anticipated GDP: 6815991 \n",
+ "Hospitalizations: 860150 \n",
+ "\n",
+ "\n",
+ "Solution: 68 \n",
+ "Number of closed cities: 25 \n",
+ "Number of open cities: 24 \n",
+ "Energy indicator: -6815233.0 \n",
+ "Anticipated GDP: 6815763 \n",
+ "Hospitalizations: 858173 \n",
+ "\n",
+ "\n",
+ "Solution: 69 \n",
+ "Number of closed cities: 23 \n",
+ "Number of open cities: 26 \n",
+ "Energy indicator: -6815054.0 \n",
+ "Anticipated GDP: 6815540 \n",
+ "Hospitalizations: 860721 \n",
+ "\n",
+ "\n",
+ "Solution: 70 \n",
+ "Number of closed cities: 21 \n",
+ "Number of open cities: 28 \n",
+ "Energy indicator: -6800329.0 \n",
+ "Anticipated GDP: 6800580 \n",
+ "Hospitalizations: 858401 \n",
+ "\n",
+ "\n",
+ "Solution: 71 \n",
+ "Number of closed cities: 25 \n",
+ "Number of open cities: 24 \n",
+ "Energy indicator: -6795010.0 \n",
+ "Anticipated GDP: 6795552 \n",
+ "Hospitalizations: 860529 \n",
+ "\n",
+ "\n",
+ "Solution: 72 \n",
+ "Number of closed cities: 26 \n",
+ "Number of open cities: 23 \n",
+ "Energy indicator: -6792772.0 \n",
+ "Anticipated GDP: 6793089 \n",
+ "Hospitalizations: 853752 \n",
+ "\n",
+ "\n",
+ "Solution: 73 \n",
+ "Number of closed cities: 27 \n",
+ "Number of open cities: 22 \n",
+ "Energy indicator: -6792039.0 \n",
+ "Anticipated GDP: 6792033 \n",
+ "Hospitalizations: 853348 \n",
+ "\n",
+ "\n",
+ "Solution: 74 \n",
+ "Number of closed cities: 23 \n",
+ "Number of open cities: 26 \n",
+ "Energy indicator: -6786160.0 \n",
+ "Anticipated GDP: 6786403 \n",
+ "Hospitalizations: 858231 \n",
+ "\n",
+ "\n",
+ "Solution: 75 \n",
+ "Number of closed cities: 21 \n",
+ "Number of open cities: 28 \n",
+ "Energy indicator: -6786122.0 \n",
+ "Anticipated GDP: 6786411 \n",
+ "Hospitalizations: 861514 \n",
+ "\n",
+ "\n",
+ "Solution: 76 \n",
+ "Number of closed cities: 28 \n",
+ "Number of open cities: 21 \n",
+ "Energy indicator: -6782549.0 \n",
+ "Anticipated GDP: 6783058 \n",
+ "Hospitalizations: 860341 \n",
+ "\n",
+ "\n",
+ "Solution: 77 \n",
+ "Number of closed cities: 25 \n",
+ "Number of open cities: 24 \n",
+ "Energy indicator: -6779711.0 \n",
+ "Anticipated GDP: 6780148 \n",
+ "Hospitalizations: 853403 \n",
+ "\n",
+ "\n",
+ "Solution: 78 \n",
+ "Number of closed cities: 24 \n",
+ "Number of open cities: 25 \n",
+ "Energy indicator: -6778978.0 \n",
+ "Anticipated GDP: 6779378 \n",
+ "Hospitalizations: 856469 \n",
+ "\n",
+ "\n",
+ "Solution: 79 \n",
+ "Number of closed cities: 23 \n",
+ "Number of open cities: 26 \n",
+ "Energy indicator: -6776693.0 \n",
+ "Anticipated GDP: 6777115 \n",
+ "Hospitalizations: 854411 \n",
+ "\n",
+ "\n",
+ "Solution: 80 \n",
+ "Number of closed cities: 23 \n",
+ "Number of open cities: 26 \n",
+ "Energy indicator: -6775871.0 \n",
+ "Anticipated GDP: 6776095 \n",
+ "Hospitalizations: 854156 \n",
+ "\n",
+ "\n",
+ "Solution: 81 \n",
+ "Number of closed cities: 27 \n",
+ "Number of open cities: 22 \n",
+ "Energy indicator: -6774163.0 \n",
+ "Anticipated GDP: 6774610 \n",
+ "Hospitalizations: 855129 \n",
+ "\n",
+ "\n",
+ "Solution: 82 \n",
+ "Number of closed cities: 27 \n",
+ "Number of open cities: 22 \n",
+ "Energy indicator: -6769707.0 \n",
+ "Anticipated GDP: 6769917 \n",
+ "Hospitalizations: 858404 \n",
+ "\n",
+ "\n",
+ "Solution: 83 \n",
+ "Number of closed cities: 21 \n",
+ "Number of open cities: 28 \n",
+ "Energy indicator: -6768645.0 \n",
+ "Anticipated GDP: 6769141 \n",
+ "Hospitalizations: 859717 \n",
+ "\n",
+ "\n",
+ "Solution: 84 \n",
+ "Number of closed cities: 27 \n",
+ "Number of open cities: 22 \n",
+ "Energy indicator: -6767070.0 \n",
+ "Anticipated GDP: 6767352 \n",
+ "Hospitalizations: 854308 \n",
+ "\n",
+ "\n",
+ "Solution: 85 \n",
+ "Number of closed cities: 24 \n",
+ "Number of open cities: 25 \n",
+ "Energy indicator: -6762697.0 \n",
+ "Anticipated GDP: 6762927 \n",
+ "Hospitalizations: 853636 \n",
+ "\n",
+ "\n",
+ "Solution: 86 \n",
+ "Number of closed cities: 22 \n",
+ "Number of open cities: 27 \n",
+ "Energy indicator: -6759709.0 \n",
+ "Anticipated GDP: 6760210 \n",
+ "Hospitalizations: 859718 \n",
+ "\n",
+ "\n",
+ "Solution: 87 \n",
+ "Number of closed cities: 22 \n",
+ "Number of open cities: 27 \n",
+ "Energy indicator: -6759543.0 \n",
+ "Anticipated GDP: 6760295 \n",
+ "Hospitalizations: 857417 \n",
+ "\n",
+ "\n",
+ "Solution: 88 \n",
+ "Number of closed cities: 26 \n",
+ "Number of open cities: 23 \n",
+ "Energy indicator: -6758370.0 \n",
+ "Anticipated GDP: 6758902 \n",
+ "Hospitalizations: 853381 \n",
+ "\n",
+ "\n",
+ "Solution: 89 \n",
+ "Number of closed cities: 18 \n",
+ "Number of open cities: 31 \n",
+ "Energy indicator: -6755965.0 \n",
+ "Anticipated GDP: 6756397 \n",
+ "Hospitalizations: 861380 \n",
+ "\n",
+ "\n",
+ "Solution: 90 \n",
+ "Number of closed cities: 18 \n",
+ "Number of open cities: 31 \n",
+ "Energy indicator: -6755929.0 \n",
+ "Anticipated GDP: 6756741 \n",
+ "Hospitalizations: 859480 \n",
+ "\n",
+ "\n",
+ "Solution: 91 \n",
+ "Number of closed cities: 22 \n",
+ "Number of open cities: 27 \n",
+ "Energy indicator: -6745088.0 \n",
+ "Anticipated GDP: 6745297 \n",
+ "Hospitalizations: 854361 \n",
+ "\n",
+ "\n",
+ "Solution: 92 \n",
+ "Number of closed cities: 21 \n",
+ "Number of open cities: 28 \n",
+ "Energy indicator: -6735308.0 \n",
+ "Anticipated GDP: 6735583 \n",
+ "Hospitalizations: 853618 \n",
+ "\n",
+ "\n",
+ "Solution: 93 \n",
+ "Number of closed cities: 24 \n",
+ "Number of open cities: 25 \n",
+ "Energy indicator: -6725149.0 \n",
+ "Anticipated GDP: 6725445 \n",
+ "Hospitalizations: 856323 \n",
+ "\n",
+ "\n",
+ "Solution: 94 \n",
+ "Number of closed cities: 27 \n",
+ "Number of open cities: 22 \n",
+ "Energy indicator: -6721521.0 \n",
+ "Anticipated GDP: 6721773 \n",
+ "Hospitalizations: 861412 \n",
+ "\n",
+ "\n",
+ "Solution: 95 \n",
+ "Number of closed cities: 22 \n",
+ "Number of open cities: 27 \n",
+ "Energy indicator: -6721001.0 \n",
+ "Anticipated GDP: 6721214 \n",
+ "Hospitalizations: 854159 \n",
+ "\n",
+ "\n",
+ "Solution: 96 \n",
+ "Number of closed cities: 26 \n",
+ "Number of open cities: 23 \n",
+ "Energy indicator: -6720111.0 \n",
+ "Anticipated GDP: 6720602 \n",
+ "Hospitalizations: 858143 \n",
+ "\n",
+ "\n",
+ "Solution: 97 \n",
+ "Number of closed cities: 27 \n",
+ "Number of open cities: 22 \n",
+ "Energy indicator: -6704028.0 \n",
+ "Anticipated GDP: 6704002 \n",
+ "Hospitalizations: 860522 \n",
+ "\n",
+ "\n",
+ "Solution: 98 \n",
+ "Number of closed cities: 26 \n",
+ "Number of open cities: 23 \n",
+ "Energy indicator: -6675553.0 \n",
+ "Anticipated GDP: 6675506 \n",
+ "Hospitalizations: 857578 \n",
+ "\n",
+ "\n",
+ "Solution: 99 \n",
+ "Number of closed cities: 25 \n",
+ "Number of open cities: 24 \n",
+ "Energy indicator: -6651266.0 \n",
+ "Anticipated GDP: 6651698 \n",
+ "Hospitalizations: 853717 \n",
+ "\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "Ob6QJHUQafcA",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "source": [
+ "status_types=['closed_cities','open_cities']\n",
+ "frequencies={}\n",
+ "for sol_n in range(len(solution)):\n",
+ " for status in status_types:\n",
+ " n_cities=len(solution[sol_n][status])\n",
+ " for i in range(n_cities):\n",
+ " key=solution[sol_n][status][i]\n",
+ " if key in frequencies:\n",
+ " frequencies[key][status_types.index(status)]+=1\n",
+ " else:\n",
+ " frequencies[key]=[0,0]"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "BFSASwPocjnv",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 850
+ },
+ "outputId": "ae86710d-e3ec-4004-c0b7-5db17364b7b5"
+ },
+ "source": [
+ "frequencies"
+ ],
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "{'Atlanta': [81, 18],\n",
+ " 'Austin': [46, 53],\n",
+ " 'Baltimore': [57, 42],\n",
+ " 'Boston': [64, 35],\n",
+ " 'Charlotte': [45, 54],\n",
+ " 'Chicago': [72, 27],\n",
+ " 'Cincinnati': [29, 70],\n",
+ " 'Cleveland': [32, 67],\n",
+ " 'Columbus': [35, 64],\n",
+ " 'Dallas': [66, 33],\n",
+ " 'Denver': [38, 61],\n",
+ " 'Detroit': [46, 53],\n",
+ " 'Hartford': [53, 46],\n",
+ " 'Houston': [63, 36],\n",
+ " 'Indianapolis': [49, 50],\n",
+ " 'Jacksonville': [72, 27],\n",
+ " 'Kansas City': [34, 65],\n",
+ " 'Las Vegas': [60, 39],\n",
+ " 'Los Angeles': [30, 69],\n",
+ " 'Louisville': [42, 57],\n",
+ " 'Memphis': [54, 45],\n",
+ " 'Miami': [97, 2],\n",
+ " 'Milwaukee': [47, 52],\n",
+ " 'Minneapolis': [33, 66],\n",
+ " 'Nashville': [48, 51],\n",
+ " 'New Orleans': [65, 34],\n",
+ " 'New York': [51, 48],\n",
+ " 'Oklahoma City': [36, 63],\n",
+ " 'Orlando': [87, 12],\n",
+ " 'Philadelphia': [26, 73],\n",
+ " 'Phoenix': [98, 1],\n",
+ " 'Pittsburgh': [37, 62],\n",
+ " 'Portland': [29, 70],\n",
+ " 'Providence': [51, 48],\n",
+ " 'Raleigh': [45, 54],\n",
+ " 'Richmond': [42, 57],\n",
+ " 'Riverside': [72, 27],\n",
+ " 'Sacramento': [49, 50],\n",
+ " 'Salt Lake City': [41, 58],\n",
+ " 'San Antonio': [67, 32],\n",
+ " 'San Diego': [42, 57],\n",
+ " 'San Francisco': [6, 93],\n",
+ " 'San Jose': [7, 92],\n",
+ " 'Seattle': [10, 89],\n",
+ " 'St Louis': [44, 55],\n",
+ " 'Stamford': [52, 47],\n",
+ " 'Tampa': [87, 12],\n",
+ " 'Virginia Beach': [48, 51],\n",
+ " 'Washington DC': [1, 98]}"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 122
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "KnfdhonujMqO",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 986
+ },
+ "outputId": "75d31ac4-41ef-4a82-a1fe-710d2771d049"
+ },
+ "source": [
+ "#Recomendatin Measures: Extream >75%, 50% < Strong <75%, 25%< Mild <50%, Minimal < 25% \n",
+ "Measures=['Extream','Strong','Mild','Minimal']\n",
+ "for action in Measures:\n",
+ " print()\n",
+ " print(action, 'measures are nedded for:')\n",
+ " for city in frequencies:\n",
+ " tmp=frequencies[city][0]/number_of_symulations*100\n",
+ " if tmp > 25*(3-Measures.index(action)) and tmp <= 25*(4-Measures.index(action)):\n",
+ " print(f'{city:20}','{:5.2f}%'.format(tmp),\"(\",frequencies[city][0],\",\",frequencies[city][1],\")\")\n"
+ ],
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Extream measures are nedded for:\n",
+ "Atlanta 81.00% ( 81 , 18 )\n",
+ "Miami 97.00% ( 97 , 2 )\n",
+ "Orlando 87.00% ( 87 , 12 )\n",
+ "Phoenix 98.00% ( 98 , 1 )\n",
+ "Tampa 87.00% ( 87 , 12 )\n",
+ "\n",
+ "Strong measures are nedded for:\n",
+ "Chicago 72.00% ( 72 , 27 )\n",
+ "Dallas 66.00% ( 66 , 33 )\n",
+ "Hartford 53.00% ( 53 , 46 )\n",
+ "Houston 63.00% ( 63 , 36 )\n",
+ "Jacksonville 72.00% ( 72 , 27 )\n",
+ "Las Vegas 60.00% ( 60 , 39 )\n",
+ "New Orleans 65.00% ( 65 , 34 )\n",
+ "Providence 51.00% ( 51 , 48 )\n",
+ "Riverside 72.00% ( 72 , 27 )\n",
+ "San Antonio 67.00% ( 67 , 32 )\n",
+ "Stamford 52.00% ( 52 , 47 )\n",
+ "Baltimore 57.00% ( 57 , 42 )\n",
+ "Boston 64.00% ( 64 , 35 )\n",
+ "Memphis 54.00% ( 54 , 45 )\n",
+ "New York 51.00% ( 51 , 48 )\n",
+ "\n",
+ "Mild measures are nedded for:\n",
+ "Austin 46.00% ( 46 , 53 )\n",
+ "Charlotte 45.00% ( 45 , 54 )\n",
+ "Cincinnati 29.00% ( 29 , 70 )\n",
+ "Denver 38.00% ( 38 , 61 )\n",
+ "Milwaukee 47.00% ( 47 , 52 )\n",
+ "Minneapolis 33.00% ( 33 , 66 )\n",
+ "Nashville 48.00% ( 48 , 51 )\n",
+ "Pittsburgh 37.00% ( 37 , 62 )\n",
+ "Raleigh 45.00% ( 45 , 54 )\n",
+ "Richmond 42.00% ( 42 , 57 )\n",
+ "Salt Lake City 41.00% ( 41 , 58 )\n",
+ "San Diego 42.00% ( 42 , 57 )\n",
+ "Virginia Beach 48.00% ( 48 , 51 )\n",
+ "Cleveland 32.00% ( 32 , 67 )\n",
+ "Columbus 35.00% ( 35 , 64 )\n",
+ "Detroit 46.00% ( 46 , 53 )\n",
+ "Indianapolis 49.00% ( 49 , 50 )\n",
+ "Kansas City 34.00% ( 34 , 65 )\n",
+ "Los Angeles 30.00% ( 30 , 69 )\n",
+ "Louisville 42.00% ( 42 , 57 )\n",
+ "Oklahoma City 36.00% ( 36 , 63 )\n",
+ "Philadelphia 26.00% ( 26 , 73 )\n",
+ "Portland 29.00% ( 29 , 70 )\n",
+ "Sacramento 49.00% ( 49 , 50 )\n",
+ "St Louis 44.00% ( 44 , 55 )\n",
+ "\n",
+ "Minimal measures are nedded for:\n",
+ "San Francisco 6.00% ( 6 , 93 )\n",
+ "San Jose 7.00% ( 7 , 92 )\n",
+ "Seattle 10.00% ( 10 , 89 )\n",
+ "Washington DC 1.00% ( 1 , 98 )\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "6z4L3-gIPr7X",
+ "colab_type": "text"
+ },
+ "source": [
+ "##Seting up for weighted_maximum_cut\n",
+ "https://docs.ocean.dwavesys.com/projects/dwave-networkx/en/latest/reference/algorithms/generated/dwave_networkx.algorithms.max_cut.weighted_maximum_cut.html#dwave_networkx.algorithms.max_cut.weighted_maximum_cut"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "ZF0Y0XD1QUBs",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "source": [
+ "# useful additional packages \n",
+ "import matplotlib.pyplot as plt\n",
+ "import matplotlib.axes as axes\n",
+ "%matplotlib inline\n",
+ "import numpy as np\n",
+ "import networkx as nx\n",
+ "\n",
+ "coupling_map=None\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "LITxH5x9QLmj",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "source": [
+ "from typing import List, Tuple\n",
+ "\n",
+ "seed = 19120623\n",
+ "np.random.seed(seed)\n",
+ "\n",
+ "#VGG: function adopted from the Rigetti's MaxCutQAOA.ipynb\n",
+ "def generate_ising_graph(edges: List[Tuple[int, int]]) -> nx.Graph:\n",
+ " graph = nx.from_edgelist(edges)\n",
+ " weights: np.ndarray = np.random.rand(graph.number_of_edges()) #VGG the old [-1,1] range into [0,1]\n",
+ " weights /= np.linalg.norm(weights)\n",
+ " nx.set_edge_attributes(graph, {e: {'weight': w} for e, w in zip(graph.edges, weights)})\n",
+ " return graph"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "qSMKo1_LP3V2",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "source": [
+ "# Generating a graph if there were no coupling_map\n",
+ "if coupling_map== None:\n",
+ " #define the edges / coupling_map\n",
+ " \n",
+ " #'ibmq_16_melbourne'\n",
+ " elist=[[0, 1], [0, 14], [1, 0], [1, 2], [1, 13], [2, 1], [2, 3], [2, 12], \n",
+ " [3, 2], [3, 4], [3, 11], [4, 3], [4, 5], [4, 10], [5, 4], [5, 6], \n",
+ " [5, 9], [6, 5], [6, 8], [7, 8], [8, 6], [8, 7], [8, 9], [9, 5], [9, 8], \n",
+ " [9, 10], [10, 4], [10, 9], [10, 11], [11, 3], [11, 10], [11, 12], [12, 2], \n",
+ " [12, 11], [12, 13], [13, 1], [13, 12], [13, 14], [14, 0], [14, 13]]\n",
+ " \n",
+ " \n",
+ " elist=[[0,1],[0,2],[0,3],[1,2],[2,3],[0,4],[0,2], [4, 3],[1,5],[3,5]]\n",
+ " #elist=[[0,1],[0,2],[0,3],[1,2],[2,3],[0,4],[0,2], [4, 3]]\n",
+ "\n",
+ " G=generate_ising_graph(elist)\n",
+ " n=G.number_of_nodes()\n",
+ " \n",
+ "#other ways to define the graph \n",
+ " #n=5 # Number of nodes in graph\n",
+ " #G=nx.Graph()\n",
+ " #G.add_nodes_from(np.arange(0,n,1))\n",
+ " \n",
+ " #ewlist=[(0,1,1.),(0,2,.5),(0,3,0),(1,2,1.0),(0,3,1.0)]\n",
+ " #G1 = nx.from_edgelist(elist)\n",
+ " #G1.add_weighted_edges_from(ewlist)\n",
+ " \n",
+ " \n",
+ "#coupling_map = backend.configuration().coupling_map\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "V2O6btKoQrZb",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 265
+ },
+ "outputId": "2944b563-4cfd-495f-b334-08305d6cb506"
+ },
+ "source": [
+ "#Visulaize\n",
+ "print(G.number_of_nodes(),G.number_of_edges())\n",
+ "colors = ['r' for node in G.nodes()]\n",
+ "pos = nx.spring_layout(G)\n",
+ "default_axes = plt.axes(frameon=True)\n",
+ "nx.draw_networkx(G, node_color=colors, node_size=600, alpha=.8, ax=default_axes, pos=pos)"
+ ],
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "6 9\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADnCAYAAAC9roUQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dd1iUV/r/8fcMZQYEBFSaiihSxLImGmMsuMasKbomujFriYlJjDXdfP1tyibZbGLMbmKaKGLv3dhWN5voRsxGY8puLChFEBtSpDMzDDPz/P54ZHQUcMBhngHO67q4ssu0e1Q+nDnPOfdRSZKEIAiC4BxqpQsQBEFoSUToCoIgOJEIXUEQBCcSoSsIguBEInQFQRCcyL2uG9u2bStFREQ4qRRBaKJycyE/X/7fbm72P06SwGwGrRY6dwb3On8chSbk559/LpAkqV1Nt9X5txwREcFPP/3UOFUJQlMnSTB3LixfDrGxDQtNSYKSEvD1hW3bICjI8XUKTqdSqbJru01MLwhCQ23dCsuWgZ9fw0epKhX4+0NODjzzDJhMjq1RcDkidAWhIS5dgrfeglat6jelUJvWrSElRR41C82aCF1BaIj33gOjETQaxzyfSgU+PvDxx1BQ4JjnFFySCF1BqK+8PPj6a3l06kgeHvKFta1bHfu8gksRoSsI9bVzJ1gsoL71j8+fL17k/vR04lNTGXPmDDuKi+t+gFYrTzGInijNllijIgj1dfCg3RfOnmrblj97eOCpVnO2spKp2dnEaDR08/Kq+QEaDRQWyqPp4GAHFi24CjHSFYT6kCQ4flwekdqhi0aD59URsQpQqVRcqKqq/QEqlRzop045oFjBFYmRriDUh8kkr6tt08auu5stFuZeusS+8nKMkkSMVstAH59bv0ZurgOKFVyRCF1BqA+zWR6NqlQ235YAk8mEwWCg0mDAYDBgqKyksrKSkUYjf9BoOKvRkK5WQ1VV3aseqneqCc2SCF1BqA9PTySVikq9nkqj0RquBoMBFaDVatFotfj6+RHg7k5WVhb+/v50Cg+nY0UFyTk5LM7IYJSXFz4+Pvj6+uLl5YVNhKvV4O2t0BsUGpsIXUGoQ3l5Oenp6aSlpZGamkp6ejovFBYSbLGgbtUKrVZLm6v/db/u4ppFkjh79ixIEh3at0etVuPr60ur8nJMKhVhrVtTVl7O5ZwcqkwmfH188PH1pVWrVri5uUFUlHJvWmhUInQFAZAkidzcXNLS0qxfqampFBYW0rVrV6Kjo+nRowdjxowhJjgYj+3bITCw5ucCcnJyyK+sJMvXly5ubrhJEj9UVPBVSQlz27fHy8sLLy8vgtq1w1hVRXl5OcVFReRcvEigmxsHf/2VQW3aEBIS4tw/CKHRqeo6I61v376SaHgjNDdVVVVkZWWRnp5OamqqNWQ9PT2Jjo4mJiaGqKgoYmJi6NixI+ob1+N+9x089VStmyOuXLlCUXExhVVVJGk0ZBiNWIBQDw/GBQQwOiCg1trMhYXkxsay+K67+M9//kO7du0YPHgwQ4YMoVu3bjfXIrgklUr1syRJfWu8TYSu0JyVlZXZhGtqairZ2dm0b9/eGqzR0dFER0cTWMvI9SYWCwwcCKWlcMN62/Lyci7l5ODt5YWnRkNQuxq7+9VMkuTnXL0a7rkHi8XC8ePHSU5OJjk5mdLSUgYNGkR8fDz9+vXDq7a1voLiROgKzZ4kSeTk5NhMDaSlpVFSUkLXrl2t4RoTE0NkZCSa2+2ZsG0bzJkjdwi7upKhsrKS7OxsgoODuZybS9fISHl+1l7FxRAXBzt21Ljb7cKFCyQnJ3Po0CFOnjzJnXfeSXx8PIMGDSJItIR0KSJ0hWbFaDSSlZVlMzWQlpaGt7e3ddRaHbLtr17EcjhJgkmT4MgR8PfHbDaTdfYsbdu0obyiAq1GQ9u2bevzpqCyEvbtgy5dbnn3srIyDh8+THJyMt9//z3t27dn8ODBxMfHExMTg+qGJW2Cc4nQFZqskpISm2BNS0vj3LlzdOjQwWZqIDo6Gn9/f+cWl5sLv/89UlER50pK0Gg0+Lduzbnz5+kaGWl/2FdVQXk5vP8+jBtX7zJMJhO//vqrdRRsMBisAXzXXXfh6elZ7+cUbo8IXcHlWSwWLl26dNPqgfLycptgjY6OJjIy0nWCJCuLnPh43EtLadu1K+cvXMCnVSv754d1OnmU+8Yb8sU5B8jOzubgwYMcOnSItLQ0+vbty5AhQxg0aJD9dQm3RYSu4FKMRiNnzpyxmXtNT0/H19fXJlxjYmIIDQ116Sv2O3bsYOeSJSwOCEA6eJDc4mI6REXdumaTCcrK5BUQH38MQ4c2Sn0lJSX85z//ITk5mSNHjhAREUF8fDyDBw+ma9euYhqikYjQFRRTVFR00+qBixcvEh4ebjP3Gh0djZ+fn9Ll1st///tf5syZw9KlSwnv2JGEBx9k3MWLtK2slENVq5W/1Gp5DthoBIPhWlObxx6DV15xfF/eWlRVVfHf//7XuhpCkiTrNMSdd97pOp8emgERukKjs1gsXLhwwWZqID09HZ1OZxOuMTExRERENPkf8JycHCZPnsw777zDPffcww8//MCHH37Ils2bcfvlF/jmGzh6FNLS5KB1c4OQEOjTBwYPhvvvl0+KUIgkSWRmZloDOCsri7vvvpv4+HgGDhzo/PnxZkaEruBQBoOBM2fO2KweyMjIwN/f32ZqICoqitDQ0Gb3EVan0/HMM8/w+9//ngkTJiBJEk8++SSPP/44w4cPV7q8BiksLOS7777j0KFDHD16lKioKOs0RERERLP7O2xsdYWu2AYs1KmwsNA6aq0O2UuXLhEREWEdvQ4fPpyoqCh8fX2VLrfRWSwW3n77bbp168b48eMBOHjwICaTifvuu0/h6houMDCQUaNGMWrUKIxGIz/99BPJycnMmjULT09P4uPjiY+Pp3fv3jY9JoT6EyNdAZDD5Pz58zaj19TUVKqqqmy2xUZHRxMREYGHh4fSJSti8eLF/PDDDyQmJuLp6YnFYmHcuHG88MILDBo0SOnyHE6SJNLT062rIS5cuED//v2Jj49nwIABTW4e3lnE9IJgQ6/Xk5GRYbN64MyZM7Rp0+am1QNBQUHio+VV33zzDZ9++imrV6+2Lr3au3cvW7duZdmyZS3izyk/P5/vvvuO5ORkfv75Z7p162adhggPD1e6PJchQreFkiSJK1eu2IRramoqubm5dOnSxeYCV1RUFK1atVK6ZJeVmprKrFmzSEhIICYmBpA3JfzhD3/grbfeok+fPgpX6HwGg4GjR49y6NAhkpOT8fX1tQZwr1696rcFupkRodsCmM1msrOzb9q9ZbFYblo90KlTpxb9A1FfhYWFPPHEE7z00ks287bbt29n//79JCQkKFida7BYLJw+fdq6GiI3N5eBAwcSHx/PPffc0+J+oYvQbWZ0Op21sXb16DUzM5OgoKCbdm+1a9euRXzsbSxGo5Hp06dz9913M23aNOv3KysrGT16NB999BFxcXEKVuiaLl++zKFDhzh06BD/+9//6NGjB0OGDGHw4MGEhYUpXV6jE6HbREmSRH5+/k2ds/Lz84mMjLS5wNW1a1e8xREvDiVJEu+++y4VFRXMmzfPZpfZ2rVr+d///sdHH32kYIVNg06n48iRIxw6dIjvvvuOwMBA62qI7t27u8aOQ0mC8+flU5hPnZIPH3Vzg44doVs3uftbPdZVi9BtAkwmE9nZ2TetHnBzc7upc1Z4eLiYHnCC9evXs3v3bpYtW2bzC62iooLRo0ezaNEiIiMjFayw6bFYLJw4ccI6DVFcXMygQYMYPHgwd999t/MHDjod/OMfkJgI587JuweNxmsHj6pU4OEh91AeMULuj9Gr1y2fVoSui7nx3K20tDSysrIICQmx2RYbExNDGzuP+hYc6/Dhw7zzzjusXLmS0NBQm9uWLFnC+fPneffddxWqrvm4ePGi9ULciRMn6N27t3UU3Og9go8ehRdfhPx8OVi9vW865dnKbJYbzKtU8PDD8PbbUMdyOWVCV5JqfwMtxPXnbl2/weD6c7eqQzYyMlKcBOAisrOzmTJlCn//+9/p3bu3zW0lJSWMHj2a1atX06FDB4UqbJ7Ky8s5fPiwdRoiNDTUuhoiNjbWcdMQkiQ3GUpMlHtg1Gc7tsUih29goHzCR2xsjXdr/NDV6+Hrr+Hf/4ZffoGLF+UeoZ6e0Lkz9O0L990HQ4bI8yTNUPW5WzeuHrj+3K3qEWyN524JLqG0tJTJkyfz5JNP8vDDD990++eff055eTmvv/66AtW1HGazmV9//dU6Cq6oqLAGcL9+/Rp+8ockwdy5sHy5PFJtaB6VlYFGA1u2wNUlhNdrvNDV6WDBAli1Sp4HkSS5q5KnpzzKlSS5G75eL/9G8fODWbPgiSeadPjWde7WjasHRP/SpsNsNvPiiy8SERHBq6++etPt+fn5/PGPf2Tjxo3ieBwnO3funHUe+PTp0/Tt29d6VFG9Tuj48kt49dXbC9xq1a059++HG7bAN07o/vQTvPCC3D3fx0eeE7kVg0EO4O7d4dNP7TqWRElOP3dLUNT8+fM5c+YMn3/+eY0XKj/88EM0Gg0vvfSSAtUJ1UpLS/n+++9JTk7m8OHDdOzY0ToPHBUVVfsSycuX5U/cIA8OHaGoSG7R+cEHNt92fOju3i33AXVzq397OkmSl2NotfKcyJ131u/xjcQlzt0SFLNr1y5WrlzJypUra+wncPHiRSZNmsT27dtF20MXYjKZbHoEm0wmawD36dPHtoXo7NnyoZ8BAY4rwGKRR7y7d9vM7zo2dA8cgKlT5aOnb2dkV1EhL8/Yvr3GOZHGdP25W9UXuFzm3C3B6X799VdeffVVlixZQkRERI33efvttwkLC7PZICG4FkmSyMrK4tChQxw8eJDMzEz69evH4MGDGdyzJ/7Dh0OrVnZPK5wzGhmXmckwX1/+2r597XcsKoI//lGeK77KcaGbnw/DhsnLJxxxpb2kBMLD5RNQG6GptT3nblVvMHCpc7cEp7l8+TKTJ0/mrbfeYsCAATXeJzMzk2nTpvHll1/io2DjcaF+ioqKrEcVtdq9m+kXL+LWpg2+Pj54ajTcam3VrHPnqLRYCPXwqDt0TSZ56vTYMWuOOa6f7ptvyhfPHDX68/ODs2dh4UK4zXkyo9FIRkaGzQWu68/diomJYeTIkcyePdvlz90SnEOv1/PKK6/w+OOP1xq4AImJiUyaNEkEbhMTEBDAyJEjGTlyJObycoy7dlFSVcW58+cB8PX1xdfHB29v75vmgf9VWoqvWs1vvLw4bzTW/ULV/YXT0+XrVbdgf+ieOSNfpXPkeU4qlTwnnJQEzz4rD/3tUNu5W506dbJui7333nub5LlbgnNYLBbeeecdoqKimDhxYq33S0lJ4fjx42IjRBPnduwYXv7+eGm1BCP3zigrKyMvPx9jZSWtfHzw9fHBx8cHA5CYn09ieDg7iovtewGzWd4+7NDQXbv2lhsejBYL8y5f5qhOR6nZTAcPD54LCmJAXSMEDw959Lx7N4wbZ3NTTedupaWlodfrraPXfv36MWnSpGZx7pbgPEuXLiUvL4/FixfX2RBo0aJFPP3002gddbVbUEZBgXVKVAVoNRq0Gg3t2rbFZDJRXl5OaWkpOZcvs9pi4bdaLUH1adRvNMrTr3awP3R37brlSNQMhHh4kBQeToiHB/8pL+dPFy+ysXNnwuoKRLUa87ZtnO7Zs85zt8aMGUN0dDQhISGic5bQYAcOHGDnzp2sXr26zl/Uv/zyC9nZ2TzyyCNOrE5oFBZLjQNGs8VCpdGIyWxGpVJxTpL4pbKST+s7gFOp5Newg32he+UKFBffci7XS61mart21v8/2NeXMA8PThsMNqFrMpkwVFZiMBioNBgw6vVI//gHcz08iImNbXHnbgnOk5aWxty5c/niiy/q7GshSRILFy5k2rRpLfZoombFxweLyUSlxYJer8eg16M3GKiqqpJHvV5e+Pr6kuPpSXlhIS+YzZCWhl6SMEsSmVlZrOvcufbnV6tv2iBRG/tCNyPj2i6zerhiMpFdWUnbqiry8vKsQStJElqtFq1GQysfH9q0bYtGr2fdp5+C2OkjNJLCwkJmz57NnDlz6NatW533PXz4MCUlJTz44INOqk5wJIvFwrlz5zh58iQnT55kYHExHXNyMHl5ofXywsvbm8DAQDQajc2n5j9aLIy8bhfpmitXuFRVxWshIXW/oKcnREfbVZt9oVtRIc/n2kkCUjMyeLusjP5ubvhXVKDy9iYgIACtRoO7h8fNyzWMRnluVxAaQVVVFf/3f//HQw89dMtj0i0WCwkJCcyYMUOscmkCJEkiLy/PGrApKSmkpKTg7+9P9+7d6d69O+Fjx9J+0ybUt9gyrFWr0V73d+6tVqNRqQio6wRkSZJ7zdziF3k1+0LX3b1eo1yLJPFxRQW+Xl487+2N3mCg0mjEy8sLo5cX3l5eaLRa1Nc/pyQ16X4MguuSJIl58+YREBBg1+aGf//736jVaoYOHeqE6oT6Ki0ttYZrddBKkmQN2EmTJhEXF2e7semuu+SNWPXsfnj9dGmtysrk57dzZZd9oRscbPcksSRJvJeTQ4W7OwvatyfQ1xcJeR2tXq9Hr9NRUlKCsbJSnmLw8sJbq8W7qgr3+jSuEAQ7bdy4kZMnT7J8+fJbjlzNZjOLFi1i9uzZ4mKtCzAYDKSmplrD9eTJkxQWFtKtWze6d+/OiBEjmDNnDsHBwXX/fUVHQ8+ecOJEnX1w602S5GycOtXuh9gXul26yE9sscgTxnX44PJlsoxG3gsMxHJ1UbEK0Hh6ovH0xP/qbwOzxYLBYECv01FRWEimxcLrf/gDPXr0oGfPnvTq1YvY2FjRREa4LUeOHGHlypWsWLHCrlMJ9u7dS0BAAP3793dCdcL1zGYzZ86csZkmOHfuHF26dKF79+7cc889PPPMM0RERDRs2uf//T+YOFFeU+uoT9VlZRAVBfHxdj/EvtD18JB/S5w8WecVupyqKrYXF+OpUjGxogKz2YymoIDXQ0J48Iaht5taTStvb1p5e4ObGyHjx7NkxgyOHz/OsWPH+Prrr8nMzKRLly707NnT+hUWFiZGIIJdzp07x1tvvcW8efPsOgzRaDSyZMkS/vKXv4h/Y41MkiQuXLhgDdcTJ06Qnp5OSEgI3bt3Jy4ujjFjxtC1a1fHrb+/+255L8CGDfJKrNv9O67eqfbZZ9d2pdnB/t4Le/bAyy/bPW9hqKzkwoULdL3VGVKSJHdi37lTPvztOpWVlZw6dYrjx49bv8xms81ouFu3buJARuEmZWVlTJ48mYkTJzJmzBi7HrN582a+++47Pv/880auruUpKCiwhmv1hS5vb2/i4uLo0aMHcXFxdOvWrfGPatfpYOxYSE2Vs6yhwVtVBeXl8Ne/woQJN93smIY3lZXQv7+c7nY0u5EkidTUVKKio3Gr66NASYl81W/XLrueMy8vj2PHjnH8+HFOnDhBWloa4eHhNqPh8PBwMVJpwSwWCy+99BIdOnRgzpw5dj1Gr9czevRoPv30U2JrOYJFsE95ebk1WKunCgwGgzVcqy94Kdbgv6gIHn8cTp9uWDPzigo5dN98EyZPrvEujusytncvPP+8/BvCjjmVrKwsgkNC8K4tpE0m+TfPjh03jXLtZTQaSUtLsxkNV1RU0KNHD3r16kXPnj3p3r27aFbSgnz66aekpaXxxRdf2H1q8qpVq0hJSeHDDz9s5Oqal+qfv+pR7MmTJ8nPzyc6Otoart27d3e9aUGdDj76SO7prVLJ06a3yjSjUQ7cNm3gk09g4MBa7+q40JUkmDFDPg/NjjmRnJwcNFotgTU1DbZY5FHu88/fdoexGxUUFFgD+MSJE5w6dYrQ0FDrSLhXr14Nn4wXXNqePXtYunQpq1evtrvZUXl5OaNHjyYpKYnOde06auEsFgtnz561ThGcPHmSrKwsOnXqZA3XuLg4unTpYvcvO8X98ot8SOXRo9cusGm11wLYaJTbNnp4yP3Dn3gCpk+/5e4zxzYx1+nkOYzjx28ZvEVFRegNBsJuOMLaGrgjRsjH9jRy+JlMJjIyMmxGw4WFhXTv3t06Gu7RowetHdlBTXC6Y8eOMXv2bBYvXkyXehwFlZiYSG5uLm+//XYjVte0VB9Vdf0UwenTp2nbtq3NFEFMTEzzWGF07px8QMPRo3K2lZfLARwaKq/B7dcPhg61++AGxx/XU1EhHzB56JB8Vnwthej1enIuX6bL9aOHigr5t8eECfDOO4ptiCgqKuLEiRPWED558iRt27a1GQ1HRkY2nd/YLVxubi6TJ0/mjTfeYNCgQXY/rrCwkEcffZS1a9fatcKhuSoqKrIJ2JSUFNzc3GymCLp16yZapdqpcQ6mlCTYulUOzspKOXhvmLu1XL2YFhMdjVqnk+dwAwJg/nwYPLjBb6gxWCwWMjMzOXbsmDWMc3NziY2NtY6Ge/bsKU73dUEGg4EpU6YwfPhwnnjiiXo9dv78+ZhMJrsvuDUHOp2O06dP2+zqKi0ttY5gq/8rTjxuuMY7gh3kK4E7dsiNyAsK5JGr0ShPIbi5cTE/n3b+/njGxcG0afDAA4456scJqrcbXj8/7Ovrax0J9+zZk6ioKNGFSkGSJPH666/j4eFR7/W1eXl5jBs3js2bN9fvGO8mpKqqioyMDJtR7MWLF4mKirKZJujYsaO4xuFAjRu61SRJPuL41Cm4cEFeUqHRsHT/fsKGDeOhxx9vUPGupLpz0fWj4QsXLhAdHW0N4h49eogRghMtW7aMQ4cOkZSUVO9F9HPnzsXX15fnn3++kapzLovFwvnz5222zGZkZNC+fXubaYLIyEgxUGhkjjsjre5XkSedb7ho5q1Wc+LCBR5y2AspR61WExERQUREBKNGjQLkj2rVo+Hdu3czd+5cPD09baYkYmNjxakWjeDf//4327Ztu2Uz8pqcP3+e/fv38+WXXzZSdY2vurNW9Sg2JSUFPz8/a7gOGzaM2NhYsXnIxTgudGsRExPDN99809gvoxhvb2/uuusu7rrrLuDa9sbq6Yh9+/Zx9uxZIiMjbUbDoaGhrrVusYlJT0/n/fff5/PPP2/Q1MDixYsZP358k7kwVFpaat1wUL1ky2w2W+dgH3/8cbp160ZATcszBZfiuOmFWpSVlfHQQw9x8ODBFjtnZDAYbLYzHzt2DMBmF123bt3waiJz3UorKiriySefZNasWdx///31fnxGRgYzZ85kx44dLjkKrKystOmslZKSQkFBAbGxsTbrYcUvbtflnOmFWvj6+hIYGEh2dnaLXXiu1Wq54447uOOOOwB5NHz58mXraPjzzz8nIyODTp062awb7tixo/ihukFVVRVz5szhgQceaFDggnzY5OTJk10icM1mM5mZmTaNX86dO0fnzp3p3r07/fr14+mnnxabeZqRRg9dkKcYUlNTW2zo3kilUhEaGkpoaKj1FAOj0cjp06c5ceIEhw4dIiEhAYPBYDMa7t69e+M3BHG20lL5AqzZLO8E6tix1o5NkiTxt7/9DV9fX6ZPn96gl6veofjBBx/cTtUNIkkSFy9etJkiSE1NJTg42Nr4ZdSoUURHR4trAM2YU0I3NjaW1NRUHnjgAWe8XJNUffGtV69e1u/l5eVZV0kkJSWRmppKWFiYzWi4yY2AJEne8bN2LXz3HeTmylssq09TtViga1d4+GF49FG4br52y5YtHDt2jBUrVjT4PS9cuJApU6Y4JdQKCwtttsyePHkSrVZrbfwybdo0unXrJvqCtDCNPqcL8P3337NmzRoWLVp028/VkplMJtLS0jhx4oS101ppaSndu3e3joZ79OjhuheHUlJgzhy5rZ7ZDK1a3XzgqcUi73U3GuXvjx0Lr73G0VOnePPNN1m5cmWDd479+OOPvP/++2zduhX3evQ/tUdFRQWnTp2yWa6l1+tt1sLGxcU12/XAgi3nrNOtw5UrVxg7diz79+8Xc5QOVj2aqr5Il5KSQrt27WyWrEVGRio7GrZY4PPPISHhWkcne/4dmM1QWkqljw+varVMXriQPn36NKgESZJ4+umneeyxx277hF+j0UhGRoa1q1ZKSgqXL1+26awVFxdHhw4dxL/3FkrRC2kAbdq0wdPTk8uXLxN6Y/Mb4bYEBgYSHx9P/NXjQqqPPKkeDa9bt478/Hzi4uKsy9V69uzpvKVFFgu8+qq8a9HPr14d9nFzw9y6NfkZGcz18cG3uLjBZRw6dAidTlfvi2/VnbWunyLIzMwkPDycuLg4evfuzcSJE0WfDsFuThnpArz44os88sgj4oRVBZSWltqMhk+cOIG/v7/NRbqoqCiHf+QG5M76K1bIHenqOdqWkDcxeHh4EOrvL085bN4MvXvX63ksFgsTJ05k+vTpDBkypPbXkyRyc3NtpghOnz5NQECAzY6umJgYtFptvWoQWhbFR7pwbQWDCF3n8/PzY8CAAQwYMAC4NnqrDuFt27Zx6dIlYmJibEbD7ew5frouP/wAq1bZ3fT+Rnl5eUgWCyHBwfJ0RFWV3H/5X/+qV/+Ob775Bk9PT+ungWolJSU2a2FPnjwJQI8ePejevTuTJ08mLi5OtPwUHMppI90DBw6we/duPvnkE4c8n+BY1UesVG/eOH78ON7e3jaj4ZiYGPuv+huNMGSI3BCpAVfnS0pKyM/PJ6JzZ9yv/9heVCQ3TrKzK5jJZGLs2LG8/PLL+Pr62kwTFBcXExcXZ3OxKygoSMzDCrdN8QtpAJcuXeKZZ55h3759Dnk+oXFJksT58+dtGr9nZ2cTFRVlXSXRq1cvgoODaw6pr76SR6UNWEmh1+s5d/48EZ063dwgu6pK/vrpJ7mXcw1MJpP1KO+tW7dy9OhRgoOD6dq1q800QXh4eNNabic0GS4xvRAaGorBYKCwsFD0pG0CVCoV4eHhhIeHM2LECEAOw+rtzF999RUfffQRarX6pu3MWq1WbvVph1KzmXdzcjhSXo6/uzvTAwOJvnKFsLCwmk8k8PCQTy/Ztw/+8AcsFov1KO/qaYK0tMu7p8gAAB2ySURBVDTCwsKIiYnh9OnT/P3vf2fkyJGis5bgEpwWuiqVyjqve8899zjrZQUH8vLy4s477+TOO+8Erh3pUj0S/uSTT8jMzCSmY0c++vZb1AEBeBmNeHh6UtsH9nmXL+OhUvGv6GhO6/XMyMggITiY6FqmJKpMJqr0erI++YSE/fs5deoUPj4+1mVa9957r7Wz1oYNG6ioqGD06NGN9CciCPXntNAFrCMPEbrNg0qlIiwsjLCwMOtSrMrKSrJ37kT97beUlZeTl5+PRZLw9vLC6+qX1ssLN7UavcXCgbIyNnfpgpdaTVBxMfdotXyvVtMXMFssGPR69Ho9eoMBvV6PJEn4eHrS9uJFJsybR1xcXI2fnHQ6HStWrGDBggVO/lMRhLo5PXSTk5Od+ZKCk2k0GqI9PcHXl9ZX53OrTCY5OHU68vPzMRgMeHp6ctHDA8lsJhjIz89Hr9cTo9XyS2EhGWVlmEwmtFotXlotfn5+BAcH4+HhgUqSoLCQ4H795B1tNdi4cSN9+/YlOjraie9eEG7NqaEbGxtLkp1zfUITVn1c01Ue7u54+Prid/XYaoskUVlZybmiIjRmM+lpaUiAt5cXGrOZKrWaDh06oNFoap6WUKnkJWiVlTWGbmlpKevXr2f58uWN8/4E4TY4NXQjIiIoKCigvLxcNPlozqob2NRCrVLh5uaG2mSi3GwmKDSUwMBA3N3cOHzlCgE6Hdq6jrqWJPmrllHumjVr+O1vf0t4ePjtvhNBcDinrpdRq9VERUWRlpbmzJcVnC08XD6gtAbGqiou5eSQlZVFJ09PPLRaDK1bW9fiplVW0qWuwAV5yVhgoHwC9Q2uXLnCtm3bmDJlym2/DUFoDE5fpFh9MU1oxmJi5GC8bg24saqKnKth6+7uTtfISDoFBzPMz4/E/Hz0Fgu/6nQcLCtjxK12gBkM8Jvf1HjT8uXLGTFiBCEhIY58R4LgME6dXgA5dP/3v/85+2UFZ/LxgdhYOHMGo0bDlYICSsvKCAgIIDIy0maH2Z9CQvjLpUv8Li2N1m5uvBYScuuRrsUCw4bd9O2cnBz27dvH1q1bHf2OBMFhnB66sbGxbNq0ydkvKzhZ4dixSK++SoHRWGPYVvNzc+Pjjh3tf2KTSe5U9vvf33TTkiVLePTRR8XmG8GlOT10IyMjOXfuHJWVlTXvOBKatMuXL7N8+XIOfvUVa7y9iWzTBverqxYcoqwMJk2Se/JeJzs7m+Tk5CZ9pLrQMjh9TtfT05NOnTpx5swZZ7+00IguX77MBx98wIQJE2jdujWbdu4kaNUq3E0mm+Vjt6WiQr6ANnv2TTctXryYiRMn4uvIgBeERqBIt4/Y2FhxMa2ZyM3NZd68eUyYMAFfX1+2b9/OrFmz8Pf3h6FDYcwYKC62uajWIEajfHHus89uGuWmpaXx888/M27cuNt7DUFwAqdPL4BYwdAc5ObmsmLFCv71r38xevRotm/fLgftjd5/HwoL4dtv5Y5jDTldQa+XN0J89BFc7Ql8vYULF/LUU0/hVY8eu4KgFMVGuqmpqUq8tHCb8vLy+PDDDxk/fjytWrVi27ZtPP/88zUHLsgbGBITYcIEeT62vNz+F7NY5FGymxssXgyPPHLTXY4dO0ZGRgZjxoxp4DsSBOdSZKQbHR3NmTNnMJvN4lypJiIvL4+VK1fyz3/+k0ceeYRt27bZf86ah4d8bM/IkfJ8bF6eHKg+PjefmSZJ8lSCTifvarvvPnjvPZuj2K/dVWLBggVMnTrVKUeqC4IjKBK63t7eBAUFcfbsWSIjI5UoQbDTjWG7devWhi/JuvtuSE6G//wHVq6EI0fki2PVwStJ8rxtUBCMGwcTJ0JERK1Pd/ToUQoKCqz9fgWhKVAkdOHaFIMIXdd0fdg+/PDDtxe211OrYfBg+UuS4NIluHhRPm7dywu6dLHrtAlJkkhISGD69Oni05LQpCgWutUX0x566CGlShBqkJ+fz8qVK9m3b59jw7YmKhW0by9/1dO3336LyWTivvvua4TCBKHxKBq6ovWe68jPz2fVqlXs3buXUaNGNW7Y3iaLxcKiRYt44YUXxBlnQpOjaOimpaVhsVjED46CCgoKWLlyJXv37uX3v/89W7ZsoU2bNkqXVad//vOf+Pj4MHDgQKVLEYR6Uyx0AwIC8Pb25tKlS3To0EGpMlqsgoICVq1axT/+8Q9GjhzZJMIWoKqqisWLF/PWW2+Jo9KFJkmx0IVrF9NE6DpPQUEBq1evZs+ePU0qbKvt2rWLDh060KdPH6VLEYQGUfRzvdgk4TxXrlxh/vz5PPbYYwBs3ryZV155pUkFbmVlJcuWLWPWrFlKlyIIDaboSDcmJoZt27YpWUKzd+XKFVatWsWePXsYMWIEmzdvpm0NGw2agi1btliPWheEpkrx6QXRg6FxFBYWsmrVKnbv3s2IESPYtGkT7dq1U7qsBquoqGDVqlUsXrxY6VIE4bYoGrpBQUGYzWYKCgqa7OjL1RQWFrJ69Wp27drFQw891OTDttq6deu455576NKli9KlCMJtUTR0VSqVdZPEoEGDlCylybs+bB988EE2btxIUFCQ0mU5RElJCZs2bWLVqlVKlyIIt03R0IVrF9NE6DZMYWEha9asYefOnTzwwAPNKmyrrVq1ivvuu0+schGaBZcI3W+++UbpMpqcwsJC1q5dy44dO5pt2IK8U27Hjh1s3LhR6VIEwSEUD92YmBgWLFigdBlNRlFREWvWrGn2YVtt+fLljBo1qlm/R6FlUTx0O3bsSHFxMaWlpfjZ0V2qpbo+bO+//342bNhAcHCw0mU1qosXL/LVV1+xfft2pUsRBIdRPHTVajVRUVGkpaXRt29fpctxOcXFxaxZs4Yvv/yS4cOHt4iwrZaUlMQf//jH2k+lEIQmSPHQhWvrdUXoXlNcXMzatWvZvn07w4cPZ/369YSEhChdltNkZmby/fffiyPVhWbHJUI3JiaGH3/8UekyXML1Yfu73/2uxYVttcTERCZNmoSPj4/SpQiCQ7lET0WxM01ei5qQkMCYMWMoLS1l3bp1vPbaay0ycFNSUjh+/Li1T4QgNCcuMdLt3Lkzly5dwmAwoNVqlS7HqUpKSli3bh1bt27lvvvuY926dYSGhipdlqIWLVrE008/3eL+LQgtg0uEroeHB507dyY9PZ2ePXsqXY5TlJaWsnbtWmvYrl27lrCwMKXLUtwvv/xCdnY2j9Rw3LogNAcuEbpw7cy05h6614ftsGHDRNheR5IkFi5cyLRp0/Dw8FC6HEFoFC4Tus29t271PO2WLVu49957RdjW4PDhw5SUlPDggw8qXYogNBqXCd2YmBh27dqldBkOV1payvr169myZQtDhw4VYVsLi8VCQkICM2bMEGfmCc2ay4RuVFQUmZmZmEwm3N1dpqwGKy0tZcOGDWzevJnf/va3rF69mvYNOGq8pThw4ABqtZqhQ4cqXYogNCqXSTcvLy/CwsLIzMwkOjpa6XIa7PqwHTJkiAhbO5jNZhITE5k9e7Y4bFJo9lwmdEGeYkhNTW2SoVtWVsaGDRvYtGmTCNt62rt3L4GBgfTv31/pUgSh0bnU5FlT3CRRVlZGUlISjzzyCJcvX2bVqlW89dZbInDtZDQaSUpKYubMmWKUK7QILjfS/fbbb5Uuwy7l5eWsX7+eTZs2ER8fz8qVK+nYsaPSZTU5O3bsoHPnzvTu3VvpUgTBKVwudNPS0rBYLC57Bbu8vNw6jTBo0CARtrdBr9ezfPlyPv30U6VLEQSncanQ9fPzw9/fnwsXLhAeHq50OTbKy8vZuHEjGzduZODAgSxfvtzlamxqNm/eTO/evYmNjVW6FEFwGpcKXbi2M81VAq2iooKNGzeyYcMGEbYOVFZWxpo1a1i6dKnSpQiCU7lk6KampjJ8+HBF67g+bAcMGCDC1sHWrVvH4MGDiYiIULoUQXAqlwvd2NhYNmzYoNjrV1RUsGnTJtavX8+AAQNYtmwZnTp1Uqye5qiwsJDNmzezdu1apUsRBKdzudCtHulKkuTUJUTVYbthwwb69+8vwrYRrVy5kgceeEBshxZaJJcL3bZt26JWq8nLy3PKWWA6nc46jdC/f3+WLFkiPvI2ory8PPbs2cPmzZuVLkUQFOFaoVtSguqrr3gtLw/N/feD0QgWC/j4QFwc9O8Pw4dD1663/VI6nc46jXD33XeLsHWSpUuXMnr0aNq2bat0KYKgCNcI3bw8mD8fvvwSzGbuKCnB4uEB1SNdoxF++AG++06+X+/eMGcO9OtX75fS6XRs3ryZdevW0a9fP5KSkujcubOD35BQk/Pnz7N//35x2KTQoikbupIEO3fCn/8MOh34+oK7O2o3N8qKiwl0c5Pv5+YGnp7XHnPsGEyYAOPHw2uvgbf3LV9Kp9OxZcsW1q1bx1133SXCVgGLFy9m/Pjx+Pn5KV2KIChGudCVJPjwQ1iyBLy8ICDAepNWoyHXYKj5cSoV+PmB2Qzr18Mvv8DatTaPv971Ydu3b18SExPp0qVLY7wjoQ4ZGRkcPXqU119/XelSBEFRyoXuZ59BUhK0bi2PZK/j4emJ2WLBZDbjfsNtVm5u4O8PqakwaRJs3mwz4tXpdGzdupW1a9eKsHUBixYtYvLkyXjb8alEEJozZRoc/PgjLFggj1hrCFUVoNVqMdQ22rXeUSWH9qlT8NFHgLyff/Xq1TzyyCOcOnWKxMRE5s6dKwJXQSdOnODUqVM8+uijSpciCIpz/khXr4eXXgJ3d/mrFtWh69OqVd3Pd3W6wbJqFXuBz7/7jj59+rBo0SIiIyMdW7vQIAsXLmTKlCl4Vs/LC0IL5vzQ3bsXcnPlqYE6aLVaysvLb/l0FouFouJiDLm5tN+0iUW7domwdSE//vgjly5dYtSoUUqXIgguwbmhK0mweDHYcbz2nspKtl65Qm5ZGff7+fHODbuXLJJEUVERVwoK8Pb2pm3nzrSvrLTruQXnqD5Sffr06c3i3DtBcATnzuleuABZWXYt8QrVahnj5sbIG5YXWSSJK4WFZGRkoNfpCO/UiQ4dOqD18pI3Uuzf31jVC/V06NAh9Hq94s2LBMGVODd0T50CtVqeh72FYX5+DG7VilaSBNQQtuHhcthqNNce5OYmb6IQFGexWFi4cKE4Ul0QbuDcz3ypqVBZKW+CsINWo6HKYEBnsZCRkYG3lxfhHTui1WpreYAWTpxwYMFCQ3399ddoNBri4+OVLkUQXIpzQ7eoSB7p2snL25uSvDyqNBrCIyJqD9tqbm5gx8U3oXGZTCYSExN57bXXxGGTgnAD537uq+fFFD8/Pzw1GlSA5vpphNpIUo3rfgXn2rNnDyEhIfRrQG8MQWjunBu6HTrYNZ9bTa1S0SYwEEmSOH/hApar87u1qqqCkJDbLFK4HUajkSVLljBz5kylSxEEl+Tc0O3Wze4lXWZJwmixIAE+fn6Y1WqysrMxWyy1P8hgaFDnMcFxtm3bRkxMDD179lS6FEFwSc6d0+3WTV7WZTbfchpgWUEBSQUF1v+/D/ijpyd/yM4mvGPHmtd9urnBXXc5uGjBXjqdjhUrVpCQkKB0KYLgspwbuj4+MHKk3M6xlq5g1aa2a8fUdu1svicB+fn5nM3OplN4OB7Xj5qNRtBo4N57G6FwwR4bN26kb9++REVFKV2KILgs5y+gnDxZnteta5qgFiogqF07AgICOJudTaXReO3Gigp4/HF52ZjgdKWlpaxbt47p06crXYoguDTnh26vXvDww1Ba2uCnaBMYSLu2bcnOzkZvMMiBGxgI4uKNYtasWcPQoUPFMfWCcAvKbBV6+215euE2gtff35+QkBAunT2LobxcPsZHnEigiCtXrrBt2zaeffZZpUsRBJenTOj6+cGaNfJUwG0Er59WS/vWrVng48MhB5Yn1M/y5csZMWKEU05vFoSmTrlN8bGxsGWL3OKxqKh+c7ySBCUloNejnTePB7Zs4a9//Sv79u1rvHqFGuXk5LBv3z6eeuoppUsRhCZB2U4kMTFyV7CxY6GsTA5fk6n2+0uSPDIuLYXISNi9GyZNokePHixatIgvvviCzZs3O69+gSVLlvDoo48SGBiodCmC0CQo3+TU1xfmzYMnn5SnHLZvl79vNss7zEDu1+DpKQfyHXfA1KkwdKjNtuLIyEiWLl3KzJkzKSsr4+mnnxb7/htZdnY2ycnJ4kh1QagHlVTH1tq+fftKP/30kxPLQe5Clp4OKSmQny8HbevWEB0tb664xfregoICnnvuOfr168dLL70k2go2otdee43o6GgxtSAIN1CpVD9LktS3xttcLnQdoLS0lBdffJGIiAjefPNN3EQTHIdLTU3lhRdeYMeOHXh5eSldjiC4lLpCt1kOA/38/Fi4cCH5+fn86U9/wnj9JgrBIRYtWsTTTz8tAlcQ6qlZhi6Al5cX8+fPx83NjZdeegmdTqd0Sc3Gr7/+SkZGBqNHj1a6FEFocppt6AJ4enoyd+5cwsLCmDFjBiUlJUqX1ORJkkRCQgJTp04VR6oLQgM069AFUKvVvPHGG/Tp04dnn32W/Px8pUtq0n744QcKCgoYMWKE0qUIQpPU7EMXQKVS8cILL/DQQw/xzDPPcOHCBaVLapKqj1SfMWOGuDgpCA3UIkK32uTJk5k8eTLPPvss6enpSpfT5Hz77beYTCaGDRumdCmC0GS1qNAFGDNmDC+//DKzZs3i2LFjSpfTZFgsFhYtWsTMmTPF2mdBuA0t8qdn+PDhvPPOO7zyyiscOXJE6XKahH/+85/4+PgwcOBApUsRhCatRYYuwIABA/joo4/485//zP79+5Uux6VVVVWxePFinnvuObG1WhBuU4sNXYDevXuTkJDA3//+d3bu3Kl0OS5r165ddOjQgTvvvFPpUgShyWvRoQsQHR1NUlISS5cuZc2aNUqX43IqKytZunQps2bNUroUQWgWWnzoAoSHh7Ns2TJ27txJQkICdfWjaGm2bNlCjx49iIuLU7oUQWgWROheFRQUxNKlSzly5AgffPABlgYcnNncVFRUsHr1ambMmKF0KYLQbIjQvY6/vz+JiYmcPXuWN998k6rqfr4t1Lp16+jfvz9dunRRuhRBaDZE6N6gVatWfPHFFxgMBmbPno3BYFC6JEWUlJSwceNGpk6dqnQpgtCsiNCtgUaj4W9/+xv+/v7MmjWLsrIypUtyulWrVvG73/2ODh06KF2KIDQrInRr4e7uzjvvvENsbCzTpk2jsLBQ6ZKcJj8/nx07dvDMM88oXYogNDsidOugVqt59dVX+e1vf8uUKVPIyclRuiSnWLZsGaNGjSIoKEjpUgSh2RGhewsqlYqpU6cyduxYpkyZQlZWltIlNaqLFy/yr3/9i8mTJytdiiA0SyJ07TR+/HhmzpzJtGnTSElJUbqcRpOUlMS4cePw9/dXuhRBaJaUP4K9CRkxYgQ+Pj68+OKLzJs3jz59+ihdkkNlZmby/fffs2PHDqVLEYRmS4x062nIkCF88MEH/OlPfyI5OVnpchwqMTGRSZMm0apVK6VLEYRmS4RuA/Tt25fPPvuM9957j7179ypdjkOkpKRw/PhxHnvsMaVLEYRmTYRuA8XFxZGYmMiCBQvYtGmT0uXctkWLFvHMM8+g1WqVLkUQmjURurehS5cuLF26lI0bN7JkyZIm2yjnl19+ITs7m4cffljpUgSh2ROhe5vCwsJYunQpBw4cYP78+U2uUU71kerTpk3Dw8ND6XIEodkToesAbdq0ISkpiZMnT/Luu+9iNpuVLsluhw8fprS0lAcffFDpUgShRRCh6yC+vr4kJCRQWFjInDlzMBqNSpd0SxaLhYSEBGbMmCEOmxQEJxE/aQ7k5eXFxx9/jKenJy+88AI6nU7pkup04MAB1Go1Q4cOVboUQWgxROg6mIeHB++//z7h4eFMnz6dkpISpUuqkdlsth6pLg6bFATnEaHbCNRqNa+99hr9+vXj2WefJS8vT+mSbrJ3717atGlD//79lS5FEFoUEbqNRKVS8dxzzzFy5EimTJnC+fPnlS7Jymg0kpSUJEa5gqAAEbqN7IknnuCpp55i6tSppKWlKV0OADt27KBz58707t1b6VIEocURoesEo0ePZvbs2Tz33HMcO3ZM0Vr0ej3Lli1j5syZitYhCC2VCF0nue+++/jLX/7C7NmzOXz4sGJ1bN68mTvuuIPY2FjFahCElkyErhPdc889fPzxx7z99tt8/fXXTn/9srIy1qxZw/Tp053+2oIgyEToOlmvXr1ISEhg/vz5fPnll0597bVr1zJ48GAiIiKc+rqCIFwjQlcBUVFRJCUlsWLFClavXu2U1ywsLGTLli08++yzTnk9QRBqJkJXIR07dmTp0qXs2bOHL774otE7lK1cuZIHHniAsLCwRn0dQRDqJkJXQUFBQSxZsoQff/yRDz74oNE6lOXm5rJnzx5xpLoguAARugpr3bo1iYmJnD9/njfeeIOqqiqHv8bSpUsZPXo0bdq0cfhzC4JQPyJ0XYC3tzefffYZVVVVvPLKK+j1eoc997lz5zhw4ABPPvmkw55TEISGE6HrIjw9Pfnwww9p06YNs2bNorS0tPY7SxKkpMCqVTBrFgwfDkOHwoMPwssvw4YNcPYsIB+pPmHCBPz8/JzzRgRBqJOqrgs4ffv2lX766ScnliNYLBY++eQTfvrpJxYsWGA7JSBJsG8fLFgA6elgsYBaDZ6eoFLJt1dWWu9eFh3NW/n5vH/wIN7e3gq8G0FomVQq1c+SJPWt6TYx0nUxarWaV155hWHDhjFlyhQuXbok35CTA5MmwfPPQ2Ym+PlBQAC0bg1eXqDVyv/195e/WrdG//33vHvuHN6vvw4u2mJSEFoaEbouSKVSMWXKFMaPHy93KNu3Dx54AI4ckQPVx0ce2dZBbzBQIkm0CguD3bvlqYdz55z0DgRBqI270gUItXvssccIKS7GNHYslUFBaAID7X5sXn4+bdu1Q+3mJo+I8/Ph0Udh504IDW3EqgVBqIsY6boyg4H4tWsJDgggu6CACjuP/6moqKDKaMS/detr32zdGgoL4cUX5blgQRAUIULXlX3yCVy6hHdwMO07dODihQuUlZXV+RAJeZTbLijo5gblrVvDzz/LqxsEQVCECF1XlZ8PK1aAry8Arby96RgeTs7lyxTXcVGsvLwci8VS8xIxlQq8veFvf4MmcFqxIDRHYk7XVW3dKk8DuLlZv+Wl1dKpUyfOZWdjNptpc3WOd2p2Nif0etxUKgwGA6FaLbtqe16NBkpL4Ztv4KGHGv99CIJgQ4x0XdXGjXJA3kDj6UmniAiKiorIz8+nepX1nJAQ9oSGsrl1a3bGxNj3/IIgOJ0IXVek08GFC/La2xp4engQ0akTZeXl5F6+jARIkkR+fj5B7dpxy6Mmvbzg11/lzRSCIDiVCF1XlJ4OHh51rsV1d3enU6dOGCor0VVU8FlODk9WVPB8fj4/V1TU/fzu7lBRAQUFDi5cEIRbEaHrikpLb7n5AcBNrSY8PJzJWi3zgX907coYf39evnCBC3VdKFOp5OCtq7+DIAiNQoSuK7IjcKupVSru69yZXtHR+Ht7M9Lfn994efGf8vK6HyhJ9XodQRAcQ4SuKwoMrNd8q0qlwt392kIUFVDnoyUJTCb5dQRBcCoRuq6oa1c5FO3YOVZmNnO4vByjxYJZkthXUsIvOh0DfHxqf1BVFbRpI/dxEATBqcQ6XVfk6QnR0ZCVBa1a1XlXkySxKD+fs0YjaiBCo+Hjjh0J9/Ss/UE6HQwc6NiaBUGwiwhdV/XEE/DnP9/ybgHu7qzu3Ll+z61SwcSJDSxMEITbIaYXXNXIkfKyMUdv19XpoF07GDDAsc8rCIJdROi6Kh8fmDNHXk/rqE0MFot8ssR778knTgiC4HTiJ8+VPfEE9O7tmFMfJAmKi+UR9L333v7zCYLQICJ0XZlaDYsWQXDw7QVvdeDGxcH77zuuPkEQ6k2ErqsLCpI7jnXoIAen2Vy/x1dVyY/r3RvWr5enLQRBUEydpwGrVKp8INt55QiCIDQLnSRJalfTDXWGriAIguBYYnpBEATBiUToCoIgOJEIXUEQBCcSoSsIguBEInQFQRCc6P8DhaFPbx0aEs0AAAAASUVORK5CYII=\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "GyTPqYCyRBNO",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 319
+ },
+ "outputId": "3a1e4816-4e1e-4949-f5b2-f0886a76a45a"
+ },
+ "source": [
+ "nx.drawing.nx_pylab.draw(G)"
+ ],
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "KCZ18YmURIi4",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 71
+ },
+ "outputId": "b6357828-c59c-4ae4-ef71-9d6e70ac5f72"
+ },
+ "source": [
+ "elist=G.edges()\n",
+ "print(\"elist=\",elist)\n",
+ "ewlist=[(i,j,G.get_edge_data(i,j,default=0)['weight']) for i,j in G.edges()]\n",
+ "print('ewlist=',ewlist)"
+ ],
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "elist= [(0, 1), (0, 2), (0, 3), (0, 4), (1, 2), (1, 5), (2, 3), (3, 4), (3, 5)]\n",
+ "ewlist= [(0, 1, 0.40488099666684957), (0, 2, 0.41626177944275117), (0, 3, 0.11379819642236151), (0, 4, 0.45587540256225), (1, 2, 0.2820892625290807), (1, 5, 0.39605937702732497), (2, 3, 0.13812148691437712), (3, 4, 0.4255523025447181), (3, 5, 0.07358945460399782)]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "7GjpN94-RbsD",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "source": [
+ "def issymmetric(Matrix):\n",
+ " dim=Matrix.shape[0]\n",
+ " if Matrix.shape[1] != dim:\n",
+ " print(\"Shape Error!\")\n",
+ " return False \n",
+ " for i in range(dim):\n",
+ " for j in range(i,dim):\n",
+ " if Matrix[i,j]!=Matrix[j,i]:\n",
+ " print(\"Shape Error:\",(i,j),Matrix[i,j],Matrix[j,i],\"difference:\",Matrix[i,j]-Matrix[j,i])\n",
+ " return False\n",
+ " return True\n",
+ " "
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "qTr9W91rRVqv",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 170
+ },
+ "outputId": "68144495-4e38-4f38-cfc5-e313c58db0f0"
+ },
+ "source": [
+ "# Computing the weight matrix from the random graph\n",
+ "w = np.zeros([n,n])\n",
+ "w = np.eye(n)*0\n",
+ "J,h={},{}\n",
+ "for i in range(n):\n",
+ " h[i]=w[i,i]\n",
+ " for j in range(n):\n",
+ " temp = G.get_edge_data(i,j,default=0)\n",
+ " if temp != 0:\n",
+ " w[i,j] = temp['weight']\n",
+ " J[(i,j)]=temp['weight']\n",
+ "\n",
+ "#w/=np.linalg.det(w)**(1/n)\n",
+ "offset=np.sum(w)/4 #the offset value\n",
+ "print(\"Symmetric:\",issymmetric(w),\"Norm:\",np.linalg.norm(w))\n",
+ "print(\"Eignvlues:\",np.linalg.eigvals(w),\"det:\",np.linalg.det(w))\n",
+ "print(w)\n",
+ "print('offset:',offset)\n"
+ ],
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Symmetric: True Norm: 1.414213562373095\n",
+ "Eignvlues: [ 0.984 -0.734 0.393 0.096 -0.204 -0.536] det: -0.0029902842545078126\n",
+ "[[0. 0.405 0.416 0.114 0.456 0. ]\n",
+ " [0.405 0. 0.282 0. 0. 0.396]\n",
+ " [0.416 0.282 0. 0.138 0. 0. ]\n",
+ " [0.114 0. 0.138 0. 0.426 0.074]\n",
+ " [0.456 0. 0. 0.426 0. 0. ]\n",
+ " [0. 0.396 0. 0.074 0. 0. ]]\n",
+ "offset: 1.3531141293568558\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "UQSv6WsUgJA7",
+ "papermill": {
+ "duration": 0.083057,
+ "end_time": "2020-03-12T03:56:29.205519",
+ "exception": false,
+ "start_time": "2020-03-12T03:56:29.122462",
+ "status": "completed"
+ },
+ "tags": []
+ },
+ "source": [
+ "## Brute force approach to Max-Cut\n",
+ "\n",
+ "Try all possible $2^n$ combinations. For $n = 4$, as in this example, one deals with only 16 combinations, but for n = 1000, one has 1.071509e+30 combinations, which is impractical to deal with by using a brute force approach. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2019-12-12T17:59:42.618252Z",
+ "start_time": "2019-12-12T17:59:42.418721Z"
+ },
+ "colab_type": "code",
+ "id": "d_WTR1_OgJA8",
+ "papermill": {
+ "duration": 9.947705,
+ "end_time": "2020-03-12T03:56:39.236869",
+ "exception": false,
+ "start_time": "2020-03-12T03:56:29.289164",
+ "status": "completed"
+ },
+ "tags": [],
+ "trusted": false,
+ "colab": {}
+ },
+ "source": [
+ "def Max_Cut_BF(W,*x0):\n",
+ " best_cost_brute = 0\n",
+ " xbest_brute=np.array([1]*n)\n",
+ "\n",
+ " for b in range(2**n):\n",
+ " x = [int(t) for t in reversed(list(bin(b)[2:].zfill(n)))]\n",
+ " cost = 0\n",
+ " for h in x0: \n",
+ " cost -= np.dot(h,x)/n #VGG don't give free samples to those with h==1\n",
+ " for i in range(n):\n",
+ " cost +=(2-np.dot(x,x))/n/2 #VGG try to favor fewer free samples \n",
+ " for j in range(n):\n",
+ " cost += W[i,j]*x[i]*(1-x[j])\n",
+ " \n",
+ " if np.isclose(cost,best_cost_brute):\n",
+ " if sum(x)