dabke 0.82.0 → 0.84.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/CHANGELOG.md +44 -0
- package/README.md +22 -24
- package/dist/client.d.ts +39 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/client.schemas.d.ts +118 -18
- package/dist/client.schemas.d.ts.map +1 -1
- package/dist/client.schemas.js +110 -6
- package/dist/client.schemas.js.map +1 -1
- package/dist/client.types.d.ts +63 -7
- package/dist/client.types.d.ts.map +1 -1
- package/dist/client.types.js.map +1 -1
- package/dist/cpsat/cost.d.ts +5 -2
- package/dist/cpsat/cost.d.ts.map +1 -1
- package/dist/cpsat/cost.js +13 -6
- package/dist/cpsat/cost.js.map +1 -1
- package/dist/cpsat/model-builder.d.ts +42 -61
- package/dist/cpsat/model-builder.d.ts.map +1 -1
- package/dist/cpsat/model-builder.js +451 -56
- package/dist/cpsat/model-builder.js.map +1 -1
- package/dist/cpsat/response.d.ts +19 -7
- package/dist/cpsat/response.d.ts.map +1 -1
- package/dist/cpsat/response.js +48 -9
- package/dist/cpsat/response.js.map +1 -1
- package/dist/cpsat/rule-descriptor.d.ts +250 -0
- package/dist/cpsat/rule-descriptor.d.ts.map +1 -0
- package/dist/cpsat/rule-descriptor.js +51 -0
- package/dist/cpsat/rule-descriptor.js.map +1 -0
- package/dist/cpsat/rules/artifacts.d.ts +9 -0
- package/dist/cpsat/rules/artifacts.d.ts.map +1 -0
- package/dist/cpsat/rules/artifacts.js +31 -0
- package/dist/cpsat/rules/artifacts.js.map +1 -0
- package/dist/cpsat/rules/assign-together.d.ts +18 -20
- package/dist/cpsat/rules/assign-together.d.ts.map +1 -1
- package/dist/cpsat/rules/assign-together.js +90 -54
- package/dist/cpsat/rules/assign-together.js.map +1 -1
- package/dist/cpsat/rules/assigned-day.d.ts +12 -0
- package/dist/cpsat/rules/assigned-day.d.ts.map +1 -0
- package/dist/cpsat/rules/assigned-day.js +43 -0
- package/dist/cpsat/rules/assigned-day.js.map +1 -0
- package/dist/cpsat/rules/assignment-priority.d.ts +15 -29
- package/dist/cpsat/rules/assignment-priority.d.ts.map +1 -1
- package/dist/cpsat/rules/assignment-priority.js +47 -50
- package/dist/cpsat/rules/assignment-priority.js.map +1 -1
- package/dist/cpsat/rules/assignment-terms.d.ts +6 -0
- package/dist/cpsat/rules/assignment-terms.d.ts.map +1 -0
- package/dist/cpsat/rules/assignment-terms.js +19 -0
- package/dist/cpsat/rules/assignment-terms.js.map +1 -0
- package/dist/cpsat/rules/concurrent-intervals.d.ts +19 -0
- package/dist/cpsat/rules/concurrent-intervals.d.ts.map +1 -0
- package/dist/cpsat/rules/concurrent-intervals.js +57 -0
- package/dist/cpsat/rules/concurrent-intervals.js.map +1 -0
- package/dist/cpsat/rules/cost-utils.d.ts +1 -3
- package/dist/cpsat/rules/cost-utils.d.ts.map +1 -1
- package/dist/cpsat/rules/cost-utils.js +0 -7
- package/dist/cpsat/rules/cost-utils.js.map +1 -1
- package/dist/cpsat/rules/day-cost-multiplier.d.ts +10 -10
- package/dist/cpsat/rules/day-cost-multiplier.d.ts.map +1 -1
- package/dist/cpsat/rules/day-cost-multiplier.js +88 -77
- package/dist/cpsat/rules/day-cost-multiplier.js.map +1 -1
- package/dist/cpsat/rules/day-cost-surcharge.d.ts +10 -10
- package/dist/cpsat/rules/day-cost-surcharge.d.ts.map +1 -1
- package/dist/cpsat/rules/day-cost-surcharge.js +76 -65
- package/dist/cpsat/rules/day-cost-surcharge.js.map +1 -1
- package/dist/cpsat/rules/index.d.ts +30 -21
- package/dist/cpsat/rules/index.d.ts.map +1 -1
- package/dist/cpsat/rules/index.js +30 -21
- package/dist/cpsat/rules/index.js.map +1 -1
- package/dist/cpsat/rules/location-preference.d.ts +14 -21
- package/dist/cpsat/rules/location-preference.d.ts.map +1 -1
- package/dist/cpsat/rules/location-preference.js +45 -45
- package/dist/cpsat/rules/location-preference.js.map +1 -1
- package/dist/cpsat/rules/max-concurrent-assignments.d.ts +46 -0
- package/dist/cpsat/rules/max-concurrent-assignments.d.ts.map +1 -0
- package/dist/cpsat/rules/max-concurrent-assignments.js +121 -0
- package/dist/cpsat/rules/max-concurrent-assignments.js.map +1 -0
- package/dist/cpsat/rules/max-consecutive-days.d.ts +18 -17
- package/dist/cpsat/rules/max-consecutive-days.d.ts.map +1 -1
- package/dist/cpsat/rules/max-consecutive-days.js +67 -66
- package/dist/cpsat/rules/max-consecutive-days.js.map +1 -1
- package/dist/cpsat/rules/max-days-of-week-per-period.d.ts +45 -0
- package/dist/cpsat/rules/max-days-of-week-per-period.d.ts.map +1 -0
- package/dist/cpsat/rules/max-days-of-week-per-period.js +95 -0
- package/dist/cpsat/rules/max-days-of-week-per-period.js.map +1 -0
- package/dist/cpsat/rules/max-days-week.d.ts +30 -0
- package/dist/cpsat/rules/max-days-week.d.ts.map +1 -0
- package/dist/cpsat/rules/max-days-week.js +83 -0
- package/dist/cpsat/rules/max-days-week.js.map +1 -0
- package/dist/cpsat/rules/max-hours-day.d.ts +14 -31
- package/dist/cpsat/rules/max-hours-day.d.ts.map +1 -1
- package/dist/cpsat/rules/max-hours-day.js +56 -72
- package/dist/cpsat/rules/max-hours-day.js.map +1 -1
- package/dist/cpsat/rules/max-hours-week.d.ts +15 -31
- package/dist/cpsat/rules/max-hours-week.d.ts.map +1 -1
- package/dist/cpsat/rules/max-hours-week.js +60 -75
- package/dist/cpsat/rules/max-hours-week.js.map +1 -1
- package/dist/cpsat/rules/max-shifts-day.d.ts +17 -33
- package/dist/cpsat/rules/max-shifts-day.d.ts.map +1 -1
- package/dist/cpsat/rules/max-shifts-day.js +57 -73
- package/dist/cpsat/rules/max-shifts-day.js.map +1 -1
- package/dist/cpsat/rules/min-consecutive-days.d.ts +18 -18
- package/dist/cpsat/rules/min-consecutive-days.d.ts.map +1 -1
- package/dist/cpsat/rules/min-consecutive-days.js +123 -94
- package/dist/cpsat/rules/min-consecutive-days.js.map +1 -1
- package/dist/cpsat/rules/min-days-of-week-per-period.d.ts +35 -0
- package/dist/cpsat/rules/min-days-of-week-per-period.d.ts.map +1 -0
- package/dist/cpsat/rules/min-days-of-week-per-period.js +108 -0
- package/dist/cpsat/rules/min-days-of-week-per-period.js.map +1 -0
- package/dist/cpsat/rules/min-days-week.d.ts +21 -0
- package/dist/cpsat/rules/min-days-week.d.ts.map +1 -0
- package/dist/cpsat/rules/min-days-week.js +95 -0
- package/dist/cpsat/rules/min-days-week.js.map +1 -0
- package/dist/cpsat/rules/min-hours-day.d.ts +14 -17
- package/dist/cpsat/rules/min-hours-day.d.ts.map +1 -1
- package/dist/cpsat/rules/min-hours-day.js +72 -54
- package/dist/cpsat/rules/min-hours-day.js.map +1 -1
- package/dist/cpsat/rules/min-hours-week.d.ts +15 -18
- package/dist/cpsat/rules/min-hours-week.d.ts.map +1 -1
- package/dist/cpsat/rules/min-hours-week.js +75 -57
- package/dist/cpsat/rules/min-hours-week.js.map +1 -1
- package/dist/cpsat/rules/min-rest-between-shifts.d.ts +14 -17
- package/dist/cpsat/rules/min-rest-between-shifts.d.ts.map +1 -1
- package/dist/cpsat/rules/min-rest-between-shifts.js +148 -138
- package/dist/cpsat/rules/min-rest-between-shifts.js.map +1 -1
- package/dist/cpsat/rules/minimize-cost.d.ts +2 -18
- package/dist/cpsat/rules/minimize-cost.d.ts.map +1 -1
- package/dist/cpsat/rules/minimize-cost.js +151 -163
- package/dist/cpsat/rules/minimize-cost.js.map +1 -1
- package/dist/cpsat/rules/must-assign.d.ts +12 -0
- package/dist/cpsat/rules/must-assign.d.ts.map +1 -0
- package/dist/cpsat/rules/must-assign.js +54 -0
- package/dist/cpsat/rules/must-assign.js.map +1 -0
- package/dist/cpsat/rules/overtime-daily-multiplier.d.ts +6 -10
- package/dist/cpsat/rules/overtime-daily-multiplier.d.ts.map +1 -1
- package/dist/cpsat/rules/overtime-daily-multiplier.js +118 -112
- package/dist/cpsat/rules/overtime-daily-multiplier.js.map +1 -1
- package/dist/cpsat/rules/overtime-daily-surcharge.d.ts +6 -11
- package/dist/cpsat/rules/overtime-daily-surcharge.d.ts.map +1 -1
- package/dist/cpsat/rules/overtime-daily-surcharge.js +104 -99
- package/dist/cpsat/rules/overtime-daily-surcharge.js.map +1 -1
- package/dist/cpsat/rules/overtime-tiered-multiplier.d.ts +9 -21
- package/dist/cpsat/rules/overtime-tiered-multiplier.d.ts.map +1 -1
- package/dist/cpsat/rules/overtime-tiered-multiplier.js +181 -199
- package/dist/cpsat/rules/overtime-tiered-multiplier.js.map +1 -1
- package/dist/cpsat/rules/overtime-weekly-multiplier.d.ts +13 -12
- package/dist/cpsat/rules/overtime-weekly-multiplier.d.ts.map +1 -1
- package/dist/cpsat/rules/overtime-weekly-multiplier.js +143 -143
- package/dist/cpsat/rules/overtime-weekly-multiplier.js.map +1 -1
- package/dist/cpsat/rules/overtime-weekly-surcharge.d.ts +7 -11
- package/dist/cpsat/rules/overtime-weekly-surcharge.d.ts.map +1 -1
- package/dist/cpsat/rules/overtime-weekly-surcharge.js +124 -119
- package/dist/cpsat/rules/overtime-weekly-surcharge.js.map +1 -1
- package/dist/cpsat/rules/pattern-eligibility.d.ts +6 -0
- package/dist/cpsat/rules/pattern-eligibility.d.ts.map +1 -0
- package/dist/cpsat/rules/pattern-eligibility.js +16 -0
- package/dist/cpsat/rules/pattern-eligibility.js.map +1 -0
- package/dist/cpsat/rules/pattern-time.d.ts +5 -0
- package/dist/cpsat/rules/pattern-time.d.ts.map +1 -0
- package/dist/cpsat/rules/pattern-time.js +20 -0
- package/dist/cpsat/rules/pattern-time.js.map +1 -0
- package/dist/cpsat/rules/registry.d.ts +217 -27
- package/dist/cpsat/rules/registry.d.ts.map +1 -1
- package/dist/cpsat/rules/registry.js +98 -31
- package/dist/cpsat/rules/registry.js.map +1 -1
- package/dist/cpsat/rules/resolver.d.ts +9 -7
- package/dist/cpsat/rules/resolver.d.ts.map +1 -1
- package/dist/cpsat/rules/resolver.js +19 -18
- package/dist/cpsat/rules/resolver.js.map +1 -1
- package/dist/cpsat/rules/role-preference.d.ts +24 -0
- package/dist/cpsat/rules/role-preference.d.ts.map +1 -0
- package/dist/cpsat/rules/role-preference.js +72 -0
- package/dist/cpsat/rules/role-preference.js.map +1 -0
- package/dist/cpsat/rules/rules.types.d.ts +93 -17
- package/dist/cpsat/rules/rules.types.d.ts.map +1 -1
- package/dist/cpsat/rules/scope.types.d.ts +25 -12
- package/dist/cpsat/rules/scope.types.d.ts.map +1 -1
- package/dist/cpsat/rules/scope.types.js +14 -19
- package/dist/cpsat/rules/scope.types.js.map +1 -1
- package/dist/cpsat/rules/target-days-week.d.ts +31 -0
- package/dist/cpsat/rules/target-days-week.d.ts.map +1 -0
- package/dist/cpsat/rules/target-days-week.js +80 -0
- package/dist/cpsat/rules/target-days-week.js.map +1 -0
- package/dist/cpsat/rules/target-peak-concurrent-assignments.d.ts +33 -0
- package/dist/cpsat/rules/target-peak-concurrent-assignments.d.ts.map +1 -0
- package/dist/cpsat/rules/target-peak-concurrent-assignments.js +146 -0
- package/dist/cpsat/rules/target-peak-concurrent-assignments.js.map +1 -0
- package/dist/cpsat/rules/time-cost-surcharge.d.ts +15 -14
- package/dist/cpsat/rules/time-cost-surcharge.d.ts.map +1 -1
- package/dist/cpsat/rules/time-cost-surcharge.js +82 -96
- package/dist/cpsat/rules/time-cost-surcharge.js.map +1 -1
- package/dist/cpsat/rules/time-off.d.ts +21 -57
- package/dist/cpsat/rules/time-off.d.ts.map +1 -1
- package/dist/cpsat/rules/time-off.js +114 -127
- package/dist/cpsat/rules/time-off.js.map +1 -1
- package/dist/cpsat/rules/variables.d.ts +4 -0
- package/dist/cpsat/rules/variables.d.ts.map +1 -0
- package/dist/cpsat/rules/variables.js +10 -0
- package/dist/cpsat/rules/variables.js.map +1 -0
- package/dist/cpsat/rules.d.ts +20 -3
- package/dist/cpsat/rules.d.ts.map +1 -1
- package/dist/cpsat/rules.js +19 -2
- package/dist/cpsat/rules.js.map +1 -1
- package/dist/cpsat/semantic-time.d.ts +7 -6
- package/dist/cpsat/semantic-time.d.ts.map +1 -1
- package/dist/cpsat/semantic-time.js +15 -28
- package/dist/cpsat/semantic-time.js.map +1 -1
- package/dist/cpsat/types.d.ts +47 -4
- package/dist/cpsat/types.d.ts.map +1 -1
- package/dist/cpsat/types.js +24 -1
- package/dist/cpsat/types.js.map +1 -1
- package/dist/cpsat/utils.d.ts +23 -6
- package/dist/cpsat/utils.d.ts.map +1 -1
- package/dist/cpsat/utils.js +76 -15
- package/dist/cpsat/utils.js.map +1 -1
- package/dist/cpsat/validation-reporter.d.ts +6 -2
- package/dist/cpsat/validation-reporter.d.ts.map +1 -1
- package/dist/cpsat/validation-reporter.js +122 -10
- package/dist/cpsat/validation-reporter.js.map +1 -1
- package/dist/cpsat/validation.types.d.ts +21 -10
- package/dist/cpsat/validation.types.d.ts.map +1 -1
- package/dist/datetime.utils.d.ts +7 -13
- package/dist/datetime.utils.d.ts.map +1 -1
- package/dist/datetime.utils.js +29 -36
- package/dist/datetime.utils.js.map +1 -1
- package/dist/index.d.ts +15 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -4
- package/dist/index.js.map +1 -1
- package/dist/schedule/cost.d.ts +192 -0
- package/dist/schedule/cost.d.ts.map +1 -0
- package/dist/schedule/cost.js +151 -0
- package/dist/schedule/cost.js.map +1 -0
- package/dist/schedule/coverage.d.ts +114 -0
- package/dist/schedule/coverage.d.ts.map +1 -0
- package/dist/schedule/coverage.js +56 -0
- package/dist/schedule/coverage.js.map +1 -0
- package/dist/schedule/definition.d.ts +346 -0
- package/dist/schedule/definition.d.ts.map +1 -0
- package/dist/schedule/definition.js +668 -0
- package/dist/schedule/definition.js.map +1 -0
- package/dist/schedule/index.d.ts +67 -0
- package/dist/schedule/index.d.ts.map +1 -0
- package/dist/schedule/index.js +69 -0
- package/dist/schedule/index.js.map +1 -0
- package/dist/schedule/rules.d.ts +678 -0
- package/dist/schedule/rules.d.ts.map +1 -0
- package/dist/schedule/rules.js +554 -0
- package/dist/schedule/rules.js.map +1 -0
- package/dist/schedule/shift-patterns.d.ts +17 -0
- package/dist/schedule/shift-patterns.d.ts.map +1 -0
- package/dist/schedule/shift-patterns.js +24 -0
- package/dist/schedule/shift-patterns.js.map +1 -0
- package/dist/schedule/time-periods.d.ts +79 -0
- package/dist/schedule/time-periods.d.ts.map +1 -0
- package/dist/schedule/time-periods.js +101 -0
- package/dist/schedule/time-periods.js.map +1 -0
- package/dist/types.d.ts +67 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +64 -0
- package/dist/types.js.map +1 -1
- package/package.json +8 -14
- package/solver/src/solver/models.py +41 -4
- package/solver/src/solver/solver.py +546 -157
- package/solver/tests/test_solver.py +363 -7
- package/src/client.schemas.ts +127 -10
- package/src/client.ts +3 -0
- package/src/client.types.ts +73 -7
- package/src/cpsat/cost.ts +17 -7
- package/src/cpsat/model-builder.ts +614 -129
- package/src/cpsat/response.ts +57 -13
- package/src/cpsat/rule-descriptor.ts +311 -0
- package/src/cpsat/rules/artifacts.ts +56 -0
- package/src/cpsat/rules/assign-together.ts +104 -69
- package/src/cpsat/rules/assigned-day.ts +70 -0
- package/src/cpsat/rules/assignment-priority.ts +54 -58
- package/src/cpsat/rules/assignment-terms.ts +43 -0
- package/src/cpsat/rules/concurrent-intervals.ts +93 -0
- package/src/cpsat/rules/cost-utils.ts +1 -9
- package/src/cpsat/rules/day-cost-multiplier.ts +101 -81
- package/src/cpsat/rules/day-cost-surcharge.ts +91 -70
- package/src/cpsat/rules/index.ts +30 -21
- package/src/cpsat/rules/location-preference.ts +47 -52
- package/src/cpsat/rules/max-concurrent-assignments.ts +170 -0
- package/src/cpsat/rules/max-consecutive-days.ts +74 -91
- package/src/cpsat/rules/max-days-of-week-per-period.ts +127 -0
- package/src/cpsat/rules/max-days-week.ts +117 -0
- package/src/cpsat/rules/max-hours-day.ts +64 -84
- package/src/cpsat/rules/max-hours-week.ts +74 -90
- package/src/cpsat/rules/max-shifts-day.ts +65 -85
- package/src/cpsat/rules/min-consecutive-days.ts +161 -127
- package/src/cpsat/rules/min-days-of-week-per-period.ts +144 -0
- package/src/cpsat/rules/min-days-week.ts +122 -0
- package/src/cpsat/rules/min-hours-day.ts +79 -58
- package/src/cpsat/rules/min-hours-week.ts +87 -62
- package/src/cpsat/rules/min-rest-between-shifts.ts +191 -178
- package/src/cpsat/rules/minimize-cost.ts +175 -188
- package/src/cpsat/rules/must-assign.ts +71 -0
- package/src/cpsat/rules/overtime-daily-multiplier.ts +158 -140
- package/src/cpsat/rules/overtime-daily-surcharge.ts +141 -126
- package/src/cpsat/rules/overtime-tiered-multiplier.ts +234 -253
- package/src/cpsat/rules/overtime-weekly-multiplier.ts +183 -175
- package/src/cpsat/rules/overtime-weekly-surcharge.ts +161 -150
- package/src/cpsat/rules/pattern-eligibility.ts +26 -0
- package/src/cpsat/rules/pattern-time.ts +30 -0
- package/src/cpsat/rules/registry.ts +140 -56
- package/src/cpsat/rules/resolver.ts +58 -30
- package/src/cpsat/rules/role-preference.ts +92 -0
- package/src/cpsat/rules/rules.types.ts +92 -17
- package/src/cpsat/rules/scope.types.ts +32 -27
- package/src/cpsat/rules/target-days-week.ts +105 -0
- package/src/cpsat/rules/target-peak-concurrent-assignments.ts +212 -0
- package/src/cpsat/rules/time-cost-surcharge.ts +116 -122
- package/src/cpsat/rules/time-off.ts +154 -163
- package/src/cpsat/rules/variables.ts +11 -0
- package/src/cpsat/rules.ts +43 -17
- package/src/cpsat/semantic-time.ts +29 -43
- package/src/cpsat/types.ts +53 -4
- package/src/cpsat/utils.ts +92 -20
- package/src/cpsat/validation-reporter.ts +170 -19
- package/src/cpsat/validation.types.ts +22 -11
- package/src/datetime.utils.ts +45 -44
- package/src/index.ts +72 -15
- package/src/schedule/cost.ts +221 -0
- package/src/schedule/coverage.ts +164 -0
- package/src/schedule/definition.ts +1447 -0
- package/src/schedule/index.ts +132 -0
- package/src/schedule/rules.ts +1028 -0
- package/src/schedule/shift-patterns.ts +29 -0
- package/src/schedule/time-periods.ts +120 -0
- package/src/types.ts +114 -2
- package/dist/llms.d.ts +0 -2
- package/dist/llms.d.ts.map +0 -1
- package/dist/llms.js +0 -3
- package/dist/llms.js.map +0 -1
- package/dist/schedule.d.ts +0 -917
- package/dist/schedule.d.ts.map +0 -1
- package/dist/schedule.js +0 -1323
- package/dist/schedule.js.map +0 -1
- package/llms.txt +0 -758
- package/src/llms.ts +0 -3
- package/src/schedule.ts +0 -1960
package/dist/client.types.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* @see client.schemas.ts for the source Zod schemas
|
|
7
7
|
*/
|
|
8
8
|
import type { z } from "zod";
|
|
9
|
-
import type { SolverTermSchema, SolverVariableSchema, SolverConstraintSchema, SolverObjectiveSchema, SolverRequestSchema, SolverResponseSchema, SolverStatusSchema,
|
|
9
|
+
import type { SolverTermSchema, SolverVariableSchema, SolverConstraintSchema, SolverObjectiveSchema, SolverObjectiveStageSchema, SolverRequestSchema, SolverResponseSchema, SolverStageResultSchema, SolverDiagnosticModeSchema, SolverStatusSchema, SolverModeSchema, SolverSoftConstraintViolationSchema, SolverHardConstraintConflictSchema } from "./client.schemas.js";
|
|
10
10
|
/**
|
|
11
11
|
* A single linear term in a constraint or objective.
|
|
12
12
|
*
|
|
@@ -37,29 +37,71 @@ export type SolverConstraint = z.infer<typeof SolverConstraintSchema>;
|
|
|
37
37
|
* An optimization objective for the solver.
|
|
38
38
|
*
|
|
39
39
|
* - `terms` (required): linear terms to minimize/maximize
|
|
40
|
-
* - `
|
|
40
|
+
* - `sense` (required): whether to minimize or maximize
|
|
41
41
|
*/
|
|
42
42
|
export type SolverObjective = z.infer<typeof SolverObjectiveSchema>;
|
|
43
|
+
/**
|
|
44
|
+
* A named objective optimized as one step in a lexicographic solve.
|
|
45
|
+
*
|
|
46
|
+
* - `id` (required): unique stage identifier
|
|
47
|
+
* - `sense` (required): whether to minimize or maximize
|
|
48
|
+
* - `terms` (required): linear terms to optimize
|
|
49
|
+
*/
|
|
50
|
+
export type SolverObjectiveStage = z.infer<typeof SolverObjectiveStageSchema>;
|
|
51
|
+
/**
|
|
52
|
+
* Solver mode.
|
|
53
|
+
*
|
|
54
|
+
* `"optimize"` is the semantic default when omitted. `"satisfy"` asks the
|
|
55
|
+
* solver to find any hard-feasible solution without optimizing objectives or
|
|
56
|
+
* soft constraint penalties.
|
|
57
|
+
*/
|
|
58
|
+
export type SolverMode = z.infer<typeof SolverModeSchema>;
|
|
59
|
+
/**
|
|
60
|
+
* Solver diagnostic mode.
|
|
61
|
+
*
|
|
62
|
+
* - `"none"`: solve normally without extra hard-conflict tracking
|
|
63
|
+
* - `"hard"`: track hard constraints with CP-SAT assumptions so infeasible responses include conflicts
|
|
64
|
+
*/
|
|
65
|
+
export type SolverDiagnosticMode = z.infer<typeof SolverDiagnosticModeSchema>;
|
|
43
66
|
/**
|
|
44
67
|
* The full request payload sent to the CP-SAT solver service.
|
|
45
68
|
*
|
|
46
69
|
* - `variables` (required): all decision variables
|
|
47
70
|
* - `constraints` (required): all constraints
|
|
48
71
|
* - `objective` (optional): optimization objective
|
|
49
|
-
* - `
|
|
72
|
+
* - `objectiveStages` (optional): named objectives solved in lexicographic order
|
|
73
|
+
* - `mode` (optional): solving mode, defaulting semantically to `"optimize"`
|
|
74
|
+
* - `options` (optional): solver time limit, solution controls, and diagnostics mode
|
|
50
75
|
*/
|
|
51
76
|
export type SolverRequest = z.infer<typeof SolverRequestSchema>;
|
|
52
77
|
/**
|
|
53
|
-
* The response payload returned by the CP-SAT solver service.
|
|
78
|
+
* The raw response payload returned by the CP-SAT solver service.
|
|
79
|
+
*
|
|
80
|
+
* @remarks
|
|
81
|
+
* This transport type is solver-stage only. It is later translated into the
|
|
82
|
+
* public `ScheduleValidation` feedback model with `errors`, `violations`, and
|
|
83
|
+
* `passed` items.
|
|
54
84
|
*
|
|
55
85
|
* - `status` (required): solve outcome (see {@link SolverStatus})
|
|
56
86
|
* - `values` (optional): variable assignments when a solution is found
|
|
57
87
|
* - `statistics` (optional): solve time, conflicts, branches
|
|
58
|
-
* - `
|
|
88
|
+
* - `softConstraintViolations` (required on `OPTIMAL`/`FEASIBLE` responses): raw solver-stage records for violated soft constraints
|
|
89
|
+
* - `hardConstraintConflicts` (optional on `INFEASIBLE` responses): tracked hard constraints in a sufficient infeasible set
|
|
59
90
|
* - `error` (optional): error message on failure
|
|
60
91
|
* - `solutionInfo` (optional): solver diagnostic info
|
|
92
|
+
* - `stageResults` (optional): per-stage metadata for staged optimization
|
|
61
93
|
*/
|
|
62
94
|
export type SolverResponse = z.infer<typeof SolverResponseSchema>;
|
|
95
|
+
/**
|
|
96
|
+
* Metadata for one solved objective stage.
|
|
97
|
+
*
|
|
98
|
+
* - `id` (required): objective stage identifier
|
|
99
|
+
* - `status` (required): solve outcome for the stage
|
|
100
|
+
* - `objectiveValue` (optional): achieved objective value when available
|
|
101
|
+
* - `bestObjectiveBound` (optional): solver bound when available
|
|
102
|
+
* - `solveTimeMs` (required): wall-clock solve time for this stage
|
|
103
|
+
*/
|
|
104
|
+
export type SolverStageResult = z.infer<typeof SolverStageResultSchema>;
|
|
63
105
|
/**
|
|
64
106
|
* Solver outcome status.
|
|
65
107
|
*
|
|
@@ -69,12 +111,26 @@ export type SolverResponse = z.infer<typeof SolverResponseSchema>;
|
|
|
69
111
|
*/
|
|
70
112
|
export type SolverStatus = z.infer<typeof SolverStatusSchema>;
|
|
71
113
|
/**
|
|
72
|
-
* A
|
|
114
|
+
* A raw solver-stage record for a violated soft constraint.
|
|
115
|
+
*
|
|
116
|
+
* Successful solver responses always include a
|
|
117
|
+
* `softConstraintViolations` array, even when it is empty.
|
|
73
118
|
*
|
|
74
119
|
* - `constraintId` (required): which soft constraint was violated
|
|
75
120
|
* - `violationAmount` (required): magnitude of the violation
|
|
76
121
|
*/
|
|
77
|
-
export type
|
|
122
|
+
export type SolverSoftConstraintViolation = z.infer<typeof SolverSoftConstraintViolationSchema>;
|
|
123
|
+
/**
|
|
124
|
+
* A tracked hard constraint included in a sufficient infeasible constraint set.
|
|
125
|
+
*
|
|
126
|
+
* @remarks
|
|
127
|
+
* Hard constraints are not reported as violations because no solution exists to
|
|
128
|
+
* measure actual values against. The solver reports a sufficient conflict set
|
|
129
|
+
* from CP-SAT assumptions instead.
|
|
130
|
+
*
|
|
131
|
+
* - `constraintId` (required): which tracked hard constraint is part of the conflict set
|
|
132
|
+
*/
|
|
133
|
+
export type SolverHardConstraintConflict = z.infer<typeof SolverHardConstraintConflictSchema>;
|
|
78
134
|
/** Convenience constants for {@link SolverStatus} values. */
|
|
79
135
|
export declare const SOLVER_STATUS: {
|
|
80
136
|
readonly OPTIMAL: "OPTIMAL";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.types.d.ts","sourceRoot":"","sources":["../src/client.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"client.types.d.ts","sourceRoot":"","sources":["../src/client.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,EAClB,gBAAgB,EAChB,mCAAmC,EACnC,kCAAkC,EACnC,MAAM,qBAAqB,CAAC;AAM7B;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;;;;;GAQG;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAEhG;;;;;;;;;GASG;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAM9F,6DAA6D;AAC7D,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AAMX,6DAA6D;AAC7D,MAAM,MAAM,WAAW,GACnB,OAAO,KAAK,GACZ;IACE,KAAK,EAAE,OAAO,KAAK,CAAC;CACrB,CAAC;AAEN;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3F,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
|
package/dist/client.types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.types.js","sourceRoot":"","sources":["../src/client.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"client.types.js","sourceRoot":"","sources":["../src/client.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgKH,6EAA6E;AAC7E,qCAAqC;AACrC,6EAA6E;AAE7E,6DAA6D;AAC7D,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;CACN,CAAC"}
|
package/dist/cpsat/cost.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import type { DayOfWeek, SchedulingDay } from "../types.js";
|
|
1
2
|
import type { ShiftAssignment } from "./response.js";
|
|
2
3
|
import type { SchedulingMember, ShiftPattern } from "./types.js";
|
|
3
|
-
import type {
|
|
4
|
+
import type { CompiledRule } from "./rule-descriptor.js";
|
|
4
5
|
/**
|
|
5
6
|
* Well-known cost categories used by built-in rules.
|
|
6
7
|
*
|
|
@@ -49,7 +50,9 @@ export interface CostBreakdown {
|
|
|
49
50
|
export interface CostCalculationConfig {
|
|
50
51
|
members: ReadonlyArray<SchedulingMember>;
|
|
51
52
|
shiftPatterns: ReadonlyArray<ShiftPattern>;
|
|
52
|
-
rules: ReadonlyArray<
|
|
53
|
+
rules: ReadonlyArray<CompiledRule>;
|
|
54
|
+
days: ReadonlyArray<SchedulingDay>;
|
|
55
|
+
weekStartsOn: DayOfWeek;
|
|
53
56
|
}
|
|
54
57
|
/**
|
|
55
58
|
* Computes the actual cost of a solved schedule using the same cost model
|
package/dist/cpsat/cost.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/cpsat/cost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/cpsat/cost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,sBAAsB,CAAC;AAGpE;;;;;GAKG;AACH,eAAO,MAAM,aAAa;IACxB,iDAAiD;;IAEjD,2CAA2C;;IAE3C,+DAA+D;;CAEvD,CAAC;AAEX;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAChD,oBAAoB;IACpB,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACzC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAC3C,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACnC,IAAI,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACnC,YAAY,EAAE,SAAS,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,eAAe,EAAE,EAC9B,MAAM,EAAE,qBAAqB,GAC5B,aAAa,CA8Df"}
|
package/dist/cpsat/cost.js
CHANGED
|
@@ -24,14 +24,21 @@ export const COST_CATEGORY = {
|
|
|
24
24
|
* @param config - Members, shift patterns, and compiled rules
|
|
25
25
|
*/
|
|
26
26
|
export function calculateScheduleCost(assignments, config) {
|
|
27
|
-
const { members, shiftPatterns, rules } = config;
|
|
28
|
-
// Collect all cost entries from
|
|
27
|
+
const { members, shiftPatterns, rules, days } = config;
|
|
28
|
+
// Collect all cost entries from cost artifacts
|
|
29
29
|
const allEntries = [];
|
|
30
30
|
for (const rule of rules) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
for (const artifact of rule.artifacts) {
|
|
32
|
+
if (artifact.kind !== "cost" || !artifact.calculateCost)
|
|
33
|
+
continue;
|
|
34
|
+
const contribution = artifact.calculateCost(assignments, {
|
|
35
|
+
members,
|
|
36
|
+
shiftPatterns,
|
|
37
|
+
days,
|
|
38
|
+
weekStartsOn: config.weekStartsOn,
|
|
39
|
+
});
|
|
40
|
+
allEntries.push(...contribution.entries);
|
|
41
|
+
}
|
|
35
42
|
}
|
|
36
43
|
// Compute total hours per member from assignments
|
|
37
44
|
const patternMap = new Map(shiftPatterns.map((p) => [p.id, p]));
|
package/dist/cpsat/cost.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/cpsat/cost.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/cpsat/cost.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +1,15 @@
|
|
|
1
1
|
import type { SolverRequest } from "../client.types.js";
|
|
2
|
-
import type { DayOfWeek, SchedulingPeriod } from "../types.js";
|
|
3
|
-
import type { CoverageRequirement, ModelBuilderOptions, ShiftPattern, SchedulingMember, Term } from "./types.js";
|
|
4
|
-
import type { CpsatRuleConfigEntry,
|
|
2
|
+
import type { DayOfWeek, SchedulingDay, SchedulingPeriod } from "../types.js";
|
|
3
|
+
import type { CoverageRequirement, ModelBuilderOptions, ModelSolveStrategy, ShiftPattern, SchedulingMember, Term } from "./types.js";
|
|
4
|
+
import type { AnyCpsatRuleConfigEntry, BuiltInCpsatRuleRegistry, CpsatRuleConfigEntry, CpsatRuleRegistry } from "./rules/rules.types.js";
|
|
5
5
|
import type { ValidationReporter } from "./validation-reporter.js";
|
|
6
6
|
import type { ScheduleValidation } from "./validation.types.js";
|
|
7
7
|
import type { ShiftAssignment, ResolvedShiftAssignment } from "./response.js";
|
|
8
|
+
import type { CompiledRule, CostContribution } from "./rule-descriptor.js";
|
|
8
9
|
/**
|
|
9
10
|
* Builds a CP-SAT solver request from high-level scheduling constructs
|
|
10
11
|
* (team, shift patterns, coverage, and rule compilers).
|
|
11
12
|
*/
|
|
12
|
-
/**
|
|
13
|
-
* Context provided to rules during post-solve validation.
|
|
14
|
-
*/
|
|
15
|
-
export interface RuleValidationContext {
|
|
16
|
-
readonly members: SchedulingMember[];
|
|
17
|
-
readonly days: string[];
|
|
18
|
-
readonly shiftPatterns: ShiftPattern[];
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* A rule that adds constraints or objectives to the solver model.
|
|
22
|
-
*
|
|
23
|
-
* Rules implement `compile` to emit solver constraints during model building,
|
|
24
|
-
* and optionally `validate` to check the solution after solving.
|
|
25
|
-
* Use the `create*Rule` functions to create built-in rules.
|
|
26
|
-
*/
|
|
27
|
-
export interface CompilationRule {
|
|
28
|
-
/** Emit constraints and objectives into the model builder. */
|
|
29
|
-
compile(builder: ModelBuilder): void;
|
|
30
|
-
/** Validate the solved schedule and report violations. */
|
|
31
|
-
validate?(assignments: ResolvedShiftAssignment[], reporter: ValidationReporter, context: RuleValidationContext): void;
|
|
32
|
-
/** Compute cost contribution for a solved schedule. */
|
|
33
|
-
cost?(assignments: ShiftAssignment[], members: ReadonlyArray<SchedulingMember>, shiftPatterns: ReadonlyArray<ShiftPattern>): CostContribution;
|
|
34
|
-
}
|
|
35
13
|
/**
|
|
36
14
|
* Shared context for cost rules.
|
|
37
15
|
*
|
|
@@ -44,24 +22,6 @@ export interface CostContext {
|
|
|
44
22
|
/** Whether minimizeCost() is active (modifier rules check this). */
|
|
45
23
|
active: boolean;
|
|
46
24
|
}
|
|
47
|
-
/**
|
|
48
|
-
* A cost entry produced by a rule's `cost()` method.
|
|
49
|
-
*
|
|
50
|
-
* The `category` is an open-ended string. Built-in rules use well-known
|
|
51
|
-
* categories from {@link COST_CATEGORY}. Custom rules can use any string.
|
|
52
|
-
*/
|
|
53
|
-
export interface CostEntry {
|
|
54
|
-
memberId: string;
|
|
55
|
-
day: string;
|
|
56
|
-
category: string;
|
|
57
|
-
amount: number;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Cost contribution from a single rule.
|
|
61
|
-
*/
|
|
62
|
-
export interface CostContribution {
|
|
63
|
-
entries: CostEntry[];
|
|
64
|
-
}
|
|
65
25
|
/**
|
|
66
26
|
* Result of {@link ModelBuilder.compile}.
|
|
67
27
|
*
|
|
@@ -90,7 +50,16 @@ export interface CompilationResult {
|
|
|
90
50
|
* };
|
|
91
51
|
* ```
|
|
92
52
|
*/
|
|
93
|
-
|
|
53
|
+
/**
|
|
54
|
+
* Configuration for {@link ModelBuilder}.
|
|
55
|
+
*
|
|
56
|
+
* @remarks
|
|
57
|
+
* The optional `Registry` generic keeps `ruleConfigs` type-safe for custom rule
|
|
58
|
+
* registries. When omitted, the config defaults to the built-in CP-SAT registry.
|
|
59
|
+
*
|
|
60
|
+
* @category Model Builder
|
|
61
|
+
*/
|
|
62
|
+
export interface ModelBuilderConfig<Registry extends CpsatRuleRegistry = BuiltInCpsatRuleRegistry, RuleConfigEntry extends AnyCpsatRuleConfigEntry = CpsatRuleConfigEntry<Registry>> extends ModelBuilderOptions {
|
|
94
63
|
/** Team members available for scheduling. */
|
|
95
64
|
members: SchedulingMember[];
|
|
96
65
|
/** Available shift patterns (time slots) that members can be assigned to. */
|
|
@@ -104,17 +73,17 @@ export interface ModelBuilderConfig extends ModelBuilderOptions {
|
|
|
104
73
|
/**
|
|
105
74
|
* Pre-compiled rules; use this for custom rules that are not part of the registry.
|
|
106
75
|
*/
|
|
107
|
-
rules?:
|
|
76
|
+
rules?: CompiledRule[];
|
|
108
77
|
/**
|
|
109
|
-
* Named rule configurations that will be compiled using the provided rule
|
|
78
|
+
* Named rule configurations that will be compiled using the provided rule registry.
|
|
110
79
|
*/
|
|
111
|
-
ruleConfigs?:
|
|
80
|
+
ruleConfigs?: RuleConfigEntry[];
|
|
112
81
|
/**
|
|
113
|
-
* Rule
|
|
82
|
+
* Rule registry to use when compiling ruleConfigs. Defaults to the built-in CP-SAT registry.
|
|
114
83
|
*/
|
|
115
|
-
|
|
84
|
+
ruleRegistry?: Registry;
|
|
116
85
|
/**
|
|
117
|
-
* Optional validation reporter for
|
|
86
|
+
* Optional validation reporter for validation feedback.
|
|
118
87
|
*/
|
|
119
88
|
reporter?: ValidationReporter;
|
|
120
89
|
}
|
|
@@ -128,23 +97,34 @@ export declare class ModelBuilder {
|
|
|
128
97
|
#private;
|
|
129
98
|
readonly members: SchedulingMember[];
|
|
130
99
|
readonly shiftPatterns: ShiftPattern[];
|
|
131
|
-
readonly days:
|
|
100
|
+
readonly days: SchedulingDay[];
|
|
132
101
|
readonly coverage: CoverageRequirement[];
|
|
133
|
-
readonly rules:
|
|
102
|
+
readonly rules: CompiledRule[];
|
|
134
103
|
readonly weekStartsOn: DayOfWeek;
|
|
135
104
|
readonly options: SolverRequest["options"] | undefined;
|
|
105
|
+
readonly strategy: ModelSolveStrategy;
|
|
136
106
|
readonly coverageBucketMinutes: number;
|
|
137
107
|
readonly reporter: ValidationReporter;
|
|
138
108
|
readonly fairDistribution: boolean;
|
|
139
109
|
/** Shared context for cost rules. Set by minimizeCost(), read by modifiers. */
|
|
140
110
|
costContext: CostContext | undefined;
|
|
141
|
-
constructor(config: ModelBuilderConfig);
|
|
111
|
+
constructor(config: ModelBuilderConfig<CpsatRuleRegistry, AnyCpsatRuleConfigEntry>);
|
|
142
112
|
boolVar(name: string): string;
|
|
143
113
|
intVar(name: string, min: number, max: number): string;
|
|
144
|
-
shiftActive(patternId: string, day:
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
114
|
+
shiftActive(patternId: string, day: SchedulingDay): string;
|
|
115
|
+
/**
|
|
116
|
+
* Returns the aggregate shift assignment variable for a member, pattern, and day.
|
|
117
|
+
*
|
|
118
|
+
* @remarks
|
|
119
|
+
* This variable means "the member works this shift pattern on this day". It is
|
|
120
|
+
* the presence literal for optional interval variables and the common variable
|
|
121
|
+
* used by shift-level rules, objectives, and skill-only coverage. Role-specific
|
|
122
|
+
* assignments are modeled separately and linked to this aggregate variable when
|
|
123
|
+
* a concrete role choice is available.
|
|
124
|
+
*/
|
|
125
|
+
assignment(memberId: string, patternId: string, day: SchedulingDay): string;
|
|
126
|
+
addLinear(terms: Term[], op: "<=" | ">=" | "==", rhs: number, id?: string): void;
|
|
127
|
+
addSoftLinear(terms: Term[], op: "<=" | ">=", rhs: number, penalty: number, id?: string, stage?: string): void;
|
|
148
128
|
addExactlyOne(vars: string[]): void;
|
|
149
129
|
addAtMostOne(vars: string[]): void;
|
|
150
130
|
addImplication(ifVar: string, thenVar: string): void;
|
|
@@ -168,15 +148,16 @@ export declare class ModelBuilder {
|
|
|
168
148
|
* Checks if a shift pattern can be used on a specific day.
|
|
169
149
|
* Returns false if the pattern has dayOfWeek restrictions that exclude this day.
|
|
170
150
|
*/
|
|
171
|
-
patternAvailableOnDay(pattern: ShiftPattern, day:
|
|
151
|
+
patternAvailableOnDay(pattern: ShiftPattern, day: SchedulingDay): boolean;
|
|
172
152
|
patternDuration(patternId: string): number;
|
|
173
|
-
startMinutes(pattern: ShiftPattern, day:
|
|
174
|
-
endMinutes(pattern: ShiftPattern, day:
|
|
153
|
+
startMinutes(pattern: ShiftPattern, day: SchedulingDay): number;
|
|
154
|
+
endMinutes(pattern: ShiftPattern, day: SchedulingDay): number;
|
|
175
155
|
compile(): CompilationResult;
|
|
176
156
|
/**
|
|
177
157
|
* Run post-solve validation on all rules.
|
|
178
158
|
* Call this after solving with the resolved assignments.
|
|
179
159
|
*/
|
|
180
160
|
validateSolution(assignments: ResolvedShiftAssignment[]): void;
|
|
161
|
+
calculateCost(assignments: readonly ShiftAssignment[]): CostContribution;
|
|
181
162
|
}
|
|
182
163
|
//# sourceMappingURL=model-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-builder.d.ts","sourceRoot":"","sources":["../../src/cpsat/model-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"model-builder.d.ts","sourceRoot":"","sources":["../../src/cpsat/model-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,aAAa,EAEd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAS9E,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,IAAI,EACL,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAqB,MAAM,uBAAuB,CAAC;AACnF,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,KAAK,EACV,YAAY,EAEZ,gBAAgB,EAIjB,MAAM,sBAAsB,CAAC;AAS9B;;;GAGG;AACH;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oEAAoE;IACpE,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB,CACjC,QAAQ,SAAS,iBAAiB,GAAG,wBAAwB,EAC7D,eAAe,SAAS,uBAAuB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAChF,SAAQ,mBAAmB;IAC3B,6CAA6C;IAC7C,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,6EAA6E;IAC7E,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B;;;OAGG;IACH,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC;;OAEG;IACH,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB;;OAEG;IACH,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED;;;;;GAKG;AACH,qBAAa,YAAY;;IACvB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IAEnC,+EAA+E;IAC/E,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;gBAiBzB,MAAM,EAAE,kBAAkB,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;IA8ElF,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAa7B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAatD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM;IAI1D;;;;;;;;;OASG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM;IAS3E,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAQhF,aAAa,CACX,KAAK,EAAE,IAAI,EAAE,EACb,EAAE,EAAE,IAAI,GAAG,IAAI,EACf,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,EAAE,CAAC,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,GACb,IAAI;IAYP,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAKnC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAKlC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAKpD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAK/B,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhC,WAAW,CACT,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM;IA4BT,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAKvC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAsBjD,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAInD;;;;;;;OAOG;IACH,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,GAAG,gBAAgB,EAAE;IAkBhE,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO;IAoDnE;;;OAGG;IACH,qBAAqB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO;IAOzE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAS1C,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM;IAK/D,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM;IAO7D,OAAO,IAAI,iBAAiB;IAqa5B;;;OAGG;IACH,gBAAgB,CAAC,WAAW,EAAE,uBAAuB,EAAE,GAAG,IAAI;IAa9D,aAAa,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,GAAG,gBAAgB;CA0UzE"}
|