PackingSolver’s documentation

Introduction

PackingSolver is a software package dedicated to the practical resolution of cutting and packing problems.

PackingSolver takes as input:

  • A set of pieces to cut/pack called items.

  • A set of containers from which to cut / in which to pack these items, called bins.

  • A set of parameters for the optimization

Then PackingSolver outputs the cutting/loading plans.

PackingSolver solves multiple problem types:

RectangleGuillotine

  • Items: two-dimensional rectangles

  • Only edge-to-edge cuts are allowed

rectangleguillotine

Rectangle

  • Items: two-dimensional rectangles

rectangle

Box

  • Items: three-dimensional rectangular parallelepipeds

box

BoxStacks

  • Items: three-dimensional rectangular parallelepipeds

  • Items are stacked; a stack contains items with the same width and length

boxstacks

OneDimensional

  • Items: one-dimensional items

onedimensional

Irregular

  • Items: two-dimensional polygons

irregular

Getting started

Let’s see how to solve a simple rectangle packing problem.

In a first CSV file, we provide the width, height and number of copies of the items to pack. Here we consider two items:

  • The first one has a width of 300, a height of 200 and 10 copies.

  • The second one has a width of 250, a height of 150 and 10 copies.

items.csv
WIDTH,HEIGHT,COPIES
300,200,10
250,150,10

In a second CSV file, we provide the width, height and number of copies of the bins in which the items must be packed. Here we consider a single container of width 1000 and of height 500 available in 10 copies.

bins.csv
WIDTH,HEIGHT,COPIES
1000,500,10

Finally, in a third CSV file, we provide the other optimizaton parameters. Here we just set the objective parameter to bin-packing, which means that we look to pack all the items using as few bins as possible. The objectives page gives more details about the possible objectives.

parameters.csv
NAME,VALUE
objective,bin-packing

Now, we use the following command to launch the optimization:

packingsolver_rectangle \
        --items items.csv \
        --bins bins.csv \
        --parameters parameters.csv \
        --certificate solution_rectangle.csv

The terminal output looks like:

=================================
          PackingSolver          
=================================

Problem type
------------
Rectangle

Instance
--------
Objective:             BinPackingWithLeftovers
Number of item types:  2
Number of items:       20
Number of bin types:   1
Number of bins:        10
Number of groups:      1
Number of defects:     0
Unloading constraint:  None
Total item area:       975000
Total item width:      5500
Total item height:     3500
Smallest item width:   150
Smallest item height:  150
Total item profit:     975000
Largest item profit:   60000
Total item weight:     0
Largest item copies:   10
Total bin area:        5000000
Total bin weight:      0
Largest bin cost:      500000

        Time      # bins    Leftover                         Comment
        ----      ------    --------                         -------
       0.000           3      162500                  TS g 0 d X q 1
       0.001           3      207500                  TS g 0 d X q 1
       0.008           3      275000                  TS g 0 d X q 1
       0.009           3      350000                  TS g 0 d Y q 2
       0.009           3      462500                  TS g 0 d X q 2
       0.010           2           0                  TS g 0 d X q 9

Final statistics
----------------
Time (s):  30.024

Solution
--------
Number of items:  20 / 20 (100%)
Item area:        975000 / 975000 (100%)
Item weight:      0 / 0 (-nan%)
Item profit:      975000 / 975000 (100%)
Number of bins:   2 / 10 (20%)
Bin area:         1000000 / 5000000 (20%)
Bin weight:       0 / 0 (-nan%)
Bin cost:         1e+06
Waste:            25000
Waste (%):        2.5
Full waste:       25000
Full waste (%):   2.5
Area load:        0.195
Weight load:      -nan
X max:            1000
Y max:            500
Leftover value:   0

From the terminal output, we see that the solver managed to pack all the items using two bins. The loading plans are written in the solution_rectangle.csv file. A script is available to visualize them:

python3 scripts/visualize_rectangle.py solution_rectangle.csv

The script opens a page in a browser where the loading plans are displayed:

_images/getting_started_solution.png