moptipyapps.binpacking2d package

Codes for the two-dimensional bin packing problem.

  • instance provides the instance data of two-dimensional bin packing problems. The instance data comprises the object sizes and multiplicities as well as the bin sizes. Several default instances from 2DPackLib (https://site.unibo.it/operations-research/en/research/2dpacklib) can be loaded from resources.

  • packing can store a packing, i.e., an assignment of objects to coordinates and bins. Such packings are solutions to the bin packing problem.

  • packing_space provides an implementation of the space interface for the packing objects. This class allows, for example, to instantiate the packings, to verify whether they are correct, and to convert them to and from strings.

  • plot_packing allows you to plot a packing.

  • ibl_encoding_1 is an implementation of the improved bottom-left encoding which closes bins immediately once an object does not fit.

  • ibl_encoding_2 is another implementation of the improved bottom-left encoding which tests each bin for each object.

  • bin_count_and_last_empty provides an objective function that tries to minimize the number of bins and pushes towards decreasing the number of objects in the very last bin used.

  • make_instances offers a method to download the two-dimensional bin packing instances from the original sources in the [2DPackLib](https://site.unibo.it/operations-research/en/research/2dpacklib) format.

Important initial work on this code has been contributed by Mr. Rui ZHAO (赵睿), <zr1329142665@163.com> a Master’s student at the Institute of Applied Optimization (应用优化研究所, http://iao.hfuu.edu.cn) of the School of Artificial Intelligence and Big Data (人工智能与大数据学院) at Hefei University (合肥大学) in Hefei, Anhui, China (中国安徽省合肥市) under the supervision of Prof. Dr. Thomas Weise (汤卫思教授).

Subpackages

Submodules

moptipyapps.binpacking2d.bks module

In this file, we provide a set of best-known solutions for the 2D-BPP.

moptipyapps.binpacking2d.bks.ASQAS: Final[Element] = Element(name='asqas', name_suffix='', reference='vdBBMSB2016ASIASSTFI')

the asqas

moptipyapps.binpacking2d.bks.A_LARGE: Final[Element] = Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP')

the large A instances

moptipyapps.binpacking2d.bks.A_MED: Final[Element] = Element(name='a', name_suffix='med', reference='MAVdC2010AFMFTTDGCSP')

the median sized A instances

moptipyapps.binpacking2d.bks.A_SMALL: Final[Element] = Element(name='a', name_suffix='small', reference='MAVdC2010AFMFTTDGCSP')

the small A instances

moptipyapps.binpacking2d.bks.BENG_1_8: Final[Element] = Element(name='beng', name_suffix='1-8', reference='B1982PRPAHA')

the first part of the Beng instances

moptipyapps.binpacking2d.bks.BENG_9_10: Final[Element] = Element(name='beng', name_suffix='9-10', reference='B1982PRPAHA')

the second part of the Beng instances

moptipyapps.binpacking2d.bks.BRKGA_BPP_2R: Final[Element] = Element(name='BRKGA', name_suffix='BRKGABPPRTR', reference='GR2013ABRKGAF2A3BPP')

the BRKGA for 2D bin packing with rotation

moptipyapps.binpacking2d.bks.BRKGA_BPP_ANB: Final[Element] = Element(name='BRKGA', name_suffix='BRKGABPPRANB', reference='GR2013ABRKGAF2A3BPP')

the BRKGA for 2D bin packing without rotation

moptipyapps.binpacking2d.bks.CLASS_10_100: Final[Element] = Element(name='class 10', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 6-100 benchmarks

moptipyapps.binpacking2d.bks.CLASS_10_20: Final[Element] = Element(name='class 10', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 10-20 benchmarks

moptipyapps.binpacking2d.bks.CLASS_10_40: Final[Element] = Element(name='class 10', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 10-40 benchmarks

moptipyapps.binpacking2d.bks.CLASS_10_60: Final[Element] = Element(name='class 10', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 10-60 benchmarks

moptipyapps.binpacking2d.bks.CLASS_10_80: Final[Element] = Element(name='class 10', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 10-80 benchmarks

moptipyapps.binpacking2d.bks.CLASS_1_100: Final[Element] = Element(name='class 1', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 1-100 benchmarks

moptipyapps.binpacking2d.bks.CLASS_1_20: Final[Element] = Element(name='class 1', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 1-20 benchmarks

moptipyapps.binpacking2d.bks.CLASS_1_40: Final[Element] = Element(name='class 1', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 1-40 benchmarks

moptipyapps.binpacking2d.bks.CLASS_1_60: Final[Element] = Element(name='class 1', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 1-60 benchmarks

moptipyapps.binpacking2d.bks.CLASS_1_80: Final[Element] = Element(name='class 1', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 1-80 benchmarks

moptipyapps.binpacking2d.bks.CLASS_2_100: Final[Element] = Element(name='class 2', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 1-100 benchmarks

moptipyapps.binpacking2d.bks.CLASS_2_20: Final[Element] = Element(name='class 2', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 2-20 benchmarks

moptipyapps.binpacking2d.bks.CLASS_2_40: Final[Element] = Element(name='class 2', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 2-40 benchmarks

moptipyapps.binpacking2d.bks.CLASS_2_60: Final[Element] = Element(name='class 2', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 2-60 benchmarks

moptipyapps.binpacking2d.bks.CLASS_2_80: Final[Element] = Element(name='class 2', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 2-80 benchmarks

moptipyapps.binpacking2d.bks.CLASS_3_100: Final[Element] = Element(name='class 3', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 3-100 benchmarks

moptipyapps.binpacking2d.bks.CLASS_3_20: Final[Element] = Element(name='class 3', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 3-20 benchmarks

moptipyapps.binpacking2d.bks.CLASS_3_40: Final[Element] = Element(name='class 3', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 1-40 benchmarks

moptipyapps.binpacking2d.bks.CLASS_3_60: Final[Element] = Element(name='class 3', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 3-60 benchmarks

moptipyapps.binpacking2d.bks.CLASS_3_80: Final[Element] = Element(name='class 3', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 3-80 benchmarks

moptipyapps.binpacking2d.bks.CLASS_4_100: Final[Element] = Element(name='class 4', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 4-100 benchmarks

moptipyapps.binpacking2d.bks.CLASS_4_20: Final[Element] = Element(name='class 4', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 4-20 benchmarks

moptipyapps.binpacking2d.bks.CLASS_4_40: Final[Element] = Element(name='class 4', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 4-40 benchmarks

moptipyapps.binpacking2d.bks.CLASS_4_60: Final[Element] = Element(name='class 4', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 4-60 benchmarks

moptipyapps.binpacking2d.bks.CLASS_4_80: Final[Element] = Element(name='class 4', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 4-80 benchmarks

moptipyapps.binpacking2d.bks.CLASS_5_100: Final[Element] = Element(name='class 5', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 5-100 benchmarks

moptipyapps.binpacking2d.bks.CLASS_5_20: Final[Element] = Element(name='class 5', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 5-20 benchmarks

moptipyapps.binpacking2d.bks.CLASS_5_40: Final[Element] = Element(name='class 5', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 5-40 benchmarks

moptipyapps.binpacking2d.bks.CLASS_5_60: Final[Element] = Element(name='class 5', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 5-60 benchmarks

moptipyapps.binpacking2d.bks.CLASS_5_80: Final[Element] = Element(name='class 5', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 5-80 benchmarks

moptipyapps.binpacking2d.bks.CLASS_6_100: Final[Element] = Element(name='class 6', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 6-100 benchmarks

moptipyapps.binpacking2d.bks.CLASS_6_20: Final[Element] = Element(name='class 6', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 6-20 benchmarks

moptipyapps.binpacking2d.bks.CLASS_6_40: Final[Element] = Element(name='class 6', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 6-40 benchmarks

moptipyapps.binpacking2d.bks.CLASS_6_60: Final[Element] = Element(name='class 6', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 6-60 benchmarks

moptipyapps.binpacking2d.bks.CLASS_6_80: Final[Element] = Element(name='class 6', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 6-80 benchmarks

moptipyapps.binpacking2d.bks.CLASS_7_100: Final[Element] = Element(name='class 7', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 7-100 benchmarks

moptipyapps.binpacking2d.bks.CLASS_7_20: Final[Element] = Element(name='class 7', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 7-20 benchmarks

moptipyapps.binpacking2d.bks.CLASS_7_40: Final[Element] = Element(name='class 7', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 7-40 benchmarks

moptipyapps.binpacking2d.bks.CLASS_7_60: Final[Element] = Element(name='class 7', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 7-60 benchmarks

moptipyapps.binpacking2d.bks.CLASS_7_80: Final[Element] = Element(name='class 7', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 7-80 benchmarks

moptipyapps.binpacking2d.bks.CLASS_8_100: Final[Element] = Element(name='class 8', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 8-100 benchmarks

moptipyapps.binpacking2d.bks.CLASS_8_20: Final[Element] = Element(name='class 8', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 8-20 benchmarks

moptipyapps.binpacking2d.bks.CLASS_8_40: Final[Element] = Element(name='class 8', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 8-40 benchmarks

moptipyapps.binpacking2d.bks.CLASS_8_60: Final[Element] = Element(name='class 8', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 8-60 benchmarks

moptipyapps.binpacking2d.bks.CLASS_8_80: Final[Element] = Element(name='class 8', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 8-80 benchmarks

moptipyapps.binpacking2d.bks.CLASS_9_100: Final[Element] = Element(name='class 9', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 9-100 benchmarks

moptipyapps.binpacking2d.bks.CLASS_9_20: Final[Element] = Element(name='class 9', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 9-20 benchmarks

moptipyapps.binpacking2d.bks.CLASS_9_40: Final[Element] = Element(name='class 9', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 9-40 benchmarks

moptipyapps.binpacking2d.bks.CLASS_9_60: Final[Element] = Element(name='class 9', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 9-60 benchmarks

moptipyapps.binpacking2d.bks.CLASS_9_80: Final[Element] = Element(name='class 9', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP')

the class 9-80 benchmarks

moptipyapps.binpacking2d.bks.CLASS_AND_BENG: Final[tuple[Element, ...]] = (Element(name='beng', name_suffix='1-8', reference='B1982PRPAHA'), Element(name='beng', name_suffix='9-10', reference='B1982PRPAHA'), Element(name='class 1', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 1', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 1', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 1', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 1', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 2', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 2', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 2', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 2', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 2', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 3', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 3', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 3', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 3', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 3', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 4', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 4', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 4', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 4', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 4', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 5', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 5', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 5', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 5', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 5', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 6', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 6', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 6', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 6', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 6', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 7', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 7', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 7', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 7', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 7', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 8', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 8', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 8', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 8', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 8', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 9', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 9', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 9', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 9', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 9', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 10', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 10', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 10', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 10', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), Element(name='class 10', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'))

The set of class and beng instance groups

moptipyapps.binpacking2d.bks.EALGFI: Final[Element] = Element(name='EALGFIEA', name_suffix='EALGFILGFI', reference='BS2013ST2BPPBMOAHEA')

the LGFi algorithm

class moptipyapps.binpacking2d.bks.Element(name, name_suffix, reference='{{NO_REF}}')[source]

Bases: object

The algorithm or instance group specification.

get_bibtex()[source]

Get the BibTeX for this element.

Return type:

Iterable[str]

Returns:

the BibTeX string

name: str

the name or name prefix

name_suffix: str

the name suffix, if any, and the empty string otherwise

reference: str

the reference to the related work

moptipyapps.binpacking2d.bks.GRASP_VND: Final[Element] = Element(name='GRASPVNDGRASP', name_suffix='GRASPVNDVND', reference='PAVOT2010AHGVAFTATDBP')

the grasp/vnd for 2D bin packing without rotation

moptipyapps.binpacking2d.bks.GROUPS_TO_INSTANCES: Final[Mapping[Element, tuple[str, ...]]] = mappingproxy({Element(name='a', name_suffix='small', reference='MAVdC2010AFMFTTDGCSP'): ('a01', 'a02', 'a03', 'a04', 'a06', 'a08', 'a10', 'a12', 'a22', 'a30', 'a34', 'a39', 'a42', 'a43'), Element(name='a', name_suffix='med', reference='MAVdC2010AFMFTTDGCSP'): ('a05', 'a07', 'a17', 'a25', 'a26', 'a27', 'a28', 'a31', 'a35', 'a36', 'a37', 'a38', 'a40', 'a41'), Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP'): ('a09', 'a11', 'a13', 'a14', 'a15', 'a16', 'a18', 'a19', 'a20', 'a21', 'a23', 'a24', 'a29', 'a32', 'a33'), Element(name='beng', name_suffix='1-8', reference='B1982PRPAHA'): ('beng01', 'beng02', 'beng03', 'beng04', 'beng05', 'beng06', 'beng07', 'beng08'), Element(name='beng', name_suffix='9-10', reference='B1982PRPAHA'): ('beng09', 'beng10'), Element(name='class 1', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl01_020_01', 'cl01_020_02', 'cl01_020_03', 'cl01_020_04', 'cl01_020_05', 'cl01_020_06', 'cl01_020_07', 'cl01_020_08', 'cl01_020_09', 'cl01_020_10'), Element(name='class 1', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl01_040_01', 'cl01_040_02', 'cl01_040_03', 'cl01_040_04', 'cl01_040_05', 'cl01_040_06', 'cl01_040_07', 'cl01_040_08', 'cl01_040_09', 'cl01_040_10'), Element(name='class 1', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl01_060_01', 'cl01_060_02', 'cl01_060_03', 'cl01_060_04', 'cl01_060_05', 'cl01_060_06', 'cl01_060_07', 'cl01_060_08', 'cl01_060_09', 'cl01_060_10'), Element(name='class 1', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl01_080_01', 'cl01_080_02', 'cl01_080_03', 'cl01_080_04', 'cl01_080_05', 'cl01_080_06', 'cl01_080_07', 'cl01_080_08', 'cl01_080_09', 'cl01_080_10'), Element(name='class 1', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl01_100_01', 'cl01_100_02', 'cl01_100_03', 'cl01_100_04', 'cl01_100_05', 'cl01_100_06', 'cl01_100_07', 'cl01_100_08', 'cl01_100_09', 'cl01_100_10'), Element(name='class 2', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl02_020_01', 'cl02_020_02', 'cl02_020_03', 'cl02_020_04', 'cl02_020_05', 'cl02_020_06', 'cl02_020_07', 'cl02_020_08', 'cl02_020_09', 'cl02_020_10'), Element(name='class 2', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl02_040_01', 'cl02_040_02', 'cl02_040_03', 'cl02_040_04', 'cl02_040_05', 'cl02_040_06', 'cl02_040_07', 'cl02_040_08', 'cl02_040_09', 'cl02_040_10'), Element(name='class 2', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl02_060_01', 'cl02_060_02', 'cl02_060_03', 'cl02_060_04', 'cl02_060_05', 'cl02_060_06', 'cl02_060_07', 'cl02_060_08', 'cl02_060_09', 'cl02_060_10'), Element(name='class 2', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl02_080_01', 'cl02_080_02', 'cl02_080_03', 'cl02_080_04', 'cl02_080_05', 'cl02_080_06', 'cl02_080_07', 'cl02_080_08', 'cl02_080_09', 'cl02_080_10'), Element(name='class 2', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl02_100_01', 'cl02_100_02', 'cl02_100_03', 'cl02_100_04', 'cl02_100_05', 'cl02_100_06', 'cl02_100_07', 'cl02_100_08', 'cl02_100_09', 'cl02_100_10'), Element(name='class 3', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl03_020_01', 'cl03_020_02', 'cl03_020_03', 'cl03_020_04', 'cl03_020_05', 'cl03_020_06', 'cl03_020_07', 'cl03_020_08', 'cl03_020_09', 'cl03_020_10'), Element(name='class 3', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl03_040_01', 'cl03_040_02', 'cl03_040_03', 'cl03_040_04', 'cl03_040_05', 'cl03_040_06', 'cl03_040_07', 'cl03_040_08', 'cl03_040_09', 'cl03_040_10'), Element(name='class 3', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl03_060_01', 'cl03_060_02', 'cl03_060_03', 'cl03_060_04', 'cl03_060_05', 'cl03_060_06', 'cl03_060_07', 'cl03_060_08', 'cl03_060_09', 'cl03_060_10'), Element(name='class 3', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl03_080_01', 'cl03_080_02', 'cl03_080_03', 'cl03_080_04', 'cl03_080_05', 'cl03_080_06', 'cl03_080_07', 'cl03_080_08', 'cl03_080_09', 'cl03_080_10'), Element(name='class 3', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl03_100_01', 'cl03_100_02', 'cl03_100_03', 'cl03_100_04', 'cl03_100_05', 'cl03_100_06', 'cl03_100_07', 'cl03_100_08', 'cl03_100_09', 'cl03_100_10'), Element(name='class 4', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl04_020_01', 'cl04_020_02', 'cl04_020_03', 'cl04_020_04', 'cl04_020_05', 'cl04_020_06', 'cl04_020_07', 'cl04_020_08', 'cl04_020_09', 'cl04_020_10'), Element(name='class 4', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl04_040_01', 'cl04_040_02', 'cl04_040_03', 'cl04_040_04', 'cl04_040_05', 'cl04_040_06', 'cl04_040_07', 'cl04_040_08', 'cl04_040_09', 'cl04_040_10'), Element(name='class 4', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl04_060_01', 'cl04_060_02', 'cl04_060_03', 'cl04_060_04', 'cl04_060_05', 'cl04_060_06', 'cl04_060_07', 'cl04_060_08', 'cl04_060_09', 'cl04_060_10'), Element(name='class 4', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl04_080_01', 'cl04_080_02', 'cl04_080_03', 'cl04_080_04', 'cl04_080_05', 'cl04_080_06', 'cl04_080_07', 'cl04_080_08', 'cl04_080_09', 'cl04_080_10'), Element(name='class 4', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl04_100_01', 'cl04_100_02', 'cl04_100_03', 'cl04_100_04', 'cl04_100_05', 'cl04_100_06', 'cl04_100_07', 'cl04_100_08', 'cl04_100_09', 'cl04_100_10'), Element(name='class 5', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl05_020_01', 'cl05_020_02', 'cl05_020_03', 'cl05_020_04', 'cl05_020_05', 'cl05_020_06', 'cl05_020_07', 'cl05_020_08', 'cl05_020_09', 'cl05_020_10'), Element(name='class 5', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl05_040_01', 'cl05_040_02', 'cl05_040_03', 'cl05_040_04', 'cl05_040_05', 'cl05_040_06', 'cl05_040_07', 'cl05_040_08', 'cl05_040_09', 'cl05_040_10'), Element(name='class 5', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl05_060_01', 'cl05_060_02', 'cl05_060_03', 'cl05_060_04', 'cl05_060_05', 'cl05_060_06', 'cl05_060_07', 'cl05_060_08', 'cl05_060_09', 'cl05_060_10'), Element(name='class 5', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl05_080_01', 'cl05_080_02', 'cl05_080_03', 'cl05_080_04', 'cl05_080_05', 'cl05_080_06', 'cl05_080_07', 'cl05_080_08', 'cl05_080_09', 'cl05_080_10'), Element(name='class 5', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl05_100_01', 'cl05_100_02', 'cl05_100_03', 'cl05_100_04', 'cl05_100_05', 'cl05_100_06', 'cl05_100_07', 'cl05_100_08', 'cl05_100_09', 'cl05_100_10'), Element(name='class 6', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl06_020_01', 'cl06_020_02', 'cl06_020_03', 'cl06_020_04', 'cl06_020_05', 'cl06_020_06', 'cl06_020_07', 'cl06_020_08', 'cl06_020_09', 'cl06_020_10'), Element(name='class 6', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl06_040_01', 'cl06_040_02', 'cl06_040_03', 'cl06_040_04', 'cl06_040_05', 'cl06_040_06', 'cl06_040_07', 'cl06_040_08', 'cl06_040_09', 'cl06_040_10'), Element(name='class 6', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl06_060_01', 'cl06_060_02', 'cl06_060_03', 'cl06_060_04', 'cl06_060_05', 'cl06_060_06', 'cl06_060_07', 'cl06_060_08', 'cl06_060_09', 'cl06_060_10'), Element(name='class 6', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl06_080_01', 'cl06_080_02', 'cl06_080_03', 'cl06_080_04', 'cl06_080_05', 'cl06_080_06', 'cl06_080_07', 'cl06_080_08', 'cl06_080_09', 'cl06_080_10'), Element(name='class 6', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl06_100_01', 'cl06_100_02', 'cl06_100_03', 'cl06_100_04', 'cl06_100_05', 'cl06_100_06', 'cl06_100_07', 'cl06_100_08', 'cl06_100_09', 'cl06_100_10'), Element(name='class 7', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl07_020_01', 'cl07_020_02', 'cl07_020_03', 'cl07_020_04', 'cl07_020_05', 'cl07_020_06', 'cl07_020_07', 'cl07_020_08', 'cl07_020_09', 'cl07_020_10'), Element(name='class 7', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl07_040_01', 'cl07_040_02', 'cl07_040_03', 'cl07_040_04', 'cl07_040_05', 'cl07_040_06', 'cl07_040_07', 'cl07_040_08', 'cl07_040_09', 'cl07_040_10'), Element(name='class 7', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl07_060_01', 'cl07_060_02', 'cl07_060_03', 'cl07_060_04', 'cl07_060_05', 'cl07_060_06', 'cl07_060_07', 'cl07_060_08', 'cl07_060_09', 'cl07_060_10'), Element(name='class 7', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl07_080_01', 'cl07_080_02', 'cl07_080_03', 'cl07_080_04', 'cl07_080_05', 'cl07_080_06', 'cl07_080_07', 'cl07_080_08', 'cl07_080_09', 'cl07_080_10'), Element(name='class 7', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl07_100_01', 'cl07_100_02', 'cl07_100_03', 'cl07_100_04', 'cl07_100_05', 'cl07_100_06', 'cl07_100_07', 'cl07_100_08', 'cl07_100_09', 'cl07_100_10'), Element(name='class 8', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl08_020_01', 'cl08_020_02', 'cl08_020_03', 'cl08_020_04', 'cl08_020_05', 'cl08_020_06', 'cl08_020_07', 'cl08_020_08', 'cl08_020_09', 'cl08_020_10'), Element(name='class 8', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl08_040_01', 'cl08_040_02', 'cl08_040_03', 'cl08_040_04', 'cl08_040_05', 'cl08_040_06', 'cl08_040_07', 'cl08_040_08', 'cl08_040_09', 'cl08_040_10'), Element(name='class 8', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl08_060_01', 'cl08_060_02', 'cl08_060_03', 'cl08_060_04', 'cl08_060_05', 'cl08_060_06', 'cl08_060_07', 'cl08_060_08', 'cl08_060_09', 'cl08_060_10'), Element(name='class 8', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl08_080_01', 'cl08_080_02', 'cl08_080_03', 'cl08_080_04', 'cl08_080_05', 'cl08_080_06', 'cl08_080_07', 'cl08_080_08', 'cl08_080_09', 'cl08_080_10'), Element(name='class 8', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl08_100_01', 'cl08_100_02', 'cl08_100_03', 'cl08_100_04', 'cl08_100_05', 'cl08_100_06', 'cl08_100_07', 'cl08_100_08', 'cl08_100_09', 'cl08_100_10'), Element(name='class 9', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl09_020_01', 'cl09_020_02', 'cl09_020_03', 'cl09_020_04', 'cl09_020_05', 'cl09_020_06', 'cl09_020_07', 'cl09_020_08', 'cl09_020_09', 'cl09_020_10'), Element(name='class 9', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl09_040_01', 'cl09_040_02', 'cl09_040_03', 'cl09_040_04', 'cl09_040_05', 'cl09_040_06', 'cl09_040_07', 'cl09_040_08', 'cl09_040_09', 'cl09_040_10'), Element(name='class 9', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl09_060_01', 'cl09_060_02', 'cl09_060_03', 'cl09_060_04', 'cl09_060_05', 'cl09_060_06', 'cl09_060_07', 'cl09_060_08', 'cl09_060_09', 'cl09_060_10'), Element(name='class 9', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl09_080_01', 'cl09_080_02', 'cl09_080_03', 'cl09_080_04', 'cl09_080_05', 'cl09_080_06', 'cl09_080_07', 'cl09_080_08', 'cl09_080_09', 'cl09_080_10'), Element(name='class 9', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl09_100_01', 'cl09_100_02', 'cl09_100_03', 'cl09_100_04', 'cl09_100_05', 'cl09_100_06', 'cl09_100_07', 'cl09_100_08', 'cl09_100_09', 'cl09_100_10'), Element(name='class 10', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl10_020_01', 'cl10_020_02', 'cl10_020_03', 'cl10_020_04', 'cl10_020_05', 'cl10_020_06', 'cl10_020_07', 'cl10_020_08', 'cl10_020_09', 'cl10_020_10'), Element(name='class 10', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl10_040_01', 'cl10_040_02', 'cl10_040_03', 'cl10_040_04', 'cl10_040_05', 'cl10_040_06', 'cl10_040_07', 'cl10_040_08', 'cl10_040_09', 'cl10_040_10'), Element(name='class 10', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl10_060_01', 'cl10_060_02', 'cl10_060_03', 'cl10_060_04', 'cl10_060_05', 'cl10_060_06', 'cl10_060_07', 'cl10_060_08', 'cl10_060_09', 'cl10_060_10'), Element(name='class 10', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl10_080_01', 'cl10_080_02', 'cl10_080_03', 'cl10_080_04', 'cl10_080_05', 'cl10_080_06', 'cl10_080_07', 'cl10_080_08', 'cl10_080_09', 'cl10_080_10'), Element(name='class 10', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'): ('cl10_100_01', 'cl10_100_02', 'cl10_100_03', 'cl10_100_04', 'cl10_100_05', 'cl10_100_06', 'cl10_100_07', 'cl10_100_08', 'cl10_100_09', 'cl10_100_10'), Element(name='asqas', name_suffix='', reference='vdBBMSB2016ASIASSTFI'): ('asqas03', 'asqas08', 'asqas20', 'asqas34')})

a mapping of instance groups to instances

moptipyapps.binpacking2d.bks.HHANO_R: Final[Element] = Element(name='HHANO', name_suffix='HHANOR', reference='BDC2015RHHAFTOONO2BPP')

the HHANO-R algorithm for 2D bin packing with rotation

moptipyapps.binpacking2d.bks.HHANO_SR: Final[Element] = Element(name='HHANO', name_suffix='HHANOSR', reference='BDC2015RHHAFTOONO2BPP')

the HHANO-SR algorithm for 2D bin packing with rotation

moptipyapps.binpacking2d.bks.INSTANCES_TO_GROUPS: Final[Mapping[str, Element]] = mappingproxy({'a01': Element(name='a', name_suffix='small', reference='MAVdC2010AFMFTTDGCSP'), 'a02': Element(name='a', name_suffix='small', reference='MAVdC2010AFMFTTDGCSP'), 'a03': Element(name='a', name_suffix='small', reference='MAVdC2010AFMFTTDGCSP'), 'a04': Element(name='a', name_suffix='small', reference='MAVdC2010AFMFTTDGCSP'), 'a05': Element(name='a', name_suffix='med', reference='MAVdC2010AFMFTTDGCSP'), 'a06': Element(name='a', name_suffix='small', reference='MAVdC2010AFMFTTDGCSP'), 'a07': Element(name='a', name_suffix='med', reference='MAVdC2010AFMFTTDGCSP'), 'a08': Element(name='a', name_suffix='small', reference='MAVdC2010AFMFTTDGCSP'), 'a09': Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP'), 'a10': Element(name='a', name_suffix='small', reference='MAVdC2010AFMFTTDGCSP'), 'a11': Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP'), 'a12': Element(name='a', name_suffix='small', reference='MAVdC2010AFMFTTDGCSP'), 'a13': Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP'), 'a14': Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP'), 'a15': Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP'), 'a16': Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP'), 'a17': Element(name='a', name_suffix='med', reference='MAVdC2010AFMFTTDGCSP'), 'a18': Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP'), 'a19': Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP'), 'a20': Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP'), 'a21': Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP'), 'a22': Element(name='a', name_suffix='small', reference='MAVdC2010AFMFTTDGCSP'), 'a23': Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP'), 'a24': Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP'), 'a25': Element(name='a', name_suffix='med', reference='MAVdC2010AFMFTTDGCSP'), 'a26': Element(name='a', name_suffix='med', reference='MAVdC2010AFMFTTDGCSP'), 'a27': Element(name='a', name_suffix='med', reference='MAVdC2010AFMFTTDGCSP'), 'a28': Element(name='a', name_suffix='med', reference='MAVdC2010AFMFTTDGCSP'), 'a29': Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP'), 'a30': Element(name='a', name_suffix='small', reference='MAVdC2010AFMFTTDGCSP'), 'a31': Element(name='a', name_suffix='med', reference='MAVdC2010AFMFTTDGCSP'), 'a32': Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP'), 'a33': Element(name='a', name_suffix='large', reference='MAVdC2010AFMFTTDGCSP'), 'a34': Element(name='a', name_suffix='small', reference='MAVdC2010AFMFTTDGCSP'), 'a35': Element(name='a', name_suffix='med', reference='MAVdC2010AFMFTTDGCSP'), 'a36': Element(name='a', name_suffix='med', reference='MAVdC2010AFMFTTDGCSP'), 'a37': Element(name='a', name_suffix='med', reference='MAVdC2010AFMFTTDGCSP'), 'a38': Element(name='a', name_suffix='med', reference='MAVdC2010AFMFTTDGCSP'), 'a39': Element(name='a', name_suffix='small', reference='MAVdC2010AFMFTTDGCSP'), 'a40': Element(name='a', name_suffix='med', reference='MAVdC2010AFMFTTDGCSP'), 'a41': Element(name='a', name_suffix='med', reference='MAVdC2010AFMFTTDGCSP'), 'a42': Element(name='a', name_suffix='small', reference='MAVdC2010AFMFTTDGCSP'), 'a43': Element(name='a', name_suffix='small', reference='MAVdC2010AFMFTTDGCSP'), 'beng01': Element(name='beng', name_suffix='1-8', reference='B1982PRPAHA'), 'beng02': Element(name='beng', name_suffix='1-8', reference='B1982PRPAHA'), 'beng03': Element(name='beng', name_suffix='1-8', reference='B1982PRPAHA'), 'beng04': Element(name='beng', name_suffix='1-8', reference='B1982PRPAHA'), 'beng05': Element(name='beng', name_suffix='1-8', reference='B1982PRPAHA'), 'beng06': Element(name='beng', name_suffix='1-8', reference='B1982PRPAHA'), 'beng07': Element(name='beng', name_suffix='1-8', reference='B1982PRPAHA'), 'beng08': Element(name='beng', name_suffix='1-8', reference='B1982PRPAHA'), 'beng09': Element(name='beng', name_suffix='9-10', reference='B1982PRPAHA'), 'beng10': Element(name='beng', name_suffix='9-10', reference='B1982PRPAHA'), 'cl01_020_01': Element(name='class 1', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_020_02': Element(name='class 1', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_020_03': Element(name='class 1', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_020_04': Element(name='class 1', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_020_05': Element(name='class 1', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_020_06': Element(name='class 1', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_020_07': Element(name='class 1', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_020_08': Element(name='class 1', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_020_09': Element(name='class 1', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_020_10': Element(name='class 1', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_040_01': Element(name='class 1', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_040_02': Element(name='class 1', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_040_03': Element(name='class 1', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_040_04': Element(name='class 1', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_040_05': Element(name='class 1', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_040_06': Element(name='class 1', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_040_07': Element(name='class 1', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_040_08': Element(name='class 1', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_040_09': Element(name='class 1', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_040_10': Element(name='class 1', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_060_01': Element(name='class 1', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_060_02': Element(name='class 1', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_060_03': Element(name='class 1', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_060_04': Element(name='class 1', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_060_05': Element(name='class 1', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_060_06': Element(name='class 1', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_060_07': Element(name='class 1', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_060_08': Element(name='class 1', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_060_09': Element(name='class 1', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_060_10': Element(name='class 1', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_080_01': Element(name='class 1', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_080_02': Element(name='class 1', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_080_03': Element(name='class 1', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_080_04': Element(name='class 1', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_080_05': Element(name='class 1', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_080_06': Element(name='class 1', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_080_07': Element(name='class 1', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_080_08': Element(name='class 1', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_080_09': Element(name='class 1', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_080_10': Element(name='class 1', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_100_01': Element(name='class 1', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_100_02': Element(name='class 1', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_100_03': Element(name='class 1', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_100_04': Element(name='class 1', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_100_05': Element(name='class 1', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_100_06': Element(name='class 1', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_100_07': Element(name='class 1', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_100_08': Element(name='class 1', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_100_09': Element(name='class 1', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl01_100_10': Element(name='class 1', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_020_01': Element(name='class 2', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_020_02': Element(name='class 2', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_020_03': Element(name='class 2', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_020_04': Element(name='class 2', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_020_05': Element(name='class 2', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_020_06': Element(name='class 2', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_020_07': Element(name='class 2', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_020_08': Element(name='class 2', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_020_09': Element(name='class 2', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_020_10': Element(name='class 2', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_040_01': Element(name='class 2', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_040_02': Element(name='class 2', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_040_03': Element(name='class 2', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_040_04': Element(name='class 2', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_040_05': Element(name='class 2', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_040_06': Element(name='class 2', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_040_07': Element(name='class 2', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_040_08': Element(name='class 2', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_040_09': Element(name='class 2', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_040_10': Element(name='class 2', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_060_01': Element(name='class 2', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_060_02': Element(name='class 2', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_060_03': Element(name='class 2', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_060_04': Element(name='class 2', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_060_05': Element(name='class 2', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_060_06': Element(name='class 2', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_060_07': Element(name='class 2', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_060_08': Element(name='class 2', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_060_09': Element(name='class 2', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_060_10': Element(name='class 2', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_080_01': Element(name='class 2', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_080_02': Element(name='class 2', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_080_03': Element(name='class 2', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_080_04': Element(name='class 2', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_080_05': Element(name='class 2', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_080_06': Element(name='class 2', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_080_07': Element(name='class 2', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_080_08': Element(name='class 2', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_080_09': Element(name='class 2', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_080_10': Element(name='class 2', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_100_01': Element(name='class 2', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_100_02': Element(name='class 2', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_100_03': Element(name='class 2', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_100_04': Element(name='class 2', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_100_05': Element(name='class 2', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_100_06': Element(name='class 2', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_100_07': Element(name='class 2', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_100_08': Element(name='class 2', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_100_09': Element(name='class 2', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl02_100_10': Element(name='class 2', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_020_01': Element(name='class 3', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_020_02': Element(name='class 3', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_020_03': Element(name='class 3', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_020_04': Element(name='class 3', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_020_05': Element(name='class 3', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_020_06': Element(name='class 3', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_020_07': Element(name='class 3', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_020_08': Element(name='class 3', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_020_09': Element(name='class 3', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_020_10': Element(name='class 3', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_040_01': Element(name='class 3', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_040_02': Element(name='class 3', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_040_03': Element(name='class 3', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_040_04': Element(name='class 3', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_040_05': Element(name='class 3', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_040_06': Element(name='class 3', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_040_07': Element(name='class 3', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_040_08': Element(name='class 3', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_040_09': Element(name='class 3', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_040_10': Element(name='class 3', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_060_01': Element(name='class 3', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_060_02': Element(name='class 3', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_060_03': Element(name='class 3', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_060_04': Element(name='class 3', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_060_05': Element(name='class 3', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_060_06': Element(name='class 3', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_060_07': Element(name='class 3', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_060_08': Element(name='class 3', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_060_09': Element(name='class 3', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_060_10': Element(name='class 3', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_080_01': Element(name='class 3', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_080_02': Element(name='class 3', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_080_03': Element(name='class 3', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_080_04': Element(name='class 3', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_080_05': Element(name='class 3', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_080_06': Element(name='class 3', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_080_07': Element(name='class 3', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_080_08': Element(name='class 3', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_080_09': Element(name='class 3', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_080_10': Element(name='class 3', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_100_01': Element(name='class 3', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_100_02': Element(name='class 3', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_100_03': Element(name='class 3', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_100_04': Element(name='class 3', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_100_05': Element(name='class 3', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_100_06': Element(name='class 3', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_100_07': Element(name='class 3', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_100_08': Element(name='class 3', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_100_09': Element(name='class 3', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl03_100_10': Element(name='class 3', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_020_01': Element(name='class 4', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_020_02': Element(name='class 4', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_020_03': Element(name='class 4', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_020_04': Element(name='class 4', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_020_05': Element(name='class 4', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_020_06': Element(name='class 4', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_020_07': Element(name='class 4', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_020_08': Element(name='class 4', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_020_09': Element(name='class 4', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_020_10': Element(name='class 4', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_040_01': Element(name='class 4', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_040_02': Element(name='class 4', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_040_03': Element(name='class 4', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_040_04': Element(name='class 4', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_040_05': Element(name='class 4', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_040_06': Element(name='class 4', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_040_07': Element(name='class 4', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_040_08': Element(name='class 4', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_040_09': Element(name='class 4', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_040_10': Element(name='class 4', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_060_01': Element(name='class 4', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_060_02': Element(name='class 4', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_060_03': Element(name='class 4', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_060_04': Element(name='class 4', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_060_05': Element(name='class 4', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_060_06': Element(name='class 4', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_060_07': Element(name='class 4', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_060_08': Element(name='class 4', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_060_09': Element(name='class 4', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_060_10': Element(name='class 4', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_080_01': Element(name='class 4', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_080_02': Element(name='class 4', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_080_03': Element(name='class 4', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_080_04': Element(name='class 4', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_080_05': Element(name='class 4', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_080_06': Element(name='class 4', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_080_07': Element(name='class 4', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_080_08': Element(name='class 4', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_080_09': Element(name='class 4', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_080_10': Element(name='class 4', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_100_01': Element(name='class 4', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_100_02': Element(name='class 4', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_100_03': Element(name='class 4', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_100_04': Element(name='class 4', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_100_05': Element(name='class 4', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_100_06': Element(name='class 4', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_100_07': Element(name='class 4', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_100_08': Element(name='class 4', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_100_09': Element(name='class 4', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl04_100_10': Element(name='class 4', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_020_01': Element(name='class 5', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_020_02': Element(name='class 5', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_020_03': Element(name='class 5', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_020_04': Element(name='class 5', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_020_05': Element(name='class 5', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_020_06': Element(name='class 5', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_020_07': Element(name='class 5', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_020_08': Element(name='class 5', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_020_09': Element(name='class 5', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_020_10': Element(name='class 5', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_040_01': Element(name='class 5', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_040_02': Element(name='class 5', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_040_03': Element(name='class 5', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_040_04': Element(name='class 5', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_040_05': Element(name='class 5', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_040_06': Element(name='class 5', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_040_07': Element(name='class 5', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_040_08': Element(name='class 5', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_040_09': Element(name='class 5', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_040_10': Element(name='class 5', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_060_01': Element(name='class 5', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_060_02': Element(name='class 5', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_060_03': Element(name='class 5', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_060_04': Element(name='class 5', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_060_05': Element(name='class 5', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_060_06': Element(name='class 5', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_060_07': Element(name='class 5', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_060_08': Element(name='class 5', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_060_09': Element(name='class 5', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_060_10': Element(name='class 5', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_080_01': Element(name='class 5', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_080_02': Element(name='class 5', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_080_03': Element(name='class 5', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_080_04': Element(name='class 5', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_080_05': Element(name='class 5', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_080_06': Element(name='class 5', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_080_07': Element(name='class 5', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_080_08': Element(name='class 5', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_080_09': Element(name='class 5', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_080_10': Element(name='class 5', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_100_01': Element(name='class 5', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_100_02': Element(name='class 5', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_100_03': Element(name='class 5', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_100_04': Element(name='class 5', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_100_05': Element(name='class 5', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_100_06': Element(name='class 5', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_100_07': Element(name='class 5', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_100_08': Element(name='class 5', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_100_09': Element(name='class 5', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl05_100_10': Element(name='class 5', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_020_01': Element(name='class 6', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_020_02': Element(name='class 6', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_020_03': Element(name='class 6', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_020_04': Element(name='class 6', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_020_05': Element(name='class 6', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_020_06': Element(name='class 6', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_020_07': Element(name='class 6', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_020_08': Element(name='class 6', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_020_09': Element(name='class 6', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_020_10': Element(name='class 6', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_040_01': Element(name='class 6', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_040_02': Element(name='class 6', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_040_03': Element(name='class 6', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_040_04': Element(name='class 6', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_040_05': Element(name='class 6', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_040_06': Element(name='class 6', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_040_07': Element(name='class 6', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_040_08': Element(name='class 6', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_040_09': Element(name='class 6', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_040_10': Element(name='class 6', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_060_01': Element(name='class 6', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_060_02': Element(name='class 6', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_060_03': Element(name='class 6', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_060_04': Element(name='class 6', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_060_05': Element(name='class 6', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_060_06': Element(name='class 6', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_060_07': Element(name='class 6', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_060_08': Element(name='class 6', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_060_09': Element(name='class 6', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_060_10': Element(name='class 6', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_080_01': Element(name='class 6', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_080_02': Element(name='class 6', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_080_03': Element(name='class 6', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_080_04': Element(name='class 6', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_080_05': Element(name='class 6', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_080_06': Element(name='class 6', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_080_07': Element(name='class 6', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_080_08': Element(name='class 6', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_080_09': Element(name='class 6', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_080_10': Element(name='class 6', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_100_01': Element(name='class 6', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_100_02': Element(name='class 6', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_100_03': Element(name='class 6', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_100_04': Element(name='class 6', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_100_05': Element(name='class 6', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_100_06': Element(name='class 6', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_100_07': Element(name='class 6', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_100_08': Element(name='class 6', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_100_09': Element(name='class 6', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl06_100_10': Element(name='class 6', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_020_01': Element(name='class 7', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_020_02': Element(name='class 7', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_020_03': Element(name='class 7', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_020_04': Element(name='class 7', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_020_05': Element(name='class 7', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_020_06': Element(name='class 7', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_020_07': Element(name='class 7', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_020_08': Element(name='class 7', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_020_09': Element(name='class 7', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_020_10': Element(name='class 7', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_040_01': Element(name='class 7', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_040_02': Element(name='class 7', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_040_03': Element(name='class 7', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_040_04': Element(name='class 7', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_040_05': Element(name='class 7', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_040_06': Element(name='class 7', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_040_07': Element(name='class 7', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_040_08': Element(name='class 7', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_040_09': Element(name='class 7', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_040_10': Element(name='class 7', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_060_01': Element(name='class 7', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_060_02': Element(name='class 7', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_060_03': Element(name='class 7', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_060_04': Element(name='class 7', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_060_05': Element(name='class 7', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_060_06': Element(name='class 7', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_060_07': Element(name='class 7', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_060_08': Element(name='class 7', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_060_09': Element(name='class 7', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_060_10': Element(name='class 7', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_080_01': Element(name='class 7', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_080_02': Element(name='class 7', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_080_03': Element(name='class 7', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_080_04': Element(name='class 7', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_080_05': Element(name='class 7', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_080_06': Element(name='class 7', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_080_07': Element(name='class 7', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_080_08': Element(name='class 7', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_080_09': Element(name='class 7', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_080_10': Element(name='class 7', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_100_01': Element(name='class 7', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_100_02': Element(name='class 7', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_100_03': Element(name='class 7', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_100_04': Element(name='class 7', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_100_05': Element(name='class 7', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_100_06': Element(name='class 7', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_100_07': Element(name='class 7', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_100_08': Element(name='class 7', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_100_09': Element(name='class 7', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl07_100_10': Element(name='class 7', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_020_01': Element(name='class 8', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_020_02': Element(name='class 8', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_020_03': Element(name='class 8', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_020_04': Element(name='class 8', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_020_05': Element(name='class 8', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_020_06': Element(name='class 8', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_020_07': Element(name='class 8', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_020_08': Element(name='class 8', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_020_09': Element(name='class 8', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_020_10': Element(name='class 8', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_040_01': Element(name='class 8', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_040_02': Element(name='class 8', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_040_03': Element(name='class 8', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_040_04': Element(name='class 8', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_040_05': Element(name='class 8', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_040_06': Element(name='class 8', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_040_07': Element(name='class 8', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_040_08': Element(name='class 8', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_040_09': Element(name='class 8', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_040_10': Element(name='class 8', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_060_01': Element(name='class 8', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_060_02': Element(name='class 8', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_060_03': Element(name='class 8', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_060_04': Element(name='class 8', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_060_05': Element(name='class 8', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_060_06': Element(name='class 8', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_060_07': Element(name='class 8', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_060_08': Element(name='class 8', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_060_09': Element(name='class 8', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_060_10': Element(name='class 8', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_080_01': Element(name='class 8', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_080_02': Element(name='class 8', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_080_03': Element(name='class 8', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_080_04': Element(name='class 8', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_080_05': Element(name='class 8', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_080_06': Element(name='class 8', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_080_07': Element(name='class 8', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_080_08': Element(name='class 8', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_080_09': Element(name='class 8', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_080_10': Element(name='class 8', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_100_01': Element(name='class 8', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_100_02': Element(name='class 8', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_100_03': Element(name='class 8', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_100_04': Element(name='class 8', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_100_05': Element(name='class 8', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_100_06': Element(name='class 8', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_100_07': Element(name='class 8', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_100_08': Element(name='class 8', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_100_09': Element(name='class 8', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl08_100_10': Element(name='class 8', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_020_01': Element(name='class 9', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_020_02': Element(name='class 9', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_020_03': Element(name='class 9', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_020_04': Element(name='class 9', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_020_05': Element(name='class 9', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_020_06': Element(name='class 9', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_020_07': Element(name='class 9', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_020_08': Element(name='class 9', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_020_09': Element(name='class 9', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_020_10': Element(name='class 9', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_040_01': Element(name='class 9', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_040_02': Element(name='class 9', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_040_03': Element(name='class 9', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_040_04': Element(name='class 9', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_040_05': Element(name='class 9', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_040_06': Element(name='class 9', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_040_07': Element(name='class 9', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_040_08': Element(name='class 9', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_040_09': Element(name='class 9', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_040_10': Element(name='class 9', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_060_01': Element(name='class 9', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_060_02': Element(name='class 9', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_060_03': Element(name='class 9', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_060_04': Element(name='class 9', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_060_05': Element(name='class 9', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_060_06': Element(name='class 9', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_060_07': Element(name='class 9', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_060_08': Element(name='class 9', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_060_09': Element(name='class 9', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_060_10': Element(name='class 9', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_080_01': Element(name='class 9', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_080_02': Element(name='class 9', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_080_03': Element(name='class 9', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_080_04': Element(name='class 9', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_080_05': Element(name='class 9', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_080_06': Element(name='class 9', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_080_07': Element(name='class 9', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_080_08': Element(name='class 9', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_080_09': Element(name='class 9', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_080_10': Element(name='class 9', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_100_01': Element(name='class 9', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_100_02': Element(name='class 9', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_100_03': Element(name='class 9', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_100_04': Element(name='class 9', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_100_05': Element(name='class 9', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_100_06': Element(name='class 9', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_100_07': Element(name='class 9', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_100_08': Element(name='class 9', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_100_09': Element(name='class 9', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl09_100_10': Element(name='class 9', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_020_01': Element(name='class 10', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_020_02': Element(name='class 10', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_020_03': Element(name='class 10', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_020_04': Element(name='class 10', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_020_05': Element(name='class 10', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_020_06': Element(name='class 10', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_020_07': Element(name='class 10', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_020_08': Element(name='class 10', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_020_09': Element(name='class 10', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_020_10': Element(name='class 10', name_suffix='20', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_040_01': Element(name='class 10', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_040_02': Element(name='class 10', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_040_03': Element(name='class 10', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_040_04': Element(name='class 10', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_040_05': Element(name='class 10', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_040_06': Element(name='class 10', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_040_07': Element(name='class 10', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_040_08': Element(name='class 10', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_040_09': Element(name='class 10', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_040_10': Element(name='class 10', name_suffix='40', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_060_01': Element(name='class 10', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_060_02': Element(name='class 10', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_060_03': Element(name='class 10', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_060_04': Element(name='class 10', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_060_05': Element(name='class 10', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_060_06': Element(name='class 10', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_060_07': Element(name='class 10', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_060_08': Element(name='class 10', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_060_09': Element(name='class 10', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_060_10': Element(name='class 10', name_suffix='60', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_080_01': Element(name='class 10', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_080_02': Element(name='class 10', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_080_03': Element(name='class 10', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_080_04': Element(name='class 10', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_080_05': Element(name='class 10', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_080_06': Element(name='class 10', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_080_07': Element(name='class 10', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_080_08': Element(name='class 10', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_080_09': Element(name='class 10', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_080_10': Element(name='class 10', name_suffix='80', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_100_01': Element(name='class 10', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_100_02': Element(name='class 10', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_100_03': Element(name='class 10', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_100_04': Element(name='class 10', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_100_05': Element(name='class 10', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_100_06': Element(name='class 10', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_100_07': Element(name='class 10', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_100_08': Element(name='class 10', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_100_09': Element(name='class 10', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'cl10_100_10': Element(name='class 10', name_suffix='100', reference='BW1987TDFBPA,MV1998ESOTTDFBPP'), 'asqas03': Element(name='asqas', name_suffix='', reference='vdBBMSB2016ASIASSTFI'), 'asqas08': Element(name='asqas', name_suffix='', reference='vdBBMSB2016ASIASSTFI'), 'asqas20': Element(name='asqas', name_suffix='', reference='vdBBMSB2016ASIASSTFI'), 'asqas34': Element(name='asqas', name_suffix='', reference='vdBBMSB2016ASIASSTFI')})

a mapping of instances to instance groups

moptipyapps.binpacking2d.bks.INST_GROUP_SORT_KEY(value, start=0, stop=9223372036854775807, /)

A sort key function for instance groups

moptipyapps.binpacking2d.bks.MXGA: Final[Element] = Element(name='MXGA', name_suffix='', reference='L2008AGAFTDBPP')

the MXGA algorithm for 2D bin packing with rotation

moptipyapps.binpacking2d.bks.NO_REF: Final[str] = '{{NO_REF}}'

a constant for no reference

moptipyapps.binpacking2d.bks.PAC: Final[Element] = Element(name='PAC', name_suffix='', reference='CGRS2020PACATSMTOOSFT2BPP')

the price-and-cut algorithm for 2D bin packing with rotation

Get the related work of a given type.

Parameters:
  • with_rotation (bool | None, default: None) – include the data with rotation

  • without_rotation (bool | None, default: None) – include the data without rotation

  • algo_select (Callable[[Element], bool], default: <function <lambda> at 0x7f135b2a3240>) – the algorithm selector

  • inst_group_select (Callable[[Element], bool], default: <function <lambda> at 0x7f135b2a32e0>) – the instance group selector

Return type:

tuple[tuple[bool, Element, Element, int], ...]

Returns:

An iterable with the related works

moptipyapps.binpacking2d.bks.make_comparison_table(dest, data, name_to_strs=<function <lambda>>, format_best=<function <lambda>>, count_best_over=())[source]

Make a comparison table in LaTeX.

Parameters:
Return type:

None

moptipyapps.binpacking2d.bks.make_comparison_table_data(data, with_rotation, algo_from_pr=<function <lambda>>, algo_sort_key=<function <lambda>>, rw_algo_selector=<function <lambda>>, aggregator=<function mean>, additional=<function <lambda>>)[source]

Create the data for an end result comparison table.

Parameters:
Return type:

tuple[tuple[Element, ...], tuple[tuple[Element, tuple[int | float | None, ...]], ...]]

Returns:

the table data: the title row columns followed by the data row-by-row, each row leading with an instance group identifier

moptipyapps.binpacking2d.experiment module

An example experiment for bin packing.

moptipyapps.binpacking2d.experiment.MAX_FES: Final[int] = 1000000

the maximum number of FEs

moptipyapps.binpacking2d.experiment.base_setup(instance, encoding, objective)[source]

Create the basic setup.

Parameters:
Return type:

tuple[SignedPermutations, Execution]

Returns:

the search space and the basic execution

moptipyapps.binpacking2d.experiment.fea(instance, encoding, objective)[source]

Create the FEA setup.

Parameters:
Return type:

Execution

Returns:

the RLS execution

moptipyapps.binpacking2d.experiment.rls(instance, encoding, objective)[source]

Create the RLS setup.

Parameters:
Return type:

Execution

Returns:

the RLS execution

moptipyapps.binpacking2d.experiment.run(base_dir, n_runs=23)[source]

Run the experiment.

Parameters:
  • base_dir (str) – the base directory

  • n_runs (int, default: 23) – the number of runs, by default 23

Return type:

None

moptipyapps.binpacking2d.instance module

A Two-Dimensional Bin Packing instance.

This module provides an instance of the two-dimensional bin packing problem as defined in 2DPackLib [1, 2] as well as the four non-trivial ‘Almost Squares in Almost Squares’ instances [6, 7].

All instances of Instance are two-dimensional numpy ndarrays with additional attributes. Each instance has a name. Instances also specify a bin_width and bin_height. They define the number n_different_items of items with different IDs. Notice that in the 2DPackLib dataset, a benchmark instance may contain the same item multiple times. Obviously, all items of the same ID have the exact same width and height, meaning that we only need to store them once and remember how often they occur. (Notice that the opposite is not true, i.e., not all items with the same width and height do have the same ID.) Anyway, the total number n_items of items, i.e., the sum of all the repetitions of all items, is also stored.

The matrix data of the instance class is laid out as follows: There is one row for each item. The row contains the width of the item, the height of the item, and the number of times the item will occur. The row at index i stands for the item with ID i+1.

Instances can be loaded directly from a 2DPackLib file via Instance.from_2dpacklib(). They can also be loaded from a compact string representation (via Instance.from_compact_str()) and can also be converted to such a compact representation (via Instance.to_compact_str()). This library ships with a set of pre-defined instances as resource which can be obtained via Instance.from_resource() and listed via Instance.list_resources().

We provide the instances of the sets A [3], BENG [4], and CLASS [5] from 2DPackLib. Additionally, we include the four non-trivial ‘Almost Squares in Almost Squares’ instances [6,7].

Initial work on this code has been contributed by Mr. Rui ZHAO (赵睿), <zr1329142665@163.com> a Master’s student at the Institute of Applied Optimization (应用优化研究所, http://iao.hfuu.edu.cn) of the School of Artificial Intelligence and Big Data (人工智能与大数据学院) at Hefei University (合肥大学) in Hefei, Anhui, China (中国安徽省合肥市) under the supervision of Prof. Dr. Thomas Weise (汤卫思教授).

  1. Manuel Iori, Vinícius Loti de Lima, Silvano Martello, and Michele Monaci. 2DPackLib. https://site.unibo.it/operations-research/en/research/2dpacklib

  2. Manuel Iori, Vinícius Loti de Lima, Silvano Martello, and Michele Monaci. 2DPackLib: A Two-Dimensional Cutting and Packing Library. Optimization Letters 16(2):471-480. March 2022. https://doi.org/10.1007/s11590-021-01808-y

  3. Rita Macedo, Cláudio Alves, and José M. Valério de Carvalho. Arc-Flow Model for the Two-Dimensional Guillotine Cutting Stock Problem. Computers & Operations Research 37(6):991-1001. June 2010. https://doi.org/10.1016/j.cor.2009.08.005.

  4. Bengt-Erik Bengtsson. Packing Rectangular Pieces - A Heuristic Approach. The Computer Journal 25(3):353-357, August 1982. https://doi.org/10.1093/comjnl/25.3.353

  5. J.O. Berkey and P.Y. Wang. Two Dimensional Finite Bin Packing Algorithms. Journal of the Operational Research Society 38(5):423-429. May 1987. https://doi.org/10.1057/jors.1987.70

  6. Daan van den Berg, Florian Braam, Mark Moes, Emiel Suilen, and Sandjai Bhulai. Almost Squares in Almost Squares: Solving the Final Instance. In The Fifth International Conference on Data Analytics (DATA ANALYTICS’16) October 9-13, 2016, Venice, Italy, pages 69-74. IARIA. ISBN: 9781612085104. https://hdl.handle.net/11245/1.545914. https://math.vu.nl/~sbhulai/publications/data_analytics2016b.pdf.

  7. H. Simonis and B. O’Sullivan. Almost Square Packing in 8th International Conference on Integration of AI and OR Techniques in Constraint Programming for Combinatorial Optimization Problems (CPAIOR’11), May 23-27, 2011, Berlin, Germany, pages 196-209. Berlin, Germany: Springer-Verlag. doi:10.1007/978-3-642-21311-3_19.

>>> ins = Instance("a", 100, 50, [[10, 5, 1], [3, 3, 1], [5, 5, 1]])
>>> ins.name
'a'
>>> ins.bin_width
100
>>> ins.bin_height
50
>>> ins.dtype
dtype('int8')
>>> ins.n_different_items
3
>>> ins.to_compact_str()
'a;3;100;50;10,5;3,3;5,5'
>>> ins = Instance("b", 100, 50, np.array([[10, 5, 1], [3, 3, 1], [3, 3, 1]]))
>>> ins.name
'b'
>>> ins.bin_width
100
>>> ins.bin_height
50
>>> ins.dtype
dtype('int8')
>>> ins.to_compact_str()
'b;3;100;50;10,5;3,3;3,3'
>>> ins = Instance.from_resource("cl02_020_06")
>>> ins.dtype
dtype('int8')
>>> ins.n_different_items
20
>>> ins.n_items
20
>>> ins = Instance.from_resource("a25")
>>> ins.dtype
dtype('int16')
>>> ins.n_different_items
75
>>> ins.n_items
156
moptipyapps.binpacking2d.instance.BIN_HEIGHT: Final[str] = 'binHeight'

the bin height

moptipyapps.binpacking2d.instance.BIN_WIDTH: Final[str] = 'binWidth'

the bin width

moptipyapps.binpacking2d.instance.IDX_HEIGHT: Final[int] = 1

the index of the height element in an item of an instance

moptipyapps.binpacking2d.instance.IDX_REPETITION: Final[int] = 2

the index of the repetitions element in an item of an instance

moptipyapps.binpacking2d.instance.IDX_WIDTH: Final[int] = 0

the index of the width element in an item of an instance

moptipyapps.binpacking2d.instance.INSTANCES_RESOURCE: Final[str] = 'instances.txt'

the instances resource name

moptipyapps.binpacking2d.instance.INTERNAL_SEP: Final[str] = ','

The internal item separator

class moptipyapps.binpacking2d.instance.Instance(name: str, bin_width: int, bin_height: int, matrix: ndarray | list[list[int]])[source]

Bases: Component, ndarray

An instance of the 2D Bin Packing Problem.

Each row of the matrix contains three values: 1. the item’s width, 2. the item’s height, 3. how often the item occurs.

bin_height: int

the bin height

bin_width: int

the bin width

static from_2dpacklib(file)[source]

Load a problem instance from the 2dpacklib format.

Parameters:

file (str) – the file path

Return type:

Instance

Returns:

the instance

static from_compact_str(data)[source]

Transform a compact string back to an instance.

Parameters:

data (str) – the string data

Return type:

Instance

Returns:

the instance

>>> ins = Instance("x", 500, 50, [[3, 5, 1], [2, 5, 2]])
>>> Instance.from_compact_str(ins.to_compact_str()).to_compact_str()
'x;2;500;50;3,5;2,5,2'
static from_resource(name)[source]

Load an instance from a resource.

Parameters:

name (str) – the name string

Return type:

Instance

Returns:

the instance

>>> Instance.from_resource("a01").to_compact_str()
'a01;2;2750;1220;463,386,18;1680,420,6'
>>> Instance.from_resource("a07").to_compact_str()
'a07;5;2750;1220;706,286,8;706,516,16;986,433,10;1120,486,12;1120,986,12'
>>> Instance.from_resource("a08") is Instance.from_resource("a08")
True
>>> Instance.from_resource("a08") is Instance.from_resource("a09")
False
get_standard_item_sequence()[source]

Get the standardized item sequence.

Return type:

list[int]

Returns:

the standardized item sequence

>>> ins = Instance("a", 100, 50, [[10, 5, 1], [3, 3, 1], [5, 5, 1]])
>>> ins.get_standard_item_sequence()
[1, 2, 3]
>>> ins = Instance("a", 100, 50, [[10, 5, 1], [3, 3, 1], [5, 5, 2]])
>>> ins.get_standard_item_sequence()
[1, 2, 3, 3]
>>> ins = Instance("a", 100, 50, [[10, 5, 2], [3, 3, 3], [5, 5, 4]])
>>> ins.get_standard_item_sequence()
[1, 1, 2, 2, 2, 3, 3, 3, 3]
static list_resources()[source]

Get a tuple of all the instances available as resource.

Return type:

tuple[str, ...]

Returns:

the tuple with the instance names

>>> len(list(Instance.list_resources()))
557
static list_resources_groups()[source]

List the instance groups in the resources.

One problem of the benchmark set for 2-dimensional bin packing is that it has many instances:

>>> len(Instance.list_resources())
557

With this function, we can group several of these instances together in a way that is compliant with literature in order to then compute statistics over these groups. Presenting data gathered over…

>>> len(Instance.list_resources_groups())
56

…groups is much easier than dealing with over 500 instances.

Return type:

tuple[tuple[str, str | None, tuple[str, ...]], ...]

Returns:

the instance groups, in a two level hierarchy. The result is a sequence of tuples. Each tuple has the top-level group name and, optionally, a second-level group name (or None if no second level group exists). The third tuple element is a sequence of instance names.

>>> [(v[0], v[1], len(v[2])) for v in
...     Instance.list_resources_groups()]
[('a', 'small', 14), ('a', 'med', 14), ('a', 'large', 15), ('beng', '1-8', 8), ('beng', '9-10', 2), ('class 1', '20', 10), ('class 1', '40', 10), ('class 1', '60', 10), ('class 1', '80', 10), ('class 1', '100', 10), ('class 2', '20', 10), ('class 2', '40', 10), ('class 2', '60', 10), ('class 2', '80', 10), ('class 2', '100', 10), ('class 3', '20', 10), ('class 3', '40', 10), ('class 3', '60', 10), ('class 3', '80', 10), ('class 3', '100', 10), ('class 4', '20', 10), ('class 4', '40', 10), ('class 4', '60', 10), ('class 4', '80', 10), ('class 4', '100', 10), ('class 5', '20', 10), ('class 5', '40', 10), ('class 5', '60', 10), ('class 5', '80', 10), ('class 5', '100', 10), ('class 6', '20', 10), ('class 6', '40', 10), ('class 6', '60', 10), ('class 6', '80', 10), ('class 6', '100', 10), ('class 7', '20', 10), ('class 7', '40', 10), ('class 7', '60', 10), ('class 7', '80', 10), ('class 7', '100', 10), ('class 8', '20', 10), ('class 8', '40', 10), ('class 8', '60', 10), ('class 8', '80', 10), ('class 8', '100', 10), ('class 9', '20', 10), ('class 9', '40', 10), ('class 9', '60', 10), ('class 9', '80', 10), ('class 9', '100', 10), ('class 10', '20', 10), ('class 10', '40', 10), ('class 10', '60', 10), ('class 10', '80', 10), ('class 10', '100', 10), ('asqas', None, 4)]
log_parameters_to(logger)[source]

Log the parameters describing this bin packing instance to the logger.

Parameters:

logger (KeyValueLogSection) – the logger for the parameters

Return type:

None

>>> from moptipy.utils.logger import InMemoryLogger
>>> with InMemoryLogger() as l:
...     with l.key_values("I") as kv:
...         Instance.from_resource("beng05").log_parameters_to(kv)
...     print(repr('@'.join(l.get_log())))
'BEGIN_I@name: beng05@class: moptipyapps.binpacking2d.instance.Instance@nItems: 100@nDifferentItems: 100@binWidth: 25@binHeight: 10@dtype: b@END_I'
lower_bound_bins: int

the minimum number of bins that this instance requires

n_different_items: int

the number of different items

n_items: int

the total number of items (including repetitions)

name: str

the name of the instance

to_compact_str()[source]

Convert the instance to a compact string.

The format of the string is a single line of semi-colon separated values. The values are: name;n_items;bin_width;bin_height, followed by the sequence of items, each in the form of ;width,heigh[,times], where times is optional and only added if the item occurs more than once.

Return type:

str

Returns:

a single line string with all the instance data

>>> ins = Instance("x", 500, 50, [[3, 5, 1], [2, 5, 2]])
>>> ins.to_compact_str()
'x;2;500;50;3,5;2,5,2'
>>> ins.n_different_items
2
total_item_area: int

the total area occupied by all items

moptipyapps.binpacking2d.instance.N_DIFFERENT_ITEMS: Final[str] = 'nDifferentItems'

the number of different items.

moptipyapps.binpacking2d.instance.N_ITEMS: Final[str] = 'nItems'

the total number of items

moptipyapps.binpacking2d.make_instances module

Obtain Instances of the 2D-dimensional Bin Packing Problem.

With this program, we can obtain the instances of the two-dimensional bin packing problem and convert them to a singular resource file. The resource file holds one instance per line.

  1. Manuel Iori, Vinícius Loti de Lima, Silvano Martello, and Michele Monaci. 2DPackLib. https://site.unibo.it/operations-research/en/research/2dpacklib

  2. Manuel Iori, Vinícius Loti de Lima, Silvano Martello, and Michele Monaci. 2DPackLib: A Two-Dimensional Cutting and Packing Library. Optimization Letters 16(2):471-480. March 2022. https://doi.org/10.1007/s11590-021-01808-y

moptipyapps.binpacking2d.make_instances.append_almost_squares_strings(collector)[source]

Append the strings of the almost squares instances.

Parameters:

collector (Callable[[tuple[str, str]], Any]) – the instance collector

Return type:

None

Returns:

the strings

moptipyapps.binpacking2d.make_instances.download_2dpacklib_instances(dest_dir, source_urls=('https://site.unibo.it/operations-research/en/research/2dpacklib/a.zip', 'https://site.unibo.it/operations-research/en/research/2dpacklib/beng.zip', 'https://site.unibo.it/operations-research/en/research/2dpacklib/class.zip'), http=<urllib3.poolmanager.PoolManager object>)[source]

Download the instances from 2DPackLib to a folder.

This function downloads the instances from 2DPackLib, which are provided as zip archives containing one file per instance. It will extract all the instances into the folder dest_dir and return a tuple of the extracted files. You can specify the source URLs of the zip archives if you want, but by default we use the three instance sets A, BENG, and CLASS.

Parameters:
  • dest_dir (str) – the destination directory

  • source_urls (Iterable[str], default: ('https://site.unibo.it/operations-research/en/research/2dpacklib/a.zip', 'https://site.unibo.it/operations-research/en/research/2dpacklib/beng.zip', 'https://site.unibo.it/operations-research/en/research/2dpacklib/class.zip')) – the source URLs from which to download the zip archives with the 2DPackLib-formatted instances

  • http (PoolManager, default: <urllib3.poolmanager.PoolManager object at 0x7f1358c00ce0>) – the HTTP pool

Return type:

Iterable[Path]

Returns:

the list of unpackaged files

moptipyapps.binpacking2d.make_instances.join_instances_to_compact(binpacklib2d_files, dest_file, normalizer=<function __normalize_2dpacklib_inst_name>)[source]

Join all instances from a set of 2DPackLib files to one compact file.

Parameters:
  • binpacklib2d_files (Iterable[str]) – the iterable of 2DPackLib file paths

  • dest_file (str) – the destination file

  • normalizer (Callable[[str], str], default: <function __normalize_2dpacklib_inst_name at 0x7f135b0e6480>) – the name normalizer, i.e., a function that processes and/or transforms an instance name

Return type:

tuple[Path, Iterable[str]]

Returns:

the canonical destination path and the list of instance names stored

moptipyapps.binpacking2d.make_instances.make_2dpacklib_resource(dest_file=None, source_urls=('https://site.unibo.it/operations-research/en/research/2dpacklib/a.zip', 'https://site.unibo.it/operations-research/en/research/2dpacklib/beng.zip', 'https://site.unibo.it/operations-research/en/research/2dpacklib/class.zip'), normalizer=<function __normalize_2dpacklib_inst_name>)[source]

Make the resource with all the relevant 2DPackLib instances.

Parameters:
  • dest_file (str | None, default: None) – the optional path to the destination file

  • source_urls (Iterable[str], default: ('https://site.unibo.it/operations-research/en/research/2dpacklib/a.zip', 'https://site.unibo.it/operations-research/en/research/2dpacklib/beng.zip', 'https://site.unibo.it/operations-research/en/research/2dpacklib/class.zip')) – the source URLs from which to download the zip archives with the 2DPackLib-formatted instances

  • normalizer (Callable[[str], str], default: <function __normalize_2dpacklib_inst_name at 0x7f135b0e6480>) – the name normalizer, i.e., a function that processes and/or transforms an instance name

Return type:

tuple[Path, Iterable[str]]

Returns:

the canonical path to the and the list of instance names stored

moptipyapps.binpacking2d.packing module

A two-dimensional packing.

moptipyapps.binpacking2d.packing.IDX_BIN: Final[int] = 1

the index of the bin in a Packing row

moptipyapps.binpacking2d.packing.IDX_BOTTOM_Y: Final[int] = 3

the index of the bottom y coordinate in a Packing row

moptipyapps.binpacking2d.packing.IDX_ID: Final[int] = 0

the index of the ID in a Packing row

moptipyapps.binpacking2d.packing.IDX_LEFT_X: Final[int] = 2

the index of the left x coordinate in a Packing row

moptipyapps.binpacking2d.packing.IDX_RIGHT_X: Final[int] = 4

the index of the right x coordinate in a Packing row

moptipyapps.binpacking2d.packing.IDX_TOP_Y: Final[int] = 5

the index of the top y coordinate in a Packing row

class moptipyapps.binpacking2d.packing.Packing(instance: Instance)[source]

Bases: Component, ndarray

A packing, i.e., a solution to an 2D bin packing instance.

A packing is a two-dimensional numpy array. In each row, the position of one item is stored: 1. the item ID (starts at 1), 2. the bin into which the item is packaged (starts at 1), 3. the left x coordinate, 4. the bottom y coordinate, 5. the right x coordinate, 6. the top y coordinate.

static from_log(file, instance=None)[source]

Load a packing from a log file.

Parameters:
  • file (str) – the log file path

  • instance (Instance | None, default: None) – the optional Packing instance: if None is provided, we try to load it from the resources

Return type:

Packing

Returns:

the Packing

instance: Instance

the 2d bin packing instance

n_bins: int

the number of bins

moptipyapps.binpacking2d.packing_result module

An extended end result record to represent packings.

This class extends the information provided by end_results. It allows us to compare the results of experiments over different objective functions. It also represents the bounds for the number of bins and for the objective functions. It also includes the problem-specific information of two-dimensional bin packing instances.

class moptipyapps.binpacking2d.packing_result.CsvReader(columns)[source]

Bases: object

A class for CSV reading of PackingResult instances.

parse_row(data)[source]

Parse a row of data.

Parameters:

data (list[str]) – the data row

Return type:

PackingResult

Returns:

the end result statistics

class moptipyapps.binpacking2d.packing_result.CsvWriter(scope=None)[source]

Bases: object

A class for CSV writing of PackingResult.

get_column_titles()[source]

Get the column titles.

Return type:

Iterable[str]

Returns:

the column titles

Get the bottom footer comments.

Parameters:

dest – the destination

Return type:

Iterable[str]

Get any possible footer comments.

Return type:

Iterable[str]

Returns:

the footer comments

get_header_comments()[source]

Get any possible header comments.

Return type:

Iterable[str]

Returns:

the header comments

get_row(data)[source]

Render a single packing result record to a CSV row.

Parameters:

data (PackingResult) – the end result record

Return type:

Iterable[str]

Returns:

the iterable with the row data

scope: Final[str | None]

an optional scope

setup(data)[source]

Set up this csv writer based on existing data.

Parameters:

data (Iterable[PackingResult]) – the data to setup with

Return type:

CsvWriter

Returns:

this writer

moptipyapps.binpacking2d.packing_result.DEFAULT_OBJECTIVES: Final[tuple[Callable[[Instance], Objective], ...]] = (<class 'moptipyapps.binpacking2d.objectives.bin_count.BinCount'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_empty.BinCountAndLastEmpty'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_small.BinCountAndLastSmall'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_skyline.BinCountAndLastSkyline'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_empty.BinCountAndEmpty'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_small.BinCountAndSmall'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_lowest_skyline.BinCountAndLowestSkyline'>)

the default objective functions

moptipyapps.binpacking2d.packing_result.KEY_BIN_HEIGHT: Final[str] = 'binHeight'

the bin height

moptipyapps.binpacking2d.packing_result.KEY_BIN_WIDTH: Final[str] = 'binWidth'

the bin width

moptipyapps.binpacking2d.packing_result.KEY_N_DIFFERENT_ITEMS: Final[str] = 'nDifferentItems'

the number of different items

moptipyapps.binpacking2d.packing_result.KEY_N_ITEMS: Final[str] = 'nItems'

the number of items

moptipyapps.binpacking2d.packing_result.LOWER_BOUNDS_BIN_COUNT: Final[str] = 'bins.lowerBound'

the start string for bin bounds

class moptipyapps.binpacking2d.packing_result.PackingResult(end_result, n_items, n_different_items, bin_width, bin_height, objectives, objective_bounds, bin_bounds)[source]

Bases: EvaluationDataElement

An end result record of one run of one packing algorithm on one problem.

This record provides the information of the outcome of one application of one algorithm to one problem instance in an immutable way.

bin_bounds: Mapping[str, int]

the bounds for the minimum number of bins of the instance

bin_height: int

the bin height

bin_width: int

the bin width

end_result: EndResult

the original end result record

n_different_items: int

the number of different items in the instance

n_items: int

the number of items in the instance

objective_bounds: Mapping[str, int | float]

the bounds for the objective values (append “.lowerBound” and “.upperBound” to all objective function names)

objectives: Mapping[str, int | float]

the objective values evaluated after the optimization

moptipyapps.binpacking2d.packing_result.from_csv(file)[source]

Load the packing results from a CSV file.

Parameters:

file (str) – the file to read from

Return type:

Iterable[PackingResult]

Returns:

the iterable with the packing result

moptipyapps.binpacking2d.packing_result.from_logs(directory, consumer, objectives=(<class 'moptipyapps.binpacking2d.objectives.bin_count.BinCount'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_empty.BinCountAndLastEmpty'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_small.BinCountAndLastSmall'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_skyline.BinCountAndLastSkyline'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_empty.BinCountAndEmpty'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_small.BinCountAndSmall'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_lowest_skyline.BinCountAndLowestSkyline'>), bin_bounds=mappingproxy({'bins.lowerBound': <function <lambda>>, 'bins.lowerBound.geometric': <function __lb_geometric>, 'bins.lowerBound.damv': <function <lambda>>}))[source]

Parse a directory recursively to get all packing results.

Parameters:
  • directory (str) – the directory to parse

  • consumer (Callable[[PackingResult], None]) – the consumer for receiving the results

  • objectives (Iterable[Callable[[Instance], Objective]], default: (<class 'moptipyapps.binpacking2d.objectives.bin_count.BinCount'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_empty.BinCountAndLastEmpty'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_small.BinCountAndLastSmall'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_skyline.BinCountAndLastSkyline'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_empty.BinCountAndEmpty'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_small.BinCountAndSmall'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_lowest_skyline.BinCountAndLowestSkyline'>)) – the objective function factories

  • bin_bounds (Mapping[str, Callable[[Instance], int]], default: mappingproxy({'bins.lowerBound': <function <lambda> at 0x7f135b256d40>, 'bins.lowerBound.geometric': <function __lb_geometric at 0x7f135b284c20>, 'bins.lowerBound.damv': <function <lambda> at 0x7f135b6ed1c0>})) – the bin bounds calculators

Return type:

None

moptipyapps.binpacking2d.packing_result.from_packing_and_end_result(end_result, packing, objectives=(<class 'moptipyapps.binpacking2d.objectives.bin_count.BinCount'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_empty.BinCountAndLastEmpty'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_small.BinCountAndLastSmall'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_skyline.BinCountAndLastSkyline'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_empty.BinCountAndEmpty'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_small.BinCountAndSmall'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_lowest_skyline.BinCountAndLowestSkyline'>), bin_bounds=mappingproxy({'bins.lowerBound': <function <lambda>>, 'bins.lowerBound.geometric': <function __lb_geometric>, 'bins.lowerBound.damv': <function <lambda>>}), cache=None)[source]

Create a PackingResult from an EndResult and a Packing.

Parameters:
  • end_result (EndResult) – the end results record

  • packing (Packing) – the packing

  • bin_bounds (Mapping[str, Callable[[Instance], int]], default: mappingproxy({'bins.lowerBound': <function <lambda> at 0x7f135b256d40>, 'bins.lowerBound.geometric': <function __lb_geometric at 0x7f135b284c20>, 'bins.lowerBound.damv': <function <lambda> at 0x7f135b6ed1c0>})) – the bounds computing functions

  • objectives (Iterable[Callable[[Instance], Objective]], default: (<class 'moptipyapps.binpacking2d.objectives.bin_count.BinCount'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_empty.BinCountAndLastEmpty'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_small.BinCountAndLastSmall'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_skyline.BinCountAndLastSkyline'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_empty.BinCountAndEmpty'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_small.BinCountAndSmall'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_lowest_skyline.BinCountAndLowestSkyline'>)) – the objective function factories

  • cache (Optional[Mapping[str, tuple[Mapping[str, int], tuple[Objective, ...], Mapping[str, int | float]]]], default: None) – a cache that can store stuff if this function is to be called repeatedly

Return type:

PackingResult

Returns:

the packing result

moptipyapps.binpacking2d.packing_result.from_single_log(file, objectives=(<class 'moptipyapps.binpacking2d.objectives.bin_count.BinCount'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_empty.BinCountAndLastEmpty'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_small.BinCountAndLastSmall'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_skyline.BinCountAndLastSkyline'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_empty.BinCountAndEmpty'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_small.BinCountAndSmall'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_lowest_skyline.BinCountAndLowestSkyline'>), bin_bounds=mappingproxy({'bins.lowerBound': <function <lambda>>, 'bins.lowerBound.geometric': <function __lb_geometric>, 'bins.lowerBound.damv': <function <lambda>>}), cache=None)[source]

Create a PackingResult from a file.

Parameters:
  • file (str) – the file path

  • objectives (Iterable[Callable[[Instance], Objective]], default: (<class 'moptipyapps.binpacking2d.objectives.bin_count.BinCount'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_empty.BinCountAndLastEmpty'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_small.BinCountAndLastSmall'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_last_skyline.BinCountAndLastSkyline'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_empty.BinCountAndEmpty'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_small.BinCountAndSmall'>, <class 'moptipyapps.binpacking2d.objectives.bin_count_and_lowest_skyline.BinCountAndLowestSkyline'>)) – the objective function factories

  • bin_bounds (Mapping[str, Callable[[Instance], int]], default: mappingproxy({'bins.lowerBound': <function <lambda> at 0x7f135b256d40>, 'bins.lowerBound.geometric': <function __lb_geometric at 0x7f135b284c20>, 'bins.lowerBound.damv': <function <lambda> at 0x7f135b6ed1c0>})) – the bounds computing functions

  • cache (Optional[Mapping[str, tuple[Mapping[str, int], tuple[Objective, ...], Mapping[str, int | float]]]], default: None) – a cache that can store stuff if this function is to be called repeatedly

Return type:

PackingResult

Returns:

the packing result

moptipyapps.binpacking2d.packing_result.to_csv(results, file)[source]

Write a sequence of packing results to a file in CSV format.

Parameters:
Return type:

Path

Returns:

the path of the file that was written

moptipyapps.binpacking2d.packing_space module

Here we provide a Space of bin packings.

The bin packing object is defined in module packing. Basically, it is a two-dimensional numpy array holding, for each item, its ID, its bin ID, as well as its location defined by four coordinates.

  1. Dequan Liu and Hongfei Teng. An Improved BL-Algorithm for Genetic Algorithm of the Orthogonal Packing of Rectangles. European Journal of Operational Research. 112(2):413-420. January (1999). https://doi.org/10.1016/S0377-2217(97)00437-2. http://www.paper.edu.cn/scholar/showpdf/MUT2AN0IOTD0Mxxh.

class moptipyapps.binpacking2d.packing_space.PackingSpace(instance)[source]

Bases: Space

An implementation of the Space API of for 2D bin packings charts.

copy(dest, source)[source]

Copy one packing to another one.

Parameters:
  • dest (Packing) – the destination packing

  • source (Packing) – the source packing

Return type:

None

create()[source]

Create a packing object without assigning items to locations.

Return type:

Packing

Returns:

the (empty, uninitialized) packing object

>>> inst = Instance.from_resource("a01")
>>> space = PackingSpace(inst)
>>> x = space.create()
>>> x.shape
(24, 6)
>>> x.instance is inst
True
>>> type(x)
<class 'moptipyapps.binpacking2d.packing.Packing'>
from_str(text)[source]

Convert a string to a packing.

Parameters:

text (str) – the string

Return type:

Packing

Returns:

the packing

>>> inst = Instance.from_resource("a01")
>>> space = PackingSpace(inst)
>>> y1 = space.create()
>>> xx = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
...                1, 2, 2, 2, 2, 2, 2])
>>> import moptipyapps.binpacking2d.encodings.ibl_encoding_1 as e
>>> y1.n_bins = e._decode(
...     xx, y1, inst, inst.bin_width, inst.bin_height)
>>> y2 = space.from_str(space.to_str(y1))
>>> space.is_equal(y1, y2)
True
>>> y1 is y2
False
instance: Final[Instance]

The instance to which the packings apply.

is_equal(x1, x2)[source]

Check if two bin packings have the same contents.

Parameters:
Return type:

bool

Returns:

True if both packings are for the same instance and have the same structure

>>> inst = Instance.from_resource("a01")
>>> space = PackingSpace(inst)
>>> y1 = space.create()
>>> y1.fill(0)
>>> y2 = space.create()
>>> y2.fill(0)
>>> space.is_equal(y1, y2)
True
>>> y1 is y2
False
>>> y1[0, 0] = 1
>>> space.is_equal(y1, y2)
False
log_parameters_to(logger)[source]

Log the parameters of the space to the given logger.

Parameters:

logger (KeyValueLogSection) – the logger for the parameters

Return type:

None

n_points()[source]

Get the number of possible packings.

If we indeed consider that any object could be at any place, then there would be an incomprehensibly large number of possible packings. Here, we consider the bottom-left condition and the idea of encoding packings as signed permutations, as in the Liu and Teng paper “An Improved BL-Algorithm for Genetic Algorithm of the Orthogonal Packing of Rectangles.” In this case, if n items are to be packed, the number of possible packings won’t exceed 2^n * n!.

Return type:

int

Returns:

the approximate number of packings

>>> inst = Instance.from_resource("a01")
>>> inst.n_items
24
>>> space = PackingSpace(inst)
>>> space.n_points()
10409396852733332453861621760000
>>> from math import factorial
>>> (2 ** 24) * factorial(24)
10409396852733332453861621760000
to_str(x)[source]

Convert a packing to a string.

Parameters:

x (Packing) – the packing

Return type:

str

Returns:

a string corresponding to the flattened packing array

>>> inst = Instance.from_resource("a01")
>>> space = PackingSpace(inst)
>>> y = space.create()
>>> xx = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
...                1, 2, 2, 2, 2, 2, 2])
>>> import moptipyapps.binpacking2d.encodings.ibl_encoding_1 as e
>>> e._decode(xx, y, inst, inst.bin_width, inst.bin_height)
5
>>> space.to_str(y)
'1;1;0;0;463;386;1;1;463;0;926;386;1;1;926;0;1389;386;1;1;1389;0;1852;386;1;1;1852;0;2315;386;1;1;0;386;463;772;1;1;463;386;926;772;1;1;926;386;1389;772;1;1;1389;386;1852;772;1;1;1852;386;2315;772;1;1;0;772;463;1158;1;1;463;772;926;1158;1;1;926;772;1389;1158;1;1;1389;772;1852;1158;1;1;1852;772;2315;1158;1;2;0;0;463;386;1;2;463;0;926;386;1;2;926;0;1389;386;2;2;0;386;1680;806;2;3;0;0;1680;420;2;3;0;420;1680;840;2;4;0;0;1680;420;2;4;0;420;1680;840;2;5;0;0;1680;420'
validate(x)[source]

Check if a packing is valid and feasible.

This method performs a comprehensive feasibility and sanity check of a packing. It ensures that the packing could be implemented in the real world exactly as it is given here and that all data are valid and that it matches to the bin packing instance. This includes:

  • checking that all data types, numpy dtypes, and matrix shapes are correct

  • checking that the packing belongs to the same instance as this space

  • checking that no objects in the same bin overlap

  • checking that all objects occur exactly as often as prescribed by the instance

  • checking that no object extends outside of its bin

  • checking that all objects have the same width/height as prescribed in the instance (with possible rotations)

  • check that bin ids are assigned starting at 1 and incrementing in steps of 1

Parameters:

x (Packing) – the packing

Raises:
  • TypeError – if any component of the packing is of the wrong type

  • ValueError – if the packing is not feasible

Return type:

None

moptipyapps.binpacking2d.packing_statistics module

An extended end result statistics record to represent packings.

class moptipyapps.binpacking2d.packing_statistics.CsvReader(columns)[source]

Bases: object

A class for CSV parsing to get PackingStatistics.

parse_row(data)[source]

Parse a row of data.

Parameters:

data (list[str]) – the data row

Return type:

PackingStatistics

Returns:

the end result statistics

class moptipyapps.binpacking2d.packing_statistics.CsvWriter(scope=None)[source]

Bases: object

A class for CSV writing of PackingStatistics.

get_column_titles()[source]

Get the column titles.

Parameters:

dest – the destination string consumer

Return type:

Iterable[str]

Get the bottom footer comments.

Parameters:

dest – the destination

Return type:

Iterable[str]

Get any possible footer comments.

Return type:

Iterable[str]

Returns:

the footer comments

get_header_comments()[source]

Get any possible header comments.

Return type:

Iterable[str]

Returns:

the header comments

get_row(data)[source]

Render a single packing result record to a CSV row.

Parameters:

data (PackingStatistics) – the end result record

Return type:

Iterable[str]

Returns:

the iterable with the row text

scope: Final[str | None]

an optional scope

setup(data)[source]

Set up this csv writer based on existing data.

Parameters:

data (Iterable[PackingStatistics]) – the data to setup with

Return type:

CsvWriter

Returns:

this writer

class moptipyapps.binpacking2d.packing_statistics.PackingStatistics(end_statistics, n_items, n_different_items, bin_width, bin_height, objectives, objective_bounds, bin_bounds)[source]

Bases: EvaluationDataElement

An end statistics record of one run of one algorithm on one problem.

This record provides the information of the outcome of one application of one algorithm to one problem instance in an immutable way.

bin_bounds: Mapping[str, int]

the bounds for the minimum number of bins of the instance

bin_height: int

the bin height

bin_width: int

the bin width

end_statistics: EndStatistics

the original end statistics record

n_different_items: int

the number of different items in the instance

n_items: int

the number of items in the instance

objective_bounds: Mapping[str, int | float]

the bounds for the objective values (append “.lowerBound” and “.upperBound” to all objective function names)

objectives: Mapping[str, SampleStatistics]

the objective values evaluated after the optimization

moptipyapps.binpacking2d.packing_statistics.from_csv(file)[source]

Load the packing statistics from a CSV file.

Parameters:

file (str) – the file to read from

Return type:

Iterable[PackingStatistics]

Returns:

the iterable with the packing statistics

moptipyapps.binpacking2d.packing_statistics.from_packing_results(results, consumer)[source]

Create packing statistics from a sequence of packing results.

Parameters:
Return type:

None

moptipyapps.binpacking2d.packing_statistics.to_csv(results, file)[source]

Write a sequence of packing statistics to a file in CSV format.

Parameters:
Return type:

Path

Returns:

the path of the file that was written

moptipyapps.binpacking2d.plot_packing module

Plot a packing into one figure.

moptipyapps.binpacking2d.plot_packing.default_packing_item_str(item_id, item_index, item_in_bin_index)[source]

Get a packing item string(s).

The default idea is to include the item id, the index of the item in the bin, and the overall index of the item. If the space is insufficient, we remove the latter or the latter two. Hence, this function returns a tuple of three strings.

Parameters:
  • item_id (int) – the ID of the packing item

  • item_index (int) – the item index

  • item_in_bin_index (int) – the index of the item in its bin

Return type:

Iterable[str]

Returns:

the string

moptipyapps.binpacking2d.plot_packing.plot_packing(packing, max_rows=3, max_bins_per_row=3, default_width_per_bin=8.6, max_width=8.6, default_height_per_bin=5.315092303249095, max_height=9, packing_item_str=<function default_packing_item_str>, importance_to_font_size_func=<function importance_to_font_size>, dpi=384.0)[source]

Plot a packing.

Each item is drawn in a different color. Each item rectangle includes, if there is enough space, the item-ID. If there is more space, also the index of the item inside the bin (starting at 1) is included. If there is yet more space, even the overall index of the item is included.

Parameters:
  • packing (Packing | str) – the packing or the file to load it from

  • max_rows (int, default: 3) – the maximum number of rows

  • max_bins_per_row (int, default: 3) – the maximum number of bins per row

  • default_width_per_bin (float | int | None, default: 8.6) – the optional default width of a column

  • max_height (float | int | None, default: 9) – the maximum height

  • default_height_per_bin (float | int | None, default: 5.315092303249095) – the optional default height per row

  • max_width (float | int | None, default: 8.6) – the maximum width

  • packing_item_str (Callable[[int, int, int], Union[str, Iterable[str]]], default: <function default_packing_item_str at 0x7f135888c900>) – the function converting an item id, item index, and item-in-bin index to a string or sequence of strings (of decreasing length)

  • importance_to_font_size_func (Callable[[int], float], default: <function importance_to_font_size at 0x7f135831a020>) – the function converting importance values to font sizes

  • dpi (float | int | None, default: 384.0) – the dpi value

Return type:

Figure

Returns:

the Figure object to allow you to add further plot elements