[{"data":1,"prerenderedAt":3041},["ShallowReactive",2],{"dev-\u002Fdeveloper\u002Fexamples\u002Fby-class":3},{"id":4,"title":5,"body":6,"description":3032,"extension":3033,"faq":3034,"meta":3035,"navigation":136,"noindex":3036,"path":3037,"seo":3038,"stem":3039,"__hash__":3040},"content\u002Fdeveloper\u002Fexamples\u002Fby-class.md","Examples by problem class",{"type":7,"value":8,"toc":3020},"minimark",[9,13,22,48,55,78,83,94,348,353,357,371,569,573,577,587,779,783,787,797,1521,1525,1529,1547,1828,1832,1836,1863,2101,2105,2109,2136,2325,2329,2333,2342,2670,2674,2678,2711,3002,3006,3010,3016],[10,11,5],"h1",{"id":12},"examples-by-problem-class",[14,15,16,17,21],"p",{},"One complete script per supported problem class — ",[18,19,20],"strong",{},"LP, QP, MILP, MINLP, QUBO,\nPUBO, NLP"," — plus a realistic facility-location MILP and a look at how\ninfeasibility comes back. Each script is self-contained:",[23,24,29],"pre",{"className":25,"code":26,"language":27,"meta":28,"style":28},"language-bash shiki shiki-themes github-dark","pip install \"quicopt[mathopt]\"\n","bash","",[30,31,32],"code",{"__ignoreMap":28},[33,34,37,41,45],"span",{"class":35,"line":36},"line",1,[33,38,40],{"class":39},"svObZ","pip",[33,42,44],{"class":43},"sU2Wk"," install",[33,46,47],{"class":43}," \"quicopt[mathopt]\"\n",[14,49,50,51,54],{},"The NLP, MINLP, and PUBO examples model in Pyomo — for those, install\n",[30,52,53],{},"quicopt[pyomo]",".",[14,56,57,58,61,62,65,66,69,70,73,74,77],{},"Every result opens with a ",[30,59,60],{},"shots"," block. quicopt runs several solvers on your\nmodel and prints what each one came back with, labelled by method and by what\nits answer is certified to be: ",[30,63,64],{},"primal-dual · global"," carries a bound that\nsettles the problem, ",[30,67,68],{},"primal"," reports a point it found and claims nothing beyond\nit. The shot marked ",[30,71,72],{},"◀ best"," is the one the values underneath come from, and\n",[30,75,76],{},"solve_time"," is the wall clock for the whole set.",[79,80,82],"h2",{"id":81},"lp-a-linear-program","LP — a linear program",[14,84,85,86,89,90,93],{},"Continuous variables, a linear objective, linear constraints. LPs are solved to\nproven optimality — ",[30,87,88],{},"status: optimal",", ",[30,91,92],{},"feasible: true",":",[23,95,100],{"className":96,"code":97,"filename":98,"language":99,"meta":28,"style":28},"language-python shiki shiki-themes github-dark","from ortools.math_opt.python import mathopt\nfrom quicopt import Client\n\n# A linear program: continuous variables, a linear objective, linear constraints.\nmodel = mathopt.Model(name=\"lp\")\nx = model.add_variable(lb=0.0, name=\"x\")\ny = model.add_variable(lb=0.0, ub=6.0, name=\"y\")\nmodel.add_linear_constraint(x + 2 * y \u003C= 14)\nmodel.add_linear_constraint(3 * x - y >= 0)\nmodel.maximize(3 * x + 4 * y)\n\nclient = Client()\nresult = client.solve(model)\nprint(result.display)\n","lp.py","python",[30,101,102,118,131,138,145,169,200,237,263,290,312,317,328,339],{"__ignoreMap":28},[33,103,104,108,112,115],{"class":35,"line":36},[33,105,107],{"class":106},"snl16","from",[33,109,111],{"class":110},"s95oV"," ortools.math_opt.python ",[33,113,114],{"class":106},"import",[33,116,117],{"class":110}," mathopt\n",[33,119,121,123,126,128],{"class":35,"line":120},2,[33,122,107],{"class":106},[33,124,125],{"class":110}," quicopt ",[33,127,114],{"class":106},[33,129,130],{"class":110}," Client\n",[33,132,134],{"class":35,"line":133},3,[33,135,137],{"emptyLinePlaceholder":136},true,"\n",[33,139,141],{"class":35,"line":140},4,[33,142,144],{"class":143},"sAwPA","# A linear program: continuous variables, a linear objective, linear constraints.\n",[33,146,148,151,154,157,161,163,166],{"class":35,"line":147},5,[33,149,150],{"class":110},"model ",[33,152,153],{"class":106},"=",[33,155,156],{"class":110}," mathopt.Model(",[33,158,160],{"class":159},"s9osk","name",[33,162,153],{"class":106},[33,164,165],{"class":43},"\"lp\"",[33,167,168],{"class":110},")\n",[33,170,172,175,177,180,183,185,189,191,193,195,198],{"class":35,"line":171},6,[33,173,174],{"class":110},"x ",[33,176,153],{"class":106},[33,178,179],{"class":110}," model.add_variable(",[33,181,182],{"class":159},"lb",[33,184,153],{"class":106},[33,186,188],{"class":187},"sDLfK","0.0",[33,190,89],{"class":110},[33,192,160],{"class":159},[33,194,153],{"class":106},[33,196,197],{"class":43},"\"x\"",[33,199,168],{"class":110},[33,201,203,206,208,210,212,214,216,218,221,223,226,228,230,232,235],{"class":35,"line":202},7,[33,204,205],{"class":110},"y ",[33,207,153],{"class":106},[33,209,179],{"class":110},[33,211,182],{"class":159},[33,213,153],{"class":106},[33,215,188],{"class":187},[33,217,89],{"class":110},[33,219,220],{"class":159},"ub",[33,222,153],{"class":106},[33,224,225],{"class":187},"6.0",[33,227,89],{"class":110},[33,229,160],{"class":159},[33,231,153],{"class":106},[33,233,234],{"class":43},"\"y\"",[33,236,168],{"class":110},[33,238,240,243,246,249,252,255,258,261],{"class":35,"line":239},8,[33,241,242],{"class":110},"model.add_linear_constraint(x ",[33,244,245],{"class":106},"+",[33,247,248],{"class":187}," 2",[33,250,251],{"class":106}," *",[33,253,254],{"class":110}," y ",[33,256,257],{"class":106},"\u003C=",[33,259,260],{"class":187}," 14",[33,262,168],{"class":110},[33,264,266,269,272,274,277,280,282,285,288],{"class":35,"line":265},9,[33,267,268],{"class":110},"model.add_linear_constraint(",[33,270,271],{"class":187},"3",[33,273,251],{"class":106},[33,275,276],{"class":110}," x ",[33,278,279],{"class":106},"-",[33,281,254],{"class":110},[33,283,284],{"class":106},">=",[33,286,287],{"class":187}," 0",[33,289,168],{"class":110},[33,291,293,296,298,300,302,304,307,309],{"class":35,"line":292},10,[33,294,295],{"class":110},"model.maximize(",[33,297,271],{"class":187},[33,299,251],{"class":106},[33,301,276],{"class":110},[33,303,245],{"class":106},[33,305,306],{"class":187}," 4",[33,308,251],{"class":106},[33,310,311],{"class":110}," y)\n",[33,313,315],{"class":35,"line":314},11,[33,316,137],{"emptyLinePlaceholder":136},[33,318,320,323,325],{"class":35,"line":319},12,[33,321,322],{"class":110},"client ",[33,324,153],{"class":106},[33,326,327],{"class":110}," Client()\n",[33,329,331,334,336],{"class":35,"line":330},13,[33,332,333],{"class":110},"result ",[33,335,153],{"class":106},[33,337,338],{"class":110}," client.solve(model)\n",[33,340,342,345],{"class":35,"line":341},14,[33,343,344],{"class":187},"print",[33,346,347],{"class":110},"(result.display)\n",[349,350],"term-result",{":rows":351,"cmd":352},"[\"├── shots\",\"│   ├── 1 · primal-dual · global   42    0.0s  ◀ best\",\"│   └── 2 · primal-dual · global   42   0.01s\",\"├── status:     optimal\",\"├── feasible:   true\",\"├── objective:  42.0\",\"├── x:          x=14, y=0  (2 variables)\",\"└── solve_time: 0.0112 s\"]","$ python lp.py",[79,354,356],{"id":355},"qp-a-quadratic-program","QP — a quadratic program",[14,358,359,360,363,364,367,368,93],{},"A convex quadratic objective under a linear constraint. Unconstrained the\noptimum would sit at ",[30,361,362],{},"(1, 2)","; the budget ",[30,365,366],{},"x + y \u003C= 2"," pushes it to\n",[30,369,370],{},"(0.5, 1.5)",[23,372,375],{"className":96,"code":373,"filename":374,"language":99,"meta":28,"style":28},"from ortools.math_opt.python import mathopt\nfrom quicopt import Client\n\n# A QP: continuous variables, a convex quadratic objective, a linear constraint.\n# Unconstrained the optimum would be (1, 2); the constraint x + y \u003C= 2 pushes\n# it to (0.5, 1.5) with objective 0.5.\nmodel = mathopt.Model(name=\"qp\")\nx = model.add_variable(lb=0.0, name=\"x\")\ny = model.add_variable(lb=0.0, name=\"y\")\nmodel.add_linear_constraint(x + y \u003C= 2)\nmodel.minimize((x - 1) * (x - 1) + (y - 2) * (y - 2))\n\nclient = Client()\nresult = client.solve(model)\nprint(result.display)\n","qp.py",[30,376,377,387,397,401,406,411,416,433,457,481,495,542,546,554,562],{"__ignoreMap":28},[33,378,379,381,383,385],{"class":35,"line":36},[33,380,107],{"class":106},[33,382,111],{"class":110},[33,384,114],{"class":106},[33,386,117],{"class":110},[33,388,389,391,393,395],{"class":35,"line":120},[33,390,107],{"class":106},[33,392,125],{"class":110},[33,394,114],{"class":106},[33,396,130],{"class":110},[33,398,399],{"class":35,"line":133},[33,400,137],{"emptyLinePlaceholder":136},[33,402,403],{"class":35,"line":140},[33,404,405],{"class":143},"# A QP: continuous variables, a convex quadratic objective, a linear constraint.\n",[33,407,408],{"class":35,"line":147},[33,409,410],{"class":143},"# Unconstrained the optimum would be (1, 2); the constraint x + y \u003C= 2 pushes\n",[33,412,413],{"class":35,"line":171},[33,414,415],{"class":143},"# it to (0.5, 1.5) with objective 0.5.\n",[33,417,418,420,422,424,426,428,431],{"class":35,"line":202},[33,419,150],{"class":110},[33,421,153],{"class":106},[33,423,156],{"class":110},[33,425,160],{"class":159},[33,427,153],{"class":106},[33,429,430],{"class":43},"\"qp\"",[33,432,168],{"class":110},[33,434,435,437,439,441,443,445,447,449,451,453,455],{"class":35,"line":239},[33,436,174],{"class":110},[33,438,153],{"class":106},[33,440,179],{"class":110},[33,442,182],{"class":159},[33,444,153],{"class":106},[33,446,188],{"class":187},[33,448,89],{"class":110},[33,450,160],{"class":159},[33,452,153],{"class":106},[33,454,197],{"class":43},[33,456,168],{"class":110},[33,458,459,461,463,465,467,469,471,473,475,477,479],{"class":35,"line":265},[33,460,205],{"class":110},[33,462,153],{"class":106},[33,464,179],{"class":110},[33,466,182],{"class":159},[33,468,153],{"class":106},[33,470,188],{"class":187},[33,472,89],{"class":110},[33,474,160],{"class":159},[33,476,153],{"class":106},[33,478,234],{"class":43},[33,480,168],{"class":110},[33,482,483,485,487,489,491,493],{"class":35,"line":292},[33,484,242],{"class":110},[33,486,245],{"class":106},[33,488,254],{"class":110},[33,490,257],{"class":106},[33,492,248],{"class":187},[33,494,168],{"class":110},[33,496,497,500,502,505,508,511,514,516,518,520,522,525,527,529,531,533,535,537,539],{"class":35,"line":314},[33,498,499],{"class":110},"model.minimize((x ",[33,501,279],{"class":106},[33,503,504],{"class":187}," 1",[33,506,507],{"class":110},") ",[33,509,510],{"class":106},"*",[33,512,513],{"class":110}," (x ",[33,515,279],{"class":106},[33,517,504],{"class":187},[33,519,507],{"class":110},[33,521,245],{"class":106},[33,523,524],{"class":110}," (y ",[33,526,279],{"class":106},[33,528,248],{"class":187},[33,530,507],{"class":110},[33,532,510],{"class":106},[33,534,524],{"class":110},[33,536,279],{"class":106},[33,538,248],{"class":187},[33,540,541],{"class":110},"))\n",[33,543,544],{"class":35,"line":319},[33,545,137],{"emptyLinePlaceholder":136},[33,547,548,550,552],{"class":35,"line":330},[33,549,322],{"class":110},[33,551,153],{"class":106},[33,553,327],{"class":110},[33,555,556,558,560],{"class":35,"line":341},[33,557,333],{"class":110},[33,559,153],{"class":106},[33,561,338],{"class":110},[33,563,565,567],{"class":35,"line":564},15,[33,566,344],{"class":187},[33,568,347],{"class":110},[349,570],{":rows":571,"cmd":572},"[\"├── shots\",\"│   ├── 1 · primal-dual · global   0.5   0.08s  ◀ best\",\"│   ├── 2 · primal-dual · global   0.5   0.09s\",\"│   └── 3 · primal-dual · local    0.5   0.08s\",\"├── status:     optimal\",\"├── feasible:   true\",\"├── objective:  0.5000000000000013\",\"├── x:          x=0.5, y=1.5  (2 variables)\",\"└── solve_time: 0.0946 s\"]","$ python qp.py",[79,574,576],{"id":575},"milp-a-small-mixed-integer-program","MILP — a small mixed-integer program",[14,578,579,580,583,584,93],{},"One continuous and one integer variable under two linear constraints. The LP\nrelaxation would take ",[30,581,582],{},"y = 3.5","; integrality bites and the true optimum is\n",[30,585,586],{},"x=14, y=0",[23,588,591],{"className":96,"code":589,"filename":590,"language":99,"meta":28,"style":28},"from ortools.math_opt.python import mathopt\nfrom quicopt import Client\n\n# A tiny mixed-integer model: one continuous and one integer variable.\nmodel = mathopt.Model(name=\"milp\")\nx = model.add_variable(lb=0.0, name=\"x\")\ny = model.add_integer_variable(lb=0.0, ub=10.0, name=\"y\")\nmodel.add_linear_constraint(x + 2 * y \u003C= 14)\nmodel.add_linear_constraint(3 * x - y >= 0)\nmodel.maximize(3 * x + 4 * y)\n\nclient = Client()\nresult = client.solve(model)\nprint(result.display)\n","milp.py",[30,592,593,603,613,617,622,639,663,697,715,735,753,757,765,773],{"__ignoreMap":28},[33,594,595,597,599,601],{"class":35,"line":36},[33,596,107],{"class":106},[33,598,111],{"class":110},[33,600,114],{"class":106},[33,602,117],{"class":110},[33,604,605,607,609,611],{"class":35,"line":120},[33,606,107],{"class":106},[33,608,125],{"class":110},[33,610,114],{"class":106},[33,612,130],{"class":110},[33,614,615],{"class":35,"line":133},[33,616,137],{"emptyLinePlaceholder":136},[33,618,619],{"class":35,"line":140},[33,620,621],{"class":143},"# A tiny mixed-integer model: one continuous and one integer variable.\n",[33,623,624,626,628,630,632,634,637],{"class":35,"line":147},[33,625,150],{"class":110},[33,627,153],{"class":106},[33,629,156],{"class":110},[33,631,160],{"class":159},[33,633,153],{"class":106},[33,635,636],{"class":43},"\"milp\"",[33,638,168],{"class":110},[33,640,641,643,645,647,649,651,653,655,657,659,661],{"class":35,"line":171},[33,642,174],{"class":110},[33,644,153],{"class":106},[33,646,179],{"class":110},[33,648,182],{"class":159},[33,650,153],{"class":106},[33,652,188],{"class":187},[33,654,89],{"class":110},[33,656,160],{"class":159},[33,658,153],{"class":106},[33,660,197],{"class":43},[33,662,168],{"class":110},[33,664,665,667,669,672,674,676,678,680,682,684,687,689,691,693,695],{"class":35,"line":202},[33,666,205],{"class":110},[33,668,153],{"class":106},[33,670,671],{"class":110}," model.add_integer_variable(",[33,673,182],{"class":159},[33,675,153],{"class":106},[33,677,188],{"class":187},[33,679,89],{"class":110},[33,681,220],{"class":159},[33,683,153],{"class":106},[33,685,686],{"class":187},"10.0",[33,688,89],{"class":110},[33,690,160],{"class":159},[33,692,153],{"class":106},[33,694,234],{"class":43},[33,696,168],{"class":110},[33,698,699,701,703,705,707,709,711,713],{"class":35,"line":239},[33,700,242],{"class":110},[33,702,245],{"class":106},[33,704,248],{"class":187},[33,706,251],{"class":106},[33,708,254],{"class":110},[33,710,257],{"class":106},[33,712,260],{"class":187},[33,714,168],{"class":110},[33,716,717,719,721,723,725,727,729,731,733],{"class":35,"line":265},[33,718,268],{"class":110},[33,720,271],{"class":187},[33,722,251],{"class":106},[33,724,276],{"class":110},[33,726,279],{"class":106},[33,728,254],{"class":110},[33,730,284],{"class":106},[33,732,287],{"class":187},[33,734,168],{"class":110},[33,736,737,739,741,743,745,747,749,751],{"class":35,"line":292},[33,738,295],{"class":110},[33,740,271],{"class":187},[33,742,251],{"class":106},[33,744,276],{"class":110},[33,746,245],{"class":106},[33,748,306],{"class":187},[33,750,251],{"class":106},[33,752,311],{"class":110},[33,754,755],{"class":35,"line":314},[33,756,137],{"emptyLinePlaceholder":136},[33,758,759,761,763],{"class":35,"line":319},[33,760,322],{"class":110},[33,762,153],{"class":106},[33,764,327],{"class":110},[33,766,767,769,771],{"class":35,"line":330},[33,768,333],{"class":110},[33,770,153],{"class":106},[33,772,338],{"class":110},[33,774,775,777],{"class":35,"line":341},[33,776,344],{"class":187},[33,778,347],{"class":110},[349,780],{":rows":781,"cmd":782},"[\"├── shots\",\"│   ├── 1 · primal-dual · global   42    0.0s  ◀ best\",\"│   ├── 2 · primal-dual · global   42   0.01s\",\"│   └── 3 · primal                 40   0.01s\",\"├── status:     optimal\",\"├── feasible:   true\",\"├── objective:  42.0\",\"├── x:          x=14, y=0  (2 variables)\",\"└── solve_time: 0.0093 s\"]","$ python milp.py",[79,784,786],{"id":785},"milp-at-a-realistic-shape-facility-location","MILP at a realistic shape — facility location",[14,788,789,790,793,794,93],{},"4 candidate facilities serving 8 customers — 4 binary open\u002Fclose decisions plus\n32 continuous shipping quantities, 36 variables in total. The interesting part\nis the ",[18,791,792],{},"coupling",": a facility may only ship if it is opened, expressed through\nits capacity constraint ",[30,795,796],{},"sum(ship) \u003C= capacity * open",[23,798,801],{"className":96,"code":799,"filename":800,"language":99,"meta":28,"style":28},"\"\"\"Capacitated facility location as a MILP.\n\nDecisions:\n  - y[f] (binary):      is facility f opened?\n  - x[f][c] (continuous): quantity shipped from facility f to customer c\n\nObjective: minimize fixed costs of opened facilities + transport costs.\nConstraints:\n  - every customer's demand must be met exactly\n  - a facility may not ship more than its capacity\n  - only opened facilities may ship (coupled through the capacity constraint)\n\"\"\"\nfrom ortools.math_opt.python import mathopt\nfrom quicopt import Client\n\n# --- Deterministic problem instance ---------------------------------------\nF = 4   # facilities\nC = 8   # customers          ->  F + F*C = 4 + 32 = 36 variables\n\nfixed_cost = [100.0, 120.0, 90.0, 150.0]        # opening cost per facility\ncapacity   = [60.0, 80.0, 50.0, 100.0]          # capacity per facility\ndemand     = [10.0, 15.0, 8.0, 12.0, 20.0, 9.0, 14.0, 11.0]   # demand per customer\n\n# Transport cost facility->customer, generated deterministically\ntrans = [[4.0 + ((f * 7 + c * 3) % 11) for c in range(C)] for f in range(F)]\n\nassert sum(capacity) >= sum(demand), \"total capacity does not cover demand\"\n\n# --- Model -----------------------------------------------------------------\nmodel = mathopt.Model(name=\"facility_location\")\n\ny = [model.add_binary_variable(name=f\"open_{f}\") for f in range(F)]\nx = [[model.add_variable(lb=0.0, name=f\"ship_{f}_{c}\") for c in range(C)] for f in range(F)]\n\n# Every customer is served exactly\nfor c in range(C):\n    model.add_linear_constraint(sum(x[f][c] for f in range(F)) == demand[c])\n\n# Capacity + coupling: only opened facilities ship\nfor f in range(F):\n    model.add_linear_constraint(sum(x[f][c] for c in range(C)) \u003C= capacity[f] * y[f])\n\n# Objective: fixed costs + transport costs\nmodel.minimize(\n    sum(fixed_cost[f] * y[f] for f in range(F))\n    + sum(trans[f][c] * x[f][c] for f in range(F) for c in range(C))\n)\n\nclient = Client()\nresult = client.solve(model)\nprint(result.display)\n","facility.py",[30,802,803,808,812,817,822,827,831,836,841,846,851,856,861,871,881,885,891,904,918,923,958,991,1044,1049,1055,1126,1131,1153,1158,1164,1182,1187,1230,1297,1302,1308,1322,1351,1356,1362,1376,1406,1411,1417,1423,1448,1486,1491,1496,1505,1514],{"__ignoreMap":28},[33,804,805],{"class":35,"line":36},[33,806,807],{"class":43},"\"\"\"Capacitated facility location as a MILP.\n",[33,809,810],{"class":35,"line":120},[33,811,137],{"emptyLinePlaceholder":136},[33,813,814],{"class":35,"line":133},[33,815,816],{"class":43},"Decisions:\n",[33,818,819],{"class":35,"line":140},[33,820,821],{"class":43},"  - y[f] (binary):      is facility f opened?\n",[33,823,824],{"class":35,"line":147},[33,825,826],{"class":43},"  - x[f][c] (continuous): quantity shipped from facility f to customer c\n",[33,828,829],{"class":35,"line":171},[33,830,137],{"emptyLinePlaceholder":136},[33,832,833],{"class":35,"line":202},[33,834,835],{"class":43},"Objective: minimize fixed costs of opened facilities + transport costs.\n",[33,837,838],{"class":35,"line":239},[33,839,840],{"class":43},"Constraints:\n",[33,842,843],{"class":35,"line":265},[33,844,845],{"class":43},"  - every customer's demand must be met exactly\n",[33,847,848],{"class":35,"line":292},[33,849,850],{"class":43},"  - a facility may not ship more than its capacity\n",[33,852,853],{"class":35,"line":314},[33,854,855],{"class":43},"  - only opened facilities may ship (coupled through the capacity constraint)\n",[33,857,858],{"class":35,"line":319},[33,859,860],{"class":43},"\"\"\"\n",[33,862,863,865,867,869],{"class":35,"line":330},[33,864,107],{"class":106},[33,866,111],{"class":110},[33,868,114],{"class":106},[33,870,117],{"class":110},[33,872,873,875,877,879],{"class":35,"line":341},[33,874,107],{"class":106},[33,876,125],{"class":110},[33,878,114],{"class":106},[33,880,130],{"class":110},[33,882,883],{"class":35,"line":564},[33,884,137],{"emptyLinePlaceholder":136},[33,886,888],{"class":35,"line":887},16,[33,889,890],{"class":143},"# --- Deterministic problem instance ---------------------------------------\n",[33,892,894,897,899,901],{"class":35,"line":893},17,[33,895,896],{"class":110},"F ",[33,898,153],{"class":106},[33,900,306],{"class":187},[33,902,903],{"class":143},"   # facilities\n",[33,905,907,910,912,915],{"class":35,"line":906},18,[33,908,909],{"class":110},"C ",[33,911,153],{"class":106},[33,913,914],{"class":187}," 8",[33,916,917],{"class":143},"   # customers          ->  F + F*C = 4 + 32 = 36 variables\n",[33,919,921],{"class":35,"line":920},19,[33,922,137],{"emptyLinePlaceholder":136},[33,924,926,929,931,934,937,939,942,944,947,949,952,955],{"class":35,"line":925},20,[33,927,928],{"class":110},"fixed_cost ",[33,930,153],{"class":106},[33,932,933],{"class":110}," [",[33,935,936],{"class":187},"100.0",[33,938,89],{"class":110},[33,940,941],{"class":187},"120.0",[33,943,89],{"class":110},[33,945,946],{"class":187},"90.0",[33,948,89],{"class":110},[33,950,951],{"class":187},"150.0",[33,953,954],{"class":110},"]        ",[33,956,957],{"class":143},"# opening cost per facility\n",[33,959,961,964,966,968,971,973,976,978,981,983,985,988],{"class":35,"line":960},21,[33,962,963],{"class":110},"capacity   ",[33,965,153],{"class":106},[33,967,933],{"class":110},[33,969,970],{"class":187},"60.0",[33,972,89],{"class":110},[33,974,975],{"class":187},"80.0",[33,977,89],{"class":110},[33,979,980],{"class":187},"50.0",[33,982,89],{"class":110},[33,984,936],{"class":187},[33,986,987],{"class":110},"]          ",[33,989,990],{"class":143},"# capacity per facility\n",[33,992,994,997,999,1001,1003,1005,1008,1010,1013,1015,1018,1020,1023,1025,1028,1030,1033,1035,1038,1041],{"class":35,"line":993},22,[33,995,996],{"class":110},"demand     ",[33,998,153],{"class":106},[33,1000,933],{"class":110},[33,1002,686],{"class":187},[33,1004,89],{"class":110},[33,1006,1007],{"class":187},"15.0",[33,1009,89],{"class":110},[33,1011,1012],{"class":187},"8.0",[33,1014,89],{"class":110},[33,1016,1017],{"class":187},"12.0",[33,1019,89],{"class":110},[33,1021,1022],{"class":187},"20.0",[33,1024,89],{"class":110},[33,1026,1027],{"class":187},"9.0",[33,1029,89],{"class":110},[33,1031,1032],{"class":187},"14.0",[33,1034,89],{"class":110},[33,1036,1037],{"class":187},"11.0",[33,1039,1040],{"class":110},"]   ",[33,1042,1043],{"class":143},"# demand per customer\n",[33,1045,1047],{"class":35,"line":1046},23,[33,1048,137],{"emptyLinePlaceholder":136},[33,1050,1052],{"class":35,"line":1051},24,[33,1053,1054],{"class":143},"# Transport cost facility->customer, generated deterministically\n",[33,1056,1058,1061,1063,1066,1069,1072,1075,1077,1080,1082,1085,1087,1090,1092,1095,1098,1100,1103,1105,1108,1111,1114,1116,1119,1121,1123],{"class":35,"line":1057},25,[33,1059,1060],{"class":110},"trans ",[33,1062,153],{"class":106},[33,1064,1065],{"class":110}," [[",[33,1067,1068],{"class":187},"4.0",[33,1070,1071],{"class":106}," +",[33,1073,1074],{"class":110}," ((f ",[33,1076,510],{"class":106},[33,1078,1079],{"class":187}," 7",[33,1081,1071],{"class":106},[33,1083,1084],{"class":110}," c ",[33,1086,510],{"class":106},[33,1088,1089],{"class":187}," 3",[33,1091,507],{"class":110},[33,1093,1094],{"class":106},"%",[33,1096,1097],{"class":187}," 11",[33,1099,507],{"class":110},[33,1101,1102],{"class":106},"for",[33,1104,1084],{"class":110},[33,1106,1107],{"class":106},"in",[33,1109,1110],{"class":187}," range",[33,1112,1113],{"class":110},"(C)] ",[33,1115,1102],{"class":106},[33,1117,1118],{"class":110}," f ",[33,1120,1107],{"class":106},[33,1122,1110],{"class":187},[33,1124,1125],{"class":110},"(F)]\n",[33,1127,1129],{"class":35,"line":1128},26,[33,1130,137],{"emptyLinePlaceholder":136},[33,1132,1134,1137,1140,1143,1145,1147,1150],{"class":35,"line":1133},27,[33,1135,1136],{"class":106},"assert",[33,1138,1139],{"class":187}," sum",[33,1141,1142],{"class":110},"(capacity) ",[33,1144,284],{"class":106},[33,1146,1139],{"class":187},[33,1148,1149],{"class":110},"(demand), ",[33,1151,1152],{"class":43},"\"total capacity does not cover demand\"\n",[33,1154,1156],{"class":35,"line":1155},28,[33,1157,137],{"emptyLinePlaceholder":136},[33,1159,1161],{"class":35,"line":1160},29,[33,1162,1163],{"class":143},"# --- Model -----------------------------------------------------------------\n",[33,1165,1167,1169,1171,1173,1175,1177,1180],{"class":35,"line":1166},30,[33,1168,150],{"class":110},[33,1170,153],{"class":106},[33,1172,156],{"class":110},[33,1174,160],{"class":159},[33,1176,153],{"class":106},[33,1178,1179],{"class":43},"\"facility_location\"",[33,1181,168],{"class":110},[33,1183,1185],{"class":35,"line":1184},31,[33,1186,137],{"emptyLinePlaceholder":136},[33,1188,1190,1192,1194,1197,1199,1201,1204,1207,1210,1212,1215,1218,1220,1222,1224,1226,1228],{"class":35,"line":1189},32,[33,1191,205],{"class":110},[33,1193,153],{"class":106},[33,1195,1196],{"class":110}," [model.add_binary_variable(",[33,1198,160],{"class":159},[33,1200,153],{"class":106},[33,1202,1203],{"class":106},"f",[33,1205,1206],{"class":43},"\"open_",[33,1208,1209],{"class":187},"{",[33,1211,1203],{"class":110},[33,1213,1214],{"class":187},"}",[33,1216,1217],{"class":43},"\"",[33,1219,507],{"class":110},[33,1221,1102],{"class":106},[33,1223,1118],{"class":110},[33,1225,1107],{"class":106},[33,1227,1110],{"class":187},[33,1229,1125],{"class":110},[33,1231,1233,1235,1237,1240,1242,1244,1246,1248,1250,1252,1254,1257,1259,1261,1263,1266,1268,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295],{"class":35,"line":1232},33,[33,1234,174],{"class":110},[33,1236,153],{"class":106},[33,1238,1239],{"class":110}," [[model.add_variable(",[33,1241,182],{"class":159},[33,1243,153],{"class":106},[33,1245,188],{"class":187},[33,1247,89],{"class":110},[33,1249,160],{"class":159},[33,1251,153],{"class":106},[33,1253,1203],{"class":106},[33,1255,1256],{"class":43},"\"ship_",[33,1258,1209],{"class":187},[33,1260,1203],{"class":110},[33,1262,1214],{"class":187},[33,1264,1265],{"class":43},"_",[33,1267,1209],{"class":187},[33,1269,1270],{"class":110},"c",[33,1272,1214],{"class":187},[33,1274,1217],{"class":43},[33,1276,507],{"class":110},[33,1278,1102],{"class":106},[33,1280,1084],{"class":110},[33,1282,1107],{"class":106},[33,1284,1110],{"class":187},[33,1286,1113],{"class":110},[33,1288,1102],{"class":106},[33,1290,1118],{"class":110},[33,1292,1107],{"class":106},[33,1294,1110],{"class":187},[33,1296,1125],{"class":110},[33,1298,1300],{"class":35,"line":1299},34,[33,1301,137],{"emptyLinePlaceholder":136},[33,1303,1305],{"class":35,"line":1304},35,[33,1306,1307],{"class":143},"# Every customer is served exactly\n",[33,1309,1311,1313,1315,1317,1319],{"class":35,"line":1310},36,[33,1312,1102],{"class":106},[33,1314,1084],{"class":110},[33,1316,1107],{"class":106},[33,1318,1110],{"class":187},[33,1320,1321],{"class":110},"(C):\n",[33,1323,1325,1328,1331,1334,1336,1338,1340,1342,1345,1348],{"class":35,"line":1324},37,[33,1326,1327],{"class":110},"    model.add_linear_constraint(",[33,1329,1330],{"class":187},"sum",[33,1332,1333],{"class":110},"(x[f][c] ",[33,1335,1102],{"class":106},[33,1337,1118],{"class":110},[33,1339,1107],{"class":106},[33,1341,1110],{"class":187},[33,1343,1344],{"class":110},"(F)) ",[33,1346,1347],{"class":106},"==",[33,1349,1350],{"class":110}," demand[c])\n",[33,1352,1354],{"class":35,"line":1353},38,[33,1355,137],{"emptyLinePlaceholder":136},[33,1357,1359],{"class":35,"line":1358},39,[33,1360,1361],{"class":143},"# Capacity + coupling: only opened facilities ship\n",[33,1363,1365,1367,1369,1371,1373],{"class":35,"line":1364},40,[33,1366,1102],{"class":106},[33,1368,1118],{"class":110},[33,1370,1107],{"class":106},[33,1372,1110],{"class":187},[33,1374,1375],{"class":110},"(F):\n",[33,1377,1379,1381,1383,1385,1387,1389,1391,1393,1396,1398,1401,1403],{"class":35,"line":1378},41,[33,1380,1327],{"class":110},[33,1382,1330],{"class":187},[33,1384,1333],{"class":110},[33,1386,1102],{"class":106},[33,1388,1084],{"class":110},[33,1390,1107],{"class":106},[33,1392,1110],{"class":187},[33,1394,1395],{"class":110},"(C)) ",[33,1397,257],{"class":106},[33,1399,1400],{"class":110}," capacity[f] ",[33,1402,510],{"class":106},[33,1404,1405],{"class":110}," y[f])\n",[33,1407,1409],{"class":35,"line":1408},42,[33,1410,137],{"emptyLinePlaceholder":136},[33,1412,1414],{"class":35,"line":1413},43,[33,1415,1416],{"class":143},"# Objective: fixed costs + transport costs\n",[33,1418,1420],{"class":35,"line":1419},44,[33,1421,1422],{"class":110},"model.minimize(\n",[33,1424,1426,1429,1432,1434,1437,1439,1441,1443,1445],{"class":35,"line":1425},45,[33,1427,1428],{"class":187},"    sum",[33,1430,1431],{"class":110},"(fixed_cost[f] ",[33,1433,510],{"class":106},[33,1435,1436],{"class":110}," y[f] ",[33,1438,1102],{"class":106},[33,1440,1118],{"class":110},[33,1442,1107],{"class":106},[33,1444,1110],{"class":187},[33,1446,1447],{"class":110},"(F))\n",[33,1449,1451,1454,1456,1459,1461,1464,1466,1468,1470,1472,1475,1477,1479,1481,1483],{"class":35,"line":1450},46,[33,1452,1453],{"class":106},"    +",[33,1455,1139],{"class":187},[33,1457,1458],{"class":110},"(trans[f][c] ",[33,1460,510],{"class":106},[33,1462,1463],{"class":110}," x[f][c] ",[33,1465,1102],{"class":106},[33,1467,1118],{"class":110},[33,1469,1107],{"class":106},[33,1471,1110],{"class":187},[33,1473,1474],{"class":110},"(F) ",[33,1476,1102],{"class":106},[33,1478,1084],{"class":110},[33,1480,1107],{"class":106},[33,1482,1110],{"class":187},[33,1484,1485],{"class":110},"(C))\n",[33,1487,1489],{"class":35,"line":1488},47,[33,1490,168],{"class":110},[33,1492,1494],{"class":35,"line":1493},48,[33,1495,137],{"emptyLinePlaceholder":136},[33,1497,1499,1501,1503],{"class":35,"line":1498},49,[33,1500,322],{"class":110},[33,1502,153],{"class":106},[33,1504,327],{"class":110},[33,1506,1508,1510,1512],{"class":35,"line":1507},50,[33,1509,333],{"class":110},[33,1511,153],{"class":106},[33,1513,338],{"class":110},[33,1515,1517,1519],{"class":35,"line":1516},51,[33,1518,344],{"class":187},[33,1520,347],{"class":110},[349,1522],{":rows":1523,"cmd":1524},"[\"├── shots\",\"│   ├── 1 · primal-dual · global     863   0.04s  ◀ best\",\"│   ├── 2 · primal-dual · global   863.0   0.01s\",\"│   └── 3 · primal                   881   0.04s\",\"├── status:     optimal\",\"├── feasible:   true\",\"├── objective:  863.0\",\"├── x:          open_0=1, open_1=1, open_2=1, open_3=0, ship_0_0=10, ship_0_1=15, …  (36 variables)\",\"└── solve_time: 0.045 s\"]","$ python facility.py",[79,1526,1528],{"id":1527},"qubo-quadratic-binary-optimization","QUBO — quadratic binary optimization",[14,1530,1531,1532,1534,1535,1538,1539,1542,1543,1546],{},"Binary variables, a quadratic objective, no constraints. Every shot in this run\ncame back ",[30,1533,68],{},", with no bound to go with it, so the status is ",[30,1536,1537],{},"heuristic"," and\n",[30,1540,1541],{},"feasible"," is ",[30,1544,1545],{},"n\u002Fa"," (there are no constraints to satisfy):",[23,1548,1551],{"className":96,"code":1549,"filename":1550,"language":99,"meta":28,"style":28},"from ortools.math_opt.python import mathopt\nfrom quicopt import Client\n\n# A QUBO: 4 binary variables, a quadratic objective, no constraints.\nmodel = mathopt.Model(name=\"qubo\")\nx = [model.add_binary_variable(name=f\"x{i}\") for i in range(4)]\n\n# Reward each variable; penalise adjacent pairs on the 4-cycle 0-1-2-3-0.\n# Distinct linear weights break the symmetry, so the optimum is unique.\nmodel.minimize(\n    -(1.0 * x[0] + 0.7 * x[1] + 1.3 * x[2] + 0.5 * x[3])\n    + 2.0 * (x[0] * x[1] + x[1] * x[2] + x[2] * x[3] + x[0] * x[3])\n)\n\nclient = Client()\nresult = client.solve(model)\nprint(result.display)\n","qubo.py",[30,1552,1553,1563,1573,1577,1582,1599,1645,1649,1654,1659,1663,1726,1798,1802,1806,1814,1822],{"__ignoreMap":28},[33,1554,1555,1557,1559,1561],{"class":35,"line":36},[33,1556,107],{"class":106},[33,1558,111],{"class":110},[33,1560,114],{"class":106},[33,1562,117],{"class":110},[33,1564,1565,1567,1569,1571],{"class":35,"line":120},[33,1566,107],{"class":106},[33,1568,125],{"class":110},[33,1570,114],{"class":106},[33,1572,130],{"class":110},[33,1574,1575],{"class":35,"line":133},[33,1576,137],{"emptyLinePlaceholder":136},[33,1578,1579],{"class":35,"line":140},[33,1580,1581],{"class":143},"# A QUBO: 4 binary variables, a quadratic objective, no constraints.\n",[33,1583,1584,1586,1588,1590,1592,1594,1597],{"class":35,"line":147},[33,1585,150],{"class":110},[33,1587,153],{"class":106},[33,1589,156],{"class":110},[33,1591,160],{"class":159},[33,1593,153],{"class":106},[33,1595,1596],{"class":43},"\"qubo\"",[33,1598,168],{"class":110},[33,1600,1601,1603,1605,1607,1609,1611,1613,1616,1618,1621,1623,1625,1627,1629,1632,1634,1636,1639,1642],{"class":35,"line":171},[33,1602,174],{"class":110},[33,1604,153],{"class":106},[33,1606,1196],{"class":110},[33,1608,160],{"class":159},[33,1610,153],{"class":106},[33,1612,1203],{"class":106},[33,1614,1615],{"class":43},"\"x",[33,1617,1209],{"class":187},[33,1619,1620],{"class":110},"i",[33,1622,1214],{"class":187},[33,1624,1217],{"class":43},[33,1626,507],{"class":110},[33,1628,1102],{"class":106},[33,1630,1631],{"class":110}," i ",[33,1633,1107],{"class":106},[33,1635,1110],{"class":187},[33,1637,1638],{"class":110},"(",[33,1640,1641],{"class":187},"4",[33,1643,1644],{"class":110},")]\n",[33,1646,1647],{"class":35,"line":202},[33,1648,137],{"emptyLinePlaceholder":136},[33,1650,1651],{"class":35,"line":239},[33,1652,1653],{"class":143},"# Reward each variable; penalise adjacent pairs on the 4-cycle 0-1-2-3-0.\n",[33,1655,1656],{"class":35,"line":265},[33,1657,1658],{"class":143},"# Distinct linear weights break the symmetry, so the optimum is unique.\n",[33,1660,1661],{"class":35,"line":292},[33,1662,1422],{"class":110},[33,1664,1665,1668,1670,1673,1675,1678,1681,1684,1686,1689,1691,1693,1696,1698,1700,1703,1705,1707,1710,1712,1714,1717,1719,1721,1723],{"class":35,"line":314},[33,1666,1667],{"class":106},"    -",[33,1669,1638],{"class":110},[33,1671,1672],{"class":187},"1.0",[33,1674,251],{"class":106},[33,1676,1677],{"class":110}," x[",[33,1679,1680],{"class":187},"0",[33,1682,1683],{"class":110},"] ",[33,1685,245],{"class":106},[33,1687,1688],{"class":187}," 0.7",[33,1690,251],{"class":106},[33,1692,1677],{"class":110},[33,1694,1695],{"class":187},"1",[33,1697,1683],{"class":110},[33,1699,245],{"class":106},[33,1701,1702],{"class":187}," 1.3",[33,1704,251],{"class":106},[33,1706,1677],{"class":110},[33,1708,1709],{"class":187},"2",[33,1711,1683],{"class":110},[33,1713,245],{"class":106},[33,1715,1716],{"class":187}," 0.5",[33,1718,251],{"class":106},[33,1720,1677],{"class":110},[33,1722,271],{"class":187},[33,1724,1725],{"class":110},"])\n",[33,1727,1728,1730,1733,1735,1738,1740,1742,1744,1746,1748,1750,1752,1754,1756,1758,1760,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782,1784,1786,1788,1790,1792,1794,1796],{"class":35,"line":319},[33,1729,1453],{"class":106},[33,1731,1732],{"class":187}," 2.0",[33,1734,251],{"class":106},[33,1736,1737],{"class":110}," (x[",[33,1739,1680],{"class":187},[33,1741,1683],{"class":110},[33,1743,510],{"class":106},[33,1745,1677],{"class":110},[33,1747,1695],{"class":187},[33,1749,1683],{"class":110},[33,1751,245],{"class":106},[33,1753,1677],{"class":110},[33,1755,1695],{"class":187},[33,1757,1683],{"class":110},[33,1759,510],{"class":106},[33,1761,1677],{"class":110},[33,1763,1709],{"class":187},[33,1765,1683],{"class":110},[33,1767,245],{"class":106},[33,1769,1677],{"class":110},[33,1771,1709],{"class":187},[33,1773,1683],{"class":110},[33,1775,510],{"class":106},[33,1777,1677],{"class":110},[33,1779,271],{"class":187},[33,1781,1683],{"class":110},[33,1783,245],{"class":106},[33,1785,1677],{"class":110},[33,1787,1680],{"class":187},[33,1789,1683],{"class":110},[33,1791,510],{"class":106},[33,1793,1677],{"class":110},[33,1795,271],{"class":187},[33,1797,1725],{"class":110},[33,1799,1800],{"class":35,"line":330},[33,1801,168],{"class":110},[33,1803,1804],{"class":35,"line":341},[33,1805,137],{"emptyLinePlaceholder":136},[33,1807,1808,1810,1812],{"class":35,"line":564},[33,1809,322],{"class":110},[33,1811,153],{"class":106},[33,1813,327],{"class":110},[33,1815,1816,1818,1820],{"class":35,"line":887},[33,1817,333],{"class":110},[33,1819,153],{"class":106},[33,1821,338],{"class":110},[33,1823,1824,1826],{"class":35,"line":893},[33,1825,344],{"class":187},[33,1827,347],{"class":110},[349,1829],{":rows":1830,"cmd":1831},"[\"├── shots\",\"│   ├── 1 · primal   -2.3    0.0s  ◀ best\",\"│   ├── 2 · primal   -2.3    0.0s\",\"│   ├── 3 · primal   -2.3   1.67s\",\"│   ├── 4 · primal   -2.3    2.0s\",\"│   └── 5 · primal   -2.3    2.0s\",\"├── status:     heuristic\",\"├── feasible:   n\u002Fa\",\"├── objective:  -2.3\",\"├── x:          x0=1, x1=0, x2=1, x3=0  (4 variables)\",\"└── solve_time: 2.0013 s\"]","$ python qubo.py",[79,1833,1835],{"id":1834},"pubo-a-higher-order-binary-polynomial","PUBO — a higher-order binary polynomial",[14,1837,1838,1839,1842,1843,1846,1847,1852,1853,1856,1857,1860,1861,93],{},"Binary optimization of degree ≥ 3 — solved as-is, with no reduction to\nquadratic and no auxiliary variables. This is the LABS problem\n(low-autocorrelation binary sequences) for ",[30,1840,1841],{},"N = 7",": spins ",[30,1844,1845],{},"s = 1 - 2x"," turn\nthe binaries into ±1, and the energy is a degree-four polynomial — the same\nobjective as the ",[1848,1849,1851],"a",{"href":1850},"\u002Fbenchmarks\u002Flabs","LABS benchmark",". Modeled in ",[18,1854,1855],{},"Pyomo","\n(",[30,1858,1859],{},"pip install \"quicopt[pyomo]\"","); the returned energy 3 is the known optimum\nfor ",[30,1862,1841],{},[23,1864,1867],{"className":96,"code":1865,"filename":1866,"language":99,"meta":28,"style":28},"import pyomo.environ as pyo\nfrom quicopt import Client\n\n# A PUBO: the LABS problem (low-autocorrelation binary sequences) for N=7.\n# Spins s_i = 1 - 2 x_i turn the binary x into +\u002F-1; the energy\n# sum_k C_k^2 with C_k = sum_i s_i s_{i+k} is a degree-4 polynomial.\nN = 7\nm = pyo.ConcreteModel()\nm.x = pyo.Var(range(N), domain=pyo.Binary)\ns = [1 - 2 * m.x[i] for i in range(N)]\nm.obj = pyo.Objective(\n    expr=sum(sum(s[i] * s[i + k] for i in range(N - k)) ** 2\n             for k in range(1, N)),\n    sense=pyo.minimize)\n\nclient = Client()\nresult = client.solve(m)\nprint(result.display)\n","pubo.py",[30,1868,1869,1882,1892,1896,1901,1906,1911,1921,1931,1955,1987,1997,2045,2064,2074,2078,2086,2095],{"__ignoreMap":28},[33,1870,1871,1873,1876,1879],{"class":35,"line":36},[33,1872,114],{"class":106},[33,1874,1875],{"class":110}," pyomo.environ ",[33,1877,1878],{"class":106},"as",[33,1880,1881],{"class":110}," pyo\n",[33,1883,1884,1886,1888,1890],{"class":35,"line":120},[33,1885,107],{"class":106},[33,1887,125],{"class":110},[33,1889,114],{"class":106},[33,1891,130],{"class":110},[33,1893,1894],{"class":35,"line":133},[33,1895,137],{"emptyLinePlaceholder":136},[33,1897,1898],{"class":35,"line":140},[33,1899,1900],{"class":143},"# A PUBO: the LABS problem (low-autocorrelation binary sequences) for N=7.\n",[33,1902,1903],{"class":35,"line":147},[33,1904,1905],{"class":143},"# Spins s_i = 1 - 2 x_i turn the binary x into +\u002F-1; the energy\n",[33,1907,1908],{"class":35,"line":171},[33,1909,1910],{"class":143},"# sum_k C_k^2 with C_k = sum_i s_i s_{i+k} is a degree-4 polynomial.\n",[33,1912,1913,1916,1918],{"class":35,"line":202},[33,1914,1915],{"class":110},"N ",[33,1917,153],{"class":106},[33,1919,1920],{"class":187}," 7\n",[33,1922,1923,1926,1928],{"class":35,"line":239},[33,1924,1925],{"class":110},"m ",[33,1927,153],{"class":106},[33,1929,1930],{"class":110}," pyo.ConcreteModel()\n",[33,1932,1933,1936,1938,1941,1944,1947,1950,1952],{"class":35,"line":265},[33,1934,1935],{"class":110},"m.x ",[33,1937,153],{"class":106},[33,1939,1940],{"class":110}," pyo.Var(",[33,1942,1943],{"class":187},"range",[33,1945,1946],{"class":110},"(N), ",[33,1948,1949],{"class":159},"domain",[33,1951,153],{"class":106},[33,1953,1954],{"class":110},"pyo.Binary)\n",[33,1956,1957,1960,1962,1964,1966,1969,1971,1973,1976,1978,1980,1982,1984],{"class":35,"line":292},[33,1958,1959],{"class":110},"s ",[33,1961,153],{"class":106},[33,1963,933],{"class":110},[33,1965,1695],{"class":187},[33,1967,1968],{"class":106}," -",[33,1970,248],{"class":187},[33,1972,251],{"class":106},[33,1974,1975],{"class":110}," m.x[i] ",[33,1977,1102],{"class":106},[33,1979,1631],{"class":110},[33,1981,1107],{"class":106},[33,1983,1110],{"class":187},[33,1985,1986],{"class":110},"(N)]\n",[33,1988,1989,1992,1994],{"class":35,"line":314},[33,1990,1991],{"class":110},"m.obj ",[33,1993,153],{"class":106},[33,1995,1996],{"class":110}," pyo.Objective(\n",[33,1998,1999,2002,2004,2006,2008,2010,2013,2015,2018,2020,2023,2025,2027,2029,2031,2034,2036,2039,2042],{"class":35,"line":319},[33,2000,2001],{"class":159},"    expr",[33,2003,153],{"class":106},[33,2005,1330],{"class":187},[33,2007,1638],{"class":110},[33,2009,1330],{"class":187},[33,2011,2012],{"class":110},"(s[i] ",[33,2014,510],{"class":106},[33,2016,2017],{"class":110}," s[i ",[33,2019,245],{"class":106},[33,2021,2022],{"class":110}," k] ",[33,2024,1102],{"class":106},[33,2026,1631],{"class":110},[33,2028,1107],{"class":106},[33,2030,1110],{"class":187},[33,2032,2033],{"class":110},"(N ",[33,2035,279],{"class":106},[33,2037,2038],{"class":110}," k)) ",[33,2040,2041],{"class":106},"**",[33,2043,2044],{"class":187}," 2\n",[33,2046,2047,2050,2053,2055,2057,2059,2061],{"class":35,"line":330},[33,2048,2049],{"class":106},"             for",[33,2051,2052],{"class":110}," k ",[33,2054,1107],{"class":106},[33,2056,1110],{"class":187},[33,2058,1638],{"class":110},[33,2060,1695],{"class":187},[33,2062,2063],{"class":110},", N)),\n",[33,2065,2066,2069,2071],{"class":35,"line":341},[33,2067,2068],{"class":159},"    sense",[33,2070,153],{"class":106},[33,2072,2073],{"class":110},"pyo.minimize)\n",[33,2075,2076],{"class":35,"line":564},[33,2077,137],{"emptyLinePlaceholder":136},[33,2079,2080,2082,2084],{"class":35,"line":887},[33,2081,322],{"class":110},[33,2083,153],{"class":106},[33,2085,327],{"class":110},[33,2087,2088,2090,2092],{"class":35,"line":893},[33,2089,333],{"class":110},[33,2091,153],{"class":106},[33,2093,2094],{"class":110}," client.solve(m)\n",[33,2096,2097,2099],{"class":35,"line":906},[33,2098,344],{"class":187},[33,2100,347],{"class":110},[349,2102],{":rows":2103,"cmd":2104},"[\"├── shots\",\"│   ├── 1 · primal   91   2.31s\",\"│   ├── 2 · primal    3   3.73s  ◀ best\",\"│   ├── 3 · primal    3   3.32s\",\"│   ├── 4 · primal    3    2.0s\",\"│   └── 5 · primal    3   4.18s\",\"├── status:     heuristic\",\"├── feasible:   n\u002Fa\",\"├── objective:  3.0\",\"├── x:          x1=1, x2=0, x3=1, x4=1, x5=0, x6=0, …  (7 variables)\",\"└── solve_time: 4.9219 s\"]","$ python pubo.py",[79,2106,2108],{"id":2107},"nlp-a-non-linear-program","NLP — a non-linear program",[14,2110,2111,2112,89,2115,2118,2119,2121,2122,2124,2125,2128,2129,2132,2133,93],{},"A smooth non-linear objective (",[30,2113,2114],{},"exp",[30,2116,2117],{},"log",") under a linear constraint, modeled\nin ",[18,2120,1855],{}," (",[30,2123,1859],{},"). The optimum takes ",[30,2126,2127],{},"y"," to its\nlower bound and balances ",[30,2130,2131],{},"exp(-x)"," against ",[30,2134,2135],{},"x²",[23,2137,2140],{"className":96,"code":2138,"filename":2139,"language":99,"meta":28,"style":28},"import pyomo.environ as pyo\nfrom quicopt import Client\n\n# An NLP: a smooth non-linear objective (exp, log) under a linear constraint.\nm = pyo.ConcreteModel()\nm.x = pyo.Var(bounds=(0.1, 10))\nm.y = pyo.Var(bounds=(0.1, 10))\nm.budget = pyo.Constraint(expr=m.x + m.y \u003C= 8)\nm.obj = pyo.Objective(expr=pyo.exp(-m.x) + pyo.log(m.y) + m.x**2, sense=pyo.minimize)\n\nclient = Client()\nresult = client.solve(m)\nprint(result.display)\n","nlp.py",[30,2141,2142,2152,2162,2166,2171,2179,2204,2227,2255,2299,2303,2311,2319],{"__ignoreMap":28},[33,2143,2144,2146,2148,2150],{"class":35,"line":36},[33,2145,114],{"class":106},[33,2147,1875],{"class":110},[33,2149,1878],{"class":106},[33,2151,1881],{"class":110},[33,2153,2154,2156,2158,2160],{"class":35,"line":120},[33,2155,107],{"class":106},[33,2157,125],{"class":110},[33,2159,114],{"class":106},[33,2161,130],{"class":110},[33,2163,2164],{"class":35,"line":133},[33,2165,137],{"emptyLinePlaceholder":136},[33,2167,2168],{"class":35,"line":140},[33,2169,2170],{"class":143},"# An NLP: a smooth non-linear objective (exp, log) under a linear constraint.\n",[33,2172,2173,2175,2177],{"class":35,"line":147},[33,2174,1925],{"class":110},[33,2176,153],{"class":106},[33,2178,1930],{"class":110},[33,2180,2181,2183,2185,2187,2190,2192,2194,2197,2199,2202],{"class":35,"line":171},[33,2182,1935],{"class":110},[33,2184,153],{"class":106},[33,2186,1940],{"class":110},[33,2188,2189],{"class":159},"bounds",[33,2191,153],{"class":106},[33,2193,1638],{"class":110},[33,2195,2196],{"class":187},"0.1",[33,2198,89],{"class":110},[33,2200,2201],{"class":187},"10",[33,2203,541],{"class":110},[33,2205,2206,2209,2211,2213,2215,2217,2219,2221,2223,2225],{"class":35,"line":202},[33,2207,2208],{"class":110},"m.y ",[33,2210,153],{"class":106},[33,2212,1940],{"class":110},[33,2214,2189],{"class":159},[33,2216,153],{"class":106},[33,2218,1638],{"class":110},[33,2220,2196],{"class":187},[33,2222,89],{"class":110},[33,2224,2201],{"class":187},[33,2226,541],{"class":110},[33,2228,2229,2232,2234,2237,2240,2242,2244,2246,2249,2251,2253],{"class":35,"line":239},[33,2230,2231],{"class":110},"m.budget ",[33,2233,153],{"class":106},[33,2235,2236],{"class":110}," pyo.Constraint(",[33,2238,2239],{"class":159},"expr",[33,2241,153],{"class":106},[33,2243,1935],{"class":110},[33,2245,245],{"class":106},[33,2247,2248],{"class":110}," m.y ",[33,2250,257],{"class":106},[33,2252,914],{"class":187},[33,2254,168],{"class":110},[33,2256,2257,2259,2261,2264,2266,2268,2271,2273,2276,2278,2281,2283,2286,2288,2290,2292,2295,2297],{"class":35,"line":265},[33,2258,1991],{"class":110},[33,2260,153],{"class":106},[33,2262,2263],{"class":110}," pyo.Objective(",[33,2265,2239],{"class":159},[33,2267,153],{"class":106},[33,2269,2270],{"class":110},"pyo.exp(",[33,2272,279],{"class":106},[33,2274,2275],{"class":110},"m.x) ",[33,2277,245],{"class":106},[33,2279,2280],{"class":110}," pyo.log(m.y) ",[33,2282,245],{"class":106},[33,2284,2285],{"class":110}," m.x",[33,2287,2041],{"class":106},[33,2289,1709],{"class":187},[33,2291,89],{"class":110},[33,2293,2294],{"class":159},"sense",[33,2296,153],{"class":106},[33,2298,2073],{"class":110},[33,2300,2301],{"class":35,"line":292},[33,2302,137],{"emptyLinePlaceholder":136},[33,2304,2305,2307,2309],{"class":35,"line":314},[33,2306,322],{"class":110},[33,2308,153],{"class":106},[33,2310,327],{"class":110},[33,2312,2313,2315,2317],{"class":35,"line":319},[33,2314,333],{"class":110},[33,2316,153],{"class":106},[33,2318,2094],{"class":110},[33,2320,2321,2323],{"class":35,"line":330},[33,2322,344],{"class":187},[33,2324,347],{"class":110},[349,2326],{":rows":2327,"cmd":2328},"[\"├── shots\",\"│   ├── 1 · primal-dual · local   -1.4754   0.37s  ◀ best\",\"│   ├── 2 · primal                -1.4754   2.02s\",\"│   └── 3 · primal                -1.4754   2.02s\",\"├── status:     optimal\",\"├── feasible:   true\",\"├── objective:  -1.4754011643639007\",\"├── x:          x1=0.3517, x2=0.1  (2 variables)\",\"└── solve_time: 2.0213 s\"]","$ python nlp.py",[79,2330,2332],{"id":2331},"minlp-mixed-integer-non-linear","MINLP — mixed-integer non-linear",[14,2334,2335,2336,2338,2339,2341],{},"Binary on\u002Foff decisions mixed with continuous variables under a non-linear\n(",[30,2337,2114],{},") cost curve — a miniature unit-commitment model: switch generating\nunits on or off and set each unit's output to meet demand at minimum cost.\nModeled in ",[18,2340,1855],{},". The best plan switches only the larger unit on.",[23,2343,2346],{"className":96,"code":2344,"filename":2345,"language":99,"meta":28,"style":28},"import pyomo.environ as pyo\nfrom quicopt import Client\n\n# An MINLP: switch generating units on or off (binary) and set each unit's\n# continuous output, under a non-linear (exp) fuel-cost curve. An off unit\n# produces nothing and costs nothing.\ncaps, fixed, fuel = [4.0, 6.0], [2.0, 3.5], [1.0, 0.8]\ndemand = 5.0\n\nm = pyo.ConcreteModel()\nm.on = pyo.Var(range(2), domain=pyo.Binary)\nm.p = pyo.Var(range(2), bounds=(0, None))\nm.cap = pyo.Constraint(range(2), rule=lambda m, i: m.p[i] \u003C= caps[i] * m.on[i])\nm.demand = pyo.Constraint(expr=m.p[0] + m.p[1] >= demand)\nm.obj = pyo.Objective(\n    expr=sum(fixed[i] * m.on[i] + fuel[i] * (pyo.exp(m.p[i] \u002F caps[i]) - 1)\n             for i in range(2)),\n    sense=pyo.minimize)\n\nclient = Client()\nresult = client.solve(m)\nprint(result.display)\n","minlp.py",[30,2347,2348,2358,2368,2372,2377,2382,2387,2425,2435,2439,2447,2471,2503,2539,2573,2581,2619,2636,2644,2648,2656,2664],{"__ignoreMap":28},[33,2349,2350,2352,2354,2356],{"class":35,"line":36},[33,2351,114],{"class":106},[33,2353,1875],{"class":110},[33,2355,1878],{"class":106},[33,2357,1881],{"class":110},[33,2359,2360,2362,2364,2366],{"class":35,"line":120},[33,2361,107],{"class":106},[33,2363,125],{"class":110},[33,2365,114],{"class":106},[33,2367,130],{"class":110},[33,2369,2370],{"class":35,"line":133},[33,2371,137],{"emptyLinePlaceholder":136},[33,2373,2374],{"class":35,"line":140},[33,2375,2376],{"class":143},"# An MINLP: switch generating units on or off (binary) and set each unit's\n",[33,2378,2379],{"class":35,"line":147},[33,2380,2381],{"class":143},"# continuous output, under a non-linear (exp) fuel-cost curve. An off unit\n",[33,2383,2384],{"class":35,"line":171},[33,2385,2386],{"class":143},"# produces nothing and costs nothing.\n",[33,2388,2389,2392,2394,2396,2398,2400,2402,2405,2408,2410,2413,2415,2417,2419,2422],{"class":35,"line":202},[33,2390,2391],{"class":110},"caps, fixed, fuel ",[33,2393,153],{"class":106},[33,2395,933],{"class":110},[33,2397,1068],{"class":187},[33,2399,89],{"class":110},[33,2401,225],{"class":187},[33,2403,2404],{"class":110},"], [",[33,2406,2407],{"class":187},"2.0",[33,2409,89],{"class":110},[33,2411,2412],{"class":187},"3.5",[33,2414,2404],{"class":110},[33,2416,1672],{"class":187},[33,2418,89],{"class":110},[33,2420,2421],{"class":187},"0.8",[33,2423,2424],{"class":110},"]\n",[33,2426,2427,2430,2432],{"class":35,"line":239},[33,2428,2429],{"class":110},"demand ",[33,2431,153],{"class":106},[33,2433,2434],{"class":187}," 5.0\n",[33,2436,2437],{"class":35,"line":265},[33,2438,137],{"emptyLinePlaceholder":136},[33,2440,2441,2443,2445],{"class":35,"line":292},[33,2442,1925],{"class":110},[33,2444,153],{"class":106},[33,2446,1930],{"class":110},[33,2448,2449,2452,2454,2456,2458,2460,2462,2465,2467,2469],{"class":35,"line":314},[33,2450,2451],{"class":110},"m.on ",[33,2453,153],{"class":106},[33,2455,1940],{"class":110},[33,2457,1943],{"class":187},[33,2459,1638],{"class":110},[33,2461,1709],{"class":187},[33,2463,2464],{"class":110},"), ",[33,2466,1949],{"class":159},[33,2468,153],{"class":106},[33,2470,1954],{"class":110},[33,2472,2473,2476,2478,2480,2482,2484,2486,2488,2490,2492,2494,2496,2498,2501],{"class":35,"line":319},[33,2474,2475],{"class":110},"m.p ",[33,2477,153],{"class":106},[33,2479,1940],{"class":110},[33,2481,1943],{"class":187},[33,2483,1638],{"class":110},[33,2485,1709],{"class":187},[33,2487,2464],{"class":110},[33,2489,2189],{"class":159},[33,2491,153],{"class":106},[33,2493,1638],{"class":110},[33,2495,1680],{"class":187},[33,2497,89],{"class":110},[33,2499,2500],{"class":187},"None",[33,2502,541],{"class":110},[33,2504,2505,2508,2510,2512,2514,2516,2518,2520,2523,2526,2529,2531,2534,2536],{"class":35,"line":330},[33,2506,2507],{"class":110},"m.cap ",[33,2509,153],{"class":106},[33,2511,2236],{"class":110},[33,2513,1943],{"class":187},[33,2515,1638],{"class":110},[33,2517,1709],{"class":187},[33,2519,2464],{"class":110},[33,2521,2522],{"class":159},"rule",[33,2524,2525],{"class":106},"=lambda",[33,2527,2528],{"class":110}," m, i: m.p[i] ",[33,2530,257],{"class":106},[33,2532,2533],{"class":110}," caps[i] ",[33,2535,510],{"class":106},[33,2537,2538],{"class":110}," m.on[i])\n",[33,2540,2541,2544,2546,2548,2550,2552,2555,2557,2559,2561,2564,2566,2568,2570],{"class":35,"line":341},[33,2542,2543],{"class":110},"m.demand ",[33,2545,153],{"class":106},[33,2547,2236],{"class":110},[33,2549,2239],{"class":159},[33,2551,153],{"class":106},[33,2553,2554],{"class":110},"m.p[",[33,2556,1680],{"class":187},[33,2558,1683],{"class":110},[33,2560,245],{"class":106},[33,2562,2563],{"class":110}," m.p[",[33,2565,1695],{"class":187},[33,2567,1683],{"class":110},[33,2569,284],{"class":106},[33,2571,2572],{"class":110}," demand)\n",[33,2574,2575,2577,2579],{"class":35,"line":564},[33,2576,1991],{"class":110},[33,2578,153],{"class":106},[33,2580,1996],{"class":110},[33,2582,2583,2585,2587,2589,2592,2594,2597,2599,2602,2604,2607,2610,2613,2615,2617],{"class":35,"line":887},[33,2584,2001],{"class":159},[33,2586,153],{"class":106},[33,2588,1330],{"class":187},[33,2590,2591],{"class":110},"(fixed[i] ",[33,2593,510],{"class":106},[33,2595,2596],{"class":110}," m.on[i] ",[33,2598,245],{"class":106},[33,2600,2601],{"class":110}," fuel[i] ",[33,2603,510],{"class":106},[33,2605,2606],{"class":110}," (pyo.exp(m.p[i] ",[33,2608,2609],{"class":106},"\u002F",[33,2611,2612],{"class":110}," caps[i]) ",[33,2614,279],{"class":106},[33,2616,504],{"class":187},[33,2618,168],{"class":110},[33,2620,2621,2623,2625,2627,2629,2631,2633],{"class":35,"line":893},[33,2622,2049],{"class":106},[33,2624,1631],{"class":110},[33,2626,1107],{"class":106},[33,2628,1110],{"class":187},[33,2630,1638],{"class":110},[33,2632,1709],{"class":187},[33,2634,2635],{"class":110},")),\n",[33,2637,2638,2640,2642],{"class":35,"line":906},[33,2639,2068],{"class":159},[33,2641,153],{"class":106},[33,2643,2073],{"class":110},[33,2645,2646],{"class":35,"line":920},[33,2647,137],{"emptyLinePlaceholder":136},[33,2649,2650,2652,2654],{"class":35,"line":925},[33,2651,322],{"class":110},[33,2653,153],{"class":106},[33,2655,327],{"class":110},[33,2657,2658,2660,2662],{"class":35,"line":960},[33,2659,333],{"class":110},[33,2661,153],{"class":106},[33,2663,2094],{"class":110},[33,2665,2666,2668],{"class":35,"line":993},[33,2667,344],{"class":187},[33,2669,347],{"class":110},[349,2671],{":rows":2672,"cmd":2673},"[\"├── shots\",\"│   ├── 1 · primal-dual · global   4.5408   0.33s  ◀ best\",\"│   ├── 2 · primal                 4.5408   2.02s\",\"│   └── 3 · primal                 4.5408   2.02s\",\"├── status:     optimal\",\"├── feasible:   true\",\"├── objective:  4.54078071271426\",\"├── x:          x1=0, x2=1, x3=0, x4=5  (4 variables)\",\"└── solve_time: 2.0158 s\"]","$ python minlp.py",[79,2675,2677],{"id":2676},"handling-an-infeasible-model","Handling an infeasible model",[14,2679,2680,2681,2684,2685,2688,2689,2692,2693,2696,2697,2700,2701,2704,2705,1538,2707,2710],{},"Infeasibility is a ",[18,2682,2683],{},"regular result, not an error"," — ",[30,2686,2687],{},"solve()"," returns normally\nand you check ",[30,2690,2691],{},"result.status",". This model forces it with two contradictory\nconstraints (",[30,2694,2695],{},"sum(x) >= 7"," and ",[30,2698,2699],{},"sum(x) \u003C= 3","); ",[30,2702,2703],{},"objective"," comes back ",[30,2706,2500],{},[30,2708,2709],{},"solution"," is empty:",[23,2712,2715],{"className":96,"code":2713,"filename":2714,"language":99,"meta":28,"style":28},"\"\"\"A linear model that has no feasible solution.\n\nLinear objective over binary variables plus two contradictory constraints\nthat exclude each other:\n\n    sum(x) >= 7   AND   sum(x) \u003C= 3\n\nNo assignment satisfies both -> the model is infeasible.\n\"\"\"\nfrom ortools.math_opt.python import mathopt\nfrom quicopt import Client\n\nN = 10\nmodel = mathopt.Model(name=\"infeasible\")\nx = [model.add_binary_variable(name=f\"x{i}\") for i in range(N)]\n\n# Linear objective\nmodel.minimize(sum((i + 1) * x[i] for i in range(N)))\n\n# Contradictory constraints -> no feasible solution\nmodel.add_linear_constraint(sum(x[i] for i in range(N)) >= 7)\nmodel.add_linear_constraint(sum(x[i] for i in range(N)) \u003C= 3)\n\nclient = Client()\nresult = client.solve(model)\nprint(result.display)\n\nif result.status == \"infeasible\":\n    print(\"No feasible solution — relax a constraint and try again.\")\n","infeasible.py",[30,2716,2717,2722,2726,2731,2736,2740,2745,2749,2754,2758,2768,2778,2782,2791,2808,2844,2848,2853,2885,2889,2894,2920,2944,2948,2956,2964,2970,2974,2990],{"__ignoreMap":28},[33,2718,2719],{"class":35,"line":36},[33,2720,2721],{"class":43},"\"\"\"A linear model that has no feasible solution.\n",[33,2723,2724],{"class":35,"line":120},[33,2725,137],{"emptyLinePlaceholder":136},[33,2727,2728],{"class":35,"line":133},[33,2729,2730],{"class":43},"Linear objective over binary variables plus two contradictory constraints\n",[33,2732,2733],{"class":35,"line":140},[33,2734,2735],{"class":43},"that exclude each other:\n",[33,2737,2738],{"class":35,"line":147},[33,2739,137],{"emptyLinePlaceholder":136},[33,2741,2742],{"class":35,"line":171},[33,2743,2744],{"class":43},"    sum(x) >= 7   AND   sum(x) \u003C= 3\n",[33,2746,2747],{"class":35,"line":202},[33,2748,137],{"emptyLinePlaceholder":136},[33,2750,2751],{"class":35,"line":239},[33,2752,2753],{"class":43},"No assignment satisfies both -> the model is infeasible.\n",[33,2755,2756],{"class":35,"line":265},[33,2757,860],{"class":43},[33,2759,2760,2762,2764,2766],{"class":35,"line":292},[33,2761,107],{"class":106},[33,2763,111],{"class":110},[33,2765,114],{"class":106},[33,2767,117],{"class":110},[33,2769,2770,2772,2774,2776],{"class":35,"line":314},[33,2771,107],{"class":106},[33,2773,125],{"class":110},[33,2775,114],{"class":106},[33,2777,130],{"class":110},[33,2779,2780],{"class":35,"line":319},[33,2781,137],{"emptyLinePlaceholder":136},[33,2783,2784,2786,2788],{"class":35,"line":330},[33,2785,1915],{"class":110},[33,2787,153],{"class":106},[33,2789,2790],{"class":187}," 10\n",[33,2792,2793,2795,2797,2799,2801,2803,2806],{"class":35,"line":341},[33,2794,150],{"class":110},[33,2796,153],{"class":106},[33,2798,156],{"class":110},[33,2800,160],{"class":159},[33,2802,153],{"class":106},[33,2804,2805],{"class":43},"\"infeasible\"",[33,2807,168],{"class":110},[33,2809,2810,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830,2832,2834,2836,2838,2840,2842],{"class":35,"line":564},[33,2811,174],{"class":110},[33,2813,153],{"class":106},[33,2815,1196],{"class":110},[33,2817,160],{"class":159},[33,2819,153],{"class":106},[33,2821,1203],{"class":106},[33,2823,1615],{"class":43},[33,2825,1209],{"class":187},[33,2827,1620],{"class":110},[33,2829,1214],{"class":187},[33,2831,1217],{"class":43},[33,2833,507],{"class":110},[33,2835,1102],{"class":106},[33,2837,1631],{"class":110},[33,2839,1107],{"class":106},[33,2841,1110],{"class":187},[33,2843,1986],{"class":110},[33,2845,2846],{"class":35,"line":887},[33,2847,137],{"emptyLinePlaceholder":136},[33,2849,2850],{"class":35,"line":893},[33,2851,2852],{"class":143},"# Linear objective\n",[33,2854,2855,2858,2860,2863,2865,2867,2869,2871,2874,2876,2878,2880,2882],{"class":35,"line":906},[33,2856,2857],{"class":110},"model.minimize(",[33,2859,1330],{"class":187},[33,2861,2862],{"class":110},"((i ",[33,2864,245],{"class":106},[33,2866,504],{"class":187},[33,2868,507],{"class":110},[33,2870,510],{"class":106},[33,2872,2873],{"class":110}," x[i] ",[33,2875,1102],{"class":106},[33,2877,1631],{"class":110},[33,2879,1107],{"class":106},[33,2881,1110],{"class":187},[33,2883,2884],{"class":110},"(N)))\n",[33,2886,2887],{"class":35,"line":920},[33,2888,137],{"emptyLinePlaceholder":136},[33,2890,2891],{"class":35,"line":925},[33,2892,2893],{"class":143},"# Contradictory constraints -> no feasible solution\n",[33,2895,2896,2898,2900,2903,2905,2907,2909,2911,2914,2916,2918],{"class":35,"line":960},[33,2897,268],{"class":110},[33,2899,1330],{"class":187},[33,2901,2902],{"class":110},"(x[i] ",[33,2904,1102],{"class":106},[33,2906,1631],{"class":110},[33,2908,1107],{"class":106},[33,2910,1110],{"class":187},[33,2912,2913],{"class":110},"(N)) ",[33,2915,284],{"class":106},[33,2917,1079],{"class":187},[33,2919,168],{"class":110},[33,2921,2922,2924,2926,2928,2930,2932,2934,2936,2938,2940,2942],{"class":35,"line":993},[33,2923,268],{"class":110},[33,2925,1330],{"class":187},[33,2927,2902],{"class":110},[33,2929,1102],{"class":106},[33,2931,1631],{"class":110},[33,2933,1107],{"class":106},[33,2935,1110],{"class":187},[33,2937,2913],{"class":110},[33,2939,257],{"class":106},[33,2941,1089],{"class":187},[33,2943,168],{"class":110},[33,2945,2946],{"class":35,"line":1046},[33,2947,137],{"emptyLinePlaceholder":136},[33,2949,2950,2952,2954],{"class":35,"line":1051},[33,2951,322],{"class":110},[33,2953,153],{"class":106},[33,2955,327],{"class":110},[33,2957,2958,2960,2962],{"class":35,"line":1057},[33,2959,333],{"class":110},[33,2961,153],{"class":106},[33,2963,338],{"class":110},[33,2965,2966,2968],{"class":35,"line":1128},[33,2967,344],{"class":187},[33,2969,347],{"class":110},[33,2971,2972],{"class":35,"line":1133},[33,2973,137],{"emptyLinePlaceholder":136},[33,2975,2976,2979,2982,2984,2987],{"class":35,"line":1155},[33,2977,2978],{"class":106},"if",[33,2980,2981],{"class":110}," result.status ",[33,2983,1347],{"class":106},[33,2985,2986],{"class":43}," \"infeasible\"",[33,2988,2989],{"class":110},":\n",[33,2991,2992,2995,2997,3000],{"class":35,"line":1160},[33,2993,2994],{"class":187},"    print",[33,2996,1638],{"class":110},[33,2998,2999],{"class":43},"\"No feasible solution — relax a constraint and try again.\"",[33,3001,168],{"class":110},[349,3003],{":rows":3004,"cmd":3005},"[\"├── shots\",\"│   ├── 1 · primal-dual · global   —    0.0s  infeasible\",\"│   ├── 2 · primal-dual · global   —   0.01s  infeasible\",\"│   └── 3 · primal                 6   0.02s\",\"├── status:     infeasible\",\"├── feasible:   false\",\"├── objective:  —\",\"├── x:          —  (10 variables)\",\"└── solve_time: 0.0176 s\",\"No feasible solution — relax a constraint and try again.\"]","$ python infeasible.py",[79,3007,3009],{"id":3008},"coming-soon","Coming soon",[14,3011,3012,3015],{},[18,3013,3014],{},"Black-box objectives"," are on the way. A model outside today's classes is\ndeclined with a readable message — never a wrong or half-solved result. If\nthat class is the one that matters to you — or anything else is unclear —\ntalk to us:",[3017,3018,3019],"style",{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}",{"title":28,"searchDepth":120,"depth":120,"links":3021},[3022,3023,3024,3025,3026,3027,3028,3029,3030,3031],{"id":81,"depth":120,"text":82},{"id":355,"depth":120,"text":356},{"id":575,"depth":120,"text":576},{"id":785,"depth":120,"text":786},{"id":1527,"depth":120,"text":1528},{"id":1834,"depth":120,"text":1835},{"id":2107,"depth":120,"text":2108},{"id":2331,"depth":120,"text":2332},{"id":2676,"depth":120,"text":2677},{"id":3008,"depth":120,"text":3009},"One complete script per supported problem class — LP, QP, MILP, MINLP, QUBO,\nPUBO, NLP — plus a realistic facility-location MILP and a look at how\ninfeasibility comes back. Each script is self-contained:","md",null,{},false,"\u002Fdeveloper\u002Fexamples\u002Fby-class",{"title":5,"description":3032},"developer\u002Fexamples\u002Fby-class","QBmGryj_R7zLdkUwK-PnbtevIJmW80aXRDiE0XPXuS8",1794337678966]