EasyBoxPacker
Ref from box_packer
and inspired by A genetic algorithm for the three-dimensional bin packing problem with heterogeneous bins and A New Heuristic Algorithm for the 3D Bin Packing Problem
Installation
Add to gemfile:
gem 'easy-box-packer'
Usage
Check all items can be packed in a container
require 'easy-box-packer'
cont = EasyBoxPacker.pack(
container: { dimensions: [15, 20, 13], weight_limit: 50 },
items: [
{ dimensions: [2, 3, 5], weight: 47 },
{ dimensions: [2, 3, 5], weight: 47 },
{ dimensions: [3, 3, 1], weight: 24 },
{ dimensions: [1, 1, 4], weight: 7 },
]
)
cont[:packings].length
cont[:packings][0][:weight]
cont[:packings][0][:placements].length
cont[:packings][0][:placements][0][:dimensions]
cont[:packings][0][:placements][0][:position]
cont[:packings][1][:weight]
cont[:packings][1][:placements].length
cont[:packings][1][:placements][0][:dimensions]
cont[:packings][1][:placements][0][:position]
cont[:packings][2][:weight]
cont[:packings][2][:placements].length
cont[:packings][2][:placements][0][:dimensions]
cont[:packings][2][:placements][0][:position]
cont[:packings][2][:placements][1][:dimensions]
cont[:packings][2][:placements][1][:position]
Get a reasonable smallest container by given boxes
container = EasyBoxPacker.find_smallest_container(
items: Array.new(1000) {{ dimensions: [1, 1, 1] }}
)
container # [10, 10, 10]