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