Помогите с поиском решения
Здравствуйте.
Мне нужно найти минимальный трехмерный контейнер для различных предметов, никак не могу найти информации для решения данной задачи. Задача похожа на задачу об упаковке в контейнеры. Прошу помощи с поиском решения данной задачи. UPD. Дано: Коллекция объектов: [{width: x, height: y, depth: z}, ...] Найти: Размеры максимально малого трехмерного пространства, выраженного кубом либо прямоугольным параллелепипедом, который сможет вместить в себя всю коллекцию объектов. Объекты можно вращать. |
Что есть предметы? точки в пространстве, или что-то объемное? Можно ли их двигать, поворачивать, разбирать на детальки?
Контейнер какой? Кирпич, или произвольной формы? Надо ли сложить в контейнер сразу все предметы, или достаточно уместить только один любой? |
Нужна более точная формулировка задачи. Пока звучит как один из видов задачи о рюкзаке на википедии большая статья с вариантами решений некоторых видов задачи о ранце. тынц
|
Alexandroppolus, предметы - трехмерные товары (печатная продукция, книги). Вертеть их можно как угодно, разбирать - нет.
Ограничения по весу отсутствуют. Контейнер - куб или прямоугольный параллелепипед. Цитата:
|
MallSerg, в задаче о рюкзаке характеристики контейнера известны.
|
Цитата:
Это целое семейство задач и размеры рюкзака далеко не всегда известны. т.е. Задача сводится к размещению как можно большего числа прямоугольных объектов в заранее известном прямоугольном контейнере или же Задача разместить заранее известные объекты прямоугольной формы в максимально малом контейнере? или же объекты не прямоугольной формы? |
Цитата:
Цитата:
|
Цитата:
Объекты могут поворачиваться ? если могут то только на углы кратные 90° или же любые? |
MallSerg, дополнил шапку темы.
Объекты можно вращать как по вертикали, так и по горизонтали. Если объект (книгу) поворачивать на угол не кратный 90 градусам, то он может деформироваться (потерять товарный вид), поэтому, я думаю, вращать нужно на угол кратный 90 градусам. Я не прошу готового решения, ссылки на страницу с описанием алгоритма, либо хотя бы названия алгоритма, по которому можно будет найти дополнительную информацию будет достаточно. |
|
Nexus,
<script src="https://rawgit.com/jakesgordon/bin-packing/master/js/packer.growing.js"></script> <script> var blocks = [ { w: 100, h: 100 }, { w: 500, h: 200 }, { w: 80, h: 80 }, { w: 50, h: 80 } ]; blocks = blocks.sort((a, b) => b.w*b.h - a.w*a.h); var packer = new GrowingPacker(); packer.fit(blocks); alert(`Width: ${packer.root.w}; Height: ${packer.root.h}`) </script> Можно поиграться https://codeincomplete.com/posts/bin-packing/demo/ выставив size:automatic. Понятно, что это 2D алгоритм, но зная расположение элементов можно для каждого вычислить его занимаемый обьем в контейнере и внести соответствующие корректировки. Binary Tree Bin Packing Algorithm Вот 3D упаковщик, но здесь размеры контейнера задаются в условии https://github.com/olragon/binpackin.../master/src/3D |
Цитата:
довольно грустный результат для 400x10 10x400 |
мб нейросеть обучить, пусть контует, задачи регресси для нее удобны.
|
Часовой пояс GMT +3, время: 22:53. |