@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modeler/solvers/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modeler/solvers/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
|
|
@@ -22,4 +22,5 @@ export declare class MockSolver implements Solver {
|
|
|
22
22
|
constructor(options?: MockSolverOptions);
|
|
23
23
|
solve(_modelData: LpModelData, _lpResult: LpExportResult, options?: SolverOptions): Promise<SolverResult>;
|
|
24
24
|
}
|
|
25
|
+
export declare function registerMockSolver(): void;
|
|
25
26
|
//# sourceMappingURL=mock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../../src/modeler/solvers/mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,UAAW,YAAW,MAAM;IACvC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,YAAY,EAAE,kBAAkB,CAAC;IAC1C,OAAO,EAAE,iBAAiB,CAAC;IAElC,YAAY,OAAO,GAAE,iBAAsB,EAI1C;IAEK,KAAK,CACT,UAAU,EAAE,WAAW,EACvB,SAAS,EAAE,cAAc,EACzB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAgBvB;CACF"}
|
|
1
|
+
{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../../src/modeler/solvers/mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,UAAW,YAAW,MAAM;IACvC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,YAAY,EAAE,kBAAkB,CAAC;IAC1C,OAAO,EAAE,iBAAiB,CAAC;IAElC,YAAY,OAAO,GAAE,iBAAsB,EAI1C;IAEK,KAAK,CACT,UAAU,EAAE,WAAW,EACvB,SAAS,EAAE,cAAc,EACzB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAgBvB;CACF;AAGD,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Solver, SolverOptions } from "./types.js";
|
|
2
|
-
type SolverFactory = (options?: SolverOptions) => Solver;
|
|
2
|
+
export type SolverFactory = (options?: SolverOptions) => Solver;
|
|
3
3
|
/**
|
|
4
4
|
* Register a new solver factory by name
|
|
5
5
|
*/
|
|
@@ -16,5 +16,4 @@ export declare function getSolver(solverOrName?: string | Solver, options?: Solv
|
|
|
16
16
|
* List all registered solver names
|
|
17
17
|
*/
|
|
18
18
|
export declare function listAvailableSolvers(): string[];
|
|
19
|
-
export {};
|
|
20
19
|
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/modeler/solvers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/modeler/solvers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,EAAE,aAAa,KAAK,MAAM,CAAC;AAYhE;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAEzE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,GAAG,IAAI,CAYpF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAiCzF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C"}
|
|
@@ -65,7 +65,7 @@ export interface SolverCheckResult {
|
|
|
65
65
|
/**
|
|
66
66
|
* Universal Solver interface.
|
|
67
67
|
* Any optimization engine (HiGHS WASM, GLPK, Gurobi Remote, CBC, SCIP, custom JS)
|
|
68
|
-
* implements this interface to be used interchangeably with Model
|
|
68
|
+
* implements this interface to be used interchangeably with Model.
|
|
69
69
|
*/
|
|
70
70
|
export interface Solver {
|
|
71
71
|
/** Identifier name of the solver engine */
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asset discovery for Z3 solver plugin.
|
|
3
|
+
*
|
|
4
|
+
* In bundler builds (Vite, webpack), the static `new URL("./...", import.meta.url)`
|
|
5
|
+
* pattern enables automatic discovery and emission of z3-built.js and z3-built.wasm.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getBundledZ3AssetUrls(): {
|
|
8
|
+
jsUrl: string;
|
|
9
|
+
wasmUrl: string;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=assets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../../../../src/modeler/solvers/z3/assets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAK1E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/modeler/solvers/z3/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
type Z3Instance = any;
|
|
2
|
+
export declare function unlockAllZ3Semaphores(error?: Error): void;
|
|
3
|
+
export declare function registerZ3ErrorHandler(handler: (err: Error) => void): () => void;
|
|
4
|
+
export declare function notifyZ3WorkerError(err: any): void;
|
|
5
|
+
/**
|
|
6
|
+
* Configure explicit URLs for Z3 assets (z3-built.js and z3-built.wasm).
|
|
7
|
+
*/
|
|
8
|
+
export declare function setZ3Assets(urls: {
|
|
9
|
+
jsUrl?: string | null;
|
|
10
|
+
wasmUrl?: string | null;
|
|
11
|
+
}): void;
|
|
12
|
+
/**
|
|
13
|
+
* Reset cached Z3 initialization promise and instance (for testing and retry).
|
|
14
|
+
*/
|
|
15
|
+
export declare function resetZ3LoaderCache(): void;
|
|
16
|
+
/**
|
|
17
|
+
* Validate browser environment prerequisites for multithreaded Z3 WASM.
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateZ3BrowserEnvironment(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Probe an asset URL to verify it returns a valid response (not 404 and not HTML SPA fallback).
|
|
22
|
+
*
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export declare function probeAssetUrl(url: string, assetName: string): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Resolve asset URLs for z3-built.js and z3-built.wasm in browser environments.
|
|
28
|
+
*/
|
|
29
|
+
export declare function resolveZ3AssetUrls(options?: {
|
|
30
|
+
z3JsUrl?: string;
|
|
31
|
+
z3WasmUrl?: string;
|
|
32
|
+
[key: string]: any;
|
|
33
|
+
}): {
|
|
34
|
+
jsUrl: string;
|
|
35
|
+
wasmUrl: string;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Dynamically load z3-built.js script in browser to register global initZ3
|
|
39
|
+
*
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
export declare function ensureInitZ3Loaded(jsUrl: string): Promise<any>;
|
|
43
|
+
/**
|
|
44
|
+
* Load and initialize Z3 theorem prover.
|
|
45
|
+
*/
|
|
46
|
+
export declare function loadZ3(options?: {
|
|
47
|
+
z3JsUrl?: string;
|
|
48
|
+
z3WasmUrl?: string;
|
|
49
|
+
[key: string]: any;
|
|
50
|
+
}): Promise<Z3Instance>;
|
|
51
|
+
/**
|
|
52
|
+
* Terminate background Z3 worker threads (Node.js and Browser).
|
|
53
|
+
*/
|
|
54
|
+
export declare function killZ3Threads(z3Instance?: any): Promise<void>;
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../../src/modeler/solvers/z3/loader.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,GAAG,GAAG,CAAC;AAyBtB,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAazD;AA+BD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,MAAM,IAAI,CAGhF;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAyBlD;AAkED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAI1F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CA4BnD;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCjF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAO,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAiBjJ;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAuFpE;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAqG5H;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BnE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Solver, SolverCapabilities, SolverOptions, SolverResult, SolverCheckResult } from "../types.js";
|
|
2
|
+
import { resetZ3LoaderCache, killZ3Threads, unlockAllZ3Semaphores, notifyZ3WorkerError } from "./loader.js";
|
|
3
|
+
export { resetZ3LoaderCache, killZ3Threads, unlockAllZ3Semaphores, notifyZ3WorkerError };
|
|
4
|
+
/**
|
|
5
|
+
* Z3 SMT / SAT / MIP Solver Adapter
|
|
6
|
+
*
|
|
7
|
+
* Supports:
|
|
8
|
+
* - SAT & SMT logical formulas (And, Or, Not, Implies, Xor)
|
|
9
|
+
* - Feasibility checking via check()
|
|
10
|
+
* - Unsatisfiable core extraction (unsatCore) for conflict diagnosis
|
|
11
|
+
* - Mixed-Integer Programming (MIP) optimization via Z3 Optimize
|
|
12
|
+
*/
|
|
13
|
+
export declare class Z3Solver implements Solver {
|
|
14
|
+
readonly name = "z3";
|
|
15
|
+
readonly capabilities: SolverCapabilities;
|
|
16
|
+
/**
|
|
17
|
+
* Helper to build AST translations for a given Z3 Context
|
|
18
|
+
*/
|
|
19
|
+
private createContextTranslator;
|
|
20
|
+
/**
|
|
21
|
+
* Check feasibility & propositional satisfaction without an objective function.
|
|
22
|
+
* Tracks constraints to return an unsatCore if infeasible.
|
|
23
|
+
*/
|
|
24
|
+
check(modelData: any, options?: SolverOptions): Promise<SolverCheckResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Solve optimization problem (MIP) or feasibility problem
|
|
27
|
+
*/
|
|
28
|
+
solve(modelData: any, _lpResult: any, options?: SolverOptions): Promise<SolverResult>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Register Z3 solver into global solver registry
|
|
32
|
+
*/
|
|
33
|
+
export declare function registerZ3Solver(): void;
|
|
34
|
+
//# sourceMappingURL=solver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solver.d.ts","sourceRoot":"","sources":["../../../../../src/modeler/solvers/z3/solver.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAU,kBAAkB,EAAE,aAAa,EAA0B,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE5I,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,CAAC;AAEzF;;;;;;;;GAQG;AACH,qBAAa,QAAS,YAAW,MAAM;IACrC,QAAQ,CAAC,IAAI,QAAQ;IACrB,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAKvC;IAEF;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAyM/B;;;OAGG;IACG,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgGnF;IAED;;OAEG;IACG,KAAK,CACT,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,GAAG,EACd,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CA4HvB;CACF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
|
@@ -1,36 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* Reset cached Z3 initialization promise (primarily for testing).
|
|
4
|
-
*/
|
|
5
|
-
export declare function resetZ3LoaderCache(): void;
|
|
6
|
-
/**
|
|
7
|
-
* Z3 SMT / SAT / MIP Solver Adapter
|
|
8
|
-
*
|
|
9
|
-
* Supports:
|
|
10
|
-
* - SAT & SMT logical formulas (And, Or, Not, Implies, Xor)
|
|
11
|
-
* - Feasibility checking via check()
|
|
12
|
-
* - Unsatisfiable core extraction (unsatCore) for conflict diagnosis
|
|
13
|
-
* - Mixed-Integer Programming (MIP) optimization via Z3 Optimize
|
|
14
|
-
*/
|
|
15
|
-
export declare class Z3Solver implements Solver {
|
|
16
|
-
readonly name = "z3";
|
|
17
|
-
readonly capabilities: SolverCapabilities;
|
|
18
|
-
/**
|
|
19
|
-
* Helper to build AST translations for a given Z3 Context
|
|
20
|
-
*/
|
|
21
|
-
private createContextTranslator;
|
|
22
|
-
/**
|
|
23
|
-
* Check feasibility & propositional satisfaction without an objective function.
|
|
24
|
-
* Tracks constraints to return an unsatCore if infeasible.
|
|
25
|
-
*/
|
|
26
|
-
check(modelData: any, _options?: SolverOptions): Promise<SolverCheckResult>;
|
|
27
|
-
/**
|
|
28
|
-
* Solve optimization problem (MIP) or feasibility problem
|
|
29
|
-
*/
|
|
30
|
-
solve(modelData: any, _lpResult: any, options?: SolverOptions): Promise<SolverResult>;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Register Z3 solver into global solver registry
|
|
34
|
-
*/
|
|
35
|
-
export declare function registerZ3Solver(): void;
|
|
1
|
+
export * from "./z3/index.js";
|
|
36
2
|
//# sourceMappingURL=z3.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"z3.d.ts","sourceRoot":"","sources":["../../../../src/modeler/solvers/z3.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"z3.d.ts","sourceRoot":"","sources":["../../../../src/modeler/solvers/z3.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HiGHS & Model Types
|
|
3
3
|
*/
|
|
4
|
-
export type VarType = "Continuous" | "Integer" | "Binary";
|
|
5
|
-
export type OptimizationSense = "Minimize" | "Maximize";
|
|
4
|
+
export type VarType = "Continuous" | "Integer" | "Binary" | "continuous" | "integer" | "binary" | "cont" | "int" | "bin";
|
|
5
|
+
export type OptimizationSense = "Minimize" | "Maximize" | "minimize" | "maximize";
|
|
6
|
+
/**
|
|
7
|
+
* Normalizes user-facing optimization sense to internal canonical form ("Maximize" | "Minimize")
|
|
8
|
+
*/
|
|
9
|
+
export declare function normalizeSense(sense?: OptimizationSense): "Maximize" | "Minimize";
|
|
6
10
|
export type ComparisonSense = "<=" | ">=" | "==";
|
|
7
11
|
export type SolverStatus = "Optimal" | "Feasible" | "Infeasible" | "Unbounded" | "TimeLimit" | "IterationLimit" | "Error" | "NotSolved" | "Sat" | "Unsat" | "Unknown";
|
|
8
12
|
export interface SolveOptions {
|
|
9
13
|
timeLimit?: number;
|
|
10
14
|
outputFlag?: boolean;
|
|
11
15
|
presolve?: "on" | "off" | "choose";
|
|
12
|
-
solver?: "choose" | "simplex" | "ipm" | "pdlp";
|
|
16
|
+
solver?: "choose" | "simplex" | "ipm" | "pdlp" | (string & {});
|
|
13
17
|
relGap?: number;
|
|
14
18
|
absGap?: number;
|
|
15
19
|
wasmUrl?: string;
|
|
20
|
+
[key: string]: any;
|
|
16
21
|
}
|
|
17
22
|
export interface SolverSolution {
|
|
18
23
|
status: SolverStatus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modeler/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modeler/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,OAAO,GACf,YAAY,GACZ,SAAS,GACT,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,QAAQ,GACR,MAAM,GACN,KAAK,GACL,KAAK,CAAC;AAEV,MAAM,MAAM,iBAAiB,GACzB,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,CAAC;AAEf;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,iBAAiB,GAAG,UAAU,GAAG,UAAU,CAGjF;AAGD,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,UAAU,GACV,YAAY,GACZ,WAAW,GACX,WAAW,GACX,gBAAgB,GAChB,OAAO,GACP,WAAW,GACX,KAAK,GACL,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAC;IACnC,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,GAAG,CAAC;CACX"}
|
|
@@ -11,12 +11,11 @@ export interface VarOptions {
|
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* Represents a decision variable in an optimization problem.
|
|
14
|
-
* Compatible with both PuLP (LpVariable) and python-mip (Var).
|
|
15
14
|
*/
|
|
16
15
|
export declare class Var {
|
|
17
16
|
readonly id: number;
|
|
18
17
|
readonly name: string;
|
|
19
|
-
type:
|
|
18
|
+
type: "Continuous" | "Integer" | "Binary";
|
|
20
19
|
lb: number;
|
|
21
20
|
ub: number;
|
|
22
21
|
/** Optimal primal value after solve */
|
|
@@ -24,10 +23,6 @@ export declare class Var {
|
|
|
24
23
|
/** Reduced cost from dual solution */
|
|
25
24
|
reducedCost: number | null;
|
|
26
25
|
constructor(options?: VarOptions);
|
|
27
|
-
/** python-mip style value accessor */
|
|
28
|
-
get x(): number | null;
|
|
29
|
-
/** PuLP style value accessor */
|
|
30
|
-
get varValue(): number | null;
|
|
31
26
|
/** Multiply variable by a scalar coefficient or another variable/expression */
|
|
32
27
|
mul(coeff: number): LinExpr;
|
|
33
28
|
mul(other: Var): QuadExpr;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variable.d.ts","sourceRoot":"","sources":["../../../src/modeler/variable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;
|
|
1
|
+
{"version":3,"file":"variable.d.ts","sourceRoot":"","sources":["../../../src/modeler/variable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAUD;;GAEG;AACH,qBAAa,GAAG;IACd,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,SAAgB,IAAI,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IAElB,uCAAuC;IAChC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IACnC,sCAAsC;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEzC,YAAY,OAAO,GAAE,UAAe,EAYnC;IAED,+EAA+E;IAC/E,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,QAAQ,CAAC;IAC1B,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAC;IAoB9B,iFAAiF;IACjF,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAKhE;IAED,2FAA2F;IAC3F,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAKhE;IAED,+BAA+B;IAC/B,GAAG,IAAI,OAAO,CAEb;IAED,0DAA0D;IAC1D,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAEzD;IACD,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAEtE;IAED,6DAA6D;IAC7D,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAEzD;IACD,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAEzE;IAED,iDAAiD;IACjD,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAEzD;IACD,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAE9D;IAED,QAAQ,IAAI,MAAM,CAEjB;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ohtaman/washi",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "WaSHI: WebAssembly Algebraic System for Hybrid & Integer modeling (LP, MIP, QP, SMT)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/lib/washi.js",
|
|
@@ -14,12 +14,12 @@
|
|
|
14
14
|
},
|
|
15
15
|
"./highs.wasm": "./dist/lib/highs.wasm",
|
|
16
16
|
"./solvers/z3": {
|
|
17
|
-
"types": "./dist/types/modeler/solvers/z3.d.ts",
|
|
17
|
+
"types": "./dist/types/modeler/solvers/z3/index.d.ts",
|
|
18
18
|
"import": "./dist/lib/solvers/z3.js",
|
|
19
19
|
"default": "./dist/lib/solvers/z3.js"
|
|
20
20
|
},
|
|
21
21
|
"./solvers/glpk": {
|
|
22
|
-
"types": "./dist/types/modeler/solvers/glpk.d.ts",
|
|
22
|
+
"types": "./dist/types/modeler/solvers/glpk/index.d.ts",
|
|
23
23
|
"import": "./dist/lib/solvers/glpk.js",
|
|
24
24
|
"default": "./dist/lib/solvers/glpk.js"
|
|
25
25
|
},
|
|
@@ -28,7 +28,21 @@
|
|
|
28
28
|
"import": "./dist/browser/washi.js",
|
|
29
29
|
"default": "./dist/browser/washi.js"
|
|
30
30
|
},
|
|
31
|
-
"./browser/washi.min.js": "./dist/browser/washi.min.js"
|
|
31
|
+
"./browser/washi.min.js": "./dist/browser/washi.min.js",
|
|
32
|
+
"./browser/solvers/glpk": {
|
|
33
|
+
"types": "./dist/types/modeler/solvers/glpk/index.d.ts",
|
|
34
|
+
"import": "./dist/browser/solvers/glpk.js",
|
|
35
|
+
"default": "./dist/browser/solvers/glpk.js"
|
|
36
|
+
},
|
|
37
|
+
"./browser/solvers/glpk.min.js": "./dist/browser/solvers/glpk.min.js",
|
|
38
|
+
"./browser/solvers/z3": {
|
|
39
|
+
"types": "./dist/types/modeler/solvers/z3/index.d.ts",
|
|
40
|
+
"import": "./dist/browser/solvers/z3.js",
|
|
41
|
+
"default": "./dist/browser/solvers/z3.js"
|
|
42
|
+
},
|
|
43
|
+
"./browser/solvers/z3.min.js": "./dist/browser/solvers/z3.min.js",
|
|
44
|
+
"./solvers/z3-built.js": "./dist/lib/solvers/z3-built.js",
|
|
45
|
+
"./solvers/z3-built.wasm": "./dist/lib/solvers/z3-built.wasm"
|
|
32
46
|
},
|
|
33
47
|
"files": [
|
|
34
48
|
"dist/lib",
|
|
@@ -43,15 +57,20 @@
|
|
|
43
57
|
"scripts": {
|
|
44
58
|
"dev": "vite",
|
|
45
59
|
"build:demo": "vite build",
|
|
46
|
-
"build:types": "tsc -p tsconfig.lib.json",
|
|
60
|
+
"build:types": "node -e \"import('node:fs').then(fs => fs.rmSync('dist/types', { recursive: true, force: true }))\" && tsc -p tsconfig.lib.json",
|
|
47
61
|
"build:lib": "node scripts/build-library.mjs",
|
|
48
62
|
"build": "npm run build:types && npm run build:lib && npm run build:browser && npm run build:demo",
|
|
63
|
+
"build:site": "node scripts/build-site.mjs",
|
|
64
|
+
"docs:dev": "vitepress dev docs",
|
|
65
|
+
"docs:build": "vitepress build docs",
|
|
66
|
+
"docs:preview": "vitepress preview docs",
|
|
49
67
|
"preview": "vite preview",
|
|
50
68
|
"test": "vitest run",
|
|
51
69
|
"test:e2e": "RUN_E2E=1 vitest run test/e2e.test.ts",
|
|
52
70
|
"prepublishOnly": "npm run build:types && npm run build:lib && npm run build:browser",
|
|
53
71
|
"build:browser": "node scripts/build-browser.mjs",
|
|
54
|
-
"test:distribution": "npm run build:types && npm run build:lib && npm run build:browser && node --experimental-vm-modules scripts/check-distribution.mjs"
|
|
72
|
+
"test:distribution": "npm run build:types && npm run build:lib && npm run build:browser && node --experimental-vm-modules scripts/check-distribution.mjs",
|
|
73
|
+
"test:demo": "BASE_URL=/washi/ npm run build:demo && node scripts/check-demo-browser.mjs"
|
|
55
74
|
},
|
|
56
75
|
"keywords": [
|
|
57
76
|
"optimization",
|
|
@@ -100,9 +119,12 @@
|
|
|
100
119
|
"devDependencies": {
|
|
101
120
|
"@types/node": "^26.6.3",
|
|
102
121
|
"glpk.js": "^5.0.0",
|
|
122
|
+
"mermaid": "^11.17.2",
|
|
103
123
|
"playwright": "^1.63.0",
|
|
104
124
|
"typescript": "^7.0.2",
|
|
105
125
|
"vite": "^8.3.1",
|
|
126
|
+
"vitepress": "^1.6.4",
|
|
127
|
+
"vitepress-plugin-mermaid": "^2.0.17",
|
|
106
128
|
"vitest": "^5.0.2",
|
|
107
129
|
"webpack": "^5.111.1",
|
|
108
130
|
"z3-solver": "^5.2.0"
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
//#region \0washi-optional-engine
|
|
2
|
-
function e() {
|
|
3
|
-
throw Error("[WaSHI] Optional GLPK/Z3 engines are not included in the browser bundle. Use the npm package with the optional dependency installed.");
|
|
4
|
-
}
|
|
5
|
-
var t = e;
|
|
6
|
-
//#endregion
|
|
7
|
-
export { e as default, t as init };
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
//#region src/glpk-loader.ts
|
|
2
|
-
var e = null;
|
|
3
|
-
async function t() {
|
|
4
|
-
return e || (e = (async () => {
|
|
5
|
-
let e = typeof process < "u" && process.versions && process.versions.node && process.type !== "renderer";
|
|
6
|
-
try {
|
|
7
|
-
if (e) {
|
|
8
|
-
let e = await import(
|
|
9
|
-
/* webpackIgnore: true */
|
|
10
|
-
/* @vite-ignore */
|
|
11
|
-
"glpk.js/node"
|
|
12
|
-
);
|
|
13
|
-
return await (e.default || e)();
|
|
14
|
-
}
|
|
15
|
-
let t = await import("glpk.js");
|
|
16
|
-
return await (t.default || t)();
|
|
17
|
-
} catch (e) {
|
|
18
|
-
throw Error("[WaSHI] Could not load GLPK. Install the optional glpk.js dependency before selecting this solver.", { cause: e });
|
|
19
|
-
}
|
|
20
|
-
})(), e);
|
|
21
|
-
}
|
|
22
|
-
//#endregion
|
|
23
|
-
//#region src/modeler/solvers/glpk.ts
|
|
24
|
-
var n = class e {
|
|
25
|
-
static capabilities = {
|
|
26
|
-
supportsMIP: !0,
|
|
27
|
-
supportsQP: !1
|
|
28
|
-
};
|
|
29
|
-
name = "GLPK";
|
|
30
|
-
version = "5.0.0";
|
|
31
|
-
capabilities = e.capabilities;
|
|
32
|
-
options;
|
|
33
|
-
constructor(e = {}) {
|
|
34
|
-
this.options = e;
|
|
35
|
-
}
|
|
36
|
-
async solve(e, n, r = {}) {
|
|
37
|
-
let i = {
|
|
38
|
-
...this.options,
|
|
39
|
-
...r
|
|
40
|
-
}, a = await t(), { nameToVar: o, nameToConstraint: s } = n, c = /* @__PURE__ */ new Map();
|
|
41
|
-
for (let [e, t] of o.entries()) c.set(t, e);
|
|
42
|
-
let l = /* @__PURE__ */ new Map();
|
|
43
|
-
for (let [e, t] of s.entries()) l.set(t, e);
|
|
44
|
-
let u = [], d = "linearTerms" in e.objective ? e.objective.linearTerms : e.objective.terms;
|
|
45
|
-
if (d) for (let [e, t] of d) {
|
|
46
|
-
if (Math.abs(t) < 1e-12) continue;
|
|
47
|
-
let n = c.get(e) || e.name;
|
|
48
|
-
u.push({
|
|
49
|
-
name: n,
|
|
50
|
-
coef: Number(t)
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
let f = [];
|
|
54
|
-
for (let t of e.constraints) {
|
|
55
|
-
let e = l.get(t) || t.name || `c_${f.length + 1}`, n = [];
|
|
56
|
-
for (let [e, r] of t.lhs.terms) {
|
|
57
|
-
if (Math.abs(r) < 1e-12) continue;
|
|
58
|
-
let t = c.get(e) || e.name;
|
|
59
|
-
n.push({
|
|
60
|
-
name: t,
|
|
61
|
-
coef: Number(r)
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
let r;
|
|
65
|
-
r = t.sense === "==" ? {
|
|
66
|
-
type: a.GLP_FX,
|
|
67
|
-
lb: t.rhs,
|
|
68
|
-
ub: t.rhs
|
|
69
|
-
} : t.sense === "<=" ? {
|
|
70
|
-
type: a.GLP_UP,
|
|
71
|
-
lb: -Infinity,
|
|
72
|
-
ub: t.rhs
|
|
73
|
-
} : {
|
|
74
|
-
type: a.GLP_LO,
|
|
75
|
-
lb: t.rhs,
|
|
76
|
-
ub: Infinity
|
|
77
|
-
}, f.push({
|
|
78
|
-
name: e,
|
|
79
|
-
vars: n,
|
|
80
|
-
bnds: r
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
let p = [], m = [], h = [];
|
|
84
|
-
for (let t of e.variables) {
|
|
85
|
-
let e = c.get(t) || t.name;
|
|
86
|
-
t.type === "Binary" ? p.push(e) : t.type === "Integer" && m.push(e);
|
|
87
|
-
let n = t.lb, r = t.ub, i;
|
|
88
|
-
i = n === -Infinity && r === Infinity ? a.GLP_FR : n !== -Infinity && r === Infinity ? a.GLP_LO : n === -Infinity && r !== Infinity ? a.GLP_UP : n === r ? a.GLP_FX : a.GLP_DB, h.push({
|
|
89
|
-
name: e,
|
|
90
|
-
type: i,
|
|
91
|
-
lb: n === -Infinity ? 0 : n,
|
|
92
|
-
ub: r === Infinity ? 0 : r
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
let g = {
|
|
96
|
-
name: e.name || "GLPK_Model",
|
|
97
|
-
objective: {
|
|
98
|
-
direction: e.sense === "Maximize" ? a.GLP_MAX : a.GLP_MIN,
|
|
99
|
-
name: "obj",
|
|
100
|
-
vars: u
|
|
101
|
-
},
|
|
102
|
-
subjectTo: f
|
|
103
|
-
};
|
|
104
|
-
h.length > 0 && (g.bounds = h), p.length > 0 && (g.binaries = p), m.length > 0 && (g.generals = m);
|
|
105
|
-
let _ = {
|
|
106
|
-
msglev: i.verbose ? a.GLP_MSG_ALL : a.GLP_MSG_OFF,
|
|
107
|
-
presol: i.presolve !== "off"
|
|
108
|
-
};
|
|
109
|
-
typeof i.timeLimit == "number" && (_.tmlim = i.timeLimit), typeof i.mipGap == "number" && (_.mipgap = i.mipGap);
|
|
110
|
-
let v = performance.now(), y = await a.solve(g, _), b = (performance.now() - v) / 1e3, x = y?.result?.status, S;
|
|
111
|
-
S = x === a.GLP_OPT ? "Optimal" : x === a.GLP_FEAS ? "Feasible" : x === a.GLP_INFEAS || x === a.GLP_NOFEAS ? "Infeasible" : x === a.GLP_UNBND ? "Unbounded" : "Optimal";
|
|
112
|
-
let C = y?.result?.z, w = typeof C == "number" ? C + e.objective.constant : null, T = {}, E = y?.result?.vars || {};
|
|
113
|
-
for (let [e, t] of Object.entries(E)) {
|
|
114
|
-
let n = o.get(e), r = n ? n.name : e;
|
|
115
|
-
T[r] = typeof t == "number" ? Math.abs(t) < 1e-9 ? 0 : t : 0;
|
|
116
|
-
}
|
|
117
|
-
for (let t of e.variables) T[t.name] === void 0 && (T[t.name] = 0);
|
|
118
|
-
let D = {};
|
|
119
|
-
if (y?.result?.dual) for (let [e, t] of Object.entries(y.result.dual)) {
|
|
120
|
-
let n = s.get(e), r = n ? n.name : e;
|
|
121
|
-
D[r] = Number(t);
|
|
122
|
-
}
|
|
123
|
-
return {
|
|
124
|
-
status: S,
|
|
125
|
-
objectiveValue: w,
|
|
126
|
-
values: T,
|
|
127
|
-
duals: D,
|
|
128
|
-
runTime: y?.time || b,
|
|
129
|
-
logs: [`GLPK solved in ${(y?.time || b) * 1e3} ms.`],
|
|
130
|
-
raw: y
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
//#endregion
|
|
135
|
-
export { t as n, n as t };
|