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 (汤卫思教授).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
- moptipyapps.binpacking2d.bks.get_related_work(with_rotation=None, without_rotation=None, algo_select=<function <lambda>>, inst_group_select=<function <lambda>>)[source]
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 0x7f2d913daa20>
) – the algorithm selector
inst_group_select (Callable
[[Element
], bool
], default: <function <lambda> at 0x7f2d913daac0>
) – 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:
dest (Callable
[[str
], Any
]) – the destination
data (tuple
[tuple
[Element
, ...
], tuple
[tuple
[Element
, tuple
[int
| float
| None
, ...
]], ...
]]) – the source data
name_to_strs (Callable
[[Element
], tuple
[str
, str
]], default: <function <lambda> at 0x7f2d913daf20>
) – the converter of names to strings
format_best (Callable
[[str
], str
], default: <function <lambda> at 0x7f2d913dafc0>
) – the formatter for best values
count_best_over (Iterable
[tuple
[Iterable
[Element
], str
]], default: ()
) – a set of instances to include in the best counting and a corresponding label
- 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:
data (Iterable
[PackingResult
]) – the source data
with_rotation (bool
) – are we doing stuff with rotation?
algo_from_pr (Callable
[[PackingResult
], Element
], default: <function <lambda> at 0x7f2d913dac00>
) – convert a packing result to an algorithm
algo_sort_key (Callable
[[Element
], Any
], default: <function <lambda> at 0x7f2d913daca0>
) – the algorithm sort key
rw_algo_selector (Callable
[[Element
], bool
], default: <function <lambda> at 0x7f2d913dad40>
) – the related work algorithm selector
aggregator (Callable
[[Iterable
[int
| float
]], int
| float
], default: <function mean at 0x7f2d9135e7a0>
) – the routine for per-instance averaging of bins
additional (Callable
[[Element
], Iterable
[tuple
[Element
, Callable
[[Iterable
[int
| float
]], int
| float
]]]], default: <function <lambda> at 0x7f2d913dade0>
) – an additional column constructor
- 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 (汤卫思教授).
Manuel Iori, Vinícius Loti de Lima, Silvano Martello, and Michele Monaci. 2DPackLib. https://site.unibo.it/operations-research/en/research/2dpacklib
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
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.
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
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
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.
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.
Manuel Iori, Vinícius Loti de Lima, Silvano Martello, and Michele Monaci. 2DPackLib. https://site.unibo.it/operations-research/en/research/2dpacklib
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 0x7f2d90720770>
) – 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 0x7f2d911a4900>
) – 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 0x7f2d911a4900>
) – 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 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 0x7f2d9174d580>, 'bins.lowerBound.geometric': <function __lb_geometric at 0x7f2d913656c0>, 'bins.lowerBound.damv': <function <lambda> at 0x7f2d91722b60>})
) – 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 0x7f2d9174d580>, 'bins.lowerBound.geometric': <function __lb_geometric at 0x7f2d913656c0>, 'bins.lowerBound.damv': <function <lambda> at 0x7f2d91722b60>})
) – 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 0x7f2d9174d580>, 'bins.lowerBound.geometric': <function __lb_geometric at 0x7f2d913656c0>, 'bins.lowerBound.damv': <function <lambda> at 0x7f2d91722b60>})
) – 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.
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:
- 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:
- 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 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 0x7f2d9126f2e0>
) – 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 0x7f2d7fd1d800>
) – 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