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/src/client.types.ts
CHANGED
|
@@ -12,10 +12,15 @@ import type {
|
|
|
12
12
|
SolverVariableSchema,
|
|
13
13
|
SolverConstraintSchema,
|
|
14
14
|
SolverObjectiveSchema,
|
|
15
|
+
SolverObjectiveStageSchema,
|
|
15
16
|
SolverRequestSchema,
|
|
16
17
|
SolverResponseSchema,
|
|
18
|
+
SolverStageResultSchema,
|
|
19
|
+
SolverDiagnosticModeSchema,
|
|
17
20
|
SolverStatusSchema,
|
|
18
|
-
|
|
21
|
+
SolverModeSchema,
|
|
22
|
+
SolverSoftConstraintViolationSchema,
|
|
23
|
+
SolverHardConstraintConflictSchema,
|
|
19
24
|
} from "./client.schemas.js";
|
|
20
25
|
|
|
21
26
|
// --------------------------------------------------------------------------
|
|
@@ -55,32 +60,78 @@ export type SolverConstraint = z.infer<typeof SolverConstraintSchema>;
|
|
|
55
60
|
* An optimization objective for the solver.
|
|
56
61
|
*
|
|
57
62
|
* - `terms` (required): linear terms to minimize/maximize
|
|
58
|
-
* - `
|
|
63
|
+
* - `sense` (required): whether to minimize or maximize
|
|
59
64
|
*/
|
|
60
65
|
export type SolverObjective = z.infer<typeof SolverObjectiveSchema>;
|
|
61
66
|
|
|
67
|
+
/**
|
|
68
|
+
* A named objective optimized as one step in a lexicographic solve.
|
|
69
|
+
*
|
|
70
|
+
* - `id` (required): unique stage identifier
|
|
71
|
+
* - `sense` (required): whether to minimize or maximize
|
|
72
|
+
* - `terms` (required): linear terms to optimize
|
|
73
|
+
*/
|
|
74
|
+
export type SolverObjectiveStage = z.infer<typeof SolverObjectiveStageSchema>;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Solver mode.
|
|
78
|
+
*
|
|
79
|
+
* `"optimize"` is the semantic default when omitted. `"satisfy"` asks the
|
|
80
|
+
* solver to find any hard-feasible solution without optimizing objectives or
|
|
81
|
+
* soft constraint penalties.
|
|
82
|
+
*/
|
|
83
|
+
export type SolverMode = z.infer<typeof SolverModeSchema>;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Solver diagnostic mode.
|
|
87
|
+
*
|
|
88
|
+
* - `"none"`: solve normally without extra hard-conflict tracking
|
|
89
|
+
* - `"hard"`: track hard constraints with CP-SAT assumptions so infeasible responses include conflicts
|
|
90
|
+
*/
|
|
91
|
+
export type SolverDiagnosticMode = z.infer<typeof SolverDiagnosticModeSchema>;
|
|
92
|
+
|
|
62
93
|
/**
|
|
63
94
|
* The full request payload sent to the CP-SAT solver service.
|
|
64
95
|
*
|
|
65
96
|
* - `variables` (required): all decision variables
|
|
66
97
|
* - `constraints` (required): all constraints
|
|
67
98
|
* - `objective` (optional): optimization objective
|
|
68
|
-
* - `
|
|
99
|
+
* - `objectiveStages` (optional): named objectives solved in lexicographic order
|
|
100
|
+
* - `mode` (optional): solving mode, defaulting semantically to `"optimize"`
|
|
101
|
+
* - `options` (optional): solver time limit, solution controls, and diagnostics mode
|
|
69
102
|
*/
|
|
70
103
|
export type SolverRequest = z.infer<typeof SolverRequestSchema>;
|
|
71
104
|
|
|
72
105
|
/**
|
|
73
|
-
* The response payload returned by the CP-SAT solver service.
|
|
106
|
+
* The raw response payload returned by the CP-SAT solver service.
|
|
107
|
+
*
|
|
108
|
+
* @remarks
|
|
109
|
+
* This transport type is solver-stage only. It is later translated into the
|
|
110
|
+
* public `ScheduleValidation` feedback model with `errors`, `violations`, and
|
|
111
|
+
* `passed` items.
|
|
74
112
|
*
|
|
75
113
|
* - `status` (required): solve outcome (see {@link SolverStatus})
|
|
76
114
|
* - `values` (optional): variable assignments when a solution is found
|
|
77
115
|
* - `statistics` (optional): solve time, conflicts, branches
|
|
78
|
-
* - `
|
|
116
|
+
* - `softConstraintViolations` (required on `OPTIMAL`/`FEASIBLE` responses): raw solver-stage records for violated soft constraints
|
|
117
|
+
* - `hardConstraintConflicts` (optional on `INFEASIBLE` responses): tracked hard constraints in a sufficient infeasible set
|
|
79
118
|
* - `error` (optional): error message on failure
|
|
80
119
|
* - `solutionInfo` (optional): solver diagnostic info
|
|
120
|
+
* - `stageResults` (optional): per-stage metadata for staged optimization
|
|
81
121
|
*/
|
|
82
122
|
export type SolverResponse = z.infer<typeof SolverResponseSchema>;
|
|
83
123
|
|
|
124
|
+
/**
|
|
125
|
+
* Metadata for one solved objective stage.
|
|
126
|
+
*
|
|
127
|
+
* - `id` (required): objective stage identifier
|
|
128
|
+
* - `status` (required): solve outcome for the stage
|
|
129
|
+
* - `objectiveValue` (optional): achieved objective value when available
|
|
130
|
+
* - `bestObjectiveBound` (optional): solver bound when available
|
|
131
|
+
* - `solveTimeMs` (required): wall-clock solve time for this stage
|
|
132
|
+
*/
|
|
133
|
+
export type SolverStageResult = z.infer<typeof SolverStageResultSchema>;
|
|
134
|
+
|
|
84
135
|
/**
|
|
85
136
|
* Solver outcome status.
|
|
86
137
|
*
|
|
@@ -91,12 +142,27 @@ export type SolverResponse = z.infer<typeof SolverResponseSchema>;
|
|
|
91
142
|
export type SolverStatus = z.infer<typeof SolverStatusSchema>;
|
|
92
143
|
|
|
93
144
|
/**
|
|
94
|
-
* A
|
|
145
|
+
* A raw solver-stage record for a violated soft constraint.
|
|
146
|
+
*
|
|
147
|
+
* Successful solver responses always include a
|
|
148
|
+
* `softConstraintViolations` array, even when it is empty.
|
|
95
149
|
*
|
|
96
150
|
* - `constraintId` (required): which soft constraint was violated
|
|
97
151
|
* - `violationAmount` (required): magnitude of the violation
|
|
98
152
|
*/
|
|
99
|
-
export type
|
|
153
|
+
export type SolverSoftConstraintViolation = z.infer<typeof SolverSoftConstraintViolationSchema>;
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* A tracked hard constraint included in a sufficient infeasible constraint set.
|
|
157
|
+
*
|
|
158
|
+
* @remarks
|
|
159
|
+
* Hard constraints are not reported as violations because no solution exists to
|
|
160
|
+
* measure actual values against. The solver reports a sufficient conflict set
|
|
161
|
+
* from CP-SAT assumptions instead.
|
|
162
|
+
*
|
|
163
|
+
* - `constraintId` (required): which tracked hard constraint is part of the conflict set
|
|
164
|
+
*/
|
|
165
|
+
export type SolverHardConstraintConflict = z.infer<typeof SolverHardConstraintConflictSchema>;
|
|
100
166
|
|
|
101
167
|
// --------------------------------------------------------------------------
|
|
102
168
|
// Status constants (for convenience)
|
package/src/cpsat/cost.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, CostEntry } from "./rule-descriptor.js";
|
|
4
5
|
import { timeOfDayToMinutes, normalizeEndMinutes } from "./utils.js";
|
|
5
6
|
|
|
6
7
|
/**
|
|
@@ -54,7 +55,9 @@ export interface CostBreakdown {
|
|
|
54
55
|
export interface CostCalculationConfig {
|
|
55
56
|
members: ReadonlyArray<SchedulingMember>;
|
|
56
57
|
shiftPatterns: ReadonlyArray<ShiftPattern>;
|
|
57
|
-
rules: ReadonlyArray<
|
|
58
|
+
rules: ReadonlyArray<CompiledRule>;
|
|
59
|
+
days: ReadonlyArray<SchedulingDay>;
|
|
60
|
+
weekStartsOn: DayOfWeek;
|
|
58
61
|
}
|
|
59
62
|
|
|
60
63
|
/**
|
|
@@ -71,14 +74,21 @@ export function calculateScheduleCost(
|
|
|
71
74
|
assignments: ShiftAssignment[],
|
|
72
75
|
config: CostCalculationConfig,
|
|
73
76
|
): CostBreakdown {
|
|
74
|
-
const { members, shiftPatterns, rules } = config;
|
|
77
|
+
const { members, shiftPatterns, rules, days } = config;
|
|
75
78
|
|
|
76
|
-
// Collect all cost entries from
|
|
79
|
+
// Collect all cost entries from cost artifacts
|
|
77
80
|
const allEntries: CostEntry[] = [];
|
|
78
81
|
for (const rule of rules) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
+
for (const artifact of rule.artifacts) {
|
|
83
|
+
if (artifact.kind !== "cost" || !artifact.calculateCost) continue;
|
|
84
|
+
const contribution = artifact.calculateCost(assignments, {
|
|
85
|
+
members,
|
|
86
|
+
shiftPatterns,
|
|
87
|
+
days,
|
|
88
|
+
weekStartsOn: config.weekStartsOn,
|
|
89
|
+
});
|
|
90
|
+
allEntries.push(...contribution.entries);
|
|
91
|
+
}
|
|
82
92
|
}
|
|
83
93
|
|
|
84
94
|
// Compute total hours per member from assignments
|