|
|
|
Некий аналог "задачи о рюкзаке" | ☑ | ||
|---|---|---|---|---|
|
0
Торин
21.09.09
✎
17:06
|
Уважаемые коллеги!
А есть ли желающие поломать голову над алгоритмами? Собссно задача. Есть n заказов и m машин. У каждого заказа есть вес и объем, у каждой машины соответсвенно вместимость и грузоподъемность. В силу специфики перевозок (легкие и объемные грузы) грузоподъемностью можно пренебречь, единственным параметром является объем. Требуется разложить заказы по машинам, так чтобы суммарное "недозаполнение" машин было минимальным... Задача, очень практическая и очень нужная. Как я подозреваю, это некий аналог "задачи о рюкзаке", но напрямую алгоритмы решения "задачи о рюкзаке" не идут. Если кто-нить что-нить подскажет, буду очень благодарен. |
|||
|
1
Торин
21.09.09
✎
17:07
|
Да , надеюсь, понятно, что в каждую машину можно помещать только заказы целиком...
|
|||
|
2
bvn13
21.09.09
✎
17:10
|
рекурсия?
|
|||
|
3
XLife
21.09.09
✎
17:11
|
(1) а логистика пофигу?
|
|||
|
4
YauheniL
21.09.09
✎
17:11
|
(0) Ну, Симплекс-метод, метод Ветвей и границ, метод Монте-Карло, генетические алгоритмы... можно копать во многих направлениях... зависит только лишь от требования к решению
|
|||
|
5
Торин
21.09.09
✎
17:11
|
ну что рекурсия, я как-то подозреваю... вроде почти все алгоритмы на оптимизацию так или иначе рекурсивны А подробнее?
|
|||
|
6
YauheniL
21.09.09
✎
17:11
|
(3) +1
|
|||
|
7
Торин
21.09.09
✎
17:12
|
(3)В данном случае критично поместить заказы в машины а не оптимизировать маршруты...
|
|||
|
8
Mikeware
21.09.09
✎
17:12
|
(3) Когда воруют - главное, вывезти уворованное, и побольше... Куда вывозить - вторично...
|
|||
|
9
YauheniL
21.09.09
✎
17:13
|
(0), (3), (8) -- на Баш :)
|
|||
|
10
Fragster
гуру
21.09.09
✎
17:13
|
(7) это ты так думаешь... к тому же еще и форму заказов надо учитывать, а не тупо объем... +стеллажность или как там, ограничение в установке товара друг на друга... ;)
|
|||
|
11
Торин
21.09.09
✎
17:14
|
уф-ффф... до чего же я нашу Мисту люблю... А задача как раз совершенно реальная из реальной жизни реальной московской торговой кампании...
|
|||
|
12
Торин
21.09.09
✎
17:15
|
(10) ну да я так думаю... потому что я в этой конторе уже пятый месяц сижу... и с логистами, и с кладовщиками и даже с грузчиками уже море водки выпил...
|
|||
|
13
Торин
21.09.09
✎
17:16
|
нет ограничений в установке товара, нет стеллажности, даже паллетирования нет...
|
|||
|
14
Fragster
гуру
21.09.09
✎
17:17
|
(13) ну хз... может вы рулоны продаете, а их особым образом в прямоугольную машину запихивать надо...
|
|||
|
15
Торин
21.09.09
✎
17:18
|
есть тупое забивание объема машины коробками примерно одинаковых габаритов... единственная проблема - раскидать заказы по машинам...
заказов - 1000, машин - 75-80 |
|||
|
16
Darky
21.09.09
✎
17:19
|
все машины имеют одинаковую "объемоподъемность"?
|
|||
|
17
Торин
21.09.09
✎
17:19
|
суммарный объем машин превышает суммарный объем заказов мпримерно на 10%, тем не менее примерно 15% заказов не развозится... из-за того. что машины недозагружены
и так каждый день... |
|||
|
18
Торин
21.09.09
✎
17:20
|
(16)нет, машины примерно 30 типов, у каждого типа свой объем
|
|||
|
19
Darky
21.09.09
✎
17:20
|
млин, так у тебя одни переменные и ни одной константы чтоль? даже не за что зацепится?
|
|||
|
20
Fragster
гуру
21.09.09
✎
17:22
|
если коробки одинакового размера, то все просто. измеряем вместимость каждой машины в мифических коробках, сортируем заказы по объему в коробках, а машины - по свободному месту в тех же коробках. самый большой заказ кладем в машину с наибольшим свободным местом. повторяем.
|
|||
|
21
Fragster
гуру
21.09.09
✎
17:23
|
(20) это, конечно, если на маршрут нас.рать ;)
|
|||
|
22
Черный всадник
21.09.09
✎
17:23
|
(0) В управлении доставкой есть решение твоей проблемы, правда с картами стоит как УПП (цены примерно год назад смотрел)
|
|||
|
23
Торин
21.09.09
✎
17:23
|
ну вот такая математическая задачка- есть 1000 действительных чисел - это объем заказа и 80 натуральных чисел - это объемы машин . надо разбить тысячу чисел на 80 групп, так чтобы сумма каждой группы минимальа отличалась от соответствующего натурального числа
|
|||
|
24
Торин
21.09.09
✎
17:24
|
(20) этот алгоритм я щас реализовал... по сравнению с ручной раскидкой "дядей Васей" выигрыша практически не дал...
|
|||
|
25
Fragster
гуру
21.09.09
✎
17:25
|
(24) есть еще тупой перебор с построением гигантского дерева, тока очень затратный...
|
|||
|
26
wason
21.09.09
✎
17:26
|
||||
|
27
Торин
21.09.09
✎
17:26
|
(21) на маршрут на...ть, важно - уменьшить не дозагрузку машины... требуется недозагрузка - не более 10%, сейчас - около 20%
(26) чуствую, что где-то рядом, но не то... |
|||
|
28
Торин
21.09.09
✎
17:27
|
(25) тупой перебор по дереву не укладывается в сроки...
|
|||
|
29
XLife
21.09.09
✎
17:27
|
(24) ты учитываешь только объем коробки? а габариты?
|
|||
|
30
wason
21.09.09
✎
17:28
|
в геометрии вроде была задача как при опредиленом периметре получить минимальную площадь за счет уменшение.увеличения старон 4 угольника
|
|||
|
31
Ненавижу 1С
гуру
21.09.09
✎
17:31
|
Теория говорит, что алгоритм очень простой:
- выбирается самая объемная машина в нее грузится сначала самый объемный заказ, потом следующий (если не влезет, то пропускаем), потом следующий... и так по убыванию, пока не заполнится - берется следующий по убыванию грузоподъемности, повторяется с самомого объемного незагруженного и т.д. |
|||
|
32
Торин
21.09.09
✎
17:32
|
ребят, ну чего усложнять... ну давайте решим хотя бы просто разбиение на объемы... потом будем думать о габаритах... при 20% недогрузе проблема не в габаритах...
вот на примере 5 заказов - 1,8; 1,9; 2,7, 0,8, 3,1 - это объемы заказов три машины - 5, 7, 2 - это объемы машин... как раскидать объемы по машинам? нужен алгоритм... (31) вот так я щас и сделал... при этом алгоритме недозагруз упал с 20 до 15-17... не катит... |
|||
|
33
Торин
21.09.09
✎
17:33
|
(31) это не оптимальный алгоритм... увы...
|
|||
|
34
hhhh
21.09.09
✎
17:35
|
(32) зависит от величины заказов. Если например 100 заказов имеет размер каждый больше половины машины, то задача вообще не имеет решения.
|
|||
|
35
XLife
21.09.09
✎
17:35
|
(32) один объем тебе ничего не даст...
грубо: у тебя ширина кузова 150см и 4 коробки по 40см = 160см, по объему ты легко сможешь попасть в "рамки", а вот реально по габаритам груза - нет |
|||
|
36
Торин
21.09.09
✎
17:38
|
(34) хорошо, а можно как-нить оценить эту зависимость? ну чтобы я мог сказать, что вот то, что я сделал при данной средней величине заказа (такая статистика есть) и есть оптимальная загрузка
(35) у меня ма-а-а-а-ленькие коробки... маленькие! их можно как угодно ставить... и уменя машины НЕДОЗАГРУЖЕНЫ... туда еще можно было бы положить ... есть изменить разбивку на заказы... |
|||
|
37
ado
21.09.09
✎
17:40
|
(32) А ты хоть понимаешь, что даже при наилучшем решении у тебя будет недогруз?
И не факт, что он будет значительно меньше. |
|||
|
38
Mikeware
21.09.09
✎
17:40
|
Автор, объясни смысл этой задачи?
Это не из разряда "подметания плаца ломиком"? |
|||
|
39
XLife
21.09.09
✎
17:40
|
(32) решил?)))
1 машина: 1,9 и 3,1 2 машина: 1,8 и 2,7 и 0,8 3 машина: отдыхает |
|||
|
40
ado
21.09.09
✎
17:41
|
(34) Какая задача не имеет решения? Сделать так, чтобы недогруза не было? Она никогда не имеет решения.
Минимизировать недогруз? Имеет решение всегда. |
|||
|
41
ado
21.09.09
✎
17:42
|
(36).1 Сравнивать с наилучшем решением, полученным полным перебором ;-)
|
|||
|
42
hhhh
21.09.09
✎
17:44
|
(40) если 100 заказов занимает больше половины машины каждый, то нужно как минимум 100 машин, а у нас 80. Естественно имеется в виду самая большая машина.
|
|||
|
43
Sidney
21.09.09
✎
17:45
|
Берешь машину 1, среди груза ищещь объем равный или меньше, если меньше - ищешь груз равный или меньше остатку объема и так далее. Каждый раз сортировать.
|
|||
|
44
Торин
21.09.09
✎
17:45
|
объясняю - задача совершенно реальная - есть торговая кампания, которая торгует продуктами с доставкой... у кампании есть свой парк машин... ежедневно выписывается 1000(в среднем) счетов ночью они загружаюися по машинам и днем развозятся... штрафы не недоразвоз такие, что выигрывать на бензине (износе машин и т.д.) бессмысленно... расстояния тоже не велики - москва и москолвская область. критично только одно- уложить все заказы в машины... вот и все...
естьвариант конечно - увеличить парк машин... для этого ядолжен объеснить генеральному что не дозагруз примерно в 20% (после моей работы в 15-17) - это и есть самый оптимальный вариант и ничего лучшен программными или какими-то еще способами сделать нельзя... |
|||
|
45
Mikeware
21.09.09
✎
17:47
|
(44) Критерий оптимальности очень слаб.
|
|||
|
46
XLife
21.09.09
✎
17:47
|
(44) некуй развозить... пусть сами в магазин ходят))
|
|||
|
47
wason
21.09.09
✎
17:50
|
(39)(46)8 заказов - 1,8; 1,9; 2,7, 0,8, 3,1 2,3 - это объемы заказов а если так
три машины - 5, 7, 2 - это объемы машин... как раскидать объемы по машинам? нужен алгоритм... |
|||
|
48
Торин
21.09.09
✎
17:51
|
(46) ну вот единственным критерием является процент недозанруза машин по объему...
(39)(47) увеличьте количество заказов до 1000, а мошин до 80... сколько врмеени это будет решаться простым перебором? |
|||
|
49
Mikeware
21.09.09
✎
17:53
|
(48) Смотря как написать этот "простой перебор"
|
|||
|
50
ado
21.09.09
✎
17:54
|
(48) >> сколько врмеени это будет решаться простым перебором?
Ну, если сделать на базе офисной сети выч. кластер и каждую ночь его заставлять это считать ... наверное справится ;-) |
|||
|
51
hhhh
21.09.09
✎
17:55
|
(48) может, с другой стороны подойти, берем самый большой заказ и грузим в самую маленькую машину и так далее по этому же принципу.
|
|||
|
52
manyak
21.09.09
✎
17:55
|
метка
|
|||
|
53
Fragster
гуру
21.09.09
✎
17:55
|
ну, на самом деле, если оптимизировать на предмет одинаковости размеров машин и заказов - вполне может быть и не очень много
|
|||
|
54
Fragster
гуру
21.09.09
✎
17:55
|
(53) к (48)
|
|||
|
55
ado
21.09.09
✎
17:56
|
(51) Осподи еще один. Этот способ не дает самого оптимального варианта.
|
|||
|
56
Торин
21.09.09
✎
17:56
|
(49), (50) ... ну дык вот алгоритмик бы мне... Перебор + "метод ветвей и границ" (он же эвристика Брудно)? Пока ничего лучше не могу придумать...
|
|||
|
57
hhhh
21.09.09
✎
17:57
|
(55) нам не нужен самый оптимальный. Нам нужно чтобы в 10% уложились. Читай условия задачи.
|
|||
|
58
ado
21.09.09
✎
17:58
|
Стоп, погодите, а там разве не всего n*m вариантов? Это же совсем быстро посчитаться должно.
|
|||
|
59
ado
21.09.09
✎
17:58
|
(57) Читай сам внимательно всю ветку.
|
|||
|
60
XLife
21.09.09
✎
17:59
|
||||
|
61
Торин
21.09.09
✎
17:59
|
задачка комбинаторики с ограничением - разбить n предметов на m групп... если не путаю, там что-то порядка n в степени m
|
|||
|
62
Торин
21.09.09
✎
18:00
|
(60) это программка решает задачку оптимальной укладки ОДНОГО заказа в одну или несколько машин... у меня задачка другая...
|
|||
|
63
Snorkler
21.09.09
✎
18:01
|
(48) Многое зависит от дисперсии объемов груза. Если все заказы составляют 51% от максимального объема машин, то можно поиметь 49% недогруза. И никакой алгоритм не поможет. Если мало заказов с небольшим объемом, трудно будет плотно упаковать машины. Хотя... При средних 12,5 заказа/машину, наверное, можно упаковать и лучше 80%...
|
|||
|
64
Злопчинский
21.09.09
✎
18:02
|
Автор! скинь мне эксельный файл в три столбца вида
номер заказа, объем заказа, вес заказа - натравлю на свой алгоритм, скину тебе посмотреть (самому мне интересно) |
|||
|
65
Торин
21.09.09
✎
18:03
|
ок, скину. тока... часа через два устроит? а то домой надо ехать, с работы уже гонют... почта в личке?
|
|||
|
66
Торин
21.09.09
✎
18:04
|
а идеей алгориттма поделешься? не кодом, просто идеей...
|
|||
|
67
Mikeware
21.09.09
✎
18:04
|
(64) А объемы машин не важны?
|
|||
|
68
Злопчинский
21.09.09
✎
18:04
|
(65) дубль ответа отправил тебе на мыло. отвечай на него. да устроит, я тож как раз буду дома часика через два.
|
|||
|
69
ado
21.09.09
✎
18:04
|
(61) А мне таки кажется, что n*m, или у меня уже совсем маразм.
|
|||
|
70
Злопчинский
21.09.09
✎
18:04
|
(67) для начала считаем что все машины - одинаковые...
|
|||
|
71
Торин
21.09.09
✎
18:04
|
(63) я тоже думаю, что можно бы... но не идет...
|
|||
|
72
hhhh
21.09.09
✎
18:05
|
(69) но n = 1000 факториал.
|
|||
|
73
Злопчинский
21.09.09
✎
18:05
|
(66) рекурсивный алгоритм, обсуждался здесь (NS), делал по нему с вылавливанием парочки ошибок. кое-где подглючивает по мелочи, но мне это некритично, но хочу доточить до ума...
|
|||
|
74
ado
21.09.09
✎
18:06
|
(71) Что не идет? Лучше 80%? Сам же сказал, что снизил недогруз до 15-17%
|
|||
|
75
ado
21.09.09
✎
18:07
|
(72) Блин, да откуда там факториал то?
|
|||
|
76
Злопчинский
21.09.09
✎
18:10
|
тут бяка в "суммарном недозаполнении"...
имхается мне бабахаем рекурсию, с доп услвоиями типа "отбор сначала самых крупных", "отбор сначала самых мелких" и "смешанный отбор" - получим псевдооптимальное решение... более чем уверен, что примерно при равных объемах заказов особо точно смысла считать нет - будет все примерно одинаково по критерию "суммарного незаполнения" - если одну машину набъем под 90% то какаие то другие будут поменьше заполнены... а вот если размеры заказов очень сильно варьируются - тут можно и выиграть одну машину... |
|||
|
77
Гот
21.09.09
✎
18:11
|
Сортируешь по объему, и по очереди размещаешь в отсоритрованные по объему (в другом направлении сортировки) машины. И никакой автоматизации. Задача для детей. Все остальные варианты - бессмысленные понты.
|
|||
|
78
ado
21.09.09
✎
18:14
|
(76) Смотри (44) Автору не нужно псевдооптимальное решение, автору нужно строго доказать, что лучше уже нельзя.
|
|||
|
79
YauheniL
21.09.09
✎
18:15
|
(0) Тебе какой параметр операции оптимизировать надо? В чем выигрыш получить?
|
|||
|
80
Злопчинский
21.09.09
✎
18:16
|
(12) > потому что я в этой конторе уже пятый месяц сижу... и с логистами, и с кладовщиками и даже с грузчиками уже море водки выпил...
- ну ты еще водки попей |
|||
|
81
Злопчинский
21.09.09
✎
18:16
|
се проблемы нахрен отпадут.. потому что решать не сможешь... ;-)
|
|||
|
82
YauheniL
21.09.09
✎
18:20
|
(0) Метод Монте-Карло: раскидываем случайно груз по машинам, считаем заполненность, запоминаем. Делаем так 50 000 раз. Выбираем лучший вариант из попавшихся (очень сильно зависит от ГСЧ)
|
|||
|
83
Злопчинский
21.09.09
✎
18:23
|
> важно - уменьшить не дозагрузку машины... требуется недозагрузка - не более 10%, сейчас - около 20%
- вряд ли сильно выиграешь. при большом обьеме и куче мелких коробок разных размеров, потеря в объеме (эмпирическая оценка, из-за неоптимальности укладки составляет от 0 до 20% объема) что твои цифры и подтверждают... пакуй/рассчитывай как работали раньше - просто увеличь поправочный коэффициент и все... выиграешь ты одну машину из 80, но потеряешь по времени погрузки, которое увеличиться из-за рекомендуемой раскладки... |
|||
|
84
YauheniL
21.09.09
✎
18:23
|
(0) Еще можно "генетический алгоритм" прикрутить. Дольше, чем метод Монте-Карло, но и дает лучший результат. Тут главное целевую функцию правильно составить
|
|||
|
85
ado
21.09.09
✎
18:29
|
(82) Нахрена? Полный перебор.
|
|||
|
86
ado
21.09.09
✎
18:30
|
(84) Писатель не читатель? Целевая функция давно определена и проста как табуретка.
|
|||
|
87
Злопчинский
21.09.09
✎
18:38
|
эх блин, не удастся оперативно автору помочь... у мну разбиение считается для одинаковых "машин"...
|
|||
|
88
ado
21.09.09
✎
18:39
|
(69) Да, таки маразм. m^n таки. Полный перебор не катит. Хотя, если среди машин есть одинаковые, то вариантов будет меньше.
|
|||
|
89
YauheniL
21.09.09
✎
18:57
|
(85) В порядки быстрее
(86) значит, ознакомиться с высказанным в (84) -- и в добрый путь З.Ы. это, конечно, если вообще хочется что-то сделать |
|||
|
90
andrey_lg
21.09.09
✎
19:53
|
Просьба автору написать о том на каком решении он все таки остановился.
В свою очередь я предлагаю вот что, нужно оптимизировать загрузку каждой машины по количеству предметов а уже потом по весу. Этот вариант должен дать лучший результат когда коробки "примерно одинаковые".То есть разброс не большой в обьемах коробок. |
|||
|
91
Злопчинский
21.09.09
✎
21:39
|
(90) вес можно пока вообще исключить...
|
|||
|
92
ilya_i
21.09.09
✎
22:39
|
1. Если пофигу на логистику, то разбивай заказы на части.
2. Если логисты и кладовщики откажутся, значит надо еще выпить и вернуться к пункту 1. 3. Если клиенты откажутся, то пусть машины ездят гуськом друг за дружкой и собирают заказ на месте, далее см. пункт 2 |
|||
|
93
Snorkler
24.09.09
✎
09:38
|
(0) Андрей, тема еще актуальна?
Если да, то можно ли как-то получить конкретные данные, на которых можно было бы потестировать. |
|||
|
94
Леха Дум
24.09.09
✎
09:58
|
Зря вы забиваете на логистику. Если будет получаться раскладка оптимальная по загрузки + оптимальная по маршруту, то и экономия по времени будет и по бензину и по машинам.
|
|||
|
95
dk
24.09.09
✎
12:03
|
Тоже влезу
(0) Можно уже расшифровать "машины недозагружены"? 1. По расчетам дожно влезть 15 заказов, а загрузят удалось только 13 2. По расчетам дожно влезть 15 заказов, загрузили 15 заказов, а места еще дофига и больше ----- Водители наверняка грузят по маршруту, т.е. сначала самые последние заказы, а ближе к разгрузке самые первые по маршруту |
|||
|
96
Snorkler
25.09.09
✎
11:09
|
(93)+ Послал письмо на Gmail.
|
|||
|
97
assasu
25.09.09
✎
11:12
|
(0) не надо изобретать велосипед. Это обычная задача линейного программирования. Идешь в библиотеку, берешь книгу и решаешь
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |