@ohtaman/washi 0.1.2 → 0.2.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 +76 -2
- package/README.md +76 -2
- package/README.zh-CN.md +76 -2
- 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 +1057 -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 +7528 -0
- package/dist/browser/solvers/z3.min.js +5 -0
- package/dist/browser/washi.js +142 -476
- package/dist/browser/washi.min.js +3 -3
- package/dist/lib/async-mutex-Duo4jwzn.js +195 -0
- package/dist/lib/constraint-XWdn0ID9.js +93 -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 +153 -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 +451 -2
- package/dist/lib/washi.js +400 -91
- package/dist/types/index.d.ts +2 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/modeler/index.d.ts +1 -1
- package/dist/types/modeler/index.d.ts.map +1 -1
- package/dist/types/modeler/model.d.ts +1 -1
- 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/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 +44 -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/package.json +19 -5
- 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/browser/{highs-browser-runtime-D13gHOT5.js → browser-runtime-D13gHOT5.js} +0 -0
package/dist/lib/washi.js
CHANGED
|
@@ -1,12 +1,29 @@
|
|
|
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-XWdn0ID9.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
|
|
4
21
|
//#region src/modeler/quad-expr.ts
|
|
5
|
-
function
|
|
22
|
+
function T(e, t) {
|
|
6
23
|
let n = e.id, r = t.id;
|
|
7
24
|
return n <= r ? `${n}:${r}` : `${r}:${n}`;
|
|
8
25
|
}
|
|
9
|
-
var
|
|
26
|
+
var E = class e {
|
|
10
27
|
linearTerms;
|
|
11
28
|
quadTerms;
|
|
12
29
|
constant;
|
|
@@ -19,7 +36,7 @@ var O = class e {
|
|
|
19
36
|
return new e(this.linearTerms, this.quadTerms, this.constant);
|
|
20
37
|
}
|
|
21
38
|
getQuadCoeff(e, t) {
|
|
22
|
-
let n =
|
|
39
|
+
let n = T(e, t), r = this.quadTerms.get(n);
|
|
23
40
|
return r ? r.coeff : 0;
|
|
24
41
|
}
|
|
25
42
|
add(t) {
|
|
@@ -92,14 +109,14 @@ var O = class e {
|
|
|
92
109
|
return this.value;
|
|
93
110
|
}
|
|
94
111
|
static fromProduct(t, n, r = 1) {
|
|
95
|
-
let i = new e(), a =
|
|
112
|
+
let i = new e(), a = T(t, n);
|
|
96
113
|
return i.quadTerms.set(a, {
|
|
97
114
|
var1: t.id <= n.id ? t : n,
|
|
98
115
|
var2: t.id <= n.id ? n : t,
|
|
99
116
|
coeff: r
|
|
100
117
|
}), i;
|
|
101
118
|
}
|
|
102
|
-
},
|
|
119
|
+
}, D = class e {
|
|
103
120
|
terms;
|
|
104
121
|
constant;
|
|
105
122
|
constructor(e = /* @__PURE__ */ new Map(), t = 0) {
|
|
@@ -109,7 +126,7 @@ var O = class e {
|
|
|
109
126
|
return new e(this.terms, this.constant);
|
|
110
127
|
}
|
|
111
128
|
add(e) {
|
|
112
|
-
if (e instanceof
|
|
129
|
+
if (e instanceof E) return e.add(this);
|
|
113
130
|
let t = this.clone();
|
|
114
131
|
if (typeof e == "number") t.constant += e;
|
|
115
132
|
else if ("terms" in e) {
|
|
@@ -125,7 +142,7 @@ var O = class e {
|
|
|
125
142
|
return t;
|
|
126
143
|
}
|
|
127
144
|
sub(e) {
|
|
128
|
-
return e instanceof
|
|
145
|
+
return e instanceof E ? e.neg().add(this) : typeof e == "number" ? this.add(-e) : ("terms" in e, this.add(e.mul(-1)));
|
|
129
146
|
}
|
|
130
147
|
mul(t) {
|
|
131
148
|
if (typeof t == "number") {
|
|
@@ -136,9 +153,9 @@ var O = class e {
|
|
|
136
153
|
}
|
|
137
154
|
return n;
|
|
138
155
|
}
|
|
139
|
-
let n = new
|
|
156
|
+
let n = new E();
|
|
140
157
|
Math.abs(this.constant) >= 1e-12 && n.linearTerms.set(t, this.constant);
|
|
141
|
-
for (let [e, r] of this.terms) n = n.add(
|
|
158
|
+
for (let [e, r] of this.terms) n = n.add(E.fromProduct(e, t, r));
|
|
142
159
|
return n;
|
|
143
160
|
}
|
|
144
161
|
div(e) {
|
|
@@ -177,11 +194,11 @@ var O = class e {
|
|
|
177
194
|
equalTo(e, t) {
|
|
178
195
|
return this.eq(e, t);
|
|
179
196
|
}
|
|
180
|
-
toConstraint(t, n,
|
|
181
|
-
let
|
|
182
|
-
typeof n == "number" ?
|
|
183
|
-
let
|
|
184
|
-
return
|
|
197
|
+
toConstraint(t, n, r) {
|
|
198
|
+
let i = this.clone(), a = 0;
|
|
199
|
+
typeof n == "number" ? a = n : "terms" in n ? (i = i.sub(new e(n.terms, 0)), a = n.constant) : i = i.sub(n);
|
|
200
|
+
let o = a - i.constant;
|
|
201
|
+
return i.constant = 0, new c(i, t, o, r);
|
|
185
202
|
}
|
|
186
203
|
toString() {
|
|
187
204
|
let e = [], t = !0;
|
|
@@ -196,7 +213,7 @@ var O = class e {
|
|
|
196
213
|
return e.join(" ") || "0";
|
|
197
214
|
}
|
|
198
215
|
};
|
|
199
|
-
function
|
|
216
|
+
function O(e, t) {
|
|
200
217
|
let n = /* @__PURE__ */ new Map(), r = 0, i = 0;
|
|
201
218
|
for (let a of e) {
|
|
202
219
|
let e = t ? t(a, i++) : a;
|
|
@@ -214,9 +231,9 @@ function A(e, t) {
|
|
|
214
231
|
}
|
|
215
232
|
}
|
|
216
233
|
for (let [e, t] of n) Math.abs(t) < 1e-12 && n.delete(e);
|
|
217
|
-
return new
|
|
234
|
+
return new D(n, r);
|
|
218
235
|
}
|
|
219
|
-
var
|
|
236
|
+
var k = O, A = O, ie = 0, j = class e {
|
|
220
237
|
id;
|
|
221
238
|
name;
|
|
222
239
|
type;
|
|
@@ -225,7 +242,7 @@ var te = A, j = A, M = 0, N = class e {
|
|
|
225
242
|
value = null;
|
|
226
243
|
reducedCost = null;
|
|
227
244
|
constructor(e = {}) {
|
|
228
|
-
this.id = ++
|
|
245
|
+
this.id = ++ie, this.name = e.name || `x_${this.id}`, this.type = e.type || "Continuous", 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);
|
|
229
246
|
}
|
|
230
247
|
get x() {
|
|
231
248
|
return this.value;
|
|
@@ -234,39 +251,39 @@ var te = A, j = A, M = 0, N = class e {
|
|
|
234
251
|
return this.value;
|
|
235
252
|
}
|
|
236
253
|
mul(t) {
|
|
237
|
-
if (typeof t == "number") return new
|
|
238
|
-
if (t instanceof e) return
|
|
239
|
-
let n = new
|
|
254
|
+
if (typeof t == "number") return new D(/* @__PURE__ */ new Map([[this, t]]), 0);
|
|
255
|
+
if (t instanceof e) return E.fromProduct(this, t, 1);
|
|
256
|
+
let n = new E();
|
|
240
257
|
Math.abs(t.constant) >= 1e-12 && n.linearTerms.set(this, t.constant);
|
|
241
258
|
for (let [e, r] of t.terms) {
|
|
242
|
-
let t =
|
|
259
|
+
let t = E.fromProduct(this, e, r);
|
|
243
260
|
n = n.add(t);
|
|
244
261
|
}
|
|
245
262
|
return n;
|
|
246
263
|
}
|
|
247
264
|
add(e) {
|
|
248
|
-
return e instanceof
|
|
265
|
+
return e instanceof E ? e.add(this) : new D(/* @__PURE__ */ new Map([[this, 1]]), 0).add(e);
|
|
249
266
|
}
|
|
250
267
|
sub(e) {
|
|
251
|
-
return e instanceof
|
|
268
|
+
return e instanceof E ? e.neg().add(this) : new D(/* @__PURE__ */ new Map([[this, 1]]), 0).sub(e);
|
|
252
269
|
}
|
|
253
270
|
neg() {
|
|
254
271
|
return this.mul(-1);
|
|
255
272
|
}
|
|
256
273
|
le(e, t) {
|
|
257
|
-
return new
|
|
274
|
+
return new D(/* @__PURE__ */ new Map([[this, 1]]), 0).le(e, t);
|
|
258
275
|
}
|
|
259
276
|
lessThanOrEqual(e, t) {
|
|
260
277
|
return this.le(e, t);
|
|
261
278
|
}
|
|
262
279
|
ge(e, t) {
|
|
263
|
-
return new
|
|
280
|
+
return new D(/* @__PURE__ */ new Map([[this, 1]]), 0).ge(e, t);
|
|
264
281
|
}
|
|
265
282
|
greaterThanOrEqual(e, t) {
|
|
266
283
|
return this.ge(e, t);
|
|
267
284
|
}
|
|
268
285
|
eq(e, t) {
|
|
269
|
-
return new
|
|
286
|
+
return new D(/* @__PURE__ */ new Map([[this, 1]]), 0).eq(e, t);
|
|
270
287
|
}
|
|
271
288
|
equalTo(e, t) {
|
|
272
289
|
return this.eq(e, t);
|
|
@@ -277,7 +294,7 @@ var te = A, j = A, M = 0, N = class e {
|
|
|
277
294
|
};
|
|
278
295
|
//#endregion
|
|
279
296
|
//#region src/modeler/parser.ts
|
|
280
|
-
function
|
|
297
|
+
function ae(e) {
|
|
281
298
|
let t = [], n = 0, r = e.length;
|
|
282
299
|
for (; n < r;) {
|
|
283
300
|
let i = e[n];
|
|
@@ -333,7 +350,7 @@ function P(e) {
|
|
|
333
350
|
}
|
|
334
351
|
return t;
|
|
335
352
|
}
|
|
336
|
-
var
|
|
353
|
+
var oe = class {
|
|
337
354
|
tokens;
|
|
338
355
|
pos = 0;
|
|
339
356
|
resolver;
|
|
@@ -395,12 +412,12 @@ var F = class {
|
|
|
395
412
|
let e = this.consume();
|
|
396
413
|
return this.resolveVariable(e.value).mul(t);
|
|
397
414
|
}
|
|
398
|
-
return new
|
|
415
|
+
return new D(/* @__PURE__ */ new Map(), t);
|
|
399
416
|
}
|
|
400
417
|
if (e.type === "IDENT") {
|
|
401
418
|
this.consume();
|
|
402
419
|
let t = this.resolveVariable(e.value);
|
|
403
|
-
return new
|
|
420
|
+
return new D(/* @__PURE__ */ new Map([[t, 1]]), 0);
|
|
404
421
|
}
|
|
405
422
|
if (e.type === "LPAREN") {
|
|
406
423
|
this.consume("LPAREN");
|
|
@@ -415,10 +432,10 @@ var F = class {
|
|
|
415
432
|
return t;
|
|
416
433
|
}
|
|
417
434
|
};
|
|
418
|
-
function
|
|
419
|
-
return new
|
|
435
|
+
function M(e, t) {
|
|
436
|
+
return new oe(ae(e), t).parseExpression();
|
|
420
437
|
}
|
|
421
|
-
function
|
|
438
|
+
function N(e, t, n) {
|
|
422
439
|
let r = e.match(/(<=|>=|==|=<|=>|=)/);
|
|
423
440
|
if (!r) throw Error(`Constraint must contain a comparison operator (<=, >=, ==, =): "${e}"`);
|
|
424
441
|
let i = r[0], a = r.index, o = e.substring(0, a).trim(), s = e.substring(a + i.length).trim(), c;
|
|
@@ -426,18 +443,18 @@ function L(e, t, n) {
|
|
|
426
443
|
else if (i === ">=" || i === "=>") c = ">=";
|
|
427
444
|
else if (i === "==" || i === "=") c = "==";
|
|
428
445
|
else throw Error(`Unsupported operator "${i}"`);
|
|
429
|
-
let l =
|
|
446
|
+
let l = M(o, t), u = M(s, t);
|
|
430
447
|
return c === "<=" ? l.le(u, n) : c === ">=" ? l.ge(u, n) : l.eq(u, n);
|
|
431
448
|
}
|
|
432
|
-
function
|
|
449
|
+
function P(e, t) {
|
|
433
450
|
let n = /* @__PURE__ */ new Map(), r = "";
|
|
434
451
|
for (let i = 0; i < e.length; i++) if (r += e[i], i < t.length) {
|
|
435
452
|
let e = t[i];
|
|
436
453
|
if (typeof e == "number") r += `(${e})`;
|
|
437
|
-
else if (e instanceof
|
|
454
|
+
else if (e instanceof j) {
|
|
438
455
|
let t = `__v_${i}__`;
|
|
439
456
|
n.set(t, e), r += t;
|
|
440
|
-
} else if (e instanceof
|
|
457
|
+
} else if (e instanceof D) {
|
|
441
458
|
`${i}`, r += `(${e.toString()})`;
|
|
442
459
|
for (let [t] of e.terms) n.set(t.name, t);
|
|
443
460
|
}
|
|
@@ -447,42 +464,42 @@ function R(e, t) {
|
|
|
447
464
|
resolver: (e) => n.get(e)
|
|
448
465
|
};
|
|
449
466
|
}
|
|
450
|
-
function
|
|
451
|
-
let { fullText: n, resolver: r } =
|
|
452
|
-
return
|
|
467
|
+
function se(e, ...t) {
|
|
468
|
+
let { fullText: n, resolver: r } = P(e, t);
|
|
469
|
+
return N(n, r);
|
|
453
470
|
}
|
|
454
|
-
function
|
|
455
|
-
let { fullText: n, resolver: r } =
|
|
456
|
-
return /(<=|>=|==|=<|=>|=)/.test(n) ?
|
|
471
|
+
function ce(e, ...t) {
|
|
472
|
+
let { fullText: n, resolver: r } = P(e, t);
|
|
473
|
+
return /(<=|>=|==|=<|=>|=)/.test(n) ? N(n, r) : M(n, r);
|
|
457
474
|
}
|
|
458
475
|
//#endregion
|
|
459
476
|
//#region src/modeler/lp-writer.ts
|
|
460
|
-
function
|
|
477
|
+
function le(e, t, n) {
|
|
461
478
|
let r = e.replace(/[^a-zA-Z0-9_]/g, "_");
|
|
462
479
|
return /^[0-9]/.test(r) && (r = `${t}_${r}`), (!r || r.length === 0) && (r = `${t}_${n}`), r;
|
|
463
480
|
}
|
|
464
|
-
function
|
|
481
|
+
function F(e) {
|
|
465
482
|
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
483
|
for (let e of i) {
|
|
467
|
-
let t =
|
|
484
|
+
let t = le(e.name, "x", e.id), n = t, r = 1;
|
|
468
485
|
for (; c.has(n);) n = `${t}_${r++}`;
|
|
469
486
|
c.add(n), o.set(e, n), a.set(n, e);
|
|
470
487
|
}
|
|
471
488
|
let l = /* @__PURE__ */ new Set(), u = /* @__PURE__ */ new Map();
|
|
472
489
|
for (let e of r) {
|
|
473
|
-
let t =
|
|
490
|
+
let t = le(e.name, "c", e.id), n = t, r = 1;
|
|
474
491
|
for (; l.has(n);) n = `${t}_${r++}`;
|
|
475
492
|
l.add(n), u.set(e, n), s.set(n, e);
|
|
476
493
|
}
|
|
477
494
|
let d = [];
|
|
478
495
|
d.push(t === "Maximize" ? "Maximize" : "Minimize");
|
|
479
|
-
let f = [], p = !0, m = n instanceof
|
|
496
|
+
let f = [], p = !0, m = n instanceof E ? n.linearTerms : n.terms;
|
|
480
497
|
if (m) for (let [e, t] of m) {
|
|
481
498
|
if (Math.abs(t) < 1e-12) continue;
|
|
482
499
|
let n = o.get(e), r = t >= 0 ? p ? "" : "+ " : "- ", i = Math.abs(t), a = i === 1 ? "" : `${i} `;
|
|
483
500
|
f.push(`${r}${a}${n}`), p = !1;
|
|
484
501
|
}
|
|
485
|
-
if (n instanceof
|
|
502
|
+
if (n instanceof E && n.quadTerms.size > 0) {
|
|
486
503
|
let e = [], t = !0;
|
|
487
504
|
for (let r of n.quadTerms.values()) {
|
|
488
505
|
if (Math.abs(r.coeff) < 1e-12) continue;
|
|
@@ -533,8 +550,237 @@ function H(e) {
|
|
|
533
550
|
};
|
|
534
551
|
}
|
|
535
552
|
//#endregion
|
|
553
|
+
//#region src/modeler/solvers/highs/worker-client.ts
|
|
554
|
+
var I = null, ue = 0, L = /* @__PURE__ */ new Map();
|
|
555
|
+
function de() {
|
|
556
|
+
if (typeof window > "u" || typeof Worker > "u") return null;
|
|
557
|
+
if (!I) try {
|
|
558
|
+
I = ee();
|
|
559
|
+
let e = I;
|
|
560
|
+
I.onmessage = (e) => {
|
|
561
|
+
let { type: t, id: n, result: r, runTime: i, error: a } = e.data, o = L.get(n);
|
|
562
|
+
o && (L.delete(n), t === "SOLVE_SUCCESS" ? o.resolve({
|
|
563
|
+
result: r,
|
|
564
|
+
runTime: i
|
|
565
|
+
}) : o.reject(Error(a || "Worker solve failed")));
|
|
566
|
+
};
|
|
567
|
+
let t = (t) => {
|
|
568
|
+
if (I === e) {
|
|
569
|
+
I = null, e.terminate();
|
|
570
|
+
for (let e of L.values()) e.reject(t);
|
|
571
|
+
L.clear();
|
|
572
|
+
}
|
|
573
|
+
};
|
|
574
|
+
I.onerror = (e) => t(/* @__PURE__ */ Error(`[WaSHI] HiGHS Worker failed to load or execute. Check Worker assets, CORS and CSP. ${e?.message || ""}`)), I.onmessageerror = () => t(/* @__PURE__ */ Error("[WaSHI] Could not deserialize the HiGHS Worker response."));
|
|
575
|
+
} catch {
|
|
576
|
+
I = null;
|
|
577
|
+
}
|
|
578
|
+
return I;
|
|
579
|
+
}
|
|
580
|
+
async function R(e, t = {}) {
|
|
581
|
+
let n = await _(t.wasmUrl), r = t.useWorker ?? typeof window < "u" ? de() : null;
|
|
582
|
+
if (!r) return m(e, t);
|
|
583
|
+
let i = {
|
|
584
|
+
...t,
|
|
585
|
+
wasmUrl: n
|
|
586
|
+
}, a = `req_${++ue}`;
|
|
587
|
+
return new Promise((t, n) => {
|
|
588
|
+
L.set(a, {
|
|
589
|
+
resolve: t,
|
|
590
|
+
reject: n
|
|
591
|
+
});
|
|
592
|
+
try {
|
|
593
|
+
r.postMessage({
|
|
594
|
+
type: "SOLVE",
|
|
595
|
+
id: a,
|
|
596
|
+
lpString: e,
|
|
597
|
+
options: i
|
|
598
|
+
});
|
|
599
|
+
} catch (e) {
|
|
600
|
+
L.delete(a), n(e);
|
|
601
|
+
}
|
|
602
|
+
});
|
|
603
|
+
}
|
|
604
|
+
//#endregion
|
|
605
|
+
//#region src/modeler/solvers/highs/solver.ts
|
|
606
|
+
function z(e) {
|
|
607
|
+
if (typeof e != "string") return "Unknown";
|
|
608
|
+
let t = e.trim();
|
|
609
|
+
if (!t) return "Unknown";
|
|
610
|
+
switch (t) {
|
|
611
|
+
case "Optimal": return "Optimal";
|
|
612
|
+
case "Infeasible": return "Infeasible";
|
|
613
|
+
case "Unbounded": return "Unbounded";
|
|
614
|
+
case "Primal infeasible or unbounded": return "Unknown";
|
|
615
|
+
case "Time limit reached":
|
|
616
|
+
case "TimeLimit": return "TimeLimit";
|
|
617
|
+
case "Iteration limit reached":
|
|
618
|
+
case "IterationLimit": return "IterationLimit";
|
|
619
|
+
case "Bound on objective reached":
|
|
620
|
+
case "Target for objective reached":
|
|
621
|
+
case "Feasible": return "Feasible";
|
|
622
|
+
case "Not Set": return "NotSolved";
|
|
623
|
+
case "Load error":
|
|
624
|
+
case "Model error":
|
|
625
|
+
case "Presolve error":
|
|
626
|
+
case "Solve error":
|
|
627
|
+
case "Postsolve error":
|
|
628
|
+
case "Error": return "Error";
|
|
629
|
+
case "Empty":
|
|
630
|
+
case "Unknown": return "Unknown";
|
|
631
|
+
}
|
|
632
|
+
let n = t.toLowerCase();
|
|
633
|
+
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";
|
|
634
|
+
}
|
|
635
|
+
var B = class e {
|
|
636
|
+
static capabilities = {
|
|
637
|
+
supportsMIP: !0,
|
|
638
|
+
supportsQP: !0
|
|
639
|
+
};
|
|
640
|
+
name = "HiGHS";
|
|
641
|
+
version = "1.15.3";
|
|
642
|
+
capabilities = e.capabilities;
|
|
643
|
+
options;
|
|
644
|
+
constructor(e = {}) {
|
|
645
|
+
this.options = e;
|
|
646
|
+
}
|
|
647
|
+
async solve(e, t, n = {}) {
|
|
648
|
+
let r = {
|
|
649
|
+
...this.options,
|
|
650
|
+
...n
|
|
651
|
+
}, { lpString: i, nameToVar: a, nameToConstraint: o } = t, { result: s, runTime: c } = await R(i, r), l = z(s?.Status), u = s.ObjectiveValue, d = typeof u == "number" ? u + e.objective.constant : null, f = {}, p = {}, m = {}, h = {};
|
|
652
|
+
if (s.Columns) for (let [e, t] of Object.entries(s.Columns)) {
|
|
653
|
+
let n = a.get(e);
|
|
654
|
+
if (n) {
|
|
655
|
+
let e = Math.abs(t.Primal) < 1e-9 ? 0 : t.Primal;
|
|
656
|
+
f[n.name] = e, t.Dual !== void 0 && (m[n.name] = Math.abs(t.Dual) < 1e-9 ? 0 : t.Dual);
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
if (s.Rows) {
|
|
660
|
+
let e = Array.isArray(s.Rows) ? s.Rows : Object.values(s.Rows);
|
|
661
|
+
for (let t of e) {
|
|
662
|
+
let e = t.Name, n = o.get(e);
|
|
663
|
+
if (n && (t.Dual !== void 0 && (p[n.name] = Math.abs(t.Dual) < 1e-9 ? 0 : t.Dual), t.Primal !== void 0)) {
|
|
664
|
+
let e = n.rhs - t.Primal;
|
|
665
|
+
h[n.name] = Math.abs(e) < 1e-9 ? 0 : e;
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
return {
|
|
670
|
+
status: l,
|
|
671
|
+
objectiveValue: d,
|
|
672
|
+
values: f,
|
|
673
|
+
reducedCosts: m,
|
|
674
|
+
duals: p,
|
|
675
|
+
slacks: h,
|
|
676
|
+
runTime: c,
|
|
677
|
+
raw: s
|
|
678
|
+
};
|
|
679
|
+
}
|
|
680
|
+
}, V = B;
|
|
681
|
+
function H() {
|
|
682
|
+
d("highs", (e) => new B(e)), l((e) => new B(e));
|
|
683
|
+
}
|
|
684
|
+
H();
|
|
685
|
+
//#endregion
|
|
686
|
+
//#region src/modeler/solvers/highs/index.ts
|
|
687
|
+
var U = /* @__PURE__ */ S({
|
|
688
|
+
HiGHS: () => V,
|
|
689
|
+
HighsSolver: () => B,
|
|
690
|
+
OFFICIAL_HIGHS_CDN_WASM_URL: () => b,
|
|
691
|
+
getHighs: () => g,
|
|
692
|
+
getHighsWasmUrl: () => v,
|
|
693
|
+
isValidWasmHeader: () => h,
|
|
694
|
+
mapHighsStatus: () => z,
|
|
695
|
+
probeWasmUrl: () => p,
|
|
696
|
+
registerHighsSolver: () => H,
|
|
697
|
+
resolveBrowserWasmUrl: () => _,
|
|
698
|
+
setHighsWasmUrl: () => y,
|
|
699
|
+
solveLp: () => R,
|
|
700
|
+
solveLpWithHighs: () => m
|
|
701
|
+
});
|
|
702
|
+
import * as fe from "./highs-worker-factory.js";
|
|
703
|
+
w(U, fe);
|
|
704
|
+
import * as pe from "./highs-assets.js";
|
|
705
|
+
w(U, pe);
|
|
706
|
+
//#endregion
|
|
707
|
+
//#region src/modeler/solvers/highs.ts
|
|
708
|
+
var W = /* @__PURE__ */ S({
|
|
709
|
+
HiGHS: () => V,
|
|
710
|
+
HighsSolver: () => B,
|
|
711
|
+
OFFICIAL_HIGHS_CDN_WASM_URL: () => b,
|
|
712
|
+
getHighs: () => g,
|
|
713
|
+
getHighsWasmUrl: () => v,
|
|
714
|
+
isValidWasmHeader: () => h,
|
|
715
|
+
mapHighsStatus: () => z,
|
|
716
|
+
probeWasmUrl: () => p,
|
|
717
|
+
registerHighsSolver: () => H,
|
|
718
|
+
resolveBrowserWasmUrl: () => _,
|
|
719
|
+
setHighsWasmUrl: () => y,
|
|
720
|
+
solveLp: () => R,
|
|
721
|
+
solveLpWithHighs: () => m
|
|
722
|
+
});
|
|
723
|
+
w(W, U);
|
|
724
|
+
//#endregion
|
|
725
|
+
//#region src/modeler/solvers/mock.ts
|
|
726
|
+
var G = class {
|
|
727
|
+
name;
|
|
728
|
+
capabilities;
|
|
729
|
+
options;
|
|
730
|
+
constructor(e = {}) {
|
|
731
|
+
this.name = e.name || "MockSolver", this.capabilities = e.capabilities || {
|
|
732
|
+
supportsMIP: !0,
|
|
733
|
+
supportsQP: !0
|
|
734
|
+
}, this.options = e;
|
|
735
|
+
}
|
|
736
|
+
async solve(e, t, n = {}) {
|
|
737
|
+
let r = {
|
|
738
|
+
...this.options,
|
|
739
|
+
...n
|
|
740
|
+
};
|
|
741
|
+
return r.delayMs && r.delayMs > 0 && await new Promise((e) => setTimeout(e, r.delayMs)), {
|
|
742
|
+
status: r.status || "Optimal",
|
|
743
|
+
objectiveValue: r.objectiveValue ?? 0,
|
|
744
|
+
values: r.values || {},
|
|
745
|
+
reducedCosts: r.reducedCosts,
|
|
746
|
+
duals: r.duals,
|
|
747
|
+
slacks: r.slacks,
|
|
748
|
+
runTime: .001,
|
|
749
|
+
raw: { mock: !0 }
|
|
750
|
+
};
|
|
751
|
+
}
|
|
752
|
+
};
|
|
753
|
+
function K() {
|
|
754
|
+
d("mock", (e) => new G(e));
|
|
755
|
+
}
|
|
756
|
+
K();
|
|
757
|
+
//#endregion
|
|
758
|
+
//#region src/modeler/solvers/index.ts
|
|
759
|
+
var q = /* @__PURE__ */ S({
|
|
760
|
+
HiGHS: () => V,
|
|
761
|
+
HighsSolver: () => B,
|
|
762
|
+
MockSolver: () => G,
|
|
763
|
+
OFFICIAL_HIGHS_CDN_WASM_URL: () => b,
|
|
764
|
+
getHighs: () => g,
|
|
765
|
+
getHighsWasmUrl: () => v,
|
|
766
|
+
getSolver: () => f,
|
|
767
|
+
isValidWasmHeader: () => h,
|
|
768
|
+
listAvailableSolvers: () => u,
|
|
769
|
+
mapHighsStatus: () => z,
|
|
770
|
+
probeWasmUrl: () => p,
|
|
771
|
+
registerHighsSolver: () => H,
|
|
772
|
+
registerMockSolver: () => K,
|
|
773
|
+
registerSolver: () => d,
|
|
774
|
+
resolveBrowserWasmUrl: () => _,
|
|
775
|
+
setDefaultSolver: () => l,
|
|
776
|
+
setHighsWasmUrl: () => y,
|
|
777
|
+
solveLp: () => R,
|
|
778
|
+
solveLpWithHighs: () => m
|
|
779
|
+
});
|
|
780
|
+
w(q, W);
|
|
781
|
+
//#endregion
|
|
536
782
|
//#region src/modeler/model.ts
|
|
537
|
-
var
|
|
783
|
+
var J = class {
|
|
538
784
|
name;
|
|
539
785
|
sense;
|
|
540
786
|
objective;
|
|
@@ -551,8 +797,12 @@ var U = class {
|
|
|
551
797
|
runTime = 0;
|
|
552
798
|
solution = null;
|
|
553
799
|
solver = null;
|
|
554
|
-
constructor(e = {}) {
|
|
555
|
-
|
|
800
|
+
constructor(e = {}, t) {
|
|
801
|
+
let n;
|
|
802
|
+
n = typeof e == "string" ? {
|
|
803
|
+
...t,
|
|
804
|
+
name: e
|
|
805
|
+
} : e, this.name = n.name || "OptimizationModel", this.sense = n.sense || "Minimize", this.objective = new D(), n.solver && (this.solver = f(n.solver));
|
|
556
806
|
}
|
|
557
807
|
get vars() {
|
|
558
808
|
return this.variables;
|
|
@@ -574,7 +824,7 @@ var U = class {
|
|
|
574
824
|
lb: n,
|
|
575
825
|
ub: r
|
|
576
826
|
} : e || {};
|
|
577
|
-
let a = new
|
|
827
|
+
let a = new j(i);
|
|
578
828
|
if (this.varMapByName.has(a.name)) throw Error(`Variable with name '${a.name}' already exists in model`);
|
|
579
829
|
return this.variables.push(a), this.varMapByName.set(a.name, a), a;
|
|
580
830
|
}
|
|
@@ -629,7 +879,7 @@ var U = class {
|
|
|
629
879
|
return this.constrMapByName.get(e);
|
|
630
880
|
}
|
|
631
881
|
setObjective(e, t) {
|
|
632
|
-
t && (this.sense = t), this.objective = typeof e == "string" ?
|
|
882
|
+
t && (this.sense = t), this.objective = typeof e == "string" ? M(e, (e) => this.getVarByName(e)) : typeof e == "number" ? new D(/* @__PURE__ */ new Map(), e) : e instanceof E || "terms" in e ? e.clone() : new D(/* @__PURE__ */ new Map([[e, 1]]), 0);
|
|
633
883
|
}
|
|
634
884
|
maximize(e) {
|
|
635
885
|
this.setObjective(e, "Maximize");
|
|
@@ -638,7 +888,7 @@ var U = class {
|
|
|
638
888
|
this.setObjective(e, "Minimize");
|
|
639
889
|
}
|
|
640
890
|
addBoolVar(e) {
|
|
641
|
-
let t = new
|
|
891
|
+
let t = new n(e);
|
|
642
892
|
return this.boolVars.push(t), t;
|
|
643
893
|
}
|
|
644
894
|
addConstraint(e, t) {
|
|
@@ -650,7 +900,7 @@ var U = class {
|
|
|
650
900
|
}), e;
|
|
651
901
|
}
|
|
652
902
|
let n;
|
|
653
|
-
if (typeof e == "string" ? n =
|
|
903
|
+
if (typeof e == "string" ? n = N(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
904
|
return this.constraints.push(n), this.constrMapByName.set(n.name, n), n;
|
|
655
905
|
}
|
|
656
906
|
addConstr(e, t) {
|
|
@@ -664,7 +914,7 @@ var U = class {
|
|
|
664
914
|
for (let t of e) this.add(t);
|
|
665
915
|
return this;
|
|
666
916
|
}
|
|
667
|
-
return e instanceof
|
|
917
|
+
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);
|
|
668
918
|
}
|
|
669
919
|
addIndicator(e, t, n = {}) {
|
|
670
920
|
let r = n.activeValue === void 0 ? 1 : n.activeValue, i = n.M === void 0 ? 1e5 : n.M, a = n.name || `ind_${e.name}_${t.name}`, o = [], { lhs: s, sense: c, rhs: l } = t;
|
|
@@ -690,7 +940,7 @@ var U = class {
|
|
|
690
940
|
return o;
|
|
691
941
|
}
|
|
692
942
|
toLpString() {
|
|
693
|
-
let { lpString: e } =
|
|
943
|
+
let { lpString: e } = F({
|
|
694
944
|
name: this.name,
|
|
695
945
|
sense: this.sense,
|
|
696
946
|
objective: this.objective,
|
|
@@ -701,7 +951,7 @@ var U = class {
|
|
|
701
951
|
}
|
|
702
952
|
async optimize(e, t) {
|
|
703
953
|
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 =
|
|
954
|
+
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 E && 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
955
|
let i = {
|
|
706
956
|
name: this.name,
|
|
707
957
|
sense: this.sense,
|
|
@@ -710,33 +960,33 @@ var U = class {
|
|
|
710
960
|
variables: this.variables,
|
|
711
961
|
logicalConstraints: this.logicalConstraints,
|
|
712
962
|
boolVars: this.boolVars
|
|
713
|
-
}, a =
|
|
963
|
+
}, a = F(i), o = await n.solve(i, a, r);
|
|
714
964
|
this.runTime = o.runTime ?? 0, this.status = o.status, this.objectiveValue = o.objectiveValue ?? null;
|
|
715
|
-
let
|
|
965
|
+
let s = {}, c = {}, l = {}, u = {};
|
|
716
966
|
if (this.values.clear(), o.values) for (let [e, t] of Object.entries(o.values)) {
|
|
717
967
|
this.values.set(e, t);
|
|
718
968
|
let n = this.getVarByName(e) || a.nameToVar.get(e);
|
|
719
|
-
n && (n.value = t,
|
|
969
|
+
n && (n.value = t, s[n.name] = t);
|
|
720
970
|
}
|
|
721
971
|
if (o.reducedCosts) for (let [e, t] of Object.entries(o.reducedCosts)) {
|
|
722
972
|
let n = this.getVarByName(e) || a.nameToVar.get(e);
|
|
723
|
-
n && (n.reducedCost = t,
|
|
973
|
+
n && (n.reducedCost = t, l[n.name] = t);
|
|
724
974
|
}
|
|
725
975
|
if (o.duals) for (let [e, t] of Object.entries(o.duals)) {
|
|
726
976
|
let n = this.getConstraintByName(e) || a.nameToConstraint.get(e);
|
|
727
|
-
n && (n.dual = t,
|
|
977
|
+
n && (n.dual = t, c[n.name] = t);
|
|
728
978
|
}
|
|
729
979
|
if (o.slacks) for (let [e, t] of Object.entries(o.slacks)) {
|
|
730
980
|
let n = this.getConstraintByName(e) || a.nameToConstraint.get(e);
|
|
731
|
-
n && (n.slack = t,
|
|
981
|
+
n && (n.slack = t, u[n.name] = t);
|
|
732
982
|
}
|
|
733
983
|
return this.solution = {
|
|
734
984
|
status: this.status,
|
|
735
985
|
objectiveValue: this.objectiveValue,
|
|
736
|
-
values:
|
|
737
|
-
duals:
|
|
738
|
-
reducedCosts:
|
|
739
|
-
slacks:
|
|
986
|
+
values: s,
|
|
987
|
+
duals: c,
|
|
988
|
+
reducedCosts: l,
|
|
989
|
+
slacks: u,
|
|
740
990
|
runTime: this.runTime,
|
|
741
991
|
raw: o.raw
|
|
742
992
|
}, this.status;
|
|
@@ -746,7 +996,7 @@ var U = class {
|
|
|
746
996
|
}
|
|
747
997
|
async check(e, t) {
|
|
748
998
|
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 =
|
|
999
|
+
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
1000
|
if (typeof n.check == "function") {
|
|
751
1001
|
let e = await n.check({
|
|
752
1002
|
name: this.name,
|
|
@@ -767,7 +1017,7 @@ var U = class {
|
|
|
767
1017
|
}
|
|
768
1018
|
let i = this.objective, a = this.sense;
|
|
769
1019
|
try {
|
|
770
|
-
this.objective = new
|
|
1020
|
+
this.objective = new D(), this.sense = "Minimize";
|
|
771
1021
|
let e = await this.optimize(n, r), t = e === "Optimal" || e === "Feasible", i = e === "Infeasible", a = {};
|
|
772
1022
|
for (let e of this.variables) a[e.name] = e.value ?? 0;
|
|
773
1023
|
return {
|
|
@@ -779,7 +1029,7 @@ var U = class {
|
|
|
779
1029
|
this.objective = i, this.sense = a;
|
|
780
1030
|
}
|
|
781
1031
|
}
|
|
782
|
-
},
|
|
1032
|
+
}, Y = "Minimize", me = "Maximize", he = "Continuous", ge = "Integer", _e = "Binary", ve = {
|
|
783
1033
|
Optimal: "Optimal",
|
|
784
1034
|
Feasible: "Feasible",
|
|
785
1035
|
Infeasible: "Infeasible",
|
|
@@ -791,7 +1041,7 @@ var U = class {
|
|
|
791
1041
|
Sat: "Sat",
|
|
792
1042
|
Unsat: "Unsat",
|
|
793
1043
|
Unknown: "Unknown"
|
|
794
|
-
},
|
|
1044
|
+
}, ye = class e extends j {
|
|
795
1045
|
constructor(e, t, n, r = "Continuous") {
|
|
796
1046
|
super({
|
|
797
1047
|
name: e,
|
|
@@ -809,13 +1059,13 @@ var U = class {
|
|
|
809
1059
|
return o;
|
|
810
1060
|
}
|
|
811
1061
|
};
|
|
812
|
-
function
|
|
1062
|
+
function be(e) {
|
|
813
1063
|
return e == null ? null : typeof e == "number" ? e : e.value;
|
|
814
1064
|
}
|
|
815
|
-
var
|
|
1065
|
+
var xe = class {
|
|
816
1066
|
model;
|
|
817
|
-
constructor(e = "NoName", t =
|
|
818
|
-
this.model = new
|
|
1067
|
+
constructor(e = "NoName", t = Y) {
|
|
1068
|
+
this.model = new J({
|
|
819
1069
|
name: e,
|
|
820
1070
|
sense: t
|
|
821
1071
|
});
|
|
@@ -850,7 +1100,7 @@ var ne = class {
|
|
|
850
1100
|
setObjective(e) {
|
|
851
1101
|
if (typeof e == "object" && e) {
|
|
852
1102
|
if ("terms" in e) for (let [t] of e.terms) this.addVariable(t);
|
|
853
|
-
else e instanceof
|
|
1103
|
+
else e instanceof j && this.addVariable(e);
|
|
854
1104
|
}
|
|
855
1105
|
this.model.setObjective(e);
|
|
856
1106
|
}
|
|
@@ -859,7 +1109,7 @@ var ne = class {
|
|
|
859
1109
|
return this.model.addConstraint(e, t);
|
|
860
1110
|
}
|
|
861
1111
|
add(e, t) {
|
|
862
|
-
typeof e == "string" ? /(<=|>=|==|=<|=>|=)/.test(e) ? this.addConstraint(e, t) : this.setObjective(e) : e instanceof
|
|
1112
|
+
typeof e == "string" ? /(<=|>=|==|=<|=>|=)/.test(e) ? this.addConstraint(e, t) : this.setObjective(e) : e instanceof c ? this.addConstraint(e, t) : this.setObjective(e);
|
|
863
1113
|
}
|
|
864
1114
|
async solve(e, t) {
|
|
865
1115
|
return this.model.optimize(e, t);
|
|
@@ -867,21 +1117,21 @@ var ne = class {
|
|
|
867
1117
|
toLpString() {
|
|
868
1118
|
return this.model.toLpString();
|
|
869
1119
|
}
|
|
870
|
-
},
|
|
871
|
-
function
|
|
1120
|
+
}, X = "Minimize", Z = "Maximize", Q = "Binary", Se = "Integer", Ce = "Continuous";
|
|
1121
|
+
function we(e) {
|
|
872
1122
|
return {
|
|
873
1123
|
expr: e,
|
|
874
|
-
sense:
|
|
1124
|
+
sense: Z
|
|
875
1125
|
};
|
|
876
1126
|
}
|
|
877
|
-
function
|
|
1127
|
+
function Te(e) {
|
|
878
1128
|
return {
|
|
879
1129
|
expr: e,
|
|
880
|
-
sense:
|
|
1130
|
+
sense: X
|
|
881
1131
|
};
|
|
882
1132
|
}
|
|
883
|
-
var
|
|
884
|
-
constructor(e = "MipModel", t =
|
|
1133
|
+
var $ = class extends J {
|
|
1134
|
+
constructor(e = "MipModel", t = X) {
|
|
885
1135
|
super({
|
|
886
1136
|
name: e,
|
|
887
1137
|
sense: t
|
|
@@ -905,5 +1155,64 @@ var ce = class extends U {
|
|
|
905
1155
|
return this.addConstraint(e, t);
|
|
906
1156
|
}
|
|
907
1157
|
};
|
|
1158
|
+
w(/* @__PURE__ */ S({
|
|
1159
|
+
BINARY: () => Q,
|
|
1160
|
+
BoolExpr: () => i,
|
|
1161
|
+
BoolOp: () => o,
|
|
1162
|
+
BoolVar: () => n,
|
|
1163
|
+
CONTINUOUS: () => Ce,
|
|
1164
|
+
Constraint: () => c,
|
|
1165
|
+
HiGHS: () => V,
|
|
1166
|
+
HighsSolver: () => B,
|
|
1167
|
+
INTEGER: () => Se,
|
|
1168
|
+
LinExpr: () => D,
|
|
1169
|
+
LpBinary: () => _e,
|
|
1170
|
+
LpContinuous: () => he,
|
|
1171
|
+
LpInteger: () => ge,
|
|
1172
|
+
LpMaximize: () => me,
|
|
1173
|
+
LpMinimize: () => Y,
|
|
1174
|
+
LpProblem: () => xe,
|
|
1175
|
+
LpStatus: () => ve,
|
|
1176
|
+
LpVariable: () => ye,
|
|
1177
|
+
MAXIMIZE: () => Z,
|
|
1178
|
+
MINIMIZE: () => X,
|
|
1179
|
+
MipModel: () => $,
|
|
1180
|
+
MockSolver: () => G,
|
|
1181
|
+
Model: () => J,
|
|
1182
|
+
OFFICIAL_HIGHS_CDN_WASM_URL: () => b,
|
|
1183
|
+
QuadExpr: () => E,
|
|
1184
|
+
Var: () => j,
|
|
1185
|
+
and: () => e,
|
|
1186
|
+
c: () => se,
|
|
1187
|
+
expr: () => ce,
|
|
1188
|
+
generateLpString: () => F,
|
|
1189
|
+
getHighs: () => g,
|
|
1190
|
+
getHighsWasmUrl: () => v,
|
|
1191
|
+
getSolver: () => f,
|
|
1192
|
+
implies: () => a,
|
|
1193
|
+
isValidWasmHeader: () => h,
|
|
1194
|
+
listAvailableSolvers: () => u,
|
|
1195
|
+
lpSum: () => A,
|
|
1196
|
+
mapHighsStatus: () => z,
|
|
1197
|
+
maximize: () => we,
|
|
1198
|
+
minimize: () => Te,
|
|
1199
|
+
not: () => s,
|
|
1200
|
+
or: () => t,
|
|
1201
|
+
parseConstraint: () => N,
|
|
1202
|
+
parseExpr: () => M,
|
|
1203
|
+
probeWasmUrl: () => p,
|
|
1204
|
+
registerHighsSolver: () => H,
|
|
1205
|
+
registerMockSolver: () => K,
|
|
1206
|
+
registerSolver: () => d,
|
|
1207
|
+
resolveBrowserWasmUrl: () => _,
|
|
1208
|
+
setDefaultSolver: () => l,
|
|
1209
|
+
setHighsWasmUrl: () => y,
|
|
1210
|
+
solveLp: () => R,
|
|
1211
|
+
solveLpWithHighs: () => m,
|
|
1212
|
+
sum: () => O,
|
|
1213
|
+
value: () => be,
|
|
1214
|
+
xor: () => r,
|
|
1215
|
+
xsum: () => k
|
|
1216
|
+
}), q);
|
|
908
1217
|
//#endregion
|
|
909
|
-
export {
|
|
1218
|
+
export { Q as BINARY, i as BoolExpr, o as BoolOp, n as BoolVar, Ce as CONTINUOUS, c as Constraint, V as HiGHS, B as HighsSolver, Se as INTEGER, D as LinExpr, _e as LpBinary, he as LpContinuous, ge as LpInteger, me as LpMaximize, Y as LpMinimize, xe as LpProblem, ve as LpStatus, ye as LpVariable, Z as MAXIMIZE, X as MINIMIZE, $ as MipModel, G as MockSolver, J as Model, b as OFFICIAL_HIGHS_CDN_WASM_URL, E as QuadExpr, j as Var, e as and, se as c, ce as expr, F as generateLpString, g as getHighs, v as getHighsWasmUrl, f as getSolver, a as implies, h as isValidWasmHeader, u as listAvailableSolvers, A as lpSum, we as maximize, Te as minimize, s as not, t as or, N as parseConstraint, M as parseExpr, p as probeWasmUrl, d as registerSolver, _ as resolveBrowserWasmUrl, l as setDefaultSolver, y as setHighsWasmUrl, m as solveLpWithHighs, O as sum, be as value, r as xor, k as xsum };
|