Алгоритм Cromulent Bisgetti был написан ВВС Турции в 1990-х годах, позже он был принят ВВС США и опубликован в 2000-х годах. Это в основном позволяет компьютеру упаковывать предметы в 3D-контейнер.

В следующем репозитории Дэвида Чепмена на github есть сведения об использовании алгоритма в C#.
https://github.com/davidmchapman/3DContainerPacking

У меня была возможность использовать этот алгоритм и разработать целую схему упаковки для компании Robotics. Цель состояла в том, чтобы упаковать предметы в различных перестановках.

Структура, предоставляемая этим алгоритмом, позволяла нам упаковывать коробки в координатах x, y и z. Однако он не состоял из определений упакованных предметов. Вот где я пришел, я использовал логику x, y, z, чтобы упаковать элементы в перестановке, которая лучше всего подходит для коробки.

Сценарий 1: зубная паста, чайные пакетики, Xbox
Сценарий 2: Mentos, Pepsi, Xbox
Сценарий 3: ноутбук, шоколад, вода

Это наихудший сценарий, когда вы упаковываете предметы в указанном выше порядке, потому что существует несколько разных способов упаковки этих предметов. Лучшим способом было бы сначала перебрать коробку и проверить размеры всех заказанных предметов, допустим, X, Y, Z. Затем вы проверяете доступные упаковочные коробки, упаковочные коробки могут быть разных размеров, допустим, у нас есть А, Б, С.

Нет, первое, что нужно сделать, это исключить поля, в этом сценарии мы взяли 3 поля, то, что я сделал здесь, предполагается, что это 3 поля, для описания, но в фактическом API я позволил пользователю определить количество полей. коробки, которые они хотели бы использовать. В то же время заказываемые товары могут быть определены компанией, что позволяет людям делать заказы в определенное время.

Глядя на изображение выше, я сразу же исключаю коробку C, почему так, потому что самый большой предмет не может поместиться в самую маленькую коробку, таким образом, у нас остается только 2 коробки. И нам нужно сделать все возможное.
В то же время нам необходимо убедиться, что существует ограничение на бокс, установленное компанией, использующей API.
С другой стороны, вы также должны убедиться, что предметы, которые упаковываются вместе, не имеют каких-либо проблем или не могут вызвать взрыв.

В сценариях 2 и 3 были точно такие же проблемы, вода не может быть упакована с ноутбуком в одну коробку. Пепси тоже нельзя класть в одну коробку с ментосом. Таким образом, был создан отдельный класс, который разделял бы SKUS и не позволял объединять определенные SKUS вместе.

После выполнения этих проверок следующим пунктом в списке было начать упаковывать элементы, чтобы получить наилучшее соответствие. По мере добавления каждого элемента будут измеряться диагонали коробки.
Это позволит нам узнать, есть ли место для добавления следующего элемента. И эта итерация будет повторяться до тех пор, пока мы либо не упакуем все предметы в коробки, либо у нас не закончатся коробки.

Если вам понравилась эта статья, пожалуйста, подпишитесь на меня и поддержите мою работу.

https://www.buymeacoffee.com/umaraftab
Свяжитесь со мной в LinkedIn: https://www.linkedin.com/in/umaraftab/