@jetta/cargo-stabilizer 0.1.0-6 → 0.1.0-7
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 +1 -0
- package/README.md +2 -2
- package/build/core/evaluation/compute_reorder_objective.d.ts +13 -0
- package/build/core/evaluation/compute_reorder_objective.d.ts.map +1 -0
- package/build/core/evaluation/compute_reorder_objective.js +13 -0
- package/build/core/evaluation/state_evaluator.d.ts.map +1 -1
- package/build/core/evaluation/state_evaluator.js +3 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -16,6 +16,7 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
16
16
|
### Changed
|
|
17
17
|
|
|
18
18
|
- README documents I/O contract mapping, configuration keys, dependencies, and test/coverage commands.
|
|
19
|
+
- Reorder objective is whole-cargo `transport_score`; loose-item score sum is only a tie-break. Axle, waypoint, and milkrun gates are unchanged.
|
|
19
20
|
|
|
20
21
|
### Testing
|
|
21
22
|
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @jetta/cargo-stabilizer
|
|
2
2
|
|
|
3
|
-
TypeScript library that reorders **loose items only** to improve cargo stability while keeping compound blocks pinned. Implements five config-selectable strategies with organization gates (waypoint order, milkrun wall reservation) and empty-space candidate discovery (JET-2262).
|
|
3
|
+
TypeScript library that reorders **loose items only** to improve **whole-cargo transport stability** while keeping compound blocks pinned. The reorder objective is `transport_score` (loose-item score sum is a tie-break). Implements five config-selectable strategies with organization gates (waypoint order, milkrun wall reservation) and empty-space candidate discovery (JET-2262).
|
|
4
4
|
|
|
5
5
|
## Requirements
|
|
6
6
|
|
|
@@ -70,7 +70,7 @@ Exported parsers: `parse_stabilizer_input`, `parse_stabilizer_output`, `safe_par
|
|
|
70
70
|
| Key | Default | Description |
|
|
71
71
|
|-----|---------|-------------|
|
|
72
72
|
| `cargo_stabilizer.reorder_strategy` | `gravity` | `gravity`, `greedy`, `beam_search`, `simulated_annealing`, `genetic` |
|
|
73
|
-
| `cargo_stabilizer.transport_stability_floor` | `0` | Hard minimum transport stability score |
|
|
73
|
+
| `cargo_stabilizer.transport_stability_floor` | `0` | Hard minimum transport stability score (gate, not the maximize objective) |
|
|
74
74
|
| `cargo_stabilizer.max_iteration` | `10` | Greedy / SA iteration budget |
|
|
75
75
|
| `cargo_stabilizer.preserve_tie_block_organization` | `true` | When true, enforce waypoint Z zones and macro delivery order |
|
|
76
76
|
| `cargo_stabilizer.enforce_milkrun_wall_reservation` | `false` | When true, reserve rear compound-wall Z bands using profile key below |
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type StabilityEvaluation } from '../adapters/stability_adapter.js';
|
|
2
|
+
import type { StabilizerContainer } from '../validation/contract/stabilizer_domain_schema.js';
|
|
3
|
+
import type { LooseItemRef } from '../filters/loose_item_filter.js';
|
|
4
|
+
export declare const LOOSE_SUM_TIE_BREAK_SCALE = 0.000001;
|
|
5
|
+
/**
|
|
6
|
+
* Computes the reorder objective: maximize transport stability, then loose-item sum.
|
|
7
|
+
* @param stability - Transport stability evaluation.
|
|
8
|
+
* @param containers - Container layout used for loose-item index lookup.
|
|
9
|
+
* @param loose_items - Loose items included in the tie-break term.
|
|
10
|
+
* @returns Scalar objective; higher is better.
|
|
11
|
+
*/
|
|
12
|
+
export declare function compute_reorder_objective(stability: StabilityEvaluation, containers: StabilizerContainer[], loose_items: LooseItemRef[]): number;
|
|
13
|
+
//# sourceMappingURL=compute_reorder_objective.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute_reorder_objective.d.ts","sourceRoot":"","sources":["../../../src/core/evaluation/compute_reorder_objective.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,mBAAmB,EAC3B,MAAM,kCAAkC,CAAA;AACzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAA;AAC7F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAEnE,eAAO,MAAM,yBAAyB,WAAO,CAAA;AAE7C;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACrC,SAAS,EAAE,mBAAmB,EAC9B,UAAU,EAAE,mBAAmB,EAAE,EACjC,WAAW,EAAE,YAAY,EAAE,GAC5B,MAAM,CAIR"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { sum_loose_item_scores } from '../adapters/stability_adapter.js';
|
|
2
|
+
export const LOOSE_SUM_TIE_BREAK_SCALE = 1e-6;
|
|
3
|
+
/**
|
|
4
|
+
* Computes the reorder objective: maximize transport stability, then loose-item sum.
|
|
5
|
+
* @param stability - Transport stability evaluation.
|
|
6
|
+
* @param containers - Container layout used for loose-item index lookup.
|
|
7
|
+
* @param loose_items - Loose items included in the tie-break term.
|
|
8
|
+
* @returns Scalar objective; higher is better.
|
|
9
|
+
*/
|
|
10
|
+
export function compute_reorder_objective(stability, containers, loose_items) {
|
|
11
|
+
const loose_sum = sum_loose_item_scores(stability, containers, loose_items);
|
|
12
|
+
return stability.transport_score + loose_sum * LOOSE_SUM_TIE_BREAK_SCALE;
|
|
13
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state_evaluator.d.ts","sourceRoot":"","sources":["../../../src/core/evaluation/state_evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAA;AAC7F,OAAO,
|
|
1
|
+
{"version":3,"file":"state_evaluator.d.ts","sourceRoot":"","sources":["../../../src/core/evaluation/state_evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAA;AAC7F,OAAO,EAEH,KAAK,mBAAmB,EAC3B,MAAM,kCAAkC,CAAA;AAMzC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAA;AAE9E,MAAM,WAAW,gBAAgB;IAE7B,SAAS,EAAE,mBAAmB,CAAA;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,qBAAqB,EAAE,OAAO,CAAA;IAC9B,UAAU,EAAE,OAAO,CAAA;IACnB,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;IACtB,cAAc,EAAE,OAAO,CAAA;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC1B,UAAU,EAAE,mBAAmB,EAAE,EACjC,OAAO,EAAE,sBAAsB,GAChC,gBAAgB,CAUlB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACjC,KAAK,EAAE,mBAAmB,EAAE,EAC5B,OAAO,EAAE,sBAAsB,GAChC,gBAAgB,CAGlB;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,cAAc,GAAG,sBAAsB,CAU/F;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,mBAAmB,EAAE,CAGvF;AAwBD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACvC,UAAU,EAAE,mBAAmB,EAAE,EACjC,OAAO,EAAE,sBAAsB,GAChC;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,CAMrD"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { try_evaluate_transport_stability
|
|
1
|
+
import { try_evaluate_transport_stability } from '../adapters/stability_adapter.js';
|
|
2
|
+
import { compute_reorder_objective } from './compute_reorder_objective.js';
|
|
2
3
|
import { is_axle_load_valid } from '../adapters/axle_adapter.js';
|
|
3
4
|
import { preserves_waypoint_order } from '../waypoint/preserves_waypoint_order.js';
|
|
4
5
|
import { is_layout_milkrun_valid } from '../waypoint/milkrun_wall_reservation.js';
|
|
@@ -50,7 +51,7 @@ export function clone_baseline(containers) {
|
|
|
50
51
|
return clone_containers(containers);
|
|
51
52
|
}
|
|
52
53
|
function evaluate_gates(containers, context, stability) {
|
|
53
|
-
const objective =
|
|
54
|
+
const objective = compute_reorder_objective(stability, containers, context.loose_items);
|
|
54
55
|
const transport_floor_valid = stability.transport_score >= context.config.transport_stability_floor;
|
|
55
56
|
const axle_valid = is_axle_load_valid({ ...context.env, containers }, context.config.axle_load_margin_percent);
|
|
56
57
|
const waypoint_valid = is_waypoint_order_valid(containers, context);
|