NAME

Algorithm::BinPack - efficiently pack items into bins

SYNOPSIS

Algorithm::BinPack efficiently packs items into bins. The bins are given a maximum size, and the items are packed in with as little empty space as possible.

my $bp = Algorithm::BinPack->new(binsize => 4);

$bp->add_item(label => "one",   size => 1);
$bp->add_item(label => "two",   size => 2);
$bp->add_item(label => "three", size => 3);
$bp->add_item(label => "four",  size => 4);

for ($bp->pack_bins) {
    print "Bin size: ", $_->{size},  "\n";
    print "  Item: ",   $_->{label}, "\n" for @{ $_->{items} };
}

METHODS

new

Creates a new Algorithm::BinPack object. The maximum bin size is specified as a named argument, and is required.

my $bp = Algorithm::BinPack->new(binsize => 4);
add_item

Adds an item to be packed into a bin. Required named arguments are 'label' and 'size', but any others can be specified, and will be saved.

$bp->add_item(label => 'one', size => 1);
$bp->add_item(label => 'two', size => 2, desc => 'The second numeral');
$bp->add_item(qw(label three size 3));
$bp->add_item(qw(label four size 4 random key));
pack_bins

Packs the items into bins. This method tries to leave as little empty space in each bin as possible. It returns a list of hashrefs with the key 'size' containing the total bin size, and 'items' containing an arrayref holding the items in the bin. Each item is in turn a hashref containing the keys 'label', 'size', and any others added to the item.

for my $bin ($bp->pack_bins) {
    print "Bin size: ", $bin->{size}, "\n";
    
    for my $item (@{ $bin->{items} }) {
        printf "  %-6s %-20s\n", $_, $item->{$_} for keys %{ $item };
        print  "  ---\n";
    }
}

SEE ALSO

This module implements the bin packing algorithm described in 'The Algorithm Design Manual' by Steven S. Skiena.

This module is similar to Algorithm::Bucketizer, but using a different algorithm. I couldn't see a clean way to add this algorithm to Algorithm::Bucketizer, and figured it could use a name that's more well-known (searching for variations on "bin packing" finds more relevant results than variations on "bucketizer").

AUTHOR

Carey Tilden <revdiablo@wd39.com>

COPYRIGHT AND LICENSE

Copyright (C) 2004 by Carey Tilden

This code is dual licensed. You may choose from one of the following: - http://creativecommons.org/licenses/by/1.0/ - http://d.revinc.org/pages/license

1 POD Error

The following errors were encountered while parsing the POD:

Around line 129:

You forgot a '=back' before '=head1'