This is my approach to square/rectangle packing algorithm with few random parameters. Which are:
Separation - can be negative
Slight modification of size
Base size changes are made only if there is no space on plane. It gives discrete and more rapid size change which produce chains of small rectangles filling gaps between bigger ones. Due to negative separation and rotation rectangles may overlap.