что-то вроде алгоритма упаковки рюкзака
От: tun  
Дата: 18.06.04 10:27
Оценка:
Здравствуйте, мне нужен алгоритм, который оптимально позволяет распихать ящики разных размеров внутри контейнера
Re: что-то вроде алгоритма упаковки рюкзака
От: jhfrek Россия  
Дата: 18.06.04 12:50
Оценка:
Здравствуйте, tun, Вы писали:

tun>Здравствуйте, мне нужен алгоритм, который оптимально позволяет распихать ящики разных размеров внутри контейнера


А почему вроде? Разве рюкзак этого не делает?
Re[2]: что-то вроде алгоритма упаковки рюкзака
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 18.06.04 12:54
Оценка:
Здравствуйте, jhfrek, Вы писали:

J>Здравствуйте, tun, Вы писали:


tun>>Здравствуйте, мне нужен алгоритм, который оптимально позволяет распихать ящики разных размеров внутри контейнера


J>А почему вроде? Разве рюкзак этого не делает?


Я, может, чего-то недопонимаю, но рюкзак работает именно для числовых данных, а когда надо "оптимально распихать ящики разных размеров внутри контейнера", то имхо рюкзак так просто не прикрутить.
HgLab: Mercurial Server and Repository Management for Windows
Re[3]: что-то вроде алгоритма упаковки рюкзака
От: jhfrek Россия  
Дата: 18.06.04 13:01
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Я, может, чего-то недопонимаю, но рюкзак работает именно для числовых данных, а когда надо "оптимально распихать ящики разных размеров внутри контейнера", то имхо рюкзак так просто не прикрутить.


То есть вопрос не в том что упаковать, а в том как упаковать?
Re[4]: что-то вроде алгоритма упаковки рюкзака
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 18.06.04 13:08
Оценка:
Здравствуйте, jhfrek, Вы писали:

J>Здравствуйте, Нахлобуч, Вы писали:


Н>>Я, может, чего-то недопонимаю, но рюкзак работает именно для числовых данных, а когда надо "оптимально распихать ящики разных размеров внутри контейнера", то имхо рюкзак так просто не прикрутить.


J>То есть вопрос не в том что упаковать, а в том как упаковать?


Моя твоя не понимайт...

Проблема рюкзака:
Дана кучка предметов различной массы, и надо выяснить, можно ли положить некоторые из этих предметов в рюкзак так, чтобы масса рюкзака стала равна определенному значению. Более формально, дан набор значений M1, M2, … , Mn и сумма S. Требуется вычислить значения bi, такие что

S = b1M1 + b2M2 + ... + bnMn


Каждое bi может быть либо нулем, либо единицей. Единица показывает, что предмет кладут в рюкзак, а ноль — что не кладут.


Так что получаем, что рюкзак по сути ничего не оптимизирует, а просто говорит, можно ли собрать рюкзак данного веса или нет.
HgLab: Mercurial Server and Repository Management for Windows
Re[5]: что-то вроде алгоритма упаковки рюкзака
От: jhfrek Россия  
Дата: 18.06.04 13:23
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

J>То есть вопрос не в том что упаковать, а в том как упаковать?


Н>Моя твоя не понимайт...


Однозначно. Рюкзак работает с предметами как с математическими абстракциями, а тебе нужен алгоритм оптимальной укладки физических объектов с учетом их геометрических размеров? Не расчет столько и каких объектов уложить, а как именно уложить?
Re[6]: что-то вроде алгоритма упаковки рюкзака
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 18.06.04 13:38
Оценка:
Здравствуйте, jhfrek, Вы писали:

J>Однозначно. Рюкзак работает с предметами как с математическими абстракциями, а тебе нужен алгоритм оптимальной укладки физических объектов с учетом их геометрических размеров? Не расчет столько и каких объектов уложить, а как именно уложить?


Да мне-то не надо. Я об чем и говорю — рюкзак не оптимизирует и ваабще не предназначен для работы ни с чем иным, кроме как с числами.
HgLab: Mercurial Server and Repository Management for Windows
Re[7]: что-то вроде алгоритма упаковки рюкзака
От: jhfrek Россия  
Дата: 18.06.04 13:54
Оценка: 1 (1) +1
Здравствуйте, Нахлобуч, Вы писали:

Н>Да мне-то не надо. Я об чем и говорю — рюкзак не оптимизирует и ваабще не предназначен для работы ни с чем иным, кроме как с числами.


Ну все алгоритмы рано или поздно работают в числами, двоичными, иного компьютерам не дано.

А вот если быть более точным то задача о рюкзаке (задача о загрузке) звучит так:

Пусть надо загрузить рюкзак (самолет, контейнер) грузоподьемностью W n предметами. Пусть число предметов каждого наименования m(i), вес — w(i), прибыль — r(i). Тогда задача — максимизировать Z = r(1)*m(1) + r(2)*m(2) + ...r(n)*m(n), при условии что w(1)*m(1) + w(2)*m(2)+... w(n)*m(n) <= W, и m(1), m(2),... m(n) >= 0 и целые


Так что все таки оптимизирует
Re[3]: что-то вроде алгоритма упаковки рюкзака
От: jhfrek Россия  
Дата: 19.06.04 10:30
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Я, может, чего-то недопонимаю, но рюкзак работает именно для числовых данных, а когда надо "оптимально распихать ящики разных размеров внутри контейнера", то имхо рюкзак так просто не прикрутить.


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

Целевая функция — кол-во ящиков каждом ряду. Мы ее пытаемся максимизировать. Пусть у нас есть n ящиков с размерами l, w, h а размер контенера L, W, H. Пусть центр координат лежит в ближнем к нам нижнем левом углу контейнера, а координаты противоположных углов i ящика (xi, yi, zi) и (x'i, y'i, z'i) (заметим что x'-x=l, и т.д)
Заполняем первый ряд ящиками с индексами j1, j2, ...jk
Для них должно быть: Sum((x'j-xj)). для всех j из j1, j2, ...jk <= L, xji>=x'j(i-1), i=1..k
Пусть заполнение не плотное, т.е. для второго ряда y >= Max(yj), для всех j из j1, j2, ...jk
Тогда для второго ряда получаем те же соотнощения плюс yji <= W, i=1..k
Аналогично укладываем остальные ряды. Уложив первый слой укладываем второй, пусть то же неплотно, т.е. считая что z >= Max(Z) первого слоя.
В конце концов мы получим некую упаковку, близкую к оптимальной.

Если нужна плотная упаковка, то прийдется отслеживать Max соответствующих координат в пределах i-го ящика.

ЗЫ. Хотя если число ящиков мало, то можно устроить и полный перебор
Re: что-то вроде алгоритма упаковки рюкзака
От: tun  
Дата: 21.06.04 20:19
Оценка:
Здравствуйте, мне нужна реализация похожей задачи (под переделку) (С++) или советы по реализации.
Дано:
параметры ящиков, их вес (центр тяжести строго по центру) и их количество,
параметры котейнеров и их количество.
Задача:
разместить эти ящики так, что-бы они заняли минимальное количество контейнеров, причём центр тяжести контейнера не должен отклоняться от центра больше чем на 10% ширины по X и на 10% по Y.

Заранее спасибо.
... << RSDN@Home 1.1.3 stable >>
Re[2]: что-то вроде алгоритма упаковки рюкзака
От: tun  
Дата: 21.06.04 20:22
Оценка:
Да, забыл:

всё происходит в 2D
Re[2]: что-то вроде алгоритма упаковки рюкзака
От: jhfrek Россия  
Дата: 22.06.04 14:49
Оценка:
Здравствуйте, tun, Вы писали:

tun>Здравствуйте, мне нужна реализация похожей задачи (под переделку) (С++) или советы по реализации.

tun>Дано:
tun> параметры ящиков, их вес (центр тяжести строго по центру) и их количество,
tun> параметры котейнеров и их количество.
tun>Задача:
tun> разместить эти ящики так, что-бы они заняли минимальное количество контейнеров, причём центр тяжести контейнера не должен отклоняться от центра больше чем на 10% ширины по X и на 10% по Y.

А что тут кроме "жадного" заполнения контейнеров по очереди. Центр тяжести — это всего навсего усложнение условия возможности положить ящик. Берешь самый большой ящик и кладешь его в самый большой контенер, проверяя разумеется условия. Потом следущий по размеру, потом еще и так до исчерпания места...
Re[3]: что-то вроде алгоритма упаковки рюкзака
От: tun  
Дата: 22.06.04 15:15
Оценка:
Здравствуйте, jhfrek, Вы писали:

J>Здравствуйте, tun, Вы писали:


tun>>Здравствуйте, мне нужна реализация похожей задачи (под переделку) (С++) или советы по реализации.

tun>>Дано:
tun>> параметры ящиков, их вес (центр тяжести строго по центру) и их количество,
tun>> параметры котейнеров и их количество.
tun>>Задача:
tun>> разместить эти ящики так, что-бы они заняли минимальное количество контейнеров, причём центр тяжести контейнера не должен отклоняться от центра больше чем на 10% ширины по X и на 10% по Y.

J>А что тут кроме "жадного" заполнения контейнеров по очереди. Центр тяжести — это всего навсего усложнение условия возможности положить ящик. Берешь самый большой ящик и кладешь его в самый большой контенер, проверяя разумеется условия. Потом следущий по размеру, потом еще и так до исчерпания места...


так, если засовывать только самые большие ящики, то останется очень много незаполненого пространства (ящики не квадратные), надо ещё и маленькие воткнуть
... Реальность — это иллюзия,созданная отсутствием алкоголя (<< RSDN@Home 1.1.3 stable >>)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.