{ "cells": [ { "cell_type": "markdown", "id": "e78976e7", "metadata": {}, "source": [ "# Hexaly Planted Benchmarking" ] }, { "cell_type": "markdown", "id": "f1bff031", "metadata": {}, "source": [ "### Import libraries" ] }, { "cell_type": "code", "execution_count": null, "id": "d6cbe07f", "metadata": {}, "outputs": [], "source": [ "import time\n", "import numpy as np\n", "import hexaly.optimizer\n", "import os" ] }, { "cell_type": "markdown", "id": "2eb9dd11", "metadata": {}, "source": [ "### Set up Hexaly solver" ] }, { "cell_type": "code", "execution_count": 2, "id": "dc750fac", "metadata": {}, "outputs": [], "source": [ "def hexaly_solver(Q,c,sum_constraint, time_limit= 1800):\n", " n = len(np.squeeze(c))\n", " def external_xTQx(x):\n", " return x @ Q @ x\n", "\n", " def external_2Qx(x):\n", " return 2 * Q @ x\n", " \n", " with hexaly.optimizer.HexalyOptimizer() as optimizer:\n", " model = optimizer.model\n", " x = [model.float(0.0,100.0) for _ in range(n)]\n", " linear_term = model.sum(c[i]*x[i] for i in range(n))\n", " xTQx_func = model.create_double_external_function(external_xTQx, external_2Qx)\n", " objective = linear_term + xTQx_func(x)\n", "\n", " model.constraint(model.sum(x) == sum_constraint)\n", " model.minimize(objective)\n", " model.close()\n", "\n", " optimizer.param.time_limit = time_limit\n", " print(\"Starting Hexaly solver...\")\n", " optimizer.solve()\n", " solution = [x[i].value for i in range(n)]\n", " objective_val = objective.value\n", " print(f\"Status: {optimizer.solution.status}\")\n", " return solution, objective_val\n" ] }, { "cell_type": "markdown", "id": "ac018de4", "metadata": {}, "source": [ "### load data file" ] }, { "cell_type": "code", "execution_count": 3, "id": "d4c791f5", "metadata": {}, "outputs": [], "source": [ "\n", "def loadQ(path, n):\n", " tri = np.load(path, mmap_mode=\"r\")\n", " Q = np.empty((n,n), dtype=tri.dtype)\n", " iu = np.triu_indices(n)\n", " Q[iu] = tri\n", " Q.T[iu] = tri\n", " return Q" ] }, { "cell_type": "markdown", "id": "b1e76771", "metadata": {}, "source": [ "### Solve with hexaly" ] }, { "cell_type": "code", "execution_count": 4, "id": "eb030d06", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "loaded file sucessfully.\n" ] } ], "source": [ "# Instance details\n", "optimal_energy = 12000\n", "sum_constraint = 100\n", "num_var = 2000\n", "k = 44\n", "ub =10\n", "seed =100\n", "\n", "name = f\"STQP_n_{num_var}_k_{k}_R_{sum_constraint}_seed_{seed}_ub_{ub}\"\n", "instance_path = os.path.join(f\"Instances/{name}.npy\")\n", "c = np.zeros(num_var)\n", "try:\n", " Q= loadQ(instance_path,num_var)\n", " print(\"loaded file sucessfully.\")\n", "except FileNotFoundError:\n", " print(f\"File {instance_path} does not exist.\")\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "ea684285", "metadata": {}, "outputs": [], "source": [ "# solver parameters\n", "time_limit = 600" ] }, { "cell_type": "code", "execution_count": 6, "id": "b8a993e8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[2KPreprocess model 100%Starting Hexaly solver...\n", "\u001b[2KPush initial solution 100%\n", "\u001b[1m\u001b[4mModel\u001b[0m: expressions = 4009, decisions = 2000, constraints = 1, objectives = 1\n", "\u001b[1m\u001b[4mParam\u001b[0m: time limit = 600 sec, no iteration limit\n", "\n", "[objective direction ]: minimize\n", "\n", "[ 0 sec, 0 itr]: No feasible solution found (infeas = 1)\n", "[ 1 sec, 0 itr]: No feasible solution found (infeas = 1)\n", "[ 2 sec, 218 itr]: 22859.4\n", "[ optimality gap ]: 100.00%\n", "[ 3 sec, 1294 itr]: 15956.2\n", "[ 4 sec, 1519 itr]: 15811.3\n", "[ 5 sec, 1796 itr]: 15811.1\n", "[ 6 sec, 2012 itr]: 15811\n", "[ 7 sec, 2012 itr]: 15811\n", "[ 8 sec, 2464 itr]: 15810.6\n", "[ 9 sec, 2623 itr]: 15810.3\n", "[ 10 sec, 2623 itr]: 15810.3\n", "[ 11 sec, 2893 itr]: 15810.2\n", "[ 12 sec, 3103 itr]: 15810\n", "[ optimality gap ]: 100.00%\n", "[ 13 sec, 3431 itr]: 15809.6\n", "[ 14 sec, 3431 itr]: 15809.6\n", "[ 15 sec, 3588 itr]: 15809.3\n", "[ 16 sec, 4014 itr]: 15809.1\n", "[ 17 sec, 4166 itr]: 15808.9\n", "[ 18 sec, 4267 itr]: 15808.6\n", "[ 19 sec, 4450 itr]: 15808.4\n", "[ 20 sec, 4633 itr]: 15808.1\n", "[ 21 sec, 4812 itr]: 15808\n", "[ 22 sec, 4812 itr]: 15808\n", "[ optimality gap ]: 100.00%\n", "[ 23 sec, 5185 itr]: 12986.9\n", "[ 24 sec, 5185 itr]: 12986.9\n", "[ 25 sec, 5304 itr]: 12986.9\n", "[ 26 sec, 5603 itr]: 12986.9\n", "[ 27 sec, 5724 itr]: 12986.9\n", "[ 28 sec, 5724 itr]: 12986.9\n", "[ 29 sec, 5875 itr]: 12986.9\n", "[ 30 sec, 5963 itr]: 12986.9\n", "[ 31 sec, 6083 itr]: 12986.9\n", "[ 32 sec, 6192 itr]: 12986.9\n", "[ optimality gap ]: 100.00%\n", "[ 33 sec, 6448 itr]: 12986.9\n", "[ 34 sec, 6448 itr]: 12986.9\n", "[ 35 sec, 6572 itr]: 12986.9\n", "[ 36 sec, 6657 itr]: 12986.9\n", "[ 37 sec, 6743 itr]: 12986.9\n", "[ 38 sec, 6872 itr]: 12986.9\n", "[ 39 sec, 6986 itr]: 12986.9\n", "[ 40 sec, 7238 itr]: 12986.9\n", "[ 41 sec, 7238 itr]: 12986.9\n", "[ 42 sec, 7355 itr]: 12986.9\n", "[ optimality gap ]: 100.00%\n", "[ 43 sec, 7456 itr]: 12986.9\n", "[ 44 sec, 7551 itr]: 12986.9\n", "[ 45 sec, 7648 itr]: 12986.9\n", "[ 46 sec, 7781 itr]: 12986.9\n", "[ 47 sec, 7920 itr]: 12986.9\n", "[ 48 sec, 8049 itr]: 12986.9\n", "[ 49 sec, 8158 itr]: 12986.9\n", "[ 50 sec, 8324 itr]: 12986.9\n", "[ 51 sec, 8416 itr]: 12986.9\n", "[ 52 sec, 8504 itr]: 12986.9\n", "[ optimality gap ]: 100.00%\n", "[ 53 sec, 8504 itr]: 12986.9\n", "[ 54 sec, 8623 itr]: 12986.9\n", "[ 55 sec, 8687 itr]: 12986.9\n", "[ 56 sec, 8863 itr]: 12986.9\n", "[ 57 sec, 8863 itr]: 12986.9\n", "[ 58 sec, 8983 itr]: 12986.9\n", "[ 59 sec, 9092 itr]: 12986.9\n", "[ 60 sec, 9217 itr]: 12986.9\n", "[ 61 sec, 9300 itr]: 12986.9\n", "[ 62 sec, 9395 itr]: 12986.9\n", "[ optimality gap ]: 100.00%\n", "[ 63 sec, 9520 itr]: 12986.9\n", "[ 64 sec, 9746 itr]: 12986.9\n", "[ 65 sec, 9746 itr]: 12986.9\n", "[ 66 sec, 9884 itr]: 12986.9\n", "[ 67 sec, 10083 itr]: 12986.9\n", "[ 68 sec, 10083 itr]: 12986.9\n", "[ 69 sec, 10169 itr]: 12986.9\n", "[ 70 sec, 10405 itr]: 12986.9\n", "[ 71 sec, 10504 itr]: 12986.9\n", "[ 72 sec, 10504 itr]: 12986.9\n", "[ optimality gap ]: 100.00%\n", "[ 73 sec, 10616 itr]: 12986.9\n", "[ 74 sec, 10721 itr]: 12986.9\n", "[ 75 sec, 10974 itr]: 12986.9\n", "[ 76 sec, 10974 itr]: 12986.9\n", "[ 77 sec, 11203 itr]: 12986.9\n", "[ 78 sec, 11321 itr]: 12986.9\n", "[ 79 sec, 11321 itr]: 12986.9\n", "[ 80 sec, 11561 itr]: 12986.9\n", "[ 81 sec, 11663 itr]: 12986.9\n", "[ 82 sec, 11663 itr]: 12986.9\n", "[ optimality gap ]: 100.00%\n", "[ 83 sec, 11829 itr]: 12986.9\n", "[ 84 sec, 11901 itr]: 12986.9\n", "[ 85 sec, 11999 itr]: 12986.9\n", "[ 86 sec, 11999 itr]: 12986.9\n", "[ 87 sec, 12175 itr]: 12986.9\n", "[ 88 sec, 12315 itr]: 12986.9\n", "[ 89 sec, 12419 itr]: 12986.9\n", "[ 90 sec, 12419 itr]: 12986.9\n", "[ 91 sec, 12492 itr]: 12986.9\n", "[ 92 sec, 12626 itr]: 12986.9\n", "[ optimality gap ]: 100.00%\n", "[ 93 sec, 12626 itr]: 12986.9\n", "[ 94 sec, 12720 itr]: 12986.9\n", "[ 95 sec, 12775 itr]: 12986.9\n", "[ 96 sec, 12987 itr]: 12986.9\n", "[ 97 sec, 12987 itr]: 12986.9\n", "[ 98 sec, 13177 itr]: 12986.9\n", "[ 99 sec, 13177 itr]: 12986.9\n", "[100 sec, 13341 itr]: 12986.9\n", "[101 sec, 13435 itr]: 12986.9\n", "[102 sec, 13537 itr]: 12986.9\n", "[ optimality gap ]: 100.00%\n", "[103 sec, 13537 itr]: 12986.9\n", "[104 sec, 13735 itr]: 12986.9\n", "[105 sec, 13861 itr]: 12986.9\n", "[106 sec, 13965 itr]: 12986.9\n", "[107 sec, 13965 itr]: 12986.9\n", "[108 sec, 14185 itr]: 12938.7\n", "[109 sec, 14271 itr]: 12938.7\n", "[110 sec, 14383 itr]: 12938.7\n", "[111 sec, 14504 itr]: 12938.7\n", "[112 sec, 14624 itr]: 12938.7\n", "[ optimality gap ]: 100.00%\n", "[113 sec, 14699 itr]: 12938.7\n", "[114 sec, 14805 itr]: 12938.7\n", "[115 sec, 14885 itr]: 12938.7\n", "[116 sec, 14885 itr]: 12938.7\n", "[117 sec, 15127 itr]: 12938.7\n", "[118 sec, 15191 itr]: 12938.7\n", "[119 sec, 15191 itr]: 12938.7\n", "[120 sec, 15413 itr]: 12938.7\n", "[121 sec, 15537 itr]: 12938.7\n", "[122 sec, 15537 itr]: 12938.7\n", "[ optimality gap ]: 100.00%\n", "[123 sec, 15646 itr]: 12938.7\n", "[124 sec, 15932 itr]: 12938.7\n", "[125 sec, 16026 itr]: 12938.7\n", "[126 sec, 16114 itr]: 12855\n", "[127 sec, 16208 itr]: 12855\n", "[128 sec, 16304 itr]: 12855\n", "[129 sec, 16416 itr]: 12855\n", "[130 sec, 16556 itr]: 12855\n", "[131 sec, 16556 itr]: 12855\n", "[132 sec, 16765 itr]: 12855\n", "[ optimality gap ]: 100.00%\n", "[133 sec, 16765 itr]: 12855\n", "[134 sec, 17033 itr]: 12000\n", "[135 sec, 17146 itr]: 12000\n", "[136 sec, 17278 itr]: 12000\n", "[137 sec, 17436 itr]: 12000\n", "[138 sec, 17567 itr]: 12000\n", "[139 sec, 17690 itr]: 12000\n", "[140 sec, 17690 itr]: 12000\n", "[141 sec, 17802 itr]: 12000\n", "[142 sec, 17891 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[143 sec, 18078 itr]: 12000\n", "[144 sec, 18203 itr]: 12000\n", "[145 sec, 18203 itr]: 12000\n", "[146 sec, 18465 itr]: 12000\n", "[147 sec, 18465 itr]: 12000\n", "[148 sec, 18570 itr]: 12000\n", "[149 sec, 18682 itr]: 12000\n", "[150 sec, 18921 itr]: 12000\n", "[151 sec, 18921 itr]: 12000\n", "[152 sec, 19137 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[153 sec, 19137 itr]: 12000\n", "[154 sec, 19385 itr]: 12000\n", "[155 sec, 19525 itr]: 12000\n", "[156 sec, 19525 itr]: 12000\n", "[157 sec, 19628 itr]: 12000\n", "[158 sec, 19717 itr]: 12000\n", "[159 sec, 19970 itr]: 12000\n", "[160 sec, 20066 itr]: 12000\n", "[161 sec, 20218 itr]: 12000\n", "[162 sec, 20218 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[163 sec, 20346 itr]: 12000\n", "[164 sec, 20488 itr]: 12000\n", "[165 sec, 20557 itr]: 12000\n", "[166 sec, 20789 itr]: 12000\n", "[167 sec, 20789 itr]: 12000\n", "[168 sec, 20883 itr]: 12000\n", "[169 sec, 20981 itr]: 12000\n", "[170 sec, 21233 itr]: 12000\n", "[171 sec, 21405 itr]: 12000\n", "[172 sec, 21560 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[173 sec, 21640 itr]: 12000\n", "[174 sec, 21640 itr]: 12000\n", "[175 sec, 21988 itr]: 12000\n", "[176 sec, 22091 itr]: 12000\n", "[177 sec, 22091 itr]: 12000\n", "[178 sec, 22226 itr]: 12000\n", "[179 sec, 22430 itr]: 12000\n", "[180 sec, 22556 itr]: 12000\n", "[181 sec, 22556 itr]: 12000\n", "[182 sec, 22647 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[183 sec, 22895 itr]: 12000\n", "[184 sec, 22895 itr]: 12000\n", "[185 sec, 23109 itr]: 12000\n", "[186 sec, 23109 itr]: 12000\n", "[187 sec, 23388 itr]: 12000\n", "[188 sec, 23550 itr]: 12000\n", "[189 sec, 23694 itr]: 12000\n", "[190 sec, 23870 itr]: 12000\n", "[191 sec, 23990 itr]: 12000\n", "[192 sec, 23990 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[193 sec, 24115 itr]: 12000\n", "[194 sec, 24263 itr]: 12000\n", "[195 sec, 24393 itr]: 12000\n", "[196 sec, 24577 itr]: 12000\n", "[197 sec, 24684 itr]: 12000\n", "[198 sec, 24684 itr]: 12000\n", "[199 sec, 24894 itr]: 12000\n", "[200 sec, 24894 itr]: 12000\n", "[201 sec, 25140 itr]: 12000\n", "[202 sec, 25265 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[203 sec, 25265 itr]: 12000\n", "[204 sec, 25356 itr]: 12000\n", "[205 sec, 25665 itr]: 12000\n", "[206 sec, 25665 itr]: 12000\n", "[207 sec, 25851 itr]: 12000\n", "[208 sec, 26105 itr]: 12000\n", "[209 sec, 26105 itr]: 12000\n", "[210 sec, 26428 itr]: 12000\n", "[211 sec, 26428 itr]: 12000\n", "[212 sec, 26695 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[213 sec, 26695 itr]: 12000\n", "[214 sec, 26855 itr]: 12000\n", "[215 sec, 27019 itr]: 12000\n", "[216 sec, 27208 itr]: 12000\n", "[217 sec, 27339 itr]: 12000\n", "[218 sec, 27600 itr]: 12000\n", "[219 sec, 27716 itr]: 12000\n", "[220 sec, 27716 itr]: 12000\n", "[221 sec, 27943 itr]: 12000\n", "[222 sec, 27943 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[223 sec, 28088 itr]: 12000\n", "[224 sec, 28291 itr]: 12000\n", "[225 sec, 28419 itr]: 12000\n", "[226 sec, 28419 itr]: 12000\n", "[227 sec, 28657 itr]: 12000\n", "[228 sec, 28791 itr]: 12000\n", "[229 sec, 28915 itr]: 12000\n", "[230 sec, 28915 itr]: 12000\n", "[231 sec, 29250 itr]: 12000\n", "[232 sec, 29415 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[233 sec, 29546 itr]: 12000\n", "[234 sec, 29649 itr]: 12000\n", "[235 sec, 29649 itr]: 12000\n", "[236 sec, 29898 itr]: 12000\n", "[237 sec, 30023 itr]: 12000\n", "[238 sec, 30023 itr]: 12000\n", "[239 sec, 30098 itr]: 12000\n", "[240 sec, 30263 itr]: 12000\n", "[241 sec, 30492 itr]: 12000\n", "[242 sec, 30642 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[243 sec, 30787 itr]: 12000\n", "[244 sec, 30787 itr]: 12000\n", "[245 sec, 30902 itr]: 12000\n", "[246 sec, 31110 itr]: 12000\n", "[247 sec, 31221 itr]: 12000\n", "[248 sec, 31383 itr]: 12000\n", "[249 sec, 31519 itr]: 12000\n", "[250 sec, 31653 itr]: 12000\n", "[251 sec, 31810 itr]: 12000\n", "[252 sec, 31810 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[253 sec, 32131 itr]: 12000\n", "[254 sec, 32268 itr]: 12000\n", "[255 sec, 32420 itr]: 12000\n", "[256 sec, 32420 itr]: 12000\n", "[257 sec, 32703 itr]: 12000\n", "[258 sec, 32703 itr]: 12000\n", "[259 sec, 32822 itr]: 12000\n", "[260 sec, 33087 itr]: 12000\n", "[261 sec, 33227 itr]: 12000\n", "[262 sec, 33357 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[263 sec, 33550 itr]: 12000\n", "[264 sec, 33550 itr]: 12000\n", "[265 sec, 33899 itr]: 12000\n", "[266 sec, 33899 itr]: 12000\n", "[267 sec, 34043 itr]: 12000\n", "[268 sec, 34286 itr]: 12000\n", "[269 sec, 34286 itr]: 12000\n", "[270 sec, 34458 itr]: 12000\n", "[271 sec, 34705 itr]: 12000\n", "[272 sec, 34705 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[273 sec, 34969 itr]: 12000\n", "[274 sec, 35127 itr]: 12000\n", "[275 sec, 35273 itr]: 12000\n", "[276 sec, 35273 itr]: 12000\n", "[277 sec, 35561 itr]: 12000\n", "[278 sec, 35561 itr]: 12000\n", "[279 sec, 35824 itr]: 12000\n", "[280 sec, 35979 itr]: 12000\n", "[281 sec, 36114 itr]: 12000\n", "[282 sec, 36287 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[283 sec, 36287 itr]: 12000\n", "[284 sec, 36444 itr]: 12000\n", "[285 sec, 36540 itr]: 12000\n", "[286 sec, 36761 itr]: 12000\n", "[287 sec, 36888 itr]: 12000\n", "[288 sec, 37034 itr]: 12000\n", "[289 sec, 37195 itr]: 12000\n", "[290 sec, 37195 itr]: 12000\n", "[291 sec, 37339 itr]: 12000\n", "[292 sec, 37454 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[293 sec, 37727 itr]: 12000\n", "[294 sec, 37871 itr]: 12000\n", "[295 sec, 38003 itr]: 12000\n", "[296 sec, 38003 itr]: 12000\n", "[297 sec, 38232 itr]: 12000\n", "[298 sec, 38342 itr]: 12000\n", "[299 sec, 38342 itr]: 12000\n", "[300 sec, 38455 itr]: 12000\n", "[301 sec, 38738 itr]: 12000\n", "[302 sec, 38886 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[303 sec, 39016 itr]: 12000\n", "[304 sec, 39165 itr]: 12000\n", "[305 sec, 39165 itr]: 12000\n", "[306 sec, 39399 itr]: 12000\n", "[307 sec, 39514 itr]: 12000\n", "[308 sec, 39639 itr]: 12000\n", "[309 sec, 39639 itr]: 12000\n", "[310 sec, 39714 itr]: 12000\n", "[311 sec, 39997 itr]: 12000\n", "[312 sec, 39997 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[313 sec, 40261 itr]: 12000\n", "[314 sec, 40421 itr]: 12000\n", "[315 sec, 40567 itr]: 12000\n", "[316 sec, 40742 itr]: 12000\n", "[317 sec, 40742 itr]: 12000\n", "[318 sec, 41012 itr]: 12000\n", "[319 sec, 41248 itr]: 12000\n", "[320 sec, 41466 itr]: 12000\n", "[321 sec, 41650 itr]: 12000\n", "[322 sec, 41852 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[323 sec, 41852 itr]: 12000\n", "[324 sec, 42027 itr]: 12000\n", "[325 sec, 42323 itr]: 12000\n", "[326 sec, 42441 itr]: 12000\n", "[327 sec, 42614 itr]: 12000\n", "[328 sec, 42614 itr]: 12000\n", "[329 sec, 42782 itr]: 12000\n", "[330 sec, 43009 itr]: 12000\n", "[331 sec, 43152 itr]: 12000\n", "[332 sec, 43274 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[333 sec, 43421 itr]: 12000\n", "[334 sec, 43421 itr]: 12000\n", "[335 sec, 43695 itr]: 12000\n", "[336 sec, 43809 itr]: 12000\n", "[337 sec, 43943 itr]: 12000\n", "[338 sec, 44083 itr]: 12000\n", "[339 sec, 44083 itr]: 12000\n", "[340 sec, 44358 itr]: 12000\n", "[341 sec, 44520 itr]: 12000\n", "[342 sec, 44622 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[343 sec, 44622 itr]: 12000\n", "[344 sec, 44888 itr]: 12000\n", "[345 sec, 45047 itr]: 12000\n", "[346 sec, 45215 itr]: 12000\n", "[347 sec, 45215 itr]: 12000\n", "[348 sec, 45492 itr]: 12000\n", "[349 sec, 45492 itr]: 12000\n", "[350 sec, 45746 itr]: 12000\n", "[351 sec, 45899 itr]: 12000\n", "[352 sec, 45987 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[353 sec, 46065 itr]: 12000\n", "[354 sec, 46206 itr]: 12000\n", "[355 sec, 46206 itr]: 12000\n", "[356 sec, 46339 itr]: 12000\n", "[357 sec, 46667 itr]: 12000\n", "[358 sec, 46814 itr]: 12000\n", "[359 sec, 46814 itr]: 12000\n", "[360 sec, 47042 itr]: 12000\n", "[361 sec, 47164 itr]: 12000\n", "[362 sec, 47290 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[363 sec, 47415 itr]: 12000\n", "[364 sec, 47548 itr]: 12000\n", "[365 sec, 47724 itr]: 12000\n", "[366 sec, 47896 itr]: 12000\n", "[367 sec, 47896 itr]: 12000\n", "[368 sec, 48152 itr]: 12000\n", "[369 sec, 48279 itr]: 12000\n", "[370 sec, 48401 itr]: 12000\n", "[371 sec, 48401 itr]: 12000\n", "[372 sec, 48688 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[373 sec, 48846 itr]: 12000\n", "[374 sec, 48998 itr]: 12000\n", "[375 sec, 49156 itr]: 12000\n", "[376 sec, 49156 itr]: 12000\n", "[377 sec, 49312 itr]: 12000\n", "[378 sec, 49474 itr]: 12000\n", "[379 sec, 49474 itr]: 12000\n", "[380 sec, 49602 itr]: 12000\n", "[381 sec, 49746 itr]: 12000\n", "[382 sec, 49874 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[383 sec, 50040 itr]: 12000\n", "[384 sec, 50040 itr]: 12000\n", "[385 sec, 50212 itr]: 12000\n", "[386 sec, 50519 itr]: 12000\n", "[387 sec, 50604 itr]: 12000\n", "[388 sec, 50749 itr]: 12000\n", "[389 sec, 50749 itr]: 12000\n", "[390 sec, 50958 itr]: 12000\n", "[391 sec, 51139 itr]: 12000\n", "[392 sec, 51285 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[393 sec, 51468 itr]: 12000\n", "[394 sec, 51468 itr]: 12000\n", "[395 sec, 51725 itr]: 12000\n", "[396 sec, 51943 itr]: 12000\n", "[397 sec, 51943 itr]: 12000\n", "[398 sec, 52149 itr]: 12000\n", "[399 sec, 52149 itr]: 12000\n", "[400 sec, 52264 itr]: 12000\n", "[401 sec, 52484 itr]: 12000\n", "[402 sec, 52484 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[403 sec, 52768 itr]: 12000\n", "[404 sec, 52865 itr]: 12000\n", "[405 sec, 52865 itr]: 12000\n", "[406 sec, 53065 itr]: 12000\n", "[407 sec, 53195 itr]: 12000\n", "[408 sec, 53195 itr]: 12000\n", "[409 sec, 53340 itr]: 12000\n", "[410 sec, 53577 itr]: 12000\n", "[411 sec, 53577 itr]: 12000\n", "[412 sec, 53682 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[413 sec, 53886 itr]: 12000\n", "[414 sec, 53886 itr]: 12000\n", "[415 sec, 54157 itr]: 12000\n", "[416 sec, 54351 itr]: 12000\n", "[417 sec, 54485 itr]: 12000\n", "[418 sec, 54485 itr]: 12000\n", "[419 sec, 54834 itr]: 12000\n", "[420 sec, 54950 itr]: 12000\n", "[421 sec, 54950 itr]: 12000\n", "[422 sec, 55177 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[423 sec, 55356 itr]: 12000\n", "[424 sec, 55356 itr]: 12000\n", "[425 sec, 55490 itr]: 12000\n", "[426 sec, 55645 itr]: 12000\n", "[427 sec, 55718 itr]: 12000\n", "[428 sec, 55744 itr]: 12000\n", "[429 sec, 55827 itr]: 12000\n", "[430 sec, 55827 itr]: 12000\n", "[431 sec, 55941 itr]: 12000\n", "[432 sec, 55941 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[433 sec, 56090 itr]: 12000\n", "[434 sec, 56142 itr]: 12000\n", "[435 sec, 56234 itr]: 12000\n", "[436 sec, 56234 itr]: 12000\n", "[437 sec, 56338 itr]: 12000\n", "[438 sec, 56418 itr]: 12000\n", "[439 sec, 56527 itr]: 12000\n", "[440 sec, 56617 itr]: 12000\n", "[441 sec, 56686 itr]: 12000\n", "[442 sec, 56765 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[443 sec, 56825 itr]: 12000\n", "[444 sec, 56876 itr]: 12000\n", "[445 sec, 56961 itr]: 12000\n", "[446 sec, 57023 itr]: 12000\n", "[447 sec, 57091 itr]: 12000\n", "[448 sec, 57217 itr]: 12000\n", "[449 sec, 57315 itr]: 12000\n", "[450 sec, 57375 itr]: 12000\n", "[451 sec, 57422 itr]: 12000\n", "[452 sec, 57474 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[453 sec, 57474 itr]: 12000\n", "[454 sec, 57599 itr]: 12000\n", "[455 sec, 57599 itr]: 12000\n", "[456 sec, 57731 itr]: 12000\n", "[457 sec, 57785 itr]: 12000\n", "[458 sec, 57868 itr]: 12000\n", "[459 sec, 57930 itr]: 12000\n", "[460 sec, 57930 itr]: 12000\n", "[461 sec, 58056 itr]: 12000\n", "[462 sec, 58120 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[463 sec, 58188 itr]: 12000\n", "[464 sec, 58263 itr]: 12000\n", "[465 sec, 58351 itr]: 12000\n", "[466 sec, 58393 itr]: 12000\n", "[467 sec, 58393 itr]: 12000\n", "[468 sec, 58575 itr]: 12000\n", "[469 sec, 58645 itr]: 12000\n", "[470 sec, 58726 itr]: 12000\n", "[471 sec, 58726 itr]: 12000\n", "[472 sec, 58861 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[473 sec, 58929 itr]: 12000\n", "[474 sec, 59058 itr]: 12000\n", "[475 sec, 59133 itr]: 12000\n", "[476 sec, 59243 itr]: 12000\n", "[477 sec, 59314 itr]: 12000\n", "[478 sec, 59314 itr]: 12000\n", "[479 sec, 59433 itr]: 12000\n", "[480 sec, 59433 itr]: 12000\n", "[481 sec, 59593 itr]: 12000\n", "[482 sec, 59690 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[483 sec, 59690 itr]: 12000\n", "[484 sec, 59796 itr]: 12000\n", "[485 sec, 59796 itr]: 12000\n", "[486 sec, 59932 itr]: 12000\n", "[487 sec, 60037 itr]: 12000\n", "[488 sec, 60126 itr]: 12000\n", "[489 sec, 60190 itr]: 12000\n", "[490 sec, 60190 itr]: 12000\n", "[491 sec, 60386 itr]: 12000\n", "[492 sec, 60386 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[493 sec, 60542 itr]: 12000\n", "[494 sec, 60616 itr]: 12000\n", "[495 sec, 60719 itr]: 12000\n", "[496 sec, 60719 itr]: 12000\n", "[497 sec, 60896 itr]: 12000\n", "[498 sec, 60973 itr]: 12000\n", "[499 sec, 61030 itr]: 12000\n", "[500 sec, 61030 itr]: 12000\n", "[501 sec, 61126 itr]: 12000\n", "[502 sec, 61270 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[503 sec, 61270 itr]: 12000\n", "[504 sec, 61403 itr]: 12000\n", "[505 sec, 61475 itr]: 12000\n", "[506 sec, 61475 itr]: 12000\n", "[507 sec, 61563 itr]: 12000\n", "[508 sec, 61685 itr]: 12000\n", "[509 sec, 61685 itr]: 12000\n", "[510 sec, 61820 itr]: 12000\n", "[511 sec, 61890 itr]: 12000\n", "[512 sec, 61890 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[513 sec, 62008 itr]: 12000\n", "[514 sec, 62043 itr]: 12000\n", "[515 sec, 62129 itr]: 12000\n", "[516 sec, 62331 itr]: 12000\n", "[517 sec, 62452 itr]: 12000\n", "[518 sec, 62525 itr]: 12000\n", "[519 sec, 62648 itr]: 12000\n", "[520 sec, 62772 itr]: 12000\n", "[521 sec, 62846 itr]: 12000\n", "[522 sec, 62846 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[523 sec, 62973 itr]: 12000\n", "[524 sec, 63072 itr]: 12000\n", "[525 sec, 63153 itr]: 12000\n", "[526 sec, 63223 itr]: 12000\n", "[527 sec, 63266 itr]: 12000\n", "[528 sec, 63266 itr]: 12000\n", "[529 sec, 63393 itr]: 12000\n", "[530 sec, 63445 itr]: 12000\n", "[531 sec, 63537 itr]: 12000\n", "[532 sec, 63537 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[533 sec, 63702 itr]: 12000\n", "[534 sec, 63780 itr]: 12000\n", "[535 sec, 63876 itr]: 12000\n", "[536 sec, 63962 itr]: 12000\n", "[537 sec, 64035 itr]: 12000\n", "[538 sec, 64035 itr]: 12000\n", "[539 sec, 64139 itr]: 12000\n", "[540 sec, 64315 itr]: 12000\n", "[541 sec, 64315 itr]: 12000\n", "[542 sec, 64499 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[543 sec, 64499 itr]: 12000\n", "[544 sec, 64606 itr]: 12000\n", "[545 sec, 64697 itr]: 12000\n", "[546 sec, 64768 itr]: 12000\n", "[547 sec, 64843 itr]: 12000\n", "[548 sec, 64906 itr]: 12000\n", "[549 sec, 64960 itr]: 12000\n", "[550 sec, 65056 itr]: 12000\n", "[551 sec, 65149 itr]: 12000\n", "[552 sec, 65249 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[553 sec, 65249 itr]: 12000\n", "[554 sec, 65410 itr]: 12000\n", "[555 sec, 65490 itr]: 12000\n", "[556 sec, 65490 itr]: 12000\n", "[557 sec, 65674 itr]: 12000\n", "[558 sec, 65762 itr]: 12000\n", "[559 sec, 65835 itr]: 12000\n", "[560 sec, 65936 itr]: 12000\n", "[561 sec, 66032 itr]: 12000\n", "[562 sec, 66106 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[563 sec, 66195 itr]: 12000\n", "[564 sec, 66195 itr]: 12000\n", "[565 sec, 66257 itr]: 12000\n", "[566 sec, 66402 itr]: 12000\n", "[567 sec, 66497 itr]: 12000\n", "[568 sec, 66497 itr]: 12000\n", "[569 sec, 66652 itr]: 12000\n", "[570 sec, 66739 itr]: 12000\n", "[571 sec, 66817 itr]: 12000\n", "[572 sec, 66893 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[573 sec, 66934 itr]: 12000\n", "[574 sec, 67008 itr]: 12000\n", "[575 sec, 67099 itr]: 12000\n", "[576 sec, 67166 itr]: 12000\n", "[577 sec, 67261 itr]: 12000\n", "[578 sec, 67261 itr]: 12000\n", "[579 sec, 67541 itr]: 12000\n", "[580 sec, 67660 itr]: 12000\n", "[581 sec, 67856 itr]: 12000\n", "[582 sec, 67978 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[583 sec, 68102 itr]: 12000\n", "[584 sec, 68276 itr]: 12000\n", "[585 sec, 68276 itr]: 12000\n", "[586 sec, 68413 itr]: 12000\n", "[587 sec, 68580 itr]: 12000\n", "[588 sec, 68704 itr]: 12000\n", "[589 sec, 69119 itr]: 12000\n", "[590 sec, 69284 itr]: 12000\n", "[591 sec, 69509 itr]: 12000\n", "[592 sec, 69715 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "[593 sec, 69715 itr]: 12000\n", "[594 sec, 70098 itr]: 12000\n", "[595 sec, 70270 itr]: 12000\n", "[596 sec, 70270 itr]: 12000\n", "[597 sec, 70413 itr]: 12000\n", "[598 sec, 70722 itr]: 12000\n", "[599 sec, 70722 itr]: 12000\n", "[600 sec, 71091 itr]: 12000\n", "[600 sec, 71091 itr]: 12000\n", "[ optimality gap ]: 100.00%\n", "\n", "71091 iterations performed in 600 seconds\n", "\n", "\u001b[1m\u001b[32mFeasible solution: \u001b[0m\n", " obj = 12000\n", " gap = 100.00%\n", " bounds = -inf\n", "Status: HxSolutionStatus.FEASIBLE\n", "Number of non-zero nodes found by Hexaly:44\n", "Eenergy value obtained by Hexaly:12000.020820610489\n", "Time taken by Hexaly:599.5881824493408\n" ] } ], "source": [ "# solve with Hexaly\n", "hexaly_start = time.time()\n", "hex_sol_list, hex_obj = hexaly_solver(Q,c,sum_constraint,time_limit)\n", "hexaly_end = time.time()\n", "hex_sol = np.array(hex_sol_list)\n", "hex_indices = np.where(hex_sol>1e-6)[0]\n", "\n", "print(f\"Number of non-zero nodes found by Hexaly:{len(hex_indices)}\")\n", "print(f\"Eenergy value obtained by Hexaly:{hex_obj}\")\n", "print(f\"Time taken by Hexaly:{hexaly_end- hexaly_start}\")" ] }, { "cell_type": "code", "execution_count": 7, "id": "ebc92410", "metadata": {}, "outputs": [], "source": [ "# compute relative gap\n", "tol = 1e-7\n", "abs_gap = hex_obj-optimal_energy\n", "relative_gap = (round(abs_gap,6)*100)/round(optimal_energy,6)\n" ] }, { "cell_type": "code", "execution_count": 8, "id": "338a7fda", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hexaly solution is not optimal\n", "Absolute Gap:0.020820610488954117\n", "Relative Gap(%):0.00017350833333333333\n" ] } ], "source": [ "# print result\n", "if abs_gap>tol:\n", " print(f\"Hexaly solution is not optimal\")\n", " print(f\"Absolute Gap:{abs_gap}\")\n", " print(f\"Relative Gap(%):{abs(relative_gap)}\")\n", "else:\n", " print(f\"Optimal solution found:{hex_obj}.\")" ] } ], "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.11.4" } }, "nbformat": 4, "nbformat_minor": 5 }