{ "cells": [ { "cell_type": "markdown", "id": "434cdf18", "metadata": {}, "source": [ "# Hexaly QPLIB Benchmarking" ] }, { "cell_type": "markdown", "id": "f1bff031", "metadata": {}, "source": [ "### Import libraries" ] }, { "cell_type": "code", "execution_count": 5, "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": 6, "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": 7, "id": "d4c791f5", "metadata": {}, "outputs": [], "source": [ "\n", "def read_qplib(path):\n", " with open(path) as fh:\n", " toks = [t for t in (line.split(\"#\")[0].strip() for line in fh) if t]\n", "\n", " pos = 0\n", "\n", " def nxt():\n", " nonlocal pos\n", " val = toks[pos]\n", " pos += 1\n", " return val\n", "\n", " def defaulted(length):\n", " \"\"\"Read a `default value` / `number of non-defaults` / entries block.\"\"\"\n", " arr = np.full(length, float(nxt()))\n", " for _ in range(int(nxt())):\n", " i, v = nxt().split()\n", " arr[int(i) - 1] = float(v)\n", " return arr\n", "\n", " name = nxt()\n", " probtype = nxt()\n", " sense = nxt().lower()\n", " n = int(nxt())\n", " m = int(nxt())\n", "\n", " # quadratic terms of the objective (each unordered pair listed once)\n", " Q = np.zeros((n, n), dtype=np.float32)\n", " for _ in range(int(nxt())):\n", " i, j, v = nxt().split()\n", " i, j, v = int(i) - 1, int(j) - 1, float(v)\n", " if i == j:\n", " Q[i, i] = v\n", " else:\n", " Q[i, j] = Q[j, i] = 0.5 * v # split the pair coefficient over both triangles\n", "\n", " b = defaulted(n) # linear terms of the objective\n", " obj_const = float(nxt())\n", "\n", " # linear terms of the constraints\n", " A = np.zeros((m, n))\n", " for _ in range(int(nxt())):\n", " k, i, v = nxt().split()\n", " A[int(k) - 1, int(i) - 1] = float(v)\n", "\n", " inf = float(nxt())\n", " lhs, rhs = defaulted(m), defaulted(m)\n", " lb, ub = defaulted(n), defaulted(n)\n", "\n", " return dict(name=name, type=probtype, sense=sense, n=n, m=m,\n", " Q=Q, b=b, obj_const=obj_const,\n", " A=A, lhs=lhs, rhs=rhs, lb=lb, ub=ub, inf=inf)\n" ] }, { "cell_type": "markdown", "id": "b1e76771", "metadata": {}, "source": [ "### Solve with hexaly" ] }, { "cell_type": "code", "execution_count": 8, "id": "eb030d06", "metadata": {}, "outputs": [], "source": [ "# Instance details\n", "inst_dir = \"Instances/\"\n", "inst_name = \"QPLIB_2761.qplib\"\n", "inst = read_qplib(os.path.join(inst_dir, inst_name))\n", "n, Q, b = inst[\"n\"], inst[\"Q\"], inst[\"b\"]\n", "M = 0.5 * Q\n", "c = b.copy()\n", "sum_constraint = float(inst[\"rhs\"][0]) # sum_i x_i = 1" ] }, { "cell_type": "code", "execution_count": 9, "id": "ea684285", "metadata": {}, "outputs": [], "source": [ "# solver parameters\n", "time_limit = 300" ] }, { "cell_type": "code", "execution_count": 10, "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 = 1009, decisions = 500, constraints = 1, objectives = 1\n", "\u001b[1m\u001b[4mParam\u001b[0m: time limit = 300 sec, no iteration limit\n", "\n", "[objective direction ]: minimize\n", "\n", "[ 0 sec, 0 itr]: No feasible solution found (infeas = 1)\n", "[ 1 sec, 226 itr]: 0.481681\n", "[ 2 sec, 1417 itr]: 0.415455\n", "[ 3 sec, 1417 itr]: 0.415455\n", "[ 4 sec, 2207 itr]: 0.0669736\n", "[ 5 sec, 2713 itr]: 0.0669736\n", "[ 6 sec, 3123 itr]: 0.00109363\n", "[ 7 sec, 3513 itr]: 0.00109363\n", "[ 8 sec, 4202 itr]: 0.00109363\n", "[ 9 sec, 4202 itr]: 0.00109363\n", "[ 10 sec, 4521 itr]: 0.00109363\n", "[ optimality gap ]: 100.00%\n", "[ 11 sec, 5075 itr]: 0.00109363\n", "[ 12 sec, 5357 itr]: 0.00109363\n", "[ 13 sec, 5357 itr]: 0.00109363\n", "[ 14 sec, 5608 itr]: 0.00109363\n", "[ 15 sec, 5866 itr]: 0.00109363\n", "[ 16 sec, 6135 itr]: 0.00109363\n", "[ 17 sec, 6641 itr]: 0.00109363\n", "[ 18 sec, 6911 itr]: 0.00109363\n", "[ 19 sec, 6911 itr]: 0.00109363\n", "[ 20 sec, 7476 itr]: 0.00109363\n", "[ optimality gap ]: 100.00%\n", "[ 21 sec, 7720 itr]: 0.00109363\n", "[ 22 sec, 7993 itr]: 0.00109363\n", "[ 23 sec, 7993 itr]: 0.00109363\n", "[ 24 sec, 8506 itr]: 0.00109363\n", "[ 25 sec, 8774 itr]: 0.00109363\n", "[ 26 sec, 9058 itr]: 0.00109363\n", "[ 27 sec, 9058 itr]: 0.00109363\n", "[ 28 sec, 9331 itr]: 0.00109363\n", "[ 29 sec, 9881 itr]: 0.00109363\n", "[ 30 sec, 9881 itr]: 0.00109363\n", "[ optimality gap ]: 100.00%\n", "[ 31 sec, 10457 itr]: 0.00109363\n", "[ 32 sec, 10801 itr]: 0.00109363\n", "[ 33 sec, 11175 itr]: 0.00109363\n", "[ 34 sec, 11590 itr]: 0.00109363\n", "[ 35 sec, 11983 itr]: 0.00109363\n", "[ 36 sec, 12306 itr]: 0.00109363\n", "[ 37 sec, 12690 itr]: 0.00109363\n", "[ 38 sec, 12690 itr]: 0.00109363\n", "[ 39 sec, 13509 itr]: 0.00109363\n", "[ 40 sec, 13509 itr]: 0.00109363\n", "[ optimality gap ]: 100.00%\n", "[ 41 sec, 14379 itr]: 0.00109363\n", "[ 42 sec, 14904 itr]: 0.00109363\n", "[ 43 sec, 14904 itr]: 0.00109363\n", "[ 44 sec, 16026 itr]: 0.00109363\n", "[ 45 sec, 16026 itr]: 0.00109363\n", "[ 46 sec, 16584 itr]: 0.00109363\n", "[ 47 sec, 17206 itr]: 0.00109363\n", "[ 48 sec, 18305 itr]: 0.00109363\n", "[ 49 sec, 18305 itr]: 0.00109363\n", "[ 50 sec, 19054 itr]: 0.00109363\n", "[ optimality gap ]: 100.00%\n", "[ 51 sec, 19663 itr]: 0.00109363\n", "[ 52 sec, 21035 itr]: 0.00109363\n", "[ 53 sec, 21035 itr]: 0.00109363\n", "[ 54 sec, 22329 itr]: 0.00109363\n", "[ 55 sec, 22920 itr]: 0.00109363\n", "[ 56 sec, 22920 itr]: 0.00109363\n", "[ 57 sec, 24618 itr]: 0.00109363\n", "[ 58 sec, 24618 itr]: 0.00109363\n", "[ 59 sec, 25489 itr]: 0.00109363\n", "[ 60 sec, 26174 itr]: 0.00109363\n", "[ optimality gap ]: 100.00%\n", "[ 61 sec, 26985 itr]: 0.00109363\n", "[ 62 sec, 28708 itr]: 0.00109363\n", "[ 63 sec, 29571 itr]: 0.00109363\n", "[ 64 sec, 30660 itr]: 0.00109363\n", "[ 65 sec, 30660 itr]: 0.00109363\n", "[ 66 sec, 33161 itr]: 0.00109363\n", "[ 67 sec, 34620 itr]: 0.00109363\n", "[ 68 sec, 35427 itr]: 0.00109363\n", "[ 69 sec, 36331 itr]: 0.00109363\n", "[ 70 sec, 36331 itr]: 0.00109363\n", "[ optimality gap ]: 100.00%\n", "[ 71 sec, 37300 itr]: 0.00109363\n", "[ 72 sec, 39734 itr]: 0.00109363\n", "[ 73 sec, 39734 itr]: 0.00109363\n", "[ 74 sec, 42357 itr]: 0.00109363\n", "[ 75 sec, 43777 itr]: 0.00109363\n", "[ 76 sec, 43777 itr]: 0.00109363\n", "[ 77 sec, 46432 itr]: 0.00109363\n", "[ 78 sec, 48014 itr]: 0.00109363\n", "[ 79 sec, 49675 itr]: 0.00109363\n", "[ 80 sec, 50939 itr]: 0.00109363\n", "[ optimality gap ]: 100.00%\n", "[ 81 sec, 52229 itr]: 0.00109363\n", "[ 82 sec, 53510 itr]: 0.00109363\n", "[ 83 sec, 54838 itr]: 0.00109363\n", "[ 84 sec, 56219 itr]: 0.00109363\n", "[ 85 sec, 57598 itr]: 0.00109363\n", "[ 86 sec, 59114 itr]: 0.00109363\n", "[ 87 sec, 60794 itr]: 0.00109363\n", "[ 88 sec, 60794 itr]: 0.00109363\n", "[ 89 sec, 62586 itr]: 0.00109363\n", "[ 90 sec, 65484 itr]: 0.00109363\n", "[ optimality gap ]: 100.00%\n", "[ 91 sec, 66984 itr]: 0.00109363\n", "[ 92 sec, 68386 itr]: 0.00109363\n", "[ 93 sec, 68386 itr]: 0.00109363\n", "[ 94 sec, 71087 itr]: 0.00109363\n", "[ 95 sec, 72642 itr]: 0.00109363\n", "[ 96 sec, 74305 itr]: 0.00109363\n", "[ 97 sec, 75964 itr]: 0.00109363\n", "[ 98 sec, 77668 itr]: 0.00109363\n", "[ 99 sec, 77668 itr]: 0.00109363\n", "[100 sec, 81322 itr]: 0.00109363\n", "[ optimality gap ]: 100.00%\n", "[101 sec, 82982 itr]: 0.00109363\n", "[102 sec, 82982 itr]: 0.00109363\n", "[103 sec, 86483 itr]: 0.00109363\n", "[104 sec, 86483 itr]: 0.00109363\n", "[105 sec, 89652 itr]: 0.00109363\n", "[106 sec, 89652 itr]: 0.00109363\n", "[107 sec, 91377 itr]: 0.00109363\n", "[108 sec, 93075 itr]: 0.00109363\n", "[109 sec, 95746 itr]: 0.00108351\n", "[110 sec, 95746 itr]: 0.00108351\n", "[ optimality gap ]: 100.00%\n", "[111 sec, 99102 itr]: 0.00108265\n", "[112 sec, 99102 itr]: 0.00108265\n", "[113 sec, 102479 itr]: 0.00108171\n", "[114 sec, 102479 itr]: 0.00108171\n", "[115 sec, 105824 itr]: 0.00108171\n", "[116 sec, 107631 itr]: 0.00108171\n", "[117 sec, 109239 itr]: 0.00107665\n", "[118 sec, 110889 itr]: 0.00107386\n", "[119 sec, 112638 itr]: 0.00107386\n", "[120 sec, 114778 itr]: 0.00107386\n", "[ optimality gap ]: 100.00%\n", "[121 sec, 114778 itr]: 0.00107386\n", "[122 sec, 116787 itr]: 0.00107386\n", "[123 sec, 120536 itr]: 0.00107386\n", "[124 sec, 122390 itr]: 0.00107386\n", "[125 sec, 122390 itr]: 0.00107386\n", "[126 sec, 123826 itr]: 0.00107386\n", "[127 sec, 125606 itr]: 0.00107386\n", "[128 sec, 128956 itr]: 0.00107385\n", "[129 sec, 130493 itr]: 0.00107385\n", "[130 sec, 132310 itr]: 0.00107373\n", "[ optimality gap ]: 100.00%\n", "[131 sec, 133881 itr]: 0.00107373\n", "[132 sec, 133881 itr]: 0.00107373\n", "[133 sec, 137501 itr]: 0.00107373\n", "[134 sec, 137501 itr]: 0.00107373\n", "[135 sec, 139124 itr]: 0.00107235\n", "[136 sec, 142470 itr]: 0.0010687\n", "[137 sec, 144210 itr]: 0.0010658\n", "[138 sec, 145961 itr]: 0.00106533\n", "[139 sec, 147824 itr]: 0.00106481\n", "[140 sec, 149423 itr]: 0.00106481\n", "[ optimality gap ]: 100.00%\n", "[141 sec, 149423 itr]: 0.00106481\n", "[142 sec, 152758 itr]: 0.00106481\n", "[143 sec, 154299 itr]: 0.00106481\n", "[144 sec, 155888 itr]: 0.00106481\n", "[145 sec, 157490 itr]: 0.00106481\n", "[146 sec, 157490 itr]: 0.00106481\n", "[147 sec, 158915 itr]: 0.00106481\n", "[148 sec, 161981 itr]: 0.00106481\n", "[149 sec, 161981 itr]: 0.00106481\n", "[150 sec, 164929 itr]: 0.00106118\n", "[ optimality gap ]: 100.00%\n", "[151 sec, 166352 itr]: 0.00106118\n", "[152 sec, 167652 itr]: 0.00106118\n", "[153 sec, 169150 itr]: 0.00106118\n", "[154 sec, 170646 itr]: 0.00106118\n", "[155 sec, 170646 itr]: 0.00106118\n", "[156 sec, 172551 itr]: 0.00105954\n", "[157 sec, 176568 itr]: 0.00105954\n", "[158 sec, 178443 itr]: 0.00105954\n", "[159 sec, 178443 itr]: 0.00105954\n", "[160 sec, 182133 itr]: 0.00105954\n", "[ optimality gap ]: 100.00%\n", "[161 sec, 182133 itr]: 0.00105954\n", "[162 sec, 184086 itr]: 0.00105954\n", "[163 sec, 187527 itr]: 0.00105954\n", "[164 sec, 189551 itr]: 0.00105954\n", "[165 sec, 191438 itr]: 0.00105901\n", "[166 sec, 193582 itr]: 0.00105901\n", "[167 sec, 195791 itr]: 0.00105901\n", "[168 sec, 195791 itr]: 0.00105901\n", "[169 sec, 197645 itr]: 0.00105901\n", "[170 sec, 199747 itr]: 0.00105901\n", "[ optimality gap ]: 100.00%\n", "[171 sec, 201583 itr]: 0.00105901\n", "[172 sec, 205467 itr]: 0.00105759\n", "[173 sec, 205467 itr]: 0.00105719\n", "[174 sec, 207637 itr]: 0.00105719\n", "[175 sec, 209529 itr]: 0.00105719\n", "[176 sec, 213351 itr]: 0.00105719\n", "[177 sec, 213351 itr]: 0.00105719\n", "[178 sec, 217063 itr]: 0.00105675\n", "[179 sec, 219040 itr]: 0.00105675\n", "[180 sec, 219040 itr]: 0.00105675\n", "[ optimality gap ]: 100.00%\n", "[181 sec, 223027 itr]: 0.00105675\n", "[182 sec, 224610 itr]: 0.00105675\n", "[183 sec, 224610 itr]: 0.00105675\n", "[184 sec, 227668 itr]: 0.00105675\n", "[185 sec, 227668 itr]: 0.00105675\n", "[186 sec, 230642 itr]: 0.00105675\n", "[187 sec, 232385 itr]: 0.00105675\n", "[188 sec, 233903 itr]: 0.00105675\n", "[189 sec, 235543 itr]: 0.00105576\n", "[190 sec, 237198 itr]: 0.00105576\n", "[ optimality gap ]: 100.00%\n", "[191 sec, 238802 itr]: 0.00105576\n", "[192 sec, 240200 itr]: 0.00105576\n", "[193 sec, 241847 itr]: 0.00105576\n", "[194 sec, 243559 itr]: 0.00105576\n", "[195 sec, 245162 itr]: 0.00105576\n", "[196 sec, 245162 itr]: 0.00105576\n", "[197 sec, 246973 itr]: 0.00105576\n", "[198 sec, 250640 itr]: 0.00105576\n", "[199 sec, 250640 itr]: 0.00105576\n", "[200 sec, 254464 itr]: 0.00105576\n", "[ optimality gap ]: 100.00%\n", "[201 sec, 256204 itr]: 0.00105576\n", "[202 sec, 256204 itr]: 0.00105576\n", "[203 sec, 258275 itr]: 0.00105576\n", "[204 sec, 262095 itr]: 0.00105576\n", "[205 sec, 262095 itr]: 0.00105576\n", "[206 sec, 263891 itr]: 0.00105576\n", "[207 sec, 267570 itr]: 0.00105576\n", "[208 sec, 269614 itr]: 0.00105576\n", "[209 sec, 271398 itr]: 0.00105576\n", "[210 sec, 271398 itr]: 0.00105576\n", "[ optimality gap ]: 100.00%\n", "[211 sec, 273406 itr]: 0.00105576\n", "[212 sec, 277055 itr]: 0.00105576\n", "[213 sec, 279180 itr]: 0.00105576\n", "[214 sec, 279180 itr]: 0.00105576\n", "[215 sec, 282811 itr]: 0.00105576\n", "[216 sec, 282811 itr]: 0.00105576\n", "[217 sec, 287029 itr]: 0.00105545\n", "[218 sec, 289131 itr]: 0.00105545\n", "[219 sec, 289131 itr]: 0.00105545\n", "[220 sec, 293110 itr]: 0.00105468\n", "[ optimality gap ]: 100.00%\n", "[221 sec, 293110 itr]: 0.00105468\n", "[222 sec, 296688 itr]: 0.0010539\n", "[223 sec, 298725 itr]: 0.00105371\n", "[224 sec, 300292 itr]: 0.00105371\n", "[225 sec, 300292 itr]: 0.00105371\n", "[226 sec, 302077 itr]: 0.00105371\n", "[227 sec, 306039 itr]: 0.00105226\n", "[228 sec, 306039 itr]: 0.00105226\n", "[229 sec, 307451 itr]: 0.00105226\n", "[230 sec, 308052 itr]: 0.00105226\n", "[ optimality gap ]: 100.00%\n", "[231 sec, 308623 itr]: 0.00105226\n", "[232 sec, 308623 itr]: 0.00105226\n", "[233 sec, 310032 itr]: 0.00105226\n", "[234 sec, 310032 itr]: 0.00105226\n", "[235 sec, 310945 itr]: 0.00105226\n", "[236 sec, 312453 itr]: 0.00105226\n", "[237 sec, 312453 itr]: 0.00105226\n", "[238 sec, 313325 itr]: 0.00105226\n", "[239 sec, 314915 itr]: 0.00105207\n", "[240 sec, 314915 itr]: 0.00105207\n", "[ optimality gap ]: 100.00%\n", "[241 sec, 316404 itr]: 0.00105207\n", "[242 sec, 316404 itr]: 0.00105207\n", "[243 sec, 317962 itr]: 0.00105207\n", "[244 sec, 318588 itr]: 0.00105194\n", "[245 sec, 318588 itr]: 0.00105194\n", "[246 sec, 319434 itr]: 0.00105194\n", "[247 sec, 321013 itr]: 0.00105194\n", "[248 sec, 321664 itr]: 0.00105194\n", "[249 sec, 321664 itr]: 0.00105194\n", "[250 sec, 323117 itr]: 0.00105194\n", "[ optimality gap ]: 100.00%\n", "[251 sec, 323117 itr]: 0.00105194\n", "[252 sec, 323873 itr]: 0.00105194\n", "[253 sec, 324492 itr]: 0.00105194\n", "[254 sec, 326056 itr]: 0.00105194\n", "[255 sec, 326056 itr]: 0.00105194\n", "[256 sec, 327720 itr]: 0.00105194\n", "[257 sec, 327720 itr]: 0.00105194\n", "[258 sec, 329303 itr]: 0.00105194\n", "[259 sec, 329303 itr]: 0.00105194\n", "[260 sec, 330739 itr]: 0.00105194\n", "[ optimality gap ]: 100.00%\n", "[261 sec, 330739 itr]: 0.00105194\n", "[262 sec, 331689 itr]: 0.00105194\n", "[263 sec, 332457 itr]: 0.00105194\n", "[264 sec, 333244 itr]: 0.00105194\n", "[265 sec, 333933 itr]: 0.00105183\n", "[266 sec, 335300 itr]: 0.00105168\n", "[267 sec, 335300 itr]: 0.00105168\n", "[268 sec, 335975 itr]: 0.00105168\n", "[269 sec, 336859 itr]: 0.00105168\n", "[270 sec, 337513 itr]: 0.00105168\n", "[ optimality gap ]: 100.00%\n", "[271 sec, 339052 itr]: 0.00105168\n", "[272 sec, 339788 itr]: 0.00105168\n", "[273 sec, 339788 itr]: 0.00105168\n", "[274 sec, 341046 itr]: 0.00105168\n", "[275 sec, 341046 itr]: 0.00105168\n", "[276 sec, 342387 itr]: 0.00105168\n", "[277 sec, 342387 itr]: 0.00105168\n", "[278 sec, 343024 itr]: 0.00105155\n", "[279 sec, 343786 itr]: 0.00105155\n", "[280 sec, 345023 itr]: 0.00105135\n", "[ optimality gap ]: 100.00%\n", "[281 sec, 345698 itr]: 0.00105135\n", "[282 sec, 345698 itr]: 0.00105135\n", "[283 sec, 346353 itr]: 0.00105135\n", "[284 sec, 347952 itr]: 0.00105076\n", "[285 sec, 348619 itr]: 0.00105066\n", "[286 sec, 348619 itr]: 0.00105066\n", "[287 sec, 349403 itr]: 0.00105066\n", "[288 sec, 350132 itr]: 0.00105066\n", "[289 sec, 350790 itr]: 0.00105066\n", "[290 sec, 352171 itr]: 0.00105066\n", "[ optimality gap ]: 100.00%\n", "[291 sec, 352856 itr]: 0.00105066\n", "[292 sec, 352856 itr]: 0.00105066\n", "[293 sec, 354243 itr]: 0.00104905\n", "[294 sec, 355071 itr]: 0.00104905\n", "[295 sec, 355809 itr]: 0.00104905\n", "[296 sec, 355809 itr]: 0.00104905\n", "[297 sec, 357257 itr]: 0.00104905\n", "[298 sec, 357927 itr]: 0.00104905\n", "[299 sec, 358644 itr]: 0.00104905\n", "[300 sec, 359308 itr]: 0.00104905\n", "[ optimality gap ]: 100.00%\n", "[300 sec, 359308 itr]: 0.00104905\n", "[ optimality gap ]: 100.00%\n", "\n", "359308 iterations performed in 300 seconds\n", "\n", "\u001b[1m\u001b[32mFeasible solution: \u001b[0m\n", " obj = 0.00104905\n", " gap = 100.00%\n", " bounds = -inf\n", "Status: HxSolutionStatus.FEASIBLE\n", "Eenergy value obtained by Hexaly:0.001049053329335798\n" ] } ], "source": [ "# solve with Hexaly\n", "hexaly_start = time.time()\n", "hex_sol_list, hex_obj = hexaly_solver(Q=M,c=c,sum_constraint=sum_constraint,time_limit=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\"Eenergy value obtained by Hexaly:{hex_obj}\")\n" ] } ], "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 }