@ohtaman/washi 0.1.1 → 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 +124 -22
- package/README.md +124 -22
- package/README.zh-CN.md +124 -22
- package/dist/browser/browser-runtime-D13gHOT5.js +4189 -0
- package/dist/browser/highs-worker.js +21 -0
- package/dist/{lib/demo → browser}/highs.wasm +0 -0
- package/dist/browser/highs.wasm.LICENSE +22 -0
- package/dist/browser/loader-CVt4CloI.js +58 -0
- 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 +1213 -0
- package/dist/browser/washi.min.js +5 -0
- package/dist/lib/async-mutex-Duo4jwzn.js +195 -0
- package/dist/lib/constraint-XWdn0ID9.js +93 -0
- package/dist/lib/highs-assets.js +1 -0
- package/dist/lib/highs-browser-runtime.js +4189 -0
- package/dist/lib/highs-node-runtime.js +1 -0
- package/dist/lib/highs-worker-factory.js +1 -0
- package/dist/lib/highs-worker.js +21 -0
- package/dist/lib/highs.wasm +0 -0
- package/dist/lib/loader-Dti0v9yC.js +50 -0
- 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 +388 -78
- 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/modeler/solvers/highs/assets.d.ts +3 -0
- 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} +3 -3
- package/dist/types/modeler/solvers/highs/loader.d.ts.map +1 -0
- package/dist/types/modeler/solvers/highs/node-runtime.d.ts +2 -0
- 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/modeler/solvers/highs/worker-factory.d.ts +3 -0
- 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 -25
- 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/types.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 -36
- package/dist/types/modeler/solvers/z3.d.ts.map +1 -1
- package/package.json +35 -9
- package/dist/lib/assets/highs-worker-DeDWU6KI.js +0 -3
- package/dist/lib/glpk-BC32ZaPG.js +0 -126
- package/dist/lib/washi-logo.png +0 -0
- package/dist/lib/washi-logo.svg +0 -70
- package/dist/lib/z3-C8g-PtmP.js +0 -582
- package/dist/types/glpk-loader.d.ts +0 -8
- package/dist/types/glpk-loader.d.ts.map +0 -1
- package/dist/types/highs-loader.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.d.ts +0 -2
- package/dist/types/highs-worker.d.ts.map +0 -1
package/dist/lib/washi.js
CHANGED
|
@@ -1,11 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
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
|
|
3
21
|
//#region src/modeler/quad-expr.ts
|
|
4
|
-
function
|
|
22
|
+
function T(e, t) {
|
|
5
23
|
let n = e.id, r = t.id;
|
|
6
24
|
return n <= r ? `${n}:${r}` : `${r}:${n}`;
|
|
7
25
|
}
|
|
8
|
-
var
|
|
26
|
+
var E = class e {
|
|
9
27
|
linearTerms;
|
|
10
28
|
quadTerms;
|
|
11
29
|
constant;
|
|
@@ -18,7 +36,7 @@ var O = class e {
|
|
|
18
36
|
return new e(this.linearTerms, this.quadTerms, this.constant);
|
|
19
37
|
}
|
|
20
38
|
getQuadCoeff(e, t) {
|
|
21
|
-
let n =
|
|
39
|
+
let n = T(e, t), r = this.quadTerms.get(n);
|
|
22
40
|
return r ? r.coeff : 0;
|
|
23
41
|
}
|
|
24
42
|
add(t) {
|
|
@@ -91,14 +109,14 @@ var O = class e {
|
|
|
91
109
|
return this.value;
|
|
92
110
|
}
|
|
93
111
|
static fromProduct(t, n, r = 1) {
|
|
94
|
-
let i = new e(), a =
|
|
112
|
+
let i = new e(), a = T(t, n);
|
|
95
113
|
return i.quadTerms.set(a, {
|
|
96
114
|
var1: t.id <= n.id ? t : n,
|
|
97
115
|
var2: t.id <= n.id ? n : t,
|
|
98
116
|
coeff: r
|
|
99
117
|
}), i;
|
|
100
118
|
}
|
|
101
|
-
},
|
|
119
|
+
}, D = class e {
|
|
102
120
|
terms;
|
|
103
121
|
constant;
|
|
104
122
|
constructor(e = /* @__PURE__ */ new Map(), t = 0) {
|
|
@@ -108,7 +126,7 @@ var O = class e {
|
|
|
108
126
|
return new e(this.terms, this.constant);
|
|
109
127
|
}
|
|
110
128
|
add(e) {
|
|
111
|
-
if (e instanceof
|
|
129
|
+
if (e instanceof E) return e.add(this);
|
|
112
130
|
let t = this.clone();
|
|
113
131
|
if (typeof e == "number") t.constant += e;
|
|
114
132
|
else if ("terms" in e) {
|
|
@@ -124,7 +142,7 @@ var O = class e {
|
|
|
124
142
|
return t;
|
|
125
143
|
}
|
|
126
144
|
sub(e) {
|
|
127
|
-
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)));
|
|
128
146
|
}
|
|
129
147
|
mul(t) {
|
|
130
148
|
if (typeof t == "number") {
|
|
@@ -135,9 +153,9 @@ var O = class e {
|
|
|
135
153
|
}
|
|
136
154
|
return n;
|
|
137
155
|
}
|
|
138
|
-
let n = new
|
|
156
|
+
let n = new E();
|
|
139
157
|
Math.abs(this.constant) >= 1e-12 && n.linearTerms.set(t, this.constant);
|
|
140
|
-
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));
|
|
141
159
|
return n;
|
|
142
160
|
}
|
|
143
161
|
div(e) {
|
|
@@ -180,7 +198,7 @@ var O = class e {
|
|
|
180
198
|
let i = this.clone(), a = 0;
|
|
181
199
|
typeof n == "number" ? a = n : "terms" in n ? (i = i.sub(new e(n.terms, 0)), a = n.constant) : i = i.sub(n);
|
|
182
200
|
let o = a - i.constant;
|
|
183
|
-
return i.constant = 0, new
|
|
201
|
+
return i.constant = 0, new c(i, t, o, r);
|
|
184
202
|
}
|
|
185
203
|
toString() {
|
|
186
204
|
let e = [], t = !0;
|
|
@@ -195,7 +213,7 @@ var O = class e {
|
|
|
195
213
|
return e.join(" ") || "0";
|
|
196
214
|
}
|
|
197
215
|
};
|
|
198
|
-
function
|
|
216
|
+
function O(e, t) {
|
|
199
217
|
let n = /* @__PURE__ */ new Map(), r = 0, i = 0;
|
|
200
218
|
for (let a of e) {
|
|
201
219
|
let e = t ? t(a, i++) : a;
|
|
@@ -213,9 +231,9 @@ function A(e, t) {
|
|
|
213
231
|
}
|
|
214
232
|
}
|
|
215
233
|
for (let [e, t] of n) Math.abs(t) < 1e-12 && n.delete(e);
|
|
216
|
-
return new
|
|
234
|
+
return new D(n, r);
|
|
217
235
|
}
|
|
218
|
-
var
|
|
236
|
+
var k = O, A = O, ie = 0, j = class e {
|
|
219
237
|
id;
|
|
220
238
|
name;
|
|
221
239
|
type;
|
|
@@ -224,7 +242,7 @@ var j = A, M = A, N = 0, P = class e {
|
|
|
224
242
|
value = null;
|
|
225
243
|
reducedCost = null;
|
|
226
244
|
constructor(e = {}) {
|
|
227
|
-
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);
|
|
228
246
|
}
|
|
229
247
|
get x() {
|
|
230
248
|
return this.value;
|
|
@@ -233,39 +251,39 @@ var j = A, M = A, N = 0, P = class e {
|
|
|
233
251
|
return this.value;
|
|
234
252
|
}
|
|
235
253
|
mul(t) {
|
|
236
|
-
if (typeof t == "number") return new
|
|
237
|
-
if (t instanceof e) return
|
|
238
|
-
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();
|
|
239
257
|
Math.abs(t.constant) >= 1e-12 && n.linearTerms.set(this, t.constant);
|
|
240
258
|
for (let [e, r] of t.terms) {
|
|
241
|
-
let t =
|
|
259
|
+
let t = E.fromProduct(this, e, r);
|
|
242
260
|
n = n.add(t);
|
|
243
261
|
}
|
|
244
262
|
return n;
|
|
245
263
|
}
|
|
246
264
|
add(e) {
|
|
247
|
-
return e instanceof
|
|
265
|
+
return e instanceof E ? e.add(this) : new D(/* @__PURE__ */ new Map([[this, 1]]), 0).add(e);
|
|
248
266
|
}
|
|
249
267
|
sub(e) {
|
|
250
|
-
return e instanceof
|
|
268
|
+
return e instanceof E ? e.neg().add(this) : new D(/* @__PURE__ */ new Map([[this, 1]]), 0).sub(e);
|
|
251
269
|
}
|
|
252
270
|
neg() {
|
|
253
271
|
return this.mul(-1);
|
|
254
272
|
}
|
|
255
273
|
le(e, t) {
|
|
256
|
-
return new
|
|
274
|
+
return new D(/* @__PURE__ */ new Map([[this, 1]]), 0).le(e, t);
|
|
257
275
|
}
|
|
258
276
|
lessThanOrEqual(e, t) {
|
|
259
277
|
return this.le(e, t);
|
|
260
278
|
}
|
|
261
279
|
ge(e, t) {
|
|
262
|
-
return new
|
|
280
|
+
return new D(/* @__PURE__ */ new Map([[this, 1]]), 0).ge(e, t);
|
|
263
281
|
}
|
|
264
282
|
greaterThanOrEqual(e, t) {
|
|
265
283
|
return this.ge(e, t);
|
|
266
284
|
}
|
|
267
285
|
eq(e, t) {
|
|
268
|
-
return new
|
|
286
|
+
return new D(/* @__PURE__ */ new Map([[this, 1]]), 0).eq(e, t);
|
|
269
287
|
}
|
|
270
288
|
equalTo(e, t) {
|
|
271
289
|
return this.eq(e, t);
|
|
@@ -276,7 +294,7 @@ var j = A, M = A, N = 0, P = class e {
|
|
|
276
294
|
};
|
|
277
295
|
//#endregion
|
|
278
296
|
//#region src/modeler/parser.ts
|
|
279
|
-
function
|
|
297
|
+
function ae(e) {
|
|
280
298
|
let t = [], n = 0, r = e.length;
|
|
281
299
|
for (; n < r;) {
|
|
282
300
|
let i = e[n];
|
|
@@ -332,7 +350,7 @@ function F(e) {
|
|
|
332
350
|
}
|
|
333
351
|
return t;
|
|
334
352
|
}
|
|
335
|
-
var
|
|
353
|
+
var oe = class {
|
|
336
354
|
tokens;
|
|
337
355
|
pos = 0;
|
|
338
356
|
resolver;
|
|
@@ -394,12 +412,12 @@ var te = class {
|
|
|
394
412
|
let e = this.consume();
|
|
395
413
|
return this.resolveVariable(e.value).mul(t);
|
|
396
414
|
}
|
|
397
|
-
return new
|
|
415
|
+
return new D(/* @__PURE__ */ new Map(), t);
|
|
398
416
|
}
|
|
399
417
|
if (e.type === "IDENT") {
|
|
400
418
|
this.consume();
|
|
401
419
|
let t = this.resolveVariable(e.value);
|
|
402
|
-
return new
|
|
420
|
+
return new D(/* @__PURE__ */ new Map([[t, 1]]), 0);
|
|
403
421
|
}
|
|
404
422
|
if (e.type === "LPAREN") {
|
|
405
423
|
this.consume("LPAREN");
|
|
@@ -414,10 +432,10 @@ var te = class {
|
|
|
414
432
|
return t;
|
|
415
433
|
}
|
|
416
434
|
};
|
|
417
|
-
function
|
|
418
|
-
return new
|
|
435
|
+
function M(e, t) {
|
|
436
|
+
return new oe(ae(e), t).parseExpression();
|
|
419
437
|
}
|
|
420
|
-
function
|
|
438
|
+
function N(e, t, n) {
|
|
421
439
|
let r = e.match(/(<=|>=|==|=<|=>|=)/);
|
|
422
440
|
if (!r) throw Error(`Constraint must contain a comparison operator (<=, >=, ==, =): "${e}"`);
|
|
423
441
|
let i = r[0], a = r.index, o = e.substring(0, a).trim(), s = e.substring(a + i.length).trim(), c;
|
|
@@ -425,18 +443,18 @@ function L(e, t, n) {
|
|
|
425
443
|
else if (i === ">=" || i === "=>") c = ">=";
|
|
426
444
|
else if (i === "==" || i === "=") c = "==";
|
|
427
445
|
else throw Error(`Unsupported operator "${i}"`);
|
|
428
|
-
let l =
|
|
446
|
+
let l = M(o, t), u = M(s, t);
|
|
429
447
|
return c === "<=" ? l.le(u, n) : c === ">=" ? l.ge(u, n) : l.eq(u, n);
|
|
430
448
|
}
|
|
431
|
-
function
|
|
449
|
+
function P(e, t) {
|
|
432
450
|
let n = /* @__PURE__ */ new Map(), r = "";
|
|
433
451
|
for (let i = 0; i < e.length; i++) if (r += e[i], i < t.length) {
|
|
434
452
|
let e = t[i];
|
|
435
453
|
if (typeof e == "number") r += `(${e})`;
|
|
436
|
-
else if (e instanceof
|
|
454
|
+
else if (e instanceof j) {
|
|
437
455
|
let t = `__v_${i}__`;
|
|
438
456
|
n.set(t, e), r += t;
|
|
439
|
-
} else if (e instanceof
|
|
457
|
+
} else if (e instanceof D) {
|
|
440
458
|
`${i}`, r += `(${e.toString()})`;
|
|
441
459
|
for (let [t] of e.terms) n.set(t.name, t);
|
|
442
460
|
}
|
|
@@ -446,42 +464,42 @@ function R(e, t) {
|
|
|
446
464
|
resolver: (e) => n.get(e)
|
|
447
465
|
};
|
|
448
466
|
}
|
|
449
|
-
function
|
|
450
|
-
let { fullText: n, resolver: r } =
|
|
451
|
-
return
|
|
467
|
+
function se(e, ...t) {
|
|
468
|
+
let { fullText: n, resolver: r } = P(e, t);
|
|
469
|
+
return N(n, r);
|
|
452
470
|
}
|
|
453
|
-
function
|
|
454
|
-
let { fullText: n, resolver: r } =
|
|
455
|
-
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);
|
|
456
474
|
}
|
|
457
475
|
//#endregion
|
|
458
476
|
//#region src/modeler/lp-writer.ts
|
|
459
|
-
function
|
|
477
|
+
function le(e, t, n) {
|
|
460
478
|
let r = e.replace(/[^a-zA-Z0-9_]/g, "_");
|
|
461
479
|
return /^[0-9]/.test(r) && (r = `${t}_${r}`), (!r || r.length === 0) && (r = `${t}_${n}`), r;
|
|
462
480
|
}
|
|
463
|
-
function
|
|
481
|
+
function F(e) {
|
|
464
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();
|
|
465
483
|
for (let e of i) {
|
|
466
|
-
let t =
|
|
484
|
+
let t = le(e.name, "x", e.id), n = t, r = 1;
|
|
467
485
|
for (; c.has(n);) n = `${t}_${r++}`;
|
|
468
486
|
c.add(n), o.set(e, n), a.set(n, e);
|
|
469
487
|
}
|
|
470
488
|
let l = /* @__PURE__ */ new Set(), u = /* @__PURE__ */ new Map();
|
|
471
489
|
for (let e of r) {
|
|
472
|
-
let t =
|
|
490
|
+
let t = le(e.name, "c", e.id), n = t, r = 1;
|
|
473
491
|
for (; l.has(n);) n = `${t}_${r++}`;
|
|
474
492
|
l.add(n), u.set(e, n), s.set(n, e);
|
|
475
493
|
}
|
|
476
494
|
let d = [];
|
|
477
495
|
d.push(t === "Maximize" ? "Maximize" : "Minimize");
|
|
478
|
-
let f = [], p = !0, m = n instanceof
|
|
496
|
+
let f = [], p = !0, m = n instanceof E ? n.linearTerms : n.terms;
|
|
479
497
|
if (m) for (let [e, t] of m) {
|
|
480
498
|
if (Math.abs(t) < 1e-12) continue;
|
|
481
499
|
let n = o.get(e), r = t >= 0 ? p ? "" : "+ " : "- ", i = Math.abs(t), a = i === 1 ? "" : `${i} `;
|
|
482
500
|
f.push(`${r}${a}${n}`), p = !1;
|
|
483
501
|
}
|
|
484
|
-
if (n instanceof
|
|
502
|
+
if (n instanceof E && n.quadTerms.size > 0) {
|
|
485
503
|
let e = [], t = !0;
|
|
486
504
|
for (let r of n.quadTerms.values()) {
|
|
487
505
|
if (Math.abs(r.coeff) < 1e-12) continue;
|
|
@@ -532,8 +550,237 @@ function H(e) {
|
|
|
532
550
|
};
|
|
533
551
|
}
|
|
534
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
|
|
535
782
|
//#region src/modeler/model.ts
|
|
536
|
-
var
|
|
783
|
+
var J = class {
|
|
537
784
|
name;
|
|
538
785
|
sense;
|
|
539
786
|
objective;
|
|
@@ -550,8 +797,12 @@ var U = class {
|
|
|
550
797
|
runTime = 0;
|
|
551
798
|
solution = null;
|
|
552
799
|
solver = null;
|
|
553
|
-
constructor(e = {}) {
|
|
554
|
-
|
|
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));
|
|
555
806
|
}
|
|
556
807
|
get vars() {
|
|
557
808
|
return this.variables;
|
|
@@ -573,7 +824,7 @@ var U = class {
|
|
|
573
824
|
lb: n,
|
|
574
825
|
ub: r
|
|
575
826
|
} : e || {};
|
|
576
|
-
let a = new
|
|
827
|
+
let a = new j(i);
|
|
577
828
|
if (this.varMapByName.has(a.name)) throw Error(`Variable with name '${a.name}' already exists in model`);
|
|
578
829
|
return this.variables.push(a), this.varMapByName.set(a.name, a), a;
|
|
579
830
|
}
|
|
@@ -628,7 +879,7 @@ var U = class {
|
|
|
628
879
|
return this.constrMapByName.get(e);
|
|
629
880
|
}
|
|
630
881
|
setObjective(e, t) {
|
|
631
|
-
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);
|
|
632
883
|
}
|
|
633
884
|
maximize(e) {
|
|
634
885
|
this.setObjective(e, "Maximize");
|
|
@@ -637,11 +888,11 @@ var U = class {
|
|
|
637
888
|
this.setObjective(e, "Minimize");
|
|
638
889
|
}
|
|
639
890
|
addBoolVar(e) {
|
|
640
|
-
let t = new
|
|
891
|
+
let t = new n(e);
|
|
641
892
|
return this.boolVars.push(t), t;
|
|
642
893
|
}
|
|
643
894
|
addConstraint(e, t) {
|
|
644
|
-
if (e instanceof
|
|
895
|
+
if (e instanceof i) {
|
|
645
896
|
let n = t || `lc_${this.logicalConstraints.length + 1}`;
|
|
646
897
|
return this.logicalConstraints.push({
|
|
647
898
|
name: n,
|
|
@@ -649,7 +900,7 @@ var U = class {
|
|
|
649
900
|
}), e;
|
|
650
901
|
}
|
|
651
902
|
let n;
|
|
652
|
-
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`);
|
|
653
904
|
return this.constraints.push(n), this.constrMapByName.set(n.name, n), n;
|
|
654
905
|
}
|
|
655
906
|
addConstr(e, t) {
|
|
@@ -663,7 +914,7 @@ var U = class {
|
|
|
663
914
|
for (let t of e) this.add(t);
|
|
664
915
|
return this;
|
|
665
916
|
}
|
|
666
|
-
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);
|
|
667
918
|
}
|
|
668
919
|
addIndicator(e, t, n = {}) {
|
|
669
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;
|
|
@@ -689,7 +940,7 @@ var U = class {
|
|
|
689
940
|
return o;
|
|
690
941
|
}
|
|
691
942
|
toLpString() {
|
|
692
|
-
let { lpString: e } =
|
|
943
|
+
let { lpString: e } = F({
|
|
693
944
|
name: this.name,
|
|
694
945
|
sense: this.sense,
|
|
695
946
|
objective: this.objective,
|
|
@@ -700,7 +951,7 @@ var U = class {
|
|
|
700
951
|
}
|
|
701
952
|
async optimize(e, t) {
|
|
702
953
|
let n, r;
|
|
703
|
-
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.`);
|
|
704
955
|
let i = {
|
|
705
956
|
name: this.name,
|
|
706
957
|
sense: this.sense,
|
|
@@ -709,7 +960,7 @@ var U = class {
|
|
|
709
960
|
variables: this.variables,
|
|
710
961
|
logicalConstraints: this.logicalConstraints,
|
|
711
962
|
boolVars: this.boolVars
|
|
712
|
-
}, a =
|
|
963
|
+
}, a = F(i), o = await n.solve(i, a, r);
|
|
713
964
|
this.runTime = o.runTime ?? 0, this.status = o.status, this.objectiveValue = o.objectiveValue ?? null;
|
|
714
965
|
let s = {}, c = {}, l = {}, u = {};
|
|
715
966
|
if (this.values.clear(), o.values) for (let [e, t] of Object.entries(o.values)) {
|
|
@@ -745,7 +996,7 @@ var U = class {
|
|
|
745
996
|
}
|
|
746
997
|
async check(e, t) {
|
|
747
998
|
let n, r;
|
|
748
|
-
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.`);
|
|
749
1000
|
if (typeof n.check == "function") {
|
|
750
1001
|
let e = await n.check({
|
|
751
1002
|
name: this.name,
|
|
@@ -766,7 +1017,7 @@ var U = class {
|
|
|
766
1017
|
}
|
|
767
1018
|
let i = this.objective, a = this.sense;
|
|
768
1019
|
try {
|
|
769
|
-
this.objective = new
|
|
1020
|
+
this.objective = new D(), this.sense = "Minimize";
|
|
770
1021
|
let e = await this.optimize(n, r), t = e === "Optimal" || e === "Feasible", i = e === "Infeasible", a = {};
|
|
771
1022
|
for (let e of this.variables) a[e.name] = e.value ?? 0;
|
|
772
1023
|
return {
|
|
@@ -778,7 +1029,7 @@ var U = class {
|
|
|
778
1029
|
this.objective = i, this.sense = a;
|
|
779
1030
|
}
|
|
780
1031
|
}
|
|
781
|
-
},
|
|
1032
|
+
}, Y = "Minimize", me = "Maximize", he = "Continuous", ge = "Integer", _e = "Binary", ve = {
|
|
782
1033
|
Optimal: "Optimal",
|
|
783
1034
|
Feasible: "Feasible",
|
|
784
1035
|
Infeasible: "Infeasible",
|
|
@@ -790,7 +1041,7 @@ var U = class {
|
|
|
790
1041
|
Sat: "Sat",
|
|
791
1042
|
Unsat: "Unsat",
|
|
792
1043
|
Unknown: "Unknown"
|
|
793
|
-
},
|
|
1044
|
+
}, ye = class e extends j {
|
|
794
1045
|
constructor(e, t, n, r = "Continuous") {
|
|
795
1046
|
super({
|
|
796
1047
|
name: e,
|
|
@@ -808,13 +1059,13 @@ var U = class {
|
|
|
808
1059
|
return o;
|
|
809
1060
|
}
|
|
810
1061
|
};
|
|
811
|
-
function
|
|
1062
|
+
function be(e) {
|
|
812
1063
|
return e == null ? null : typeof e == "number" ? e : e.value;
|
|
813
1064
|
}
|
|
814
|
-
var
|
|
1065
|
+
var xe = class {
|
|
815
1066
|
model;
|
|
816
|
-
constructor(e = "NoName", t =
|
|
817
|
-
this.model = new
|
|
1067
|
+
constructor(e = "NoName", t = Y) {
|
|
1068
|
+
this.model = new J({
|
|
818
1069
|
name: e,
|
|
819
1070
|
sense: t
|
|
820
1071
|
});
|
|
@@ -849,7 +1100,7 @@ var ne = class {
|
|
|
849
1100
|
setObjective(e) {
|
|
850
1101
|
if (typeof e == "object" && e) {
|
|
851
1102
|
if ("terms" in e) for (let [t] of e.terms) this.addVariable(t);
|
|
852
|
-
else e instanceof
|
|
1103
|
+
else e instanceof j && this.addVariable(e);
|
|
853
1104
|
}
|
|
854
1105
|
this.model.setObjective(e);
|
|
855
1106
|
}
|
|
@@ -858,7 +1109,7 @@ var ne = class {
|
|
|
858
1109
|
return this.model.addConstraint(e, t);
|
|
859
1110
|
}
|
|
860
1111
|
add(e, t) {
|
|
861
|
-
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);
|
|
862
1113
|
}
|
|
863
1114
|
async solve(e, t) {
|
|
864
1115
|
return this.model.optimize(e, t);
|
|
@@ -866,21 +1117,21 @@ var ne = class {
|
|
|
866
1117
|
toLpString() {
|
|
867
1118
|
return this.model.toLpString();
|
|
868
1119
|
}
|
|
869
|
-
},
|
|
870
|
-
function
|
|
1120
|
+
}, X = "Minimize", Z = "Maximize", Q = "Binary", Se = "Integer", Ce = "Continuous";
|
|
1121
|
+
function we(e) {
|
|
871
1122
|
return {
|
|
872
1123
|
expr: e,
|
|
873
|
-
sense:
|
|
1124
|
+
sense: Z
|
|
874
1125
|
};
|
|
875
1126
|
}
|
|
876
|
-
function
|
|
1127
|
+
function Te(e) {
|
|
877
1128
|
return {
|
|
878
1129
|
expr: e,
|
|
879
|
-
sense:
|
|
1130
|
+
sense: X
|
|
880
1131
|
};
|
|
881
1132
|
}
|
|
882
|
-
var
|
|
883
|
-
constructor(e = "MipModel", t =
|
|
1133
|
+
var $ = class extends J {
|
|
1134
|
+
constructor(e = "MipModel", t = X) {
|
|
884
1135
|
super({
|
|
885
1136
|
name: e,
|
|
886
1137
|
sense: t
|
|
@@ -904,5 +1155,64 @@ var ce = class extends U {
|
|
|
904
1155
|
return this.addConstraint(e, t);
|
|
905
1156
|
}
|
|
906
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);
|
|
907
1217
|
//#endregion
|
|
908
|
-
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 };
|