@ohtaman/washi 0.4.0 → 0.6.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 +149 -121
- package/README.md +149 -121
- package/README.zh-CN.md +150 -122
- package/THIRD_PARTY_LICENSES.md +3 -4
- package/dist/browser/_washi-node-only-BvRk9kiK.js +0 -0
- package/dist/browser/browser-runtime-TLCY0hkc.js +1793 -0
- package/dist/browser/highs-worker.js +21 -3
- package/dist/browser/highs.wasm +0 -0
- package/dist/browser/highs.wasm.LICENSE +1 -2
- package/dist/browser/loader-DewlSho8.js +643 -0
- package/dist/browser/solvers/glpk.js +433 -286
- package/dist/browser/solvers/glpk.min.js +1 -1
- package/dist/browser/solvers/z3.js +1008 -981
- package/dist/browser/solvers/z3.min.js +2 -2
- package/dist/browser/washi.js +2778 -673
- package/dist/browser/washi.min.js +3 -4
- package/dist/lib/_washi-node-only-BvRk9kiK.js +0 -0
- package/dist/lib/highs-browser-runtime.js +2120 -4124
- package/dist/lib/highs-node-runtime.js +24 -1
- package/dist/lib/highs-runtime.js +2 -0
- package/dist/lib/highs-worker.js +21 -3
- package/dist/lib/highs.wasm +0 -0
- package/dist/lib/highs.wasm.LICENSE +1 -2
- package/dist/lib/loader-BZUQNvh4.js +649 -0
- package/dist/lib/registry-C20sxTwm.js +964 -0
- package/dist/lib/solvers/glpk.js +201 -90
- package/dist/lib/solvers/z3.js +399 -259
- package/dist/lib/washi.js +2363 -1056
- package/dist/types/decomposition/benders.d.ts +32 -0
- package/dist/types/decomposition/benders.d.ts.map +1 -0
- package/dist/types/decomposition/column-generation.d.ts +34 -0
- package/dist/types/decomposition/column-generation.d.ts.map +1 -0
- package/dist/types/decomposition/index.d.ts +4 -0
- package/dist/types/decomposition/index.d.ts.map +1 -0
- package/dist/types/decomposition/types.d.ts +230 -0
- package/dist/types/decomposition/types.d.ts.map +1 -0
- package/dist/types/index.d.ts +5 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/modeler/big-m.d.ts +75 -0
- package/dist/types/modeler/big-m.d.ts.map +1 -0
- package/dist/types/modeler/boolean-expr.d.ts +103 -14
- package/dist/types/modeler/boolean-expr.d.ts.map +1 -1
- package/dist/types/modeler/constraint.d.ts +47 -9
- package/dist/types/modeler/constraint.d.ts.map +1 -1
- package/dist/types/modeler/expression.d.ts +123 -28
- package/dist/types/modeler/expression.d.ts.map +1 -1
- package/dist/types/modeler/index.d.ts +11 -6
- package/dist/types/modeler/index.d.ts.map +1 -1
- package/dist/types/modeler/linearizer.d.ts +15 -0
- package/dist/types/modeler/linearizer.d.ts.map +1 -0
- package/dist/types/modeler/lp-writer.d.ts +30 -3
- package/dist/types/modeler/lp-writer.d.ts.map +1 -1
- package/dist/types/modeler/model.d.ts +623 -131
- package/dist/types/modeler/model.d.ts.map +1 -1
- package/dist/types/modeler/objective.d.ts +59 -0
- package/dist/types/modeler/objective.d.ts.map +1 -0
- package/dist/types/modeler/parser.d.ts +34 -10
- package/dist/types/modeler/parser.d.ts.map +1 -1
- package/dist/types/modeler/quad-expr.d.ts +26 -7
- package/dist/types/modeler/quad-expr.d.ts.map +1 -1
- package/dist/types/modeler/solution-validator.d.ts +93 -0
- package/dist/types/modeler/solution-validator.d.ts.map +1 -0
- package/dist/types/modeler/solvers/glpk/solver.d.ts +26 -2
- package/dist/types/modeler/solvers/glpk/solver.d.ts.map +1 -1
- package/dist/types/modeler/solvers/highs/browser-runtime.d.ts +2 -1
- package/dist/types/modeler/solvers/highs/browser-runtime.d.ts.map +1 -1
- package/dist/types/modeler/solvers/highs/driver.d.ts +232 -0
- package/dist/types/modeler/solvers/highs/driver.d.ts.map +1 -0
- package/dist/types/modeler/solvers/highs/index.d.ts +1 -0
- package/dist/types/modeler/solvers/highs/index.d.ts.map +1 -1
- package/dist/types/modeler/solvers/highs/loader.d.ts +38 -13
- package/dist/types/modeler/solvers/highs/loader.d.ts.map +1 -1
- package/dist/types/modeler/solvers/highs/node-runtime.d.ts +2 -1
- package/dist/types/modeler/solvers/highs/node-runtime.d.ts.map +1 -1
- package/dist/types/modeler/solvers/highs/solver.d.ts +12 -5
- package/dist/types/modeler/solvers/highs/solver.d.ts.map +1 -1
- package/dist/types/modeler/solvers/highs/worker-client.d.ts.map +1 -1
- package/dist/types/modeler/solvers/mock.d.ts +14 -5
- package/dist/types/modeler/solvers/mock.d.ts.map +1 -1
- package/dist/types/modeler/solvers/types.d.ts +73 -11
- package/dist/types/modeler/solvers/types.d.ts.map +1 -1
- package/dist/types/modeler/solvers/z3/loader.d.ts +2 -3
- package/dist/types/modeler/solvers/z3/loader.d.ts.map +1 -1
- package/dist/types/modeler/solvers/z3/solver.d.ts +15 -5
- package/dist/types/modeler/solvers/z3/solver.d.ts.map +1 -1
- package/dist/types/modeler/types.d.ts +86 -1
- package/dist/types/modeler/types.d.ts.map +1 -1
- package/dist/types/modeler/validation.d.ts +56 -0
- package/dist/types/modeler/validation.d.ts.map +1 -0
- package/dist/types/modeler/variable.d.ts +48 -14
- package/dist/types/modeler/variable.d.ts.map +1 -1
- package/docs/examples/diet-sensitivity.md +90 -0
- package/docs/examples/ecommerce-coupons.md +106 -0
- package/docs/examples/index.md +57 -0
- package/docs/examples/knapsack.md +60 -0
- package/docs/examples/portfolio-qp.md +83 -0
- package/docs/examples/production.md +51 -0
- package/docs/examples/shift-scheduling.md +175 -0
- package/docs/examples/smt-security.md +74 -0
- package/docs/examples/transportation.md +90 -0
- package/docs/examples/traveling-salesperson.md +173 -0
- package/docs/examples/unsat-core.md +64 -0
- package/docs/examples/vehicle-routing.md +206 -0
- package/docs/getting-started/ai-agents.md +271 -0
- package/docs/getting-started/cross-origin.md +87 -0
- package/docs/getting-started/index.md +116 -0
- package/docs/getting-started/runtimes.md +227 -0
- package/docs/guide/constraints.md +177 -0
- package/docs/guide/decomposition.md +399 -0
- package/docs/guide/expressions.md +204 -0
- package/docs/guide/objectives.md +170 -0
- package/docs/guide/unsat-core.md +154 -0
- package/docs/guide/variables.md +188 -0
- package/docs/ja/getting-started/ai-agents.md +270 -0
- package/docs/solvers/custom-solver.md +525 -0
- package/docs/solvers/glpk.md +66 -0
- package/docs/solvers/highs.md +115 -0
- package/docs/solvers/index.md +42 -0
- package/docs/solvers/z3.md +78 -0
- package/docs/zh/getting-started/ai-agents.md +270 -0
- package/llms-full.txt +4065 -0
- package/llms.txt +201 -0
- package/package.json +32 -16
- package/skills/washi/SKILL.md +197 -0
- package/dist/browser/browser-runtime-D13gHOT5.js +0 -4189
- package/dist/browser/loader-CVt4CloI.js +0 -58
- package/dist/lib/async-mutex-Duo4jwzn.js +0 -195
- package/dist/lib/constraint-BRuB3ooC.js +0 -90
- package/dist/lib/loader-Dti0v9yC.js +0 -50
- package/dist/lib/registry-DksqCSjI.js +0 -32
|
@@ -1,25 +1,63 @@
|
|
|
1
1
|
import type { ComparisonSense } from "./types.js";
|
|
2
2
|
import type { LinExpr } from "./expression.js";
|
|
3
|
-
import {
|
|
3
|
+
import type { Var } from "./variable.js";
|
|
4
|
+
import { BoolOp, type LogicInput } from "./boolean-expr.js";
|
|
4
5
|
/**
|
|
5
6
|
* Represents a linear constraint: lhs (terms) <=, >=, or == rhs (constant)
|
|
6
7
|
*/
|
|
7
8
|
export declare class Constraint {
|
|
9
|
+
readonly kind: "constraint";
|
|
8
10
|
readonly id: number;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
private _lhs;
|
|
12
|
+
private _sense;
|
|
13
|
+
private _rhs;
|
|
14
|
+
private _name;
|
|
15
|
+
hasExplicitName: boolean;
|
|
16
|
+
ownerModel: {
|
|
17
|
+
notifyMutation?: () => void;
|
|
18
|
+
} | null;
|
|
13
19
|
/** Slack value after solve */
|
|
14
20
|
slack: number | null;
|
|
15
21
|
/** Dual value (shadow price) after solve */
|
|
16
22
|
dual: number | null;
|
|
23
|
+
/**
|
|
24
|
+
* Add or increment the coefficient of a decision variable in this constraint's left-hand side.
|
|
25
|
+
* Triggers model mutation notification if this constraint belongs to a model.
|
|
26
|
+
*/
|
|
27
|
+
addTerm(v: Var, coeff: number): this;
|
|
28
|
+
/**
|
|
29
|
+
* Set or update the coefficient of a decision variable in this constraint's left-hand side.
|
|
30
|
+
* Triggers model mutation notification if this constraint belongs to a model.
|
|
31
|
+
*/
|
|
32
|
+
setTerm(v: Var, coeff: number): this;
|
|
17
33
|
constructor(lhs: LinExpr, sense: ComparisonSense, rhs: number, name?: string);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
34
|
+
get lhs(): LinExpr;
|
|
35
|
+
set lhs(value: LinExpr);
|
|
36
|
+
get sense(): ComparisonSense;
|
|
37
|
+
set sense(value: ComparisonSense);
|
|
38
|
+
get rhs(): number;
|
|
39
|
+
set rhs(value: number);
|
|
40
|
+
get name(): string;
|
|
41
|
+
set name(value: string);
|
|
42
|
+
/** @internal Assigns a model-scoped name and explicit flag without triggering setter mutation notifications */
|
|
43
|
+
_assignModelName(name: string, hasExplicitName: boolean): void;
|
|
44
|
+
and(other: LogicInput): BoolOp;
|
|
45
|
+
or(other: LogicInput): BoolOp;
|
|
46
|
+
implies(consequent: LogicInput): BoolOp;
|
|
47
|
+
xor(other: LogicInput): BoolOp;
|
|
22
48
|
not(): BoolOp;
|
|
49
|
+
add(_other: unknown): never;
|
|
50
|
+
sub(_other: unknown): never;
|
|
51
|
+
mul(_other: unknown): never;
|
|
52
|
+
div(_other: unknown): never;
|
|
53
|
+
neg(): never;
|
|
54
|
+
le(_rhs: unknown, _name?: string): never;
|
|
55
|
+
ge(_rhs: unknown, _name?: string): never;
|
|
56
|
+
eq(_rhs: unknown, _name?: string): never;
|
|
57
|
+
get value(): never;
|
|
58
|
+
get constant(): never;
|
|
59
|
+
clone(): Constraint;
|
|
23
60
|
toString(): string;
|
|
24
61
|
}
|
|
62
|
+
export declare function isConstraint(val: unknown): val is Constraint;
|
|
25
63
|
//# sourceMappingURL=constraint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraint.d.ts","sourceRoot":"","sources":["../../../src/modeler/constraint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"constraint.d.ts","sourceRoot":"","sources":["../../../src/modeler/constraint.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,20 @@ import { QuadExpr } from "./quad-expr.js";
|
|
|
5
5
|
* Represents a linear expression: c0 + c1*x1 + c2*x2 + ...
|
|
6
6
|
*/
|
|
7
7
|
export declare class LinExpr {
|
|
8
|
+
readonly kind: "linear";
|
|
8
9
|
terms: Map<Var, number>;
|
|
9
10
|
constant: number;
|
|
10
11
|
constructor(terms?: Map<Var, number>, constant?: number);
|
|
12
|
+
/**
|
|
13
|
+
* Set or overwrite the coefficient for a variable in this expression.
|
|
14
|
+
* If `coeff === 0`, removes the variable from terms.
|
|
15
|
+
*/
|
|
16
|
+
setTerm(v: Var, coeff: number): this;
|
|
17
|
+
/**
|
|
18
|
+
* Add a coefficient to a variable in this expression (incrementing any existing coefficient).
|
|
19
|
+
* If the resulting coefficient is 0, removes the variable from terms.
|
|
20
|
+
*/
|
|
21
|
+
addTerm(v: Var, coeff: number): this;
|
|
11
22
|
/**
|
|
12
23
|
* Clone this linear expression
|
|
13
24
|
*/
|
|
@@ -17,13 +28,13 @@ export declare class LinExpr {
|
|
|
17
28
|
*/
|
|
18
29
|
add(other: QuadExpr): QuadExpr;
|
|
19
30
|
add(other: LinExpr | Var | number): LinExpr;
|
|
20
|
-
add(other: QuadExpr | LinExpr | Var | number): LinExpr | QuadExpr;
|
|
31
|
+
add(other: QuadExpr | LinExpr | Var | number | Constraint): LinExpr | QuadExpr;
|
|
21
32
|
/**
|
|
22
33
|
* Subtract another expression, variable, or number
|
|
23
34
|
*/
|
|
24
35
|
sub(other: QuadExpr): QuadExpr;
|
|
25
36
|
sub(other: LinExpr | Var | number): LinExpr;
|
|
26
|
-
sub(other: QuadExpr | LinExpr | Var | number): LinExpr | QuadExpr;
|
|
37
|
+
sub(other: QuadExpr | LinExpr | Var | number | Constraint): LinExpr | QuadExpr;
|
|
27
38
|
/**
|
|
28
39
|
* Multiply this expression by a scalar coefficient, variable, or expression
|
|
29
40
|
*/
|
|
@@ -31,11 +42,11 @@ export declare class LinExpr {
|
|
|
31
42
|
mul(v: Var): QuadExpr;
|
|
32
43
|
mul(other: LinExpr): LinExpr | QuadExpr;
|
|
33
44
|
mul(other: QuadExpr): QuadExpr;
|
|
34
|
-
mul(operand: number | Var | LinExpr | QuadExpr): LinExpr | QuadExpr;
|
|
45
|
+
mul(operand: number | Var | LinExpr | QuadExpr | Constraint): LinExpr | QuadExpr;
|
|
35
46
|
/**
|
|
36
|
-
* Divide this expression by a non-zero scalar
|
|
47
|
+
* Divide this expression by a non-zero scalar or constant-only expression
|
|
37
48
|
*/
|
|
38
|
-
div(
|
|
49
|
+
div(divisor: number | LinExpr | QuadExpr | Constraint): LinExpr;
|
|
39
50
|
/**
|
|
40
51
|
* Negate this expression
|
|
41
52
|
*/
|
|
@@ -44,26 +55,24 @@ export declare class LinExpr {
|
|
|
44
55
|
* Compute the numerical value of this expression using current variable values
|
|
45
56
|
*/
|
|
46
57
|
get value(): number | null;
|
|
47
|
-
/**
|
|
48
|
-
* Helper value accessor for expression
|
|
49
|
-
*/
|
|
50
|
-
getValue(): number | null;
|
|
51
58
|
/**
|
|
52
59
|
* Create constraint: this <= rhs
|
|
53
60
|
*/
|
|
54
|
-
le(rhs: number | Var | LinExpr, name?: string): Constraint;
|
|
55
|
-
lessThanOrEqual(rhs: number | Var | LinExpr, name?: string): Constraint;
|
|
61
|
+
le(rhs: number | Var | LinExpr | QuadExpr | Constraint, name?: string): Constraint;
|
|
56
62
|
/**
|
|
57
63
|
* Create constraint: this >= rhs
|
|
58
64
|
*/
|
|
59
|
-
ge(rhs: number | Var | LinExpr, name?: string): Constraint;
|
|
60
|
-
greaterThanOrEqual(rhs: number | Var | LinExpr, name?: string): Constraint;
|
|
65
|
+
ge(rhs: number | Var | LinExpr | QuadExpr | Constraint, name?: string): Constraint;
|
|
61
66
|
/**
|
|
62
67
|
* Create constraint: this == rhs
|
|
63
68
|
*/
|
|
64
|
-
eq(rhs: number | Var | LinExpr, name?: string): Constraint;
|
|
65
|
-
equalTo(rhs: number | Var | LinExpr, name?: string): Constraint;
|
|
69
|
+
eq(rhs: number | Var | LinExpr | QuadExpr | Constraint, name?: string): Constraint;
|
|
66
70
|
private toConstraint;
|
|
71
|
+
and(_other: unknown): never;
|
|
72
|
+
or(_other: unknown): never;
|
|
73
|
+
implies(_consequent: unknown): never;
|
|
74
|
+
xor(_other: unknown): never;
|
|
75
|
+
not(): never;
|
|
67
76
|
toString(): string;
|
|
68
77
|
}
|
|
69
78
|
/**
|
|
@@ -71,20 +80,106 @@ export declare class LinExpr {
|
|
|
71
80
|
*/
|
|
72
81
|
export type Expr = LinExpr | QuadExpr;
|
|
73
82
|
/**
|
|
74
|
-
* Sum an
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
* -
|
|
83
|
+
* Sum an `Iterable` of `Var` / `LinExpr` / `number` items, an `Iterable` with a mapping function,
|
|
84
|
+
* or a numeric count `n` with an index mapper `(0 .. n - 1)` into a single `LinExpr`.
|
|
85
|
+
*
|
|
86
|
+
* **Formulation notes**:
|
|
87
|
+
* - Produces a linear expression (`LinExpr`).
|
|
88
|
+
* - Passing comparison `Constraint`s (`<=`, `>=`, `==`) or non-linear `QuadExpr` terms throws an Error
|
|
89
|
+
* (quadratic terms are supported in objectives only via `expr` or `.mul()`).
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* const m = new Model("SumExample");
|
|
94
|
+
* const x = m.continuous(3, { lb: 0, prefix: "x" });
|
|
95
|
+
* const byItem = m.integer(["desk", "chair"] as const, { lb: 0 });
|
|
96
|
+
*
|
|
97
|
+
* // Sum an array or iterable directly
|
|
98
|
+
* m.constraint(expr`${sum(x)} <= 100`, "total_x");
|
|
99
|
+
* m.constraint(expr`${sum(Object.values(byItem))} <= 50`, "total_items");
|
|
100
|
+
*
|
|
101
|
+
* // Sum with a mapper or over a count range (0..2)
|
|
102
|
+
* const weighted = sum(3, (i) => expr`${i + 1} * ${x[i]}`);
|
|
103
|
+
* m.objective(maximize(weighted));
|
|
104
|
+
* ```
|
|
79
105
|
*/
|
|
80
|
-
export declare function sum(count: number, mapFn: (index: number) => LinExpr | Var | number): LinExpr;
|
|
81
|
-
export declare function sum<T = any>(items: Iterable<T>, mapFn?: (item: T, index: number) => LinExpr | Var | number): LinExpr;
|
|
106
|
+
export declare function sum(count: number, mapFn: (index: number) => LinExpr | QuadExpr | Constraint | Var | number): LinExpr;
|
|
107
|
+
export declare function sum<T = any>(items: Iterable<T>, mapFn?: (item: T, index: number) => LinExpr | QuadExpr | Constraint | Var | number): LinExpr;
|
|
108
|
+
export type DotTerm = Var | LinExpr;
|
|
109
|
+
export type DotVarContainer<R extends string | number = string | number, C extends string | number = string | number> = ReadonlyArray<DotTerm> | {
|
|
110
|
+
readonly [K in R]: DotTerm;
|
|
111
|
+
} | ReadonlyArray<ReadonlyArray<DotTerm>> | ReadonlyArray<{
|
|
112
|
+
readonly [K in C]: DotTerm;
|
|
113
|
+
}> | {
|
|
114
|
+
readonly [K in R]: ReadonlyArray<DotTerm>;
|
|
115
|
+
} | {
|
|
116
|
+
readonly [K in R]: {
|
|
117
|
+
readonly [L in C]: DotTerm;
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
export type DotCoeffContainer<R extends string | number = string | number, C extends string | number = string | number> = ReadonlyArray<number> | {
|
|
121
|
+
readonly [K in R]: number;
|
|
122
|
+
} | ReadonlyArray<ReadonlyArray<number>> | ReadonlyArray<{
|
|
123
|
+
readonly [K in C]: number;
|
|
124
|
+
}> | {
|
|
125
|
+
readonly [K in R]: ReadonlyArray<number>;
|
|
126
|
+
} | {
|
|
127
|
+
readonly [K in R]: {
|
|
128
|
+
readonly [L in C]: number;
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
type NoSymbolKeys<T> = {
|
|
132
|
+
readonly [Symbol.iterator]?: never;
|
|
133
|
+
} & ({
|
|
134
|
+
readonly [s: symbol]: never;
|
|
135
|
+
} | {
|
|
136
|
+
readonly [S in Extract<keyof T, symbol>]?: never;
|
|
137
|
+
});
|
|
138
|
+
type DotRecordLeafMap<T, Leaf> = object & {
|
|
139
|
+
readonly [K in keyof T]: Leaf;
|
|
140
|
+
} & NoSymbolKeys<T>;
|
|
141
|
+
type DotRecordShape<T, Leaf, Inner = never> = object & {
|
|
142
|
+
readonly [K in keyof T]: Leaf | ReadonlyArray<Leaf> | DotRecordLeafMap<T[K], Leaf> | DotRecordLeafMap<Inner, Leaf>;
|
|
143
|
+
} & NoSymbolKeys<T>;
|
|
144
|
+
type DotContainerArg<T, Leaf, Inner = never> = ReadonlyArray<Leaf> | ReadonlyArray<ReadonlyArray<Leaf>> | ReadonlyArray<DotRecordLeafMap<T[number & keyof T], Leaf>> | DotRecordShape<T, Leaf, Inner>;
|
|
82
145
|
/**
|
|
83
|
-
* Compute the
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
* - dot(vars,
|
|
87
|
-
* - dot(costMatrix, flowMatrix)
|
|
146
|
+
* Compute the inner product (linear combination `LinExpr`) of numeric coefficients and
|
|
147
|
+
* `Var` / `LinExpr` containers across 1D arrays, 2D matrices (`number[][]` / `Var[][]`),
|
|
148
|
+
* plain records (`Record<K, ...>`), and mixed Array/Record containers in either operand order:
|
|
149
|
+
* - `dot(coeffs, vars)` or `dot(vars, coeffs)`
|
|
150
|
+
* - `dot(costMatrix, flowMatrix)`
|
|
151
|
+
*
|
|
152
|
+
* **Formulation notes**:
|
|
153
|
+
* - Produces a linear expression (`LinExpr`) and validates matching array lengths / record keys and finite coefficients.
|
|
154
|
+
* - Does not accept arbitrary `Iterable`s (use `sum()` for general iterables) or non-linear `QuadExpr` / `Constraint` operands
|
|
155
|
+
* (quadratic variable-by-variable terms are supported in objectives only via `expr` or `.mul()`).
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```ts
|
|
159
|
+
* const m = new Model("DotExample");
|
|
160
|
+
* const vec = m.continuous(3, { lb: 0, prefix: "v" });
|
|
161
|
+
* const qty = m.integer(["desk", "chair"] as const, { lb: 0 });
|
|
162
|
+
* const grid = m.binary(2, 2, { prefix: "g" });
|
|
163
|
+
*
|
|
164
|
+
* // 1D array, Record, and 2D matrix inner products
|
|
165
|
+
* m.constraint(expr`${dot([2, 4, 6], vec)} <= 60`, "vec_limit");
|
|
166
|
+
* m.constraint(expr`${dot({ desk: 1, chair: 2 }, qty)} <= 40`, "wood_cap");
|
|
167
|
+
* m.objective(
|
|
168
|
+
* maximize(
|
|
169
|
+
* expr`${dot({ desk: 30, chair: 50 }, qty)} - ${dot(
|
|
170
|
+
* [
|
|
171
|
+
* [5, 8],
|
|
172
|
+
* [3, 6],
|
|
173
|
+
* ],
|
|
174
|
+
* grid
|
|
175
|
+
* )}`
|
|
176
|
+
* )
|
|
177
|
+
* );
|
|
178
|
+
* ```
|
|
88
179
|
*/
|
|
89
|
-
export declare function dot(
|
|
180
|
+
export declare function dot<C = DotCoeffContainer, V = DotVarContainer, CI = never, VI = never>(coeffs: C & (Record<any, CI> | unknown) & DotContainerArg<C, number, CI>, vars: V & (Record<any, VI> | unknown) & DotContainerArg<V, DotTerm, VI>): LinExpr;
|
|
181
|
+
export declare function dot<V = DotVarContainer, C = DotCoeffContainer, VI = never, CI = never>(vars: V & (Record<any, VI> | unknown) & DotContainerArg<V, DotTerm, VI>, coeffs: C & (Record<any, CI> | unknown) & DotContainerArg<C, number, CI>): LinExpr;
|
|
182
|
+
export declare function dot(coeffs: DotCoeffContainer<any, any>, vars: DotVarContainer<any, any>): LinExpr;
|
|
183
|
+
export declare function dot(vars: DotVarContainer<any, any>, coeffs: DotCoeffContainer<any, any>): LinExpr;
|
|
184
|
+
export {};
|
|
90
185
|
//# sourceMappingURL=expression.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../src/modeler/expression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../src/modeler/expression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,UAAU,EAAgB,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C;;GAEG;AACH,qBAAa,OAAO;IAClB,SAAgB,IAAI,EAAG,QAAQ,CAAU;IAClC,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IAExB,YAAY,KAAK,GAAE,GAAG,CAAC,GAAG,EAAE,MAAM,CAAa,EAAE,QAAQ,GAAE,MAAU,EAGpE;IAED;;;OAGG;IACH,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAOnC;IAED;;;OAGG;IACH,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CASnC;IAED;;OAEG;IACH,KAAK,IAAI,OAAO,CAEf;IAED;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,GAAG,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;IAsC/E;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,GAAG,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;IAgB/E;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC;IACtB,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;IACxC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;IA6DjF;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAG9D;IAED;;OAEG;IACH,GAAG,IAAI,OAAO,CAEb;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,GAAG,IAAI,CASzB;IAED;;OAEG;IACH,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAEjF;IAED;;OAEG;IACH,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAEjF;IAED;;OAEG;IACH,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAEjF;IAED,OAAO,CAAC,YAAY;IA+Cb,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,CAIjC;IAEM,EAAE,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,CAIhC;IAEM,OAAO,CAAC,WAAW,EAAE,OAAO,GAAG,KAAK,CAI1C;IAEM,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,CAIjC;IAEM,GAAG,IAAI,KAAK,CAIlB;IAED,QAAQ,IAAI,MAAM,CAkBjB;CACF;AAED;;GAEG;AACH,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,GAAG,CACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,GAAG,GAAG,MAAM,GACvE,OAAO,CAAC;AACX,wBAAgB,GAAG,CAAC,CAAC,GAAG,GAAG,EACzB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAClB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,GAAG,GAAG,MAAM,GACjF,OAAO,CAAC;AA0EX,MAAM,MAAM,OAAO,GAAG,GAAG,GAAG,OAAO,CAAC;AAEpC,MAAM,MAAM,eAAe,CACzB,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EAC3C,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,IAEzC,aAAa,CAAC,OAAO,CAAC,GACtB;IAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,OAAO;CAAE,GAC9B,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GACrC,aAAa,CAAC;IAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,OAAO;CAAE,CAAC,GAC7C;IAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC;CAAE,GAC7C;IAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG;QAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,OAAO;KAAE;CAAE,CAAC;AAE1D,MAAM,MAAM,iBAAiB,CAC3B,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EAC3C,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,IAEzC,aAAa,CAAC,MAAM,CAAC,GACrB;IAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,MAAM;CAAE,GAC7B,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GACpC,aAAa,CAAC;IAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,MAAM;CAAE,CAAC,GAC5C;IAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC;CAAE,GAC5C;IAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG;QAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,MAAM;KAAE;CAAE,CAAC;AAEzD,KAAK,YAAY,CAAC,CAAC,IAAI;IACrB,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC;CACpC,GAAG,CACA;IAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CAAE,GAC/B;IAAE,QAAQ,EAAE,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK;CAAE,CACvD,CAAC;AAEF,KAAK,gBAAgB,CAAC,CAAC,EAAE,IAAI,IAAI,MAAM,GAAG;IACxC,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI;CAC9B,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;AAEpB,KAAK,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,IAAI,MAAM,GAAG;IACrD,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAClB,IAAI,GACJ,aAAa,CAAC,IAAI,CAAC,GACnB,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAC5B,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC;CAClC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;AAEpB,KAAK,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,IACvC,aAAa,CAAC,IAAI,CAAC,GACnB,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAClC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAC1D,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,GAAG,CACjB,CAAC,GAAG,iBAAiB,EACrB,CAAC,GAAG,eAAe,EACnB,EAAE,GAAG,KAAK,EACV,EAAE,GAAG,KAAK,EAEV,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EACxE,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,GACtE,OAAO,CAAC;AACX,wBAAgB,GAAG,CACjB,CAAC,GAAG,eAAe,EACnB,CAAC,GAAG,iBAAiB,EACrB,EAAE,GAAG,KAAK,EACV,EAAE,GAAG,KAAK,EAEV,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EACvE,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,GACvE,OAAO,CAAC;AACX,wBAAgB,GAAG,CACjB,MAAM,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,EACnC,IAAI,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,GAC9B,OAAO,CAAC;AACX,wBAAgB,GAAG,CACjB,IAAI,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAC/B,MAAM,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,GAClC,OAAO,CAAC"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
export { Model, type ModelOptions, type BoundsOptions, type IndicatorOptions } from "./model.js";
|
|
1
|
+
export { Model, type ModelOptions, type BoundsOptions, type BinaryOptions, type IndicatorOptions, type ConstraintItem, type KeyCollection, } from "./model.js";
|
|
2
|
+
export { deriveBigMForLe, deriveBigMForGe, validateUserBigM, buildIndicatorLinearization } from "./big-m.js";
|
|
3
|
+
export { linearizeModelForMip, type LinearizationResult } from "./linearizer.js";
|
|
4
|
+
export { validateModelIntegrity } from "./validation.js";
|
|
5
|
+
export { maximize, minimize, type ObjectiveExpr, type ObjectiveSpec, } from "./objective.js";
|
|
2
6
|
export { Var, type VarOptions } from "./variable.js";
|
|
3
|
-
export { LinExpr, type Expr, sum, dot } from "./expression.js";
|
|
7
|
+
export { LinExpr, type Expr, type DotTerm, type DotVarContainer, type DotCoeffContainer, sum, dot, } from "./expression.js";
|
|
4
8
|
export { QuadExpr, type QuadTerm } from "./quad-expr.js";
|
|
5
9
|
export { Constraint } from "./constraint.js";
|
|
6
|
-
export { BoolVar, BoolExpr, BoolOp, and, or, not, implies, xor, } from "./boolean-expr.js";
|
|
7
|
-
export { parseExpr, parseConstraint, expr,
|
|
8
|
-
export { generateLpString, type LpModelData, type LpExportResult } from "./lp-writer.js";
|
|
9
|
-
export
|
|
10
|
+
export { BoolVar, BoolExpr, BoolOp, type LogicElement, type LogicInput, and, or, not, implies, xor, } from "./boolean-expr.js";
|
|
11
|
+
export { parseExpr, parseConstraint, expr, type ParsedExpr, type ExprResolver, } from "./parser.js";
|
|
12
|
+
export { generateLpString, buildLpSymbolMaps, isLpExportResult, sanitizeIdentifier, type LpModelData, type LpSymbolMaps, type LpExportResult, } from "./lp-writer.js";
|
|
13
|
+
export { validateModelSolution, type SolutionValidationOptions, type ViolationType, type SolutionViolation, type SolutionValidationSummary, type SolutionValidationReport, } from "./solution-validator.js";
|
|
14
|
+
export type { VarType, OptimizationSense, ComparisonSense, SolverStatus, TerminationStatus, SolveProgressEvent, SolveOptions, SolverSolution, CheckResult, ColumnDefinition, } from "./types.js";
|
|
10
15
|
export * from "./solvers/index.js";
|
|
11
16
|
export { getHighs, solveLpWithHighs, setHighsWasmUrl, getHighsWasmUrl } from "./solvers/highs/index.js";
|
|
12
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modeler/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modeler/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAC7G,OAAO,EAAE,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EACL,OAAO,EACP,KAAK,IAAI,EACT,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,GAAG,EACH,GAAG,GACJ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EACN,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,GAAG,EACH,EAAE,EACF,GAAG,EACH,OAAO,EACP,GAAG,GACJ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,SAAS,EACT,eAAe,EACf,IAAI,EACJ,KAAK,UAAU,EACf,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,qBAAqB,EACrB,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC;AAGjC,YAAY,EACV,OAAO,EACP,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,WAAW,EACX,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,cAAc,oBAAoB,CAAC;AAGnC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Constraint } from "./constraint.js";
|
|
2
|
+
import { Var } from "./variable.js";
|
|
3
|
+
import { BoolVar } from "./boolean-expr.js";
|
|
4
|
+
import type { LogicalConstraintItem } from "./solvers/types.js";
|
|
5
|
+
export interface LinearizationResult {
|
|
6
|
+
variables: Var[];
|
|
7
|
+
constraints: Constraint[];
|
|
8
|
+
boolVarToBinary: Map<BoolVar, Var>;
|
|
9
|
+
constraintToOriginalName: Map<Constraint, string>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Linearizes logical constraints (BoolVar, BoolOp) into MIP binary variables and linear constraints.
|
|
13
|
+
*/
|
|
14
|
+
export declare function linearizeModelForMip(baseVariables: Var[], boolVars: BoolVar[], baseConstraints: Constraint[], logicalConstraints: LogicalConstraintItem[]): LinearizationResult;
|
|
15
|
+
//# sourceMappingURL=linearizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linearizer.d.ts","sourceRoot":"","sources":["../../../src/modeler/linearizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,OAAO,EAA6B,MAAM,mBAAmB,CAAC;AAEvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAMhE,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,GAAG,EAAE,CAAC;IACjB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,eAAe,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnC,wBAAwB,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;CACnD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,GAAG,EAAE,EACpB,QAAQ,EAAE,OAAO,EAAE,EACnB,eAAe,EAAE,UAAU,EAAE,EAC7B,kBAAkB,EAAE,qBAAqB,EAAE,GAC1C,mBAAmB,CAyZrB"}
|
|
@@ -2,29 +2,56 @@ import type { Var } from "./variable.js";
|
|
|
2
2
|
import type { LinExpr } from "./expression.js";
|
|
3
3
|
import type { Constraint } from "./constraint.js";
|
|
4
4
|
import type { OptimizationSense } from "./types.js";
|
|
5
|
+
import type { SolveModelData } from "./solvers/types.js";
|
|
5
6
|
import { QuadExpr } from "./quad-expr.js";
|
|
6
|
-
export interface LpModelData {
|
|
7
|
+
export interface LpModelData extends SolveModelData {
|
|
7
8
|
name?: string;
|
|
8
9
|
sense: OptimizationSense;
|
|
9
10
|
objective: LinExpr | QuadExpr;
|
|
10
11
|
constraints: Constraint[];
|
|
11
12
|
variables: Var[];
|
|
12
13
|
}
|
|
14
|
+
export interface LpSymbolMaps {
|
|
15
|
+
/** Maps sanitized name in LP/backend to original Var */
|
|
16
|
+
nameToVar: Map<string, Var>;
|
|
17
|
+
/** Maps original Var handle to sanitized LP/backend name */
|
|
18
|
+
varToName: Map<Var, string>;
|
|
19
|
+
/** Maps sanitized name in LP/backend to original Constraint */
|
|
20
|
+
nameToConstraint: Map<string, Constraint>;
|
|
21
|
+
/** Maps original Constraint handle to sanitized LP/backend name */
|
|
22
|
+
constraintToName: Map<Constraint, string>;
|
|
23
|
+
/** Alias for constraintToName */
|
|
24
|
+
constrToName: Map<Constraint, string>;
|
|
25
|
+
/** Maps original Var handle to its 0-based order index */
|
|
26
|
+
varOrder: Map<Var, number>;
|
|
27
|
+
}
|
|
13
28
|
export interface LpExportResult {
|
|
14
29
|
lpString: string;
|
|
15
30
|
/** Maps sanitized name in LP to original Var */
|
|
16
31
|
nameToVar: Map<string, Var>;
|
|
17
32
|
/** Maps sanitized name in LP to original Constraint */
|
|
18
33
|
nameToConstraint: Map<string, Constraint>;
|
|
34
|
+
/** Maps original Var handle to sanitized name in LP */
|
|
35
|
+
varToName?: Map<Var, string>;
|
|
36
|
+
/** Maps original Constraint handle to sanitized name in LP */
|
|
37
|
+
constrToName?: Map<Constraint, string>;
|
|
19
38
|
}
|
|
39
|
+
export declare function isLpExportResult(value: unknown): value is LpExportResult;
|
|
20
40
|
/**
|
|
21
41
|
* Sanitize variable and constraint names to be valid CPLEX LP identifiers:
|
|
22
42
|
* Allowed chars: a-z, A-Z, 0-9, _, !, ", #, $, %, &, (, ), /, ?, @, ~, '
|
|
23
43
|
* Avoid +, -, *, :, <, >, =, [, ], spaces
|
|
24
44
|
*/
|
|
25
|
-
export declare function sanitizeIdentifier(raw: string, fallbackPrefix
|
|
45
|
+
export declare function sanitizeIdentifier(raw: string, fallbackPrefix?: string, id?: number): string;
|
|
46
|
+
/**
|
|
47
|
+
* Builds deterministic, collision-free sanitized identifier mappings for variables and constraints
|
|
48
|
+
* without serializing a full CPLEX LP text string.
|
|
49
|
+
*/
|
|
50
|
+
export declare function buildLpSymbolMaps(modelData: Pick<LpModelData, "variables" | "constraints">): LpSymbolMaps;
|
|
26
51
|
/**
|
|
27
52
|
* Convert a linear or quadratic model to standard CPLEX LP format string
|
|
28
53
|
*/
|
|
29
|
-
export declare function generateLpString(modelData: LpModelData
|
|
54
|
+
export declare function generateLpString(modelData: LpModelData, options?: {
|
|
55
|
+
relax?: boolean;
|
|
56
|
+
}): LpExportResult;
|
|
30
57
|
//# sourceMappingURL=lp-writer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lp-writer.d.ts","sourceRoot":"","sources":["../../../src/modeler/lp-writer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"lp-writer.d.ts","sourceRoot":"","sources":["../../../src/modeler/lp-writer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC9B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,SAAS,EAAE,GAAG,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,4DAA4D;IAC5D,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5B,+DAA+D;IAC/D,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC1C,mEAAmE;IACnE,gBAAgB,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC1C,iCAAiC;IACjC,YAAY,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACtC,0DAA0D;IAC1D,QAAQ,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,uDAAuD;IACvD,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC1C,uDAAuD;IACvD,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7B,8DAA8D;IAC9D,YAAY,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAQxE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,cAAc,GAAE,MAAY,EAC5B,EAAE,GAAE,MAAU,GACb,MAAM,CAWR;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,CAAC,GACxD,YAAY,CAiDd;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,WAAW,EACtB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5B,cAAc,CA8JhB"}
|