01
Five keys, compared lexicographically
unpacked_count, container_count, total_cost_minor, unused_volume_ppm and stack_height_ppm, compared ascending, so lower is better. Ratios are expressed in parts per million so the whole vector stays integral.
02
Unpacked count comes first
No objective may prefer an incomplete answer. Whatever else a caller optimises for, an arrangement that leaves an item behind ranks worse than one that does not.
03
The formula is universal, the value is not
Every engine computes the vector the same way and none may misreport the score of the packing it returned. Engines that return different but equally valid arrangements score differently, which is a stated non-guarantee rather than a defect.