@ohtaman/washi 0.1.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +195 -105
- package/README.md +195 -105
- package/README.zh-CN.md +197 -107
- package/dist/browser/highs-worker.js +2 -2
- package/dist/browser/{highs-loader-T47YOyos.js → loader-CVt4CloI.js} +2 -2
- package/dist/browser/solvers/glpk.js +1065 -0
- package/dist/browser/solvers/glpk.min.js +1 -0
- package/dist/browser/solvers/z3-built.js +8245 -0
- package/dist/browser/solvers/z3-built.wasm +4 -0
- package/dist/browser/solvers/z3.js +7550 -0
- package/dist/browser/solvers/z3.min.js +5 -0
- package/dist/browser/washi.js +370 -642
- package/dist/browser/washi.min.js +4 -4
- package/dist/lib/async-mutex-Duo4jwzn.js +195 -0
- package/dist/lib/constraint-BRuB3ooC.js +90 -0
- package/dist/lib/highs-worker.js +2 -2
- package/dist/lib/{highs-loader-Blb99785.js → loader-Dti0v9yC.js} +1 -1
- package/dist/lib/registry-DksqCSjI.js +32 -0
- package/dist/lib/solvers/glpk.js +161 -2
- package/dist/lib/solvers/z3-assets.js +1 -0
- package/dist/lib/solvers/z3-built.js +8245 -0
- package/dist/lib/solvers/z3-built.wasm +4 -0
- package/dist/lib/solvers/z3.js +476 -2
- package/dist/lib/washi.js +604 -248
- package/dist/types/index.d.ts +7 -10
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/modeler/constraint.d.ts +0 -3
- package/dist/types/modeler/constraint.d.ts.map +1 -1
- package/dist/types/modeler/expression.d.ts +16 -10
- package/dist/types/modeler/expression.d.ts.map +1 -1
- package/dist/types/modeler/index.d.ts +3 -5
- package/dist/types/modeler/index.d.ts.map +1 -1
- package/dist/types/modeler/model.d.ts +91 -12
- package/dist/types/modeler/model.d.ts.map +1 -1
- package/dist/types/modeler/solvers/glpk/index.d.ts +3 -0
- package/dist/types/modeler/solvers/glpk/index.d.ts.map +1 -0
- package/dist/types/modeler/solvers/glpk/loader.d.ts +16 -0
- package/dist/types/modeler/solvers/glpk/loader.d.ts.map +1 -0
- package/dist/types/modeler/solvers/glpk/solver.d.ts +26 -0
- package/dist/types/modeler/solvers/glpk/solver.d.ts.map +1 -0
- package/dist/types/modeler/solvers/glpk.d.ts +1 -21
- package/dist/types/modeler/solvers/glpk.d.ts.map +1 -1
- package/dist/types/{highs-assets.d.ts → modeler/solvers/highs/assets.d.ts} +1 -1
- package/dist/types/modeler/solvers/highs/assets.d.ts.map +1 -0
- package/dist/types/modeler/solvers/highs/browser-runtime.d.ts +2 -0
- package/dist/types/modeler/solvers/highs/browser-runtime.d.ts.map +1 -0
- package/dist/types/modeler/solvers/highs/index.d.ts +6 -0
- package/dist/types/modeler/solvers/highs/index.d.ts.map +1 -0
- package/dist/types/{highs-loader.d.ts → modeler/solvers/highs/loader.d.ts} +2 -2
- package/dist/types/modeler/solvers/highs/loader.d.ts.map +1 -0
- package/dist/types/{highs-node-runtime.d.ts → modeler/solvers/highs/node-runtime.d.ts} +1 -1
- package/dist/types/modeler/solvers/highs/node-runtime.d.ts.map +1 -0
- package/dist/types/modeler/solvers/highs/solver.d.ts +33 -0
- package/dist/types/modeler/solvers/highs/solver.d.ts.map +1 -0
- package/dist/types/modeler/solvers/highs/worker-client.d.ts +13 -0
- package/dist/types/modeler/solvers/highs/worker-client.d.ts.map +1 -0
- package/dist/types/{highs-worker-factory.d.ts → modeler/solvers/highs/worker-factory.d.ts} +1 -1
- package/dist/types/modeler/solvers/highs/worker-factory.d.ts.map +1 -0
- package/dist/types/modeler/solvers/highs/worker.d.ts +2 -0
- package/dist/types/modeler/solvers/highs/worker.d.ts.map +1 -0
- package/dist/types/modeler/solvers/highs.d.ts +1 -31
- package/dist/types/modeler/solvers/highs.d.ts.map +1 -1
- package/dist/types/modeler/solvers/index.d.ts +0 -2
- package/dist/types/modeler/solvers/index.d.ts.map +1 -1
- package/dist/types/modeler/solvers/mock.d.ts +1 -0
- package/dist/types/modeler/solvers/mock.d.ts.map +1 -1
- package/dist/types/modeler/solvers/registry.d.ts +1 -2
- package/dist/types/modeler/solvers/registry.d.ts.map +1 -1
- package/dist/types/modeler/solvers/types.d.ts +1 -1
- package/dist/types/modeler/solvers/z3/assets.d.ts +11 -0
- package/dist/types/modeler/solvers/z3/assets.d.ts.map +1 -0
- package/dist/types/modeler/solvers/z3/index.d.ts +3 -0
- package/dist/types/modeler/solvers/z3/index.d.ts.map +1 -0
- package/dist/types/modeler/solvers/z3/loader.d.ts +56 -0
- package/dist/types/modeler/solvers/z3/loader.d.ts.map +1 -0
- package/dist/types/modeler/solvers/z3/solver.d.ts +34 -0
- package/dist/types/modeler/solvers/z3/solver.d.ts.map +1 -0
- package/dist/types/modeler/solvers/z3.d.ts +1 -35
- package/dist/types/modeler/solvers/z3.d.ts.map +1 -1
- package/dist/types/modeler/types.d.ts +8 -3
- package/dist/types/modeler/types.d.ts.map +1 -1
- package/dist/types/modeler/variable.d.ts +1 -6
- package/dist/types/modeler/variable.d.ts.map +1 -1
- package/package.json +28 -6
- package/dist/browser/_washi-optional-engine-282Ug7Gw.js +0 -7
- package/dist/lib/glpk-5cUpjyb9.js +0 -135
- package/dist/lib/z3-C6GeIicJ.js +0 -509
- package/dist/types/glpk-loader.d.ts +0 -8
- package/dist/types/glpk-loader.d.ts.map +0 -1
- package/dist/types/highs-assets.d.ts.map +0 -1
- package/dist/types/highs-browser-runtime.d.ts +0 -2
- package/dist/types/highs-browser-runtime.d.ts.map +0 -1
- package/dist/types/highs-loader.d.ts.map +0 -1
- package/dist/types/highs-node-runtime.d.ts.map +0 -1
- package/dist/types/highs-worker-client.d.ts +0 -12
- package/dist/types/highs-worker-client.d.ts.map +0 -1
- package/dist/types/highs-worker-factory.d.ts.map +0 -1
- package/dist/types/highs-worker.d.ts +0 -2
- package/dist/types/highs-worker.d.ts.map +0 -1
- package/dist/types/modeler/mip-compat.d.ts +0 -43
- package/dist/types/modeler/mip-compat.d.ts.map +0 -1
- package/dist/types/modeler/pulp-compat.d.ts +0 -67
- package/dist/types/modeler/pulp-compat.d.ts.map +0 -1
- /package/dist/browser/{highs-browser-runtime-D13gHOT5.js → browser-runtime-D13gHOT5.js} +0 -0
package/dist/lib/washi.js
CHANGED
|
@@ -1,12 +1,34 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { n as
|
|
1
|
+
import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c } from "./constraint-BRuB3ooC.js";
|
|
2
|
+
import { i as l, n as u, r as d, t as f } from "./registry-DksqCSjI.js";
|
|
3
|
+
import { a as p, c as m, i as h, n as g, o as _, r as v, s as y, t as b } from "./loader-Dti0v9yC.js";
|
|
4
|
+
import { createHighsWorker as ee } from "./highs-worker-factory.js";
|
|
5
|
+
//#region \0rolldown/runtime.js
|
|
6
|
+
var x = Object.defineProperty, te = Object.getOwnPropertyDescriptor, ne = Object.getOwnPropertyNames, re = Object.prototype.hasOwnProperty, S = (e, t) => {
|
|
7
|
+
let n = {};
|
|
8
|
+
for (var r in e) x(n, r, {
|
|
9
|
+
get: e[r],
|
|
10
|
+
enumerable: !0
|
|
11
|
+
});
|
|
12
|
+
return t || x(n, Symbol.toStringTag, { value: "Module" }), n;
|
|
13
|
+
}, C = (e, t, n, r) => {
|
|
14
|
+
if (t && typeof t == "object" || typeof t == "function") for (var i = ne(t), a = 0, o = i.length, s; a < o; a++) s = i[a], !re.call(e, s) && s !== n && x(e, s, {
|
|
15
|
+
get: ((e) => t[e]).bind(null, s),
|
|
16
|
+
enumerable: !(r = te(t, s)) || r.enumerable
|
|
17
|
+
});
|
|
18
|
+
return e;
|
|
19
|
+
}, w = (e, t, n) => (C(e, t, "default"), n && C(n, t, "default"));
|
|
20
|
+
//#endregion
|
|
21
|
+
//#region src/modeler/types.ts
|
|
22
|
+
function T(e) {
|
|
23
|
+
return e && e.toLowerCase() === "maximize" ? "Maximize" : "Minimize";
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
4
26
|
//#region src/modeler/quad-expr.ts
|
|
5
|
-
function
|
|
27
|
+
function E(e, t) {
|
|
6
28
|
let n = e.id, r = t.id;
|
|
7
29
|
return n <= r ? `${n}:${r}` : `${r}:${n}`;
|
|
8
30
|
}
|
|
9
|
-
var
|
|
31
|
+
var D = class e {
|
|
10
32
|
linearTerms;
|
|
11
33
|
quadTerms;
|
|
12
34
|
constant;
|
|
@@ -19,7 +41,7 @@ var O = class e {
|
|
|
19
41
|
return new e(this.linearTerms, this.quadTerms, this.constant);
|
|
20
42
|
}
|
|
21
43
|
getQuadCoeff(e, t) {
|
|
22
|
-
let n =
|
|
44
|
+
let n = E(e, t), r = this.quadTerms.get(n);
|
|
23
45
|
return r ? r.coeff : 0;
|
|
24
46
|
}
|
|
25
47
|
add(t) {
|
|
@@ -92,14 +114,14 @@ var O = class e {
|
|
|
92
114
|
return this.value;
|
|
93
115
|
}
|
|
94
116
|
static fromProduct(t, n, r = 1) {
|
|
95
|
-
let i = new e(), a =
|
|
117
|
+
let i = new e(), a = E(t, n);
|
|
96
118
|
return i.quadTerms.set(a, {
|
|
97
119
|
var1: t.id <= n.id ? t : n,
|
|
98
120
|
var2: t.id <= n.id ? n : t,
|
|
99
121
|
coeff: r
|
|
100
122
|
}), i;
|
|
101
123
|
}
|
|
102
|
-
},
|
|
124
|
+
}, O = class e {
|
|
103
125
|
terms;
|
|
104
126
|
constant;
|
|
105
127
|
constructor(e = /* @__PURE__ */ new Map(), t = 0) {
|
|
@@ -109,7 +131,7 @@ var O = class e {
|
|
|
109
131
|
return new e(this.terms, this.constant);
|
|
110
132
|
}
|
|
111
133
|
add(e) {
|
|
112
|
-
if (e instanceof
|
|
134
|
+
if (e instanceof D) return e.add(this);
|
|
113
135
|
let t = this.clone();
|
|
114
136
|
if (typeof e == "number") t.constant += e;
|
|
115
137
|
else if ("terms" in e) {
|
|
@@ -125,7 +147,7 @@ var O = class e {
|
|
|
125
147
|
return t;
|
|
126
148
|
}
|
|
127
149
|
sub(e) {
|
|
128
|
-
return e instanceof
|
|
150
|
+
return e instanceof D ? e.neg().add(this) : typeof e == "number" ? this.add(-e) : ("terms" in e, this.add(e.mul(-1)));
|
|
129
151
|
}
|
|
130
152
|
mul(t) {
|
|
131
153
|
if (typeof t == "number") {
|
|
@@ -136,9 +158,9 @@ var O = class e {
|
|
|
136
158
|
}
|
|
137
159
|
return n;
|
|
138
160
|
}
|
|
139
|
-
let n = new
|
|
161
|
+
let n = new D();
|
|
140
162
|
Math.abs(this.constant) >= 1e-12 && n.linearTerms.set(t, this.constant);
|
|
141
|
-
for (let [e, r] of this.terms) n = n.add(
|
|
163
|
+
for (let [e, r] of this.terms) n = n.add(D.fromProduct(e, t, r));
|
|
142
164
|
return n;
|
|
143
165
|
}
|
|
144
166
|
div(e) {
|
|
@@ -177,11 +199,11 @@ var O = class e {
|
|
|
177
199
|
equalTo(e, t) {
|
|
178
200
|
return this.eq(e, t);
|
|
179
201
|
}
|
|
180
|
-
toConstraint(t, n,
|
|
181
|
-
let
|
|
182
|
-
typeof n == "number" ?
|
|
183
|
-
let
|
|
184
|
-
return
|
|
202
|
+
toConstraint(t, n, r) {
|
|
203
|
+
let i = this.clone(), a = 0;
|
|
204
|
+
typeof n == "number" ? a = n : "terms" in n ? (i = i.sub(new e(n.terms, 0)), a = n.constant) : i = i.sub(n);
|
|
205
|
+
let o = a - i.constant;
|
|
206
|
+
return i.constant = 0, new c(i, t, o, r);
|
|
185
207
|
}
|
|
186
208
|
toString() {
|
|
187
209
|
let e = [], t = !0;
|
|
@@ -196,27 +218,113 @@ var O = class e {
|
|
|
196
218
|
return e.join(" ") || "0";
|
|
197
219
|
}
|
|
198
220
|
};
|
|
221
|
+
function k(e, t) {
|
|
222
|
+
let n = /* @__PURE__ */ new Map(), r = 0;
|
|
223
|
+
function i(e) {
|
|
224
|
+
if (e != null) {
|
|
225
|
+
if (typeof e == "number") r += e;
|
|
226
|
+
else if (typeof e == "object" && "terms" in e) {
|
|
227
|
+
let t = e;
|
|
228
|
+
for (let [e, r] of t.terms) {
|
|
229
|
+
let t = n.get(e) || 0;
|
|
230
|
+
n.set(e, t + r);
|
|
231
|
+
}
|
|
232
|
+
r += t.constant;
|
|
233
|
+
} else {
|
|
234
|
+
let t = e, r = n.get(t) || 0;
|
|
235
|
+
n.set(t, r + 1);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (typeof e == "number") {
|
|
240
|
+
let n = e, r = t;
|
|
241
|
+
for (let e = 0; e < n; e++) i(r(e, e));
|
|
242
|
+
} else {
|
|
243
|
+
let n = 0;
|
|
244
|
+
for (let r of e) i(t ? t(r, n++) : r);
|
|
245
|
+
}
|
|
246
|
+
for (let [e, t] of n) Math.abs(t) < 1e-12 && n.delete(e);
|
|
247
|
+
return new O(n, r);
|
|
248
|
+
}
|
|
199
249
|
function A(e, t) {
|
|
200
|
-
let n = /* @__PURE__ */ new Map(), r = 0
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
250
|
+
let n = /* @__PURE__ */ new Map(), r = 0;
|
|
251
|
+
function i(e) {
|
|
252
|
+
return typeof e == "object" && !!e && typeof e.id == "number" && typeof e.name == "string" && typeof e.mul == "function" && typeof e.le == "function";
|
|
253
|
+
}
|
|
254
|
+
function a(e) {
|
|
255
|
+
return i(e) || e instanceof O || e instanceof D;
|
|
256
|
+
}
|
|
257
|
+
function o(e, t) {
|
|
258
|
+
if (typeof t == "number") r += e * t;
|
|
259
|
+
else if (t instanceof O) {
|
|
260
|
+
for (let [r, i] of t.terms) {
|
|
261
|
+
let t = n.get(r) || 0;
|
|
262
|
+
n.set(r, t + e * i);
|
|
209
263
|
}
|
|
210
|
-
r += t.constant;
|
|
211
|
-
} else if (
|
|
212
|
-
let
|
|
213
|
-
n.set(
|
|
264
|
+
r += e * t.constant;
|
|
265
|
+
} else if (i(t)) {
|
|
266
|
+
let r = t, i = n.get(r) || 0;
|
|
267
|
+
n.set(r, i + e);
|
|
268
|
+
} else throw Error("Cannot multiply number by non-variable/expression operand in dot().");
|
|
269
|
+
}
|
|
270
|
+
function s(e) {
|
|
271
|
+
return typeof e == "object" && !!e && !Array.isArray(e) && !a(e);
|
|
272
|
+
}
|
|
273
|
+
function c(e, t, n = "") {
|
|
274
|
+
if (e === void 0 || t === void 0 || e === null || t === null) throw Error(`Nullish or undefined operand encountered in dot() at '${n || "root"}'.`);
|
|
275
|
+
if (typeof e == "number") {
|
|
276
|
+
o(e, t);
|
|
277
|
+
return;
|
|
214
278
|
}
|
|
279
|
+
if (typeof t == "number") {
|
|
280
|
+
o(t, e);
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
if (Array.isArray(e) || Array.isArray(t)) {
|
|
284
|
+
if (Array.isArray(e) && Array.isArray(t)) {
|
|
285
|
+
if (e.length !== t.length) throw Error(`Array length mismatch in dot() at '${n || "root"}': received lengths ${e.length} and ${t.length}.`);
|
|
286
|
+
for (let r = 0; r < e.length; r++) c(e[r], t[r], n ? `${n}[${r}]` : `[${r}]`);
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
let r = Array.isArray(e) ? e : t, i = Array.isArray(e) ? t : e;
|
|
290
|
+
if (s(i)) {
|
|
291
|
+
let a = Object.keys(i);
|
|
292
|
+
if (a.length > 0 && a.every((e) => /^\d+$/.test(e))) {
|
|
293
|
+
if (a.length !== r.length) throw Error(`Array length mismatch in dot() at '${n || "root"}': array has length ${r.length}, but object has ${a.length} indices.`);
|
|
294
|
+
let o = [];
|
|
295
|
+
for (let e = 0; e < r.length; e++) !(e in i) && !(String(e) in i) && o.push(e);
|
|
296
|
+
if (o.length > 0) throw Error(`Key mismatch in dot() at '${n || "root"}': missing indices [${o.join(", ")}] in numeric record.`);
|
|
297
|
+
for (let i = 0; i < r.length; i++) c(e[i], t[i], n ? `${n}[${i}]` : `[${i}]`);
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
throw Error(`Type mismatch in dot() at '${n || "root"}': one operand is an Array while the other is an Object with keys [${a.slice(0, 5).join(", ")}].`);
|
|
301
|
+
}
|
|
302
|
+
throw Error(`Type mismatch in dot() at '${n || "root"}': one operand is an Array while the other is not.`);
|
|
303
|
+
}
|
|
304
|
+
if (s(e) && s(t)) {
|
|
305
|
+
let r = Object.keys(e), i = Object.keys(t), a = r.filter((e) => !(e in t)), o = i.filter((t) => !(t in e));
|
|
306
|
+
if (a.length > 0 || o.length > 0) {
|
|
307
|
+
let e = [];
|
|
308
|
+
throw a.length > 0 && e.push(`missing in second operand: [${a.join(", ")}]`), o.length > 0 && e.push(`missing in first operand: [${o.join(", ")}]`), Error(`Key mismatch in dot() at '${n || "root"}': ${e.join("; ")}.`);
|
|
309
|
+
}
|
|
310
|
+
for (let i of r) c(e[i], t[i], n ? `${n}.${i}` : i);
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
throw Error(`Unsupported operand types in dot() at '${n || "root"}'.`);
|
|
215
314
|
}
|
|
315
|
+
c(e, t);
|
|
216
316
|
for (let [e, t] of n) Math.abs(t) < 1e-12 && n.delete(e);
|
|
217
|
-
return new
|
|
317
|
+
return new O(n, r);
|
|
218
318
|
}
|
|
219
|
-
|
|
319
|
+
//#endregion
|
|
320
|
+
//#region src/modeler/variable.ts
|
|
321
|
+
var ie = 0;
|
|
322
|
+
function ae(e) {
|
|
323
|
+
if (!e) return "Continuous";
|
|
324
|
+
let t = e.toLowerCase();
|
|
325
|
+
return t === "binary" || t === "bin" ? "Binary" : t === "integer" || t === "int" ? "Integer" : "Continuous";
|
|
326
|
+
}
|
|
327
|
+
var j = class e {
|
|
220
328
|
id;
|
|
221
329
|
name;
|
|
222
330
|
type;
|
|
@@ -225,48 +333,42 @@ var te = A, j = A, M = 0, N = class e {
|
|
|
225
333
|
value = null;
|
|
226
334
|
reducedCost = null;
|
|
227
335
|
constructor(e = {}) {
|
|
228
|
-
this.id = ++
|
|
229
|
-
}
|
|
230
|
-
get x() {
|
|
231
|
-
return this.value;
|
|
232
|
-
}
|
|
233
|
-
get varValue() {
|
|
234
|
-
return this.value;
|
|
336
|
+
this.id = ++ie, this.name = e.name || `x_${this.id}`, this.type = ae(e.type), this.type === "Binary" ? (this.lb = 0, this.ub = 1) : (this.lb = e.lb === void 0 ? 0 : e.lb, this.ub = e.ub === void 0 ? Infinity : e.ub);
|
|
235
337
|
}
|
|
236
338
|
mul(t) {
|
|
237
|
-
if (typeof t == "number") return new
|
|
238
|
-
if (t instanceof e) return
|
|
239
|
-
let n = new
|
|
339
|
+
if (typeof t == "number") return new O(/* @__PURE__ */ new Map([[this, t]]), 0);
|
|
340
|
+
if (t instanceof e) return D.fromProduct(this, t, 1);
|
|
341
|
+
let n = new D();
|
|
240
342
|
Math.abs(t.constant) >= 1e-12 && n.linearTerms.set(this, t.constant);
|
|
241
343
|
for (let [e, r] of t.terms) {
|
|
242
|
-
let t =
|
|
344
|
+
let t = D.fromProduct(this, e, r);
|
|
243
345
|
n = n.add(t);
|
|
244
346
|
}
|
|
245
347
|
return n;
|
|
246
348
|
}
|
|
247
349
|
add(e) {
|
|
248
|
-
return e instanceof
|
|
350
|
+
return e instanceof D ? e.add(this) : new O(/* @__PURE__ */ new Map([[this, 1]]), 0).add(e);
|
|
249
351
|
}
|
|
250
352
|
sub(e) {
|
|
251
|
-
return e instanceof
|
|
353
|
+
return e instanceof D ? e.neg().add(this) : new O(/* @__PURE__ */ new Map([[this, 1]]), 0).sub(e);
|
|
252
354
|
}
|
|
253
355
|
neg() {
|
|
254
356
|
return this.mul(-1);
|
|
255
357
|
}
|
|
256
358
|
le(e, t) {
|
|
257
|
-
return new
|
|
359
|
+
return new O(/* @__PURE__ */ new Map([[this, 1]]), 0).le(e, t);
|
|
258
360
|
}
|
|
259
361
|
lessThanOrEqual(e, t) {
|
|
260
362
|
return this.le(e, t);
|
|
261
363
|
}
|
|
262
364
|
ge(e, t) {
|
|
263
|
-
return new
|
|
365
|
+
return new O(/* @__PURE__ */ new Map([[this, 1]]), 0).ge(e, t);
|
|
264
366
|
}
|
|
265
367
|
greaterThanOrEqual(e, t) {
|
|
266
368
|
return this.ge(e, t);
|
|
267
369
|
}
|
|
268
370
|
eq(e, t) {
|
|
269
|
-
return new
|
|
371
|
+
return new O(/* @__PURE__ */ new Map([[this, 1]]), 0).eq(e, t);
|
|
270
372
|
}
|
|
271
373
|
equalTo(e, t) {
|
|
272
374
|
return this.eq(e, t);
|
|
@@ -277,7 +379,7 @@ var te = A, j = A, M = 0, N = class e {
|
|
|
277
379
|
};
|
|
278
380
|
//#endregion
|
|
279
381
|
//#region src/modeler/parser.ts
|
|
280
|
-
function
|
|
382
|
+
function M(e) {
|
|
281
383
|
let t = [], n = 0, r = e.length;
|
|
282
384
|
for (; n < r;) {
|
|
283
385
|
let i = e[n];
|
|
@@ -333,7 +435,7 @@ function P(e) {
|
|
|
333
435
|
}
|
|
334
436
|
return t;
|
|
335
437
|
}
|
|
336
|
-
var
|
|
438
|
+
var N = class {
|
|
337
439
|
tokens;
|
|
338
440
|
pos = 0;
|
|
339
441
|
resolver;
|
|
@@ -395,12 +497,12 @@ var F = class {
|
|
|
395
497
|
let e = this.consume();
|
|
396
498
|
return this.resolveVariable(e.value).mul(t);
|
|
397
499
|
}
|
|
398
|
-
return new
|
|
500
|
+
return new O(/* @__PURE__ */ new Map(), t);
|
|
399
501
|
}
|
|
400
502
|
if (e.type === "IDENT") {
|
|
401
503
|
this.consume();
|
|
402
504
|
let t = this.resolveVariable(e.value);
|
|
403
|
-
return new
|
|
505
|
+
return new O(/* @__PURE__ */ new Map([[t, 1]]), 0);
|
|
404
506
|
}
|
|
405
507
|
if (e.type === "LPAREN") {
|
|
406
508
|
this.consume("LPAREN");
|
|
@@ -415,10 +517,10 @@ var F = class {
|
|
|
415
517
|
return t;
|
|
416
518
|
}
|
|
417
519
|
};
|
|
418
|
-
function
|
|
419
|
-
return new
|
|
520
|
+
function P(e, t) {
|
|
521
|
+
return new N(M(e), t).parseExpression();
|
|
420
522
|
}
|
|
421
|
-
function
|
|
523
|
+
function F(e, t, n) {
|
|
422
524
|
let r = e.match(/(<=|>=|==|=<|=>|=)/);
|
|
423
525
|
if (!r) throw Error(`Constraint must contain a comparison operator (<=, >=, ==, =): "${e}"`);
|
|
424
526
|
let i = r[0], a = r.index, o = e.substring(0, a).trim(), s = e.substring(a + i.length).trim(), c;
|
|
@@ -426,18 +528,18 @@ function L(e, t, n) {
|
|
|
426
528
|
else if (i === ">=" || i === "=>") c = ">=";
|
|
427
529
|
else if (i === "==" || i === "=") c = "==";
|
|
428
530
|
else throw Error(`Unsupported operator "${i}"`);
|
|
429
|
-
let l =
|
|
531
|
+
let l = P(o, t), u = P(s, t);
|
|
430
532
|
return c === "<=" ? l.le(u, n) : c === ">=" ? l.ge(u, n) : l.eq(u, n);
|
|
431
533
|
}
|
|
432
|
-
function
|
|
534
|
+
function I(e, t) {
|
|
433
535
|
let n = /* @__PURE__ */ new Map(), r = "";
|
|
434
536
|
for (let i = 0; i < e.length; i++) if (r += e[i], i < t.length) {
|
|
435
537
|
let e = t[i];
|
|
436
538
|
if (typeof e == "number") r += `(${e})`;
|
|
437
|
-
else if (e instanceof
|
|
539
|
+
else if (e instanceof j) {
|
|
438
540
|
let t = `__v_${i}__`;
|
|
439
541
|
n.set(t, e), r += t;
|
|
440
|
-
} else if (e instanceof
|
|
542
|
+
} else if (e instanceof O) {
|
|
441
543
|
`${i}`, r += `(${e.toString()})`;
|
|
442
544
|
for (let [t] of e.terms) n.set(t.name, t);
|
|
443
545
|
}
|
|
@@ -447,42 +549,42 @@ function R(e, t) {
|
|
|
447
549
|
resolver: (e) => n.get(e)
|
|
448
550
|
};
|
|
449
551
|
}
|
|
450
|
-
function
|
|
451
|
-
let { fullText: n, resolver: r } =
|
|
452
|
-
return
|
|
552
|
+
function L(e, ...t) {
|
|
553
|
+
let { fullText: n, resolver: r } = I(e, t);
|
|
554
|
+
return F(n, r);
|
|
453
555
|
}
|
|
454
|
-
function
|
|
455
|
-
let { fullText: n, resolver: r } =
|
|
456
|
-
return /(<=|>=|==|=<|=>|=)/.test(n) ?
|
|
556
|
+
function R(e, ...t) {
|
|
557
|
+
let { fullText: n, resolver: r } = I(e, t);
|
|
558
|
+
return /(<=|>=|==|=<|=>|=)/.test(n) ? F(n, r) : P(n, r);
|
|
457
559
|
}
|
|
458
560
|
//#endregion
|
|
459
561
|
//#region src/modeler/lp-writer.ts
|
|
460
|
-
function
|
|
562
|
+
function z(e, t, n) {
|
|
461
563
|
let r = e.replace(/[^a-zA-Z0-9_]/g, "_");
|
|
462
564
|
return /^[0-9]/.test(r) && (r = `${t}_${r}`), (!r || r.length === 0) && (r = `${t}_${n}`), r;
|
|
463
565
|
}
|
|
464
|
-
function
|
|
566
|
+
function B(e) {
|
|
465
567
|
let { sense: t, objective: n, constraints: r, variables: i } = e, a = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Set();
|
|
466
568
|
for (let e of i) {
|
|
467
|
-
let t =
|
|
569
|
+
let t = z(e.name, "x", e.id), n = t, r = 1;
|
|
468
570
|
for (; c.has(n);) n = `${t}_${r++}`;
|
|
469
571
|
c.add(n), o.set(e, n), a.set(n, e);
|
|
470
572
|
}
|
|
471
573
|
let l = /* @__PURE__ */ new Set(), u = /* @__PURE__ */ new Map();
|
|
472
574
|
for (let e of r) {
|
|
473
|
-
let t =
|
|
575
|
+
let t = z(e.name, "c", e.id), n = t, r = 1;
|
|
474
576
|
for (; l.has(n);) n = `${t}_${r++}`;
|
|
475
577
|
l.add(n), u.set(e, n), s.set(n, e);
|
|
476
578
|
}
|
|
477
579
|
let d = [];
|
|
478
|
-
d.push(t === "
|
|
479
|
-
let f = [], p = !0, m = n instanceof
|
|
580
|
+
d.push(t && t.toLowerCase() === "maximize" ? "Maximize" : "Minimize");
|
|
581
|
+
let f = [], p = !0, m = n instanceof D ? n.linearTerms : n.terms;
|
|
480
582
|
if (m) for (let [e, t] of m) {
|
|
481
583
|
if (Math.abs(t) < 1e-12) continue;
|
|
482
584
|
let n = o.get(e), r = t >= 0 ? p ? "" : "+ " : "- ", i = Math.abs(t), a = i === 1 ? "" : `${i} `;
|
|
483
585
|
f.push(`${r}${a}${n}`), p = !1;
|
|
484
586
|
}
|
|
485
|
-
if (n instanceof
|
|
587
|
+
if (n instanceof D && n.quadTerms.size > 0) {
|
|
486
588
|
let e = [], t = !0;
|
|
487
589
|
for (let r of n.quadTerms.values()) {
|
|
488
590
|
if (Math.abs(r.coeff) < 1e-12) continue;
|
|
@@ -533,8 +635,248 @@ function H(e) {
|
|
|
533
635
|
};
|
|
534
636
|
}
|
|
535
637
|
//#endregion
|
|
638
|
+
//#region src/modeler/solvers/highs/worker-client.ts
|
|
639
|
+
var V = null, oe = 0, H = /* @__PURE__ */ new Map();
|
|
640
|
+
function se() {
|
|
641
|
+
if (typeof window > "u" || typeof Worker > "u") return null;
|
|
642
|
+
if (!V) try {
|
|
643
|
+
V = ee();
|
|
644
|
+
let e = V;
|
|
645
|
+
V.onmessage = (e) => {
|
|
646
|
+
let { type: t, id: n, result: r, runTime: i, error: a } = e.data, o = H.get(n);
|
|
647
|
+
o && (H.delete(n), t === "SOLVE_SUCCESS" ? o.resolve({
|
|
648
|
+
result: r,
|
|
649
|
+
runTime: i
|
|
650
|
+
}) : o.reject(Error(a || "Worker solve failed")));
|
|
651
|
+
};
|
|
652
|
+
let t = (t) => {
|
|
653
|
+
if (V === e) {
|
|
654
|
+
V = null, e.terminate();
|
|
655
|
+
for (let e of H.values()) e.reject(t);
|
|
656
|
+
H.clear();
|
|
657
|
+
}
|
|
658
|
+
};
|
|
659
|
+
V.onerror = (e) => t(/* @__PURE__ */ Error(`[WaSHI] HiGHS Worker failed to load or execute. Check Worker assets, CORS and CSP. ${e?.message || ""}`)), V.onmessageerror = () => t(/* @__PURE__ */ Error("[WaSHI] Could not deserialize the HiGHS Worker response."));
|
|
660
|
+
} catch {
|
|
661
|
+
V = null;
|
|
662
|
+
}
|
|
663
|
+
return V;
|
|
664
|
+
}
|
|
665
|
+
async function U(e, t = {}) {
|
|
666
|
+
let n = await _(t.wasmUrl), r = t.useWorker ?? typeof window < "u" ? se() : null;
|
|
667
|
+
if (!r) return m(e, t);
|
|
668
|
+
let i = {
|
|
669
|
+
...t,
|
|
670
|
+
wasmUrl: n
|
|
671
|
+
}, a = `req_${++oe}`;
|
|
672
|
+
return new Promise((t, n) => {
|
|
673
|
+
H.set(a, {
|
|
674
|
+
resolve: t,
|
|
675
|
+
reject: n
|
|
676
|
+
});
|
|
677
|
+
try {
|
|
678
|
+
r.postMessage({
|
|
679
|
+
type: "SOLVE",
|
|
680
|
+
id: a,
|
|
681
|
+
lpString: e,
|
|
682
|
+
options: i
|
|
683
|
+
});
|
|
684
|
+
} catch (e) {
|
|
685
|
+
H.delete(a), n(e);
|
|
686
|
+
}
|
|
687
|
+
});
|
|
688
|
+
}
|
|
689
|
+
//#endregion
|
|
690
|
+
//#region src/modeler/solvers/highs/solver.ts
|
|
691
|
+
function W(e) {
|
|
692
|
+
if (typeof e != "string") return "Unknown";
|
|
693
|
+
let t = e.trim();
|
|
694
|
+
if (!t) return "Unknown";
|
|
695
|
+
switch (t) {
|
|
696
|
+
case "Optimal": return "Optimal";
|
|
697
|
+
case "Infeasible": return "Infeasible";
|
|
698
|
+
case "Unbounded": return "Unbounded";
|
|
699
|
+
case "Primal infeasible or unbounded": return "Unknown";
|
|
700
|
+
case "Time limit reached":
|
|
701
|
+
case "TimeLimit": return "TimeLimit";
|
|
702
|
+
case "Iteration limit reached":
|
|
703
|
+
case "IterationLimit": return "IterationLimit";
|
|
704
|
+
case "Bound on objective reached":
|
|
705
|
+
case "Target for objective reached":
|
|
706
|
+
case "Feasible": return "Feasible";
|
|
707
|
+
case "Not Set": return "NotSolved";
|
|
708
|
+
case "Load error":
|
|
709
|
+
case "Model error":
|
|
710
|
+
case "Presolve error":
|
|
711
|
+
case "Solve error":
|
|
712
|
+
case "Postsolve error":
|
|
713
|
+
case "Error": return "Error";
|
|
714
|
+
case "Empty":
|
|
715
|
+
case "Unknown": return "Unknown";
|
|
716
|
+
}
|
|
717
|
+
let n = t.toLowerCase();
|
|
718
|
+
return n.includes("infeasible") && n.includes("unbounded") ? "Unknown" : n.includes("infeasible") ? "Infeasible" : n.includes("unbounded") ? "Unbounded" : n.includes("time limit") || n.includes("timelimit") ? "TimeLimit" : n.includes("iteration limit") || n.includes("iterationlimit") ? "IterationLimit" : n.includes("error") ? "Error" : n === "optimal" ? "Optimal" : "Unknown";
|
|
719
|
+
}
|
|
720
|
+
var G = class e {
|
|
721
|
+
static capabilities = {
|
|
722
|
+
supportsMIP: !0,
|
|
723
|
+
supportsQP: !0
|
|
724
|
+
};
|
|
725
|
+
name = "HiGHS";
|
|
726
|
+
version = "1.15.3";
|
|
727
|
+
capabilities = e.capabilities;
|
|
728
|
+
options;
|
|
729
|
+
constructor(e = {}) {
|
|
730
|
+
this.options = e;
|
|
731
|
+
}
|
|
732
|
+
async solve(e, t, n = {}) {
|
|
733
|
+
let r = {
|
|
734
|
+
...this.options,
|
|
735
|
+
...n
|
|
736
|
+
}, { lpString: i, nameToVar: a, nameToConstraint: o } = t, { result: s, runTime: c } = await U(i, r), l = W(s?.Status);
|
|
737
|
+
if (l === "Infeasible" || l === "Unbounded") return {
|
|
738
|
+
status: l,
|
|
739
|
+
objectiveValue: null,
|
|
740
|
+
values: {},
|
|
741
|
+
reducedCosts: {},
|
|
742
|
+
duals: {},
|
|
743
|
+
slacks: {},
|
|
744
|
+
runTime: c,
|
|
745
|
+
raw: s
|
|
746
|
+
};
|
|
747
|
+
let u = s.ObjectiveValue, d = typeof u == "number" ? u + e.objective.constant : null, f = {}, p = {}, m = {}, h = {};
|
|
748
|
+
if (s.Columns) for (let [e, t] of Object.entries(s.Columns)) {
|
|
749
|
+
let n = a.get(e);
|
|
750
|
+
if (n) {
|
|
751
|
+
let e = Math.abs(t.Primal) < 1e-9 ? 0 : t.Primal;
|
|
752
|
+
f[n.name] = e, t.Dual !== void 0 && (m[n.name] = Math.abs(t.Dual) < 1e-9 ? 0 : t.Dual);
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
if (s.Rows) {
|
|
756
|
+
let e = Array.isArray(s.Rows) ? s.Rows : Object.values(s.Rows);
|
|
757
|
+
for (let t of e) {
|
|
758
|
+
let e = t.Name, n = o.get(e);
|
|
759
|
+
if (n && (t.Dual !== void 0 && (p[n.name] = Math.abs(t.Dual) < 1e-9 ? 0 : t.Dual), t.Primal !== void 0)) {
|
|
760
|
+
let e = n.rhs - t.Primal;
|
|
761
|
+
h[n.name] = Math.abs(e) < 1e-9 ? 0 : e;
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
return {
|
|
766
|
+
status: l,
|
|
767
|
+
objectiveValue: d,
|
|
768
|
+
values: f,
|
|
769
|
+
reducedCosts: m,
|
|
770
|
+
duals: p,
|
|
771
|
+
slacks: h,
|
|
772
|
+
runTime: c,
|
|
773
|
+
raw: s
|
|
774
|
+
};
|
|
775
|
+
}
|
|
776
|
+
}, K = G;
|
|
777
|
+
function q() {
|
|
778
|
+
d("highs", (e) => new G(e)), l((e) => new G(e));
|
|
779
|
+
}
|
|
780
|
+
q();
|
|
781
|
+
//#endregion
|
|
782
|
+
//#region src/modeler/solvers/highs/index.ts
|
|
783
|
+
var J = /* @__PURE__ */ S({
|
|
784
|
+
HiGHS: () => K,
|
|
785
|
+
HighsSolver: () => G,
|
|
786
|
+
OFFICIAL_HIGHS_CDN_WASM_URL: () => b,
|
|
787
|
+
getHighs: () => g,
|
|
788
|
+
getHighsWasmUrl: () => v,
|
|
789
|
+
isValidWasmHeader: () => h,
|
|
790
|
+
mapHighsStatus: () => W,
|
|
791
|
+
probeWasmUrl: () => p,
|
|
792
|
+
registerHighsSolver: () => q,
|
|
793
|
+
resolveBrowserWasmUrl: () => _,
|
|
794
|
+
setHighsWasmUrl: () => y,
|
|
795
|
+
solveLp: () => U,
|
|
796
|
+
solveLpWithHighs: () => m
|
|
797
|
+
});
|
|
798
|
+
import * as ce from "./highs-worker-factory.js";
|
|
799
|
+
w(J, ce);
|
|
800
|
+
import * as le from "./highs-assets.js";
|
|
801
|
+
w(J, le);
|
|
802
|
+
//#endregion
|
|
803
|
+
//#region src/modeler/solvers/highs.ts
|
|
804
|
+
var Y = /* @__PURE__ */ S({
|
|
805
|
+
HiGHS: () => K,
|
|
806
|
+
HighsSolver: () => G,
|
|
807
|
+
OFFICIAL_HIGHS_CDN_WASM_URL: () => b,
|
|
808
|
+
getHighs: () => g,
|
|
809
|
+
getHighsWasmUrl: () => v,
|
|
810
|
+
isValidWasmHeader: () => h,
|
|
811
|
+
mapHighsStatus: () => W,
|
|
812
|
+
probeWasmUrl: () => p,
|
|
813
|
+
registerHighsSolver: () => q,
|
|
814
|
+
resolveBrowserWasmUrl: () => _,
|
|
815
|
+
setHighsWasmUrl: () => y,
|
|
816
|
+
solveLp: () => U,
|
|
817
|
+
solveLpWithHighs: () => m
|
|
818
|
+
});
|
|
819
|
+
w(Y, J);
|
|
820
|
+
//#endregion
|
|
821
|
+
//#region src/modeler/solvers/mock.ts
|
|
822
|
+
var X = class {
|
|
823
|
+
name;
|
|
824
|
+
capabilities;
|
|
825
|
+
options;
|
|
826
|
+
constructor(e = {}) {
|
|
827
|
+
this.name = e.name || "MockSolver", this.capabilities = e.capabilities || {
|
|
828
|
+
supportsMIP: !0,
|
|
829
|
+
supportsQP: !0
|
|
830
|
+
}, this.options = e;
|
|
831
|
+
}
|
|
832
|
+
async solve(e, t, n = {}) {
|
|
833
|
+
let r = {
|
|
834
|
+
...this.options,
|
|
835
|
+
...n
|
|
836
|
+
};
|
|
837
|
+
return r.delayMs && r.delayMs > 0 && await new Promise((e) => setTimeout(e, r.delayMs)), {
|
|
838
|
+
status: r.status || "Optimal",
|
|
839
|
+
objectiveValue: r.objectiveValue ?? 0,
|
|
840
|
+
values: r.values || {},
|
|
841
|
+
reducedCosts: r.reducedCosts,
|
|
842
|
+
duals: r.duals,
|
|
843
|
+
slacks: r.slacks,
|
|
844
|
+
runTime: .001,
|
|
845
|
+
raw: { mock: !0 }
|
|
846
|
+
};
|
|
847
|
+
}
|
|
848
|
+
};
|
|
849
|
+
function Z() {
|
|
850
|
+
d("mock", (e) => new X(e));
|
|
851
|
+
}
|
|
852
|
+
Z();
|
|
853
|
+
//#endregion
|
|
854
|
+
//#region src/modeler/solvers/index.ts
|
|
855
|
+
var Q = /* @__PURE__ */ S({
|
|
856
|
+
HiGHS: () => K,
|
|
857
|
+
HighsSolver: () => G,
|
|
858
|
+
MockSolver: () => X,
|
|
859
|
+
OFFICIAL_HIGHS_CDN_WASM_URL: () => b,
|
|
860
|
+
getHighs: () => g,
|
|
861
|
+
getHighsWasmUrl: () => v,
|
|
862
|
+
getSolver: () => f,
|
|
863
|
+
isValidWasmHeader: () => h,
|
|
864
|
+
listAvailableSolvers: () => u,
|
|
865
|
+
mapHighsStatus: () => W,
|
|
866
|
+
probeWasmUrl: () => p,
|
|
867
|
+
registerHighsSolver: () => q,
|
|
868
|
+
registerMockSolver: () => Z,
|
|
869
|
+
registerSolver: () => d,
|
|
870
|
+
resolveBrowserWasmUrl: () => _,
|
|
871
|
+
setDefaultSolver: () => l,
|
|
872
|
+
setHighsWasmUrl: () => y,
|
|
873
|
+
solveLp: () => U,
|
|
874
|
+
solveLpWithHighs: () => m
|
|
875
|
+
});
|
|
876
|
+
w(Q, Y);
|
|
877
|
+
//#endregion
|
|
536
878
|
//#region src/modeler/model.ts
|
|
537
|
-
var
|
|
879
|
+
var $ = class {
|
|
538
880
|
name;
|
|
539
881
|
sense;
|
|
540
882
|
objective;
|
|
@@ -551,8 +893,12 @@ var U = class {
|
|
|
551
893
|
runTime = 0;
|
|
552
894
|
solution = null;
|
|
553
895
|
solver = null;
|
|
554
|
-
constructor(e = {}) {
|
|
555
|
-
|
|
896
|
+
constructor(e = {}, t) {
|
|
897
|
+
let n;
|
|
898
|
+
n = typeof e == "string" ? {
|
|
899
|
+
...t,
|
|
900
|
+
name: e
|
|
901
|
+
} : e, this.name = n.name || "OptimizationModel", this.sense = T(n.sense), this.objective = new O(), n.solver && (this.solver = f(n.solver));
|
|
556
902
|
}
|
|
557
903
|
get vars() {
|
|
558
904
|
return this.variables;
|
|
@@ -566,6 +912,60 @@ var U = class {
|
|
|
566
912
|
get numConstrs() {
|
|
567
913
|
return this.constraints.length;
|
|
568
914
|
}
|
|
915
|
+
createDomainVars(e, t, n, r) {
|
|
916
|
+
if (typeof n == "number" || Array.isArray(n)) {
|
|
917
|
+
let i = typeof t == "number" ? Array.from({ length: t }, (e, t) => t) : t, a = typeof n == "number" ? Array.from({ length: n }, (e, t) => t) : n, o = r || {}, s = o.prefix || o.name || "x", c = {};
|
|
918
|
+
for (let t of i) {
|
|
919
|
+
c[t] = {};
|
|
920
|
+
for (let n of a) c[t][n] = this.addVar({
|
|
921
|
+
...o,
|
|
922
|
+
type: e,
|
|
923
|
+
name: `${s}_${t}_${n}`
|
|
924
|
+
});
|
|
925
|
+
}
|
|
926
|
+
return c;
|
|
927
|
+
}
|
|
928
|
+
if (typeof t == "string") {
|
|
929
|
+
let r = n || {};
|
|
930
|
+
return this.addVar({
|
|
931
|
+
...r,
|
|
932
|
+
type: e,
|
|
933
|
+
name: t
|
|
934
|
+
});
|
|
935
|
+
}
|
|
936
|
+
let i = n || {}, a = i.prefix || i.name;
|
|
937
|
+
if (typeof t == "number") {
|
|
938
|
+
let n = [], r = a || "x";
|
|
939
|
+
for (let a = 0; a < t; a++) n.push(this.addVar({
|
|
940
|
+
...i,
|
|
941
|
+
type: e,
|
|
942
|
+
name: `${r}_${a}`
|
|
943
|
+
}));
|
|
944
|
+
return n;
|
|
945
|
+
}
|
|
946
|
+
if (Array.isArray(t) || t && typeof t[Symbol.iterator] == "function") {
|
|
947
|
+
let n = {};
|
|
948
|
+
for (let r of t) {
|
|
949
|
+
let t = a ? `${a}_${r}` : `${r}`;
|
|
950
|
+
n[r] = this.addVar({
|
|
951
|
+
...i,
|
|
952
|
+
type: e,
|
|
953
|
+
name: t
|
|
954
|
+
});
|
|
955
|
+
}
|
|
956
|
+
return n;
|
|
957
|
+
}
|
|
958
|
+
throw Error(`Invalid arguments provided for ${e.toLowerCase()} variable creation`);
|
|
959
|
+
}
|
|
960
|
+
binary(e, t, n) {
|
|
961
|
+
return this.createDomainVars("Binary", e, t, n);
|
|
962
|
+
}
|
|
963
|
+
integer(e, t, n) {
|
|
964
|
+
return this.createDomainVars("Integer", e, t, n);
|
|
965
|
+
}
|
|
966
|
+
continuous(e, t, n) {
|
|
967
|
+
return this.createDomainVars("Continuous", e, t, n);
|
|
968
|
+
}
|
|
569
969
|
addVar(e, t, n, r) {
|
|
570
970
|
let i;
|
|
571
971
|
i = typeof e == "string" ? {
|
|
@@ -574,7 +974,7 @@ var U = class {
|
|
|
574
974
|
lb: n,
|
|
575
975
|
ub: r
|
|
576
976
|
} : e || {};
|
|
577
|
-
let a = new
|
|
977
|
+
let a = new j(i);
|
|
578
978
|
if (this.varMapByName.has(a.name)) throw Error(`Variable with name '${a.name}' already exists in model`);
|
|
579
979
|
return this.variables.push(a), this.varMapByName.set(a.name, a), a;
|
|
580
980
|
}
|
|
@@ -629,7 +1029,8 @@ var U = class {
|
|
|
629
1029
|
return this.constrMapByName.get(e);
|
|
630
1030
|
}
|
|
631
1031
|
setObjective(e, t) {
|
|
632
|
-
|
|
1032
|
+
if (e instanceof c) throw Error("Cannot set objective to a constraint comparison (<=, >=, ==). Did you mean to use m.constrain(expr`... <= ...`)? For objectives, supply an unconstrained expression like expr`45 * ${x} + 80 * ${y}`.");
|
|
1033
|
+
t && (this.sense = T(t)), this.objective = typeof e == "string" ? P(e, (e) => this.getVarByName(e)) : typeof e == "number" ? new O(/* @__PURE__ */ new Map(), e) : e instanceof D || "terms" in e ? e.clone() : new O(/* @__PURE__ */ new Map([[e, 1]]), 0);
|
|
633
1034
|
}
|
|
634
1035
|
maximize(e) {
|
|
635
1036
|
this.setObjective(e, "Maximize");
|
|
@@ -637,11 +1038,31 @@ var U = class {
|
|
|
637
1038
|
minimize(e) {
|
|
638
1039
|
this.setObjective(e, "Minimize");
|
|
639
1040
|
}
|
|
1041
|
+
constrain(e, t) {
|
|
1042
|
+
if (Array.isArray(e)) {
|
|
1043
|
+
for (let t of e) this.constrain(t);
|
|
1044
|
+
return this;
|
|
1045
|
+
}
|
|
1046
|
+
if (e instanceof O) throw Error("Cannot add a linear expression without a comparison operator (<=, >=, ==) as a constraint. Use expr`... <= ...` or .le(), .ge(), .eq().");
|
|
1047
|
+
return this.addConstraint(e, t), this;
|
|
1048
|
+
}
|
|
1049
|
+
getValues(e) {
|
|
1050
|
+
if (e == null) return null;
|
|
1051
|
+
if (e instanceof j) return e.value;
|
|
1052
|
+
if (Array.isArray(e)) return e.map((e) => this.getValues(e));
|
|
1053
|
+
if (typeof e == "object") {
|
|
1054
|
+
let t = {};
|
|
1055
|
+
for (let [n, r] of Object.entries(e)) t[n] = this.getValues(r);
|
|
1056
|
+
return t;
|
|
1057
|
+
}
|
|
1058
|
+
return null;
|
|
1059
|
+
}
|
|
640
1060
|
addBoolVar(e) {
|
|
641
|
-
let t = new
|
|
1061
|
+
let t = new n(e);
|
|
642
1062
|
return this.boolVars.push(t), t;
|
|
643
1063
|
}
|
|
644
1064
|
addConstraint(e, t) {
|
|
1065
|
+
if (e instanceof O) throw Error("Cannot add a linear expression without a comparison operator (<=, >=, ==) as a constraint. Use expr`... <= ...` or .le(), .ge(), .eq().");
|
|
645
1066
|
if (e instanceof i) {
|
|
646
1067
|
let n = t || `lc_${this.logicalConstraints.length + 1}`;
|
|
647
1068
|
return this.logicalConstraints.push({
|
|
@@ -650,7 +1071,7 @@ var U = class {
|
|
|
650
1071
|
}), e;
|
|
651
1072
|
}
|
|
652
1073
|
let n;
|
|
653
|
-
if (typeof e == "string" ? n =
|
|
1074
|
+
if (typeof e == "string" ? n = F(e, (e) => this.getVarByName(e), t) : (n = e, t && (n.name = t)), this.constrMapByName.has(n.name)) throw Error(`Constraint with name '${n.name}' already exists in model`);
|
|
654
1075
|
return this.constraints.push(n), this.constrMapByName.set(n.name, n), n;
|
|
655
1076
|
}
|
|
656
1077
|
addConstr(e, t) {
|
|
@@ -664,33 +1085,37 @@ var U = class {
|
|
|
664
1085
|
for (let t of e) this.add(t);
|
|
665
1086
|
return this;
|
|
666
1087
|
}
|
|
667
|
-
return e instanceof
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
1088
|
+
return e instanceof j ? (this.varMapByName.has(e.name) || (this.variables.push(e), this.varMapByName.set(e.name, e)), this) : (this.addConstraint(e, t), this);
|
|
1089
|
+
}
|
|
1090
|
+
indicator(e, t, n = {}) {
|
|
1091
|
+
if (!("sense" in t) || !("lhs" in t)) throw Error("Invalid constraint expression passed to indicator(). Expression must include a comparison operator (<=, >=, ==).");
|
|
1092
|
+
let r = t, i = n.activeValue === void 0 ? 1 : n.activeValue, a = n.M === void 0 ? 1e5 : n.M, o = n.name || `ind_${e.name}_${r.name}`, s = [], { lhs: c, sense: l, rhs: u } = r;
|
|
1093
|
+
if (i === 1) {
|
|
1094
|
+
if (l === "<=" || l === "==") {
|
|
1095
|
+
let t = this.addConstraint(c.add(e.mul(a)).le(u + a), l === "==" ? `${o}_le` : o);
|
|
1096
|
+
s.push(t);
|
|
675
1097
|
}
|
|
676
|
-
if (
|
|
677
|
-
let t = this.addConstraint(
|
|
678
|
-
|
|
1098
|
+
if (l === ">=" || l === "==") {
|
|
1099
|
+
let t = this.addConstraint(c.sub(e.mul(a)).ge(u - a), l === "==" ? `${o}_ge` : o);
|
|
1100
|
+
s.push(t);
|
|
679
1101
|
}
|
|
680
1102
|
} else {
|
|
681
|
-
if (
|
|
682
|
-
let t = this.addConstraint(
|
|
683
|
-
|
|
1103
|
+
if (l === "<=" || l === "==") {
|
|
1104
|
+
let t = this.addConstraint(c.sub(e.mul(a)).le(u), l === "==" ? `${o}_le` : o);
|
|
1105
|
+
s.push(t);
|
|
684
1106
|
}
|
|
685
|
-
if (
|
|
686
|
-
let t = this.addConstraint(
|
|
687
|
-
|
|
1107
|
+
if (l === ">=" || l === "==") {
|
|
1108
|
+
let t = this.addConstraint(c.add(e.mul(a)).ge(u), l === "==" ? `${o}_ge` : o);
|
|
1109
|
+
s.push(t);
|
|
688
1110
|
}
|
|
689
1111
|
}
|
|
690
|
-
return
|
|
1112
|
+
return s;
|
|
1113
|
+
}
|
|
1114
|
+
addIndicator(e, t, n = {}) {
|
|
1115
|
+
return this.indicator(e, t, n);
|
|
691
1116
|
}
|
|
692
1117
|
toLpString() {
|
|
693
|
-
let { lpString: e } =
|
|
1118
|
+
let { lpString: e } = B({
|
|
694
1119
|
name: this.name,
|
|
695
1120
|
sense: this.sense,
|
|
696
1121
|
objective: this.objective,
|
|
@@ -701,7 +1126,7 @@ var U = class {
|
|
|
701
1126
|
}
|
|
702
1127
|
async optimize(e, t) {
|
|
703
1128
|
let n, r;
|
|
704
|
-
if (e && typeof e == "object" && "solve" in e && typeof e.solve == "function" ? (n = e, r = t || {}) : typeof e == "function" ? (n = new e(t), r = t || {}) : typeof e == "string" ? (n =
|
|
1129
|
+
if (e && typeof e == "object" && "solve" in e && typeof e.solve == "function" ? (n = e, r = t || {}) : typeof e == "function" ? (n = new e(t), r = t || {}) : typeof e == "string" ? (n = f(e, t), r = t || {}) : (r = { ...e }, r.solver ? (n = f(r.solver, r), delete r.solver) : n = this.solver || f()), this.objective instanceof D && this.objective.quadTerms.size > 0 && n.capabilities?.supportsQP === !1) throw Error(`Solver "${n.name}" does not support quadratic objectives (QP). Please use a QP-capable solver such as HiGHS or Clarabel.`);
|
|
705
1130
|
let i = {
|
|
706
1131
|
name: this.name,
|
|
707
1132
|
sense: this.sense,
|
|
@@ -710,33 +1135,43 @@ var U = class {
|
|
|
710
1135
|
variables: this.variables,
|
|
711
1136
|
logicalConstraints: this.logicalConstraints,
|
|
712
1137
|
boolVars: this.boolVars
|
|
713
|
-
}, a =
|
|
1138
|
+
}, a = B(i), o = await n.solve(i, a, r);
|
|
714
1139
|
this.runTime = o.runTime ?? 0, this.status = o.status, this.objectiveValue = o.objectiveValue ?? null;
|
|
715
|
-
let
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
1140
|
+
let s = {}, c = {}, l = {}, u = {};
|
|
1141
|
+
this.values.clear();
|
|
1142
|
+
for (let e of this.variables) e.value = null, e.reducedCost = null;
|
|
1143
|
+
for (let e of this.boolVars) e.value = null;
|
|
1144
|
+
for (let e of this.constraints) e.dual = null, e.slack = null;
|
|
1145
|
+
if (a?.nameToVar) for (let e of a.nameToVar.values()) e.value = null, e.reducedCost = null;
|
|
1146
|
+
if (a?.nameToConstraint) for (let e of a.nameToConstraint.values()) e.dual = null, e.slack = null;
|
|
1147
|
+
if (o.values && o.status !== "Infeasible" && o.status !== "Unbounded") {
|
|
1148
|
+
for (let [e, t] of Object.entries(o.values)) if (typeof t == "number" && !Number.isNaN(t)) {
|
|
1149
|
+
this.values.set(e, t);
|
|
1150
|
+
let n = this.getVarByName(e) || a.nameToVar.get(e);
|
|
1151
|
+
n && (n.value = t, s[n.name] = t);
|
|
1152
|
+
let r = this.boolVars.find((t) => t.name === e);
|
|
1153
|
+
r && (r.value = !!t);
|
|
1154
|
+
}
|
|
720
1155
|
}
|
|
721
1156
|
if (o.reducedCosts) for (let [e, t] of Object.entries(o.reducedCosts)) {
|
|
722
1157
|
let n = this.getVarByName(e) || a.nameToVar.get(e);
|
|
723
|
-
n && (n.reducedCost = t,
|
|
1158
|
+
n && (n.reducedCost = t, l[n.name] = t);
|
|
724
1159
|
}
|
|
725
1160
|
if (o.duals) for (let [e, t] of Object.entries(o.duals)) {
|
|
726
1161
|
let n = this.getConstraintByName(e) || a.nameToConstraint.get(e);
|
|
727
|
-
n && (n.dual = t,
|
|
1162
|
+
n && (n.dual = t, c[n.name] = t);
|
|
728
1163
|
}
|
|
729
1164
|
if (o.slacks) for (let [e, t] of Object.entries(o.slacks)) {
|
|
730
1165
|
let n = this.getConstraintByName(e) || a.nameToConstraint.get(e);
|
|
731
|
-
n && (n.slack = t,
|
|
1166
|
+
n && (n.slack = t, u[n.name] = t);
|
|
732
1167
|
}
|
|
733
1168
|
return this.solution = {
|
|
734
1169
|
status: this.status,
|
|
735
1170
|
objectiveValue: this.objectiveValue,
|
|
736
|
-
values:
|
|
737
|
-
duals:
|
|
738
|
-
reducedCosts:
|
|
739
|
-
slacks:
|
|
1171
|
+
values: s,
|
|
1172
|
+
duals: c,
|
|
1173
|
+
reducedCosts: l,
|
|
1174
|
+
slacks: u,
|
|
740
1175
|
runTime: this.runTime,
|
|
741
1176
|
raw: o.raw
|
|
742
1177
|
}, this.status;
|
|
@@ -746,7 +1181,7 @@ var U = class {
|
|
|
746
1181
|
}
|
|
747
1182
|
async check(e, t) {
|
|
748
1183
|
let n, r;
|
|
749
|
-
if (e && typeof e == "object" && "solve" in e && typeof e.solve == "function" ? (n = e, r = t || {}) : typeof e == "function" ? (n = new e(t), r = t || {}) : typeof e == "string" ? (n =
|
|
1184
|
+
if (e && typeof e == "object" && "solve" in e && typeof e.solve == "function" ? (n = e, r = t || {}) : typeof e == "function" ? (n = new e(t), r = t || {}) : typeof e == "string" ? (n = f(e, t), r = t || {}) : (r = { ...e }, r.solver ? (n = f(r.solver, r), delete r.solver) : n = this.solver || f()), this.logicalConstraints.length > 0 && n.capabilities?.supportsSMT !== !0) throw Error(`Solver "${n.name}" does not support SMT / logical constraints (or, implies, not, xor). Please use an SMT-capable solver such as Z3.`);
|
|
750
1185
|
if (typeof n.check == "function") {
|
|
751
1186
|
let e = await n.check({
|
|
752
1187
|
name: this.name,
|
|
@@ -755,21 +1190,26 @@ var U = class {
|
|
|
755
1190
|
constraints: this.constraints,
|
|
756
1191
|
logicalConstraints: this.logicalConstraints
|
|
757
1192
|
}, r);
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
1193
|
+
this.status = e.status, this.runTime = e.runTime ?? 0, this.unsatCore = e.unsatCore || [], this.values.clear();
|
|
1194
|
+
for (let e of this.variables) e.value = null;
|
|
1195
|
+
for (let e of this.boolVars) e.value = null;
|
|
1196
|
+
if (e.values && e.status === "Sat") for (let [t, n] of Object.entries(e.values)) {
|
|
1197
|
+
this.values.set(t, n);
|
|
1198
|
+
let e = this.getVarByName(t);
|
|
1199
|
+
e && typeof n == "number" && (e.value = n);
|
|
1200
|
+
let r = this.boolVars.find((e) => e.name === t);
|
|
1201
|
+
r && (r.value = !!n);
|
|
765
1202
|
}
|
|
766
1203
|
return e;
|
|
767
1204
|
}
|
|
768
1205
|
let i = this.objective, a = this.sense;
|
|
769
1206
|
try {
|
|
770
|
-
this.objective = new
|
|
1207
|
+
this.objective = new O(), this.sense = "Minimize";
|
|
771
1208
|
let e = await this.optimize(n, r), t = e === "Optimal" || e === "Feasible", i = e === "Infeasible", a = {};
|
|
772
|
-
|
|
1209
|
+
if (t) {
|
|
1210
|
+
for (let e of this.variables) e.value !== null && (a[e.name] = e.value);
|
|
1211
|
+
for (let e of this.boolVars) e.value !== null && (a[e.name] = e.value);
|
|
1212
|
+
}
|
|
773
1213
|
return {
|
|
774
1214
|
status: t ? "Sat" : i ? "Unsat" : "Unknown",
|
|
775
1215
|
values: a,
|
|
@@ -779,131 +1219,47 @@ var U = class {
|
|
|
779
1219
|
this.objective = i, this.sense = a;
|
|
780
1220
|
}
|
|
781
1221
|
}
|
|
782
|
-
}, W = "Minimize", G = "Maximize", K = "Continuous", q = "Integer", J = "Binary", Y = {
|
|
783
|
-
Optimal: "Optimal",
|
|
784
|
-
Feasible: "Feasible",
|
|
785
|
-
Infeasible: "Infeasible",
|
|
786
|
-
Unbounded: "Unbounded",
|
|
787
|
-
TimeLimit: "Not Solved (Time Limit)",
|
|
788
|
-
IterationLimit: "Not Solved (Iteration Limit)",
|
|
789
|
-
Error: "Error",
|
|
790
|
-
NotSolved: "Not Solved",
|
|
791
|
-
Sat: "Sat",
|
|
792
|
-
Unsat: "Unsat",
|
|
793
|
-
Unknown: "Unknown"
|
|
794
|
-
}, X = class e extends N {
|
|
795
|
-
constructor(e, t, n, r = "Continuous") {
|
|
796
|
-
super({
|
|
797
|
-
name: e,
|
|
798
|
-
lb: t === void 0 ? 0 : t,
|
|
799
|
-
ub: n === void 0 ? Infinity : n,
|
|
800
|
-
type: r
|
|
801
|
-
});
|
|
802
|
-
}
|
|
803
|
-
static dicts(t, n, r, i, a = "Continuous") {
|
|
804
|
-
let o = {};
|
|
805
|
-
for (let s of n) {
|
|
806
|
-
let n = `${t}_${s}`;
|
|
807
|
-
o[s] = new e(n, r, i, a);
|
|
808
|
-
}
|
|
809
|
-
return o;
|
|
810
|
-
}
|
|
811
|
-
};
|
|
812
|
-
function Z(e) {
|
|
813
|
-
return e == null ? null : typeof e == "number" ? e : e.value;
|
|
814
|
-
}
|
|
815
|
-
var ne = class {
|
|
816
|
-
model;
|
|
817
|
-
constructor(e = "NoName", t = W) {
|
|
818
|
-
this.model = new U({
|
|
819
|
-
name: e,
|
|
820
|
-
sense: t
|
|
821
|
-
});
|
|
822
|
-
}
|
|
823
|
-
get name() {
|
|
824
|
-
return this.model.name;
|
|
825
|
-
}
|
|
826
|
-
get sense() {
|
|
827
|
-
return this.model.sense;
|
|
828
|
-
}
|
|
829
|
-
set sense(e) {
|
|
830
|
-
this.model.sense = e;
|
|
831
|
-
}
|
|
832
|
-
get objective() {
|
|
833
|
-
return this.model.objective;
|
|
834
|
-
}
|
|
835
|
-
get variables() {
|
|
836
|
-
return this.model.variables;
|
|
837
|
-
}
|
|
838
|
-
get constraints() {
|
|
839
|
-
return this.model.constraints;
|
|
840
|
-
}
|
|
841
|
-
get status() {
|
|
842
|
-
return this.model.status;
|
|
843
|
-
}
|
|
844
|
-
get objectiveValue() {
|
|
845
|
-
return this.model.objectiveValue;
|
|
846
|
-
}
|
|
847
|
-
addVariable(e) {
|
|
848
|
-
return this.model.getVarByName(e.name) || (this.model.variables.push(e), this.model.varMapByName.set(e.name, e)), e;
|
|
849
|
-
}
|
|
850
|
-
setObjective(e) {
|
|
851
|
-
if (typeof e == "object" && e) {
|
|
852
|
-
if ("terms" in e) for (let [t] of e.terms) this.addVariable(t);
|
|
853
|
-
else e instanceof N && this.addVariable(e);
|
|
854
|
-
}
|
|
855
|
-
this.model.setObjective(e);
|
|
856
|
-
}
|
|
857
|
-
addConstraint(e, t) {
|
|
858
|
-
if (typeof e == "object" && e && "lhs" in e) for (let [t] of e.lhs.terms) this.addVariable(t);
|
|
859
|
-
return this.model.addConstraint(e, t);
|
|
860
|
-
}
|
|
861
|
-
add(e, t) {
|
|
862
|
-
typeof e == "string" ? /(<=|>=|==|=<|=>|=)/.test(e) ? this.addConstraint(e, t) : this.setObjective(e) : e instanceof r ? this.addConstraint(e, t) : this.setObjective(e);
|
|
863
|
-
}
|
|
864
|
-
async solve(e, t) {
|
|
865
|
-
return this.model.optimize(e, t);
|
|
866
|
-
}
|
|
867
|
-
toLpString() {
|
|
868
|
-
return this.model.toLpString();
|
|
869
|
-
}
|
|
870
|
-
}, Q = "Minimize", $ = "Maximize", re = "Binary", ie = "Integer", ae = "Continuous";
|
|
871
|
-
function oe(e) {
|
|
872
|
-
return {
|
|
873
|
-
expr: e,
|
|
874
|
-
sense: $
|
|
875
|
-
};
|
|
876
|
-
}
|
|
877
|
-
function se(e) {
|
|
878
|
-
return {
|
|
879
|
-
expr: e,
|
|
880
|
-
sense: Q
|
|
881
|
-
};
|
|
882
|
-
}
|
|
883
|
-
var ce = class extends U {
|
|
884
|
-
constructor(e = "MipModel", t = Q) {
|
|
885
|
-
super({
|
|
886
|
-
name: e,
|
|
887
|
-
sense: t
|
|
888
|
-
});
|
|
889
|
-
}
|
|
890
|
-
add_var(e = {}) {
|
|
891
|
-
return this.addVar({
|
|
892
|
-
name: e.name,
|
|
893
|
-
type: e.var_type,
|
|
894
|
-
lb: e.lb,
|
|
895
|
-
ub: e.ub
|
|
896
|
-
});
|
|
897
|
-
}
|
|
898
|
-
set objective_spec(e) {
|
|
899
|
-
this.setObjective(e.expr, e.sense);
|
|
900
|
-
}
|
|
901
|
-
get objective_value() {
|
|
902
|
-
return this.objectiveValue;
|
|
903
|
-
}
|
|
904
|
-
add_constr(e, t) {
|
|
905
|
-
return this.addConstraint(e, t);
|
|
906
|
-
}
|
|
907
1222
|
};
|
|
1223
|
+
w(/* @__PURE__ */ S({
|
|
1224
|
+
BoolExpr: () => i,
|
|
1225
|
+
BoolOp: () => o,
|
|
1226
|
+
BoolVar: () => n,
|
|
1227
|
+
Constraint: () => c,
|
|
1228
|
+
HiGHS: () => K,
|
|
1229
|
+
HighsSolver: () => G,
|
|
1230
|
+
LinExpr: () => O,
|
|
1231
|
+
MockSolver: () => X,
|
|
1232
|
+
Model: () => $,
|
|
1233
|
+
OFFICIAL_HIGHS_CDN_WASM_URL: () => b,
|
|
1234
|
+
QuadExpr: () => D,
|
|
1235
|
+
Var: () => j,
|
|
1236
|
+
and: () => e,
|
|
1237
|
+
c: () => L,
|
|
1238
|
+
dot: () => A,
|
|
1239
|
+
expr: () => R,
|
|
1240
|
+
generateLpString: () => B,
|
|
1241
|
+
getHighs: () => g,
|
|
1242
|
+
getHighsWasmUrl: () => v,
|
|
1243
|
+
getSolver: () => f,
|
|
1244
|
+
implies: () => a,
|
|
1245
|
+
isValidWasmHeader: () => h,
|
|
1246
|
+
listAvailableSolvers: () => u,
|
|
1247
|
+
mapHighsStatus: () => W,
|
|
1248
|
+
not: () => s,
|
|
1249
|
+
or: () => t,
|
|
1250
|
+
parseConstraint: () => F,
|
|
1251
|
+
parseExpr: () => P,
|
|
1252
|
+
probeWasmUrl: () => p,
|
|
1253
|
+
registerHighsSolver: () => q,
|
|
1254
|
+
registerMockSolver: () => Z,
|
|
1255
|
+
registerSolver: () => d,
|
|
1256
|
+
resolveBrowserWasmUrl: () => _,
|
|
1257
|
+
setDefaultSolver: () => l,
|
|
1258
|
+
setHighsWasmUrl: () => y,
|
|
1259
|
+
solveLp: () => U,
|
|
1260
|
+
solveLpWithHighs: () => m,
|
|
1261
|
+
sum: () => k,
|
|
1262
|
+
xor: () => r
|
|
1263
|
+
}), Q);
|
|
908
1264
|
//#endregion
|
|
909
|
-
export {
|
|
1265
|
+
export { i as BoolExpr, o as BoolOp, n as BoolVar, c as Constraint, K as HiGHS, G as HighsSolver, O as LinExpr, X as MockSolver, $ as Model, b as OFFICIAL_HIGHS_CDN_WASM_URL, D as QuadExpr, j as Var, e as and, L as c, A as dot, R as expr, B as generateLpString, g as getHighs, v as getHighsWasmUrl, f as getSolver, a as implies, h as isValidWasmHeader, u as listAvailableSolvers, T as normalizeSense, s as not, t as or, F as parseConstraint, P as parseExpr, p as probeWasmUrl, d as registerSolver, _ as resolveBrowserWasmUrl, l as setDefaultSolver, y as setHighsWasmUrl, m as solveLpWithHighs, k as sum, r as xor };
|