Имя: Пароль:
1C
1С v8
алгоритм распределения веса
0 Кир Пластелинин
 
12.07.13
13:28
Доброго времени суток. подскажите пожалуйста с алгоритмом распределения веса. суть такая: есть N количество документов, каждый из которых со своим весом (не обязательно все разные, могут быть и с одинаковым весом пару документов). необходимо распределить документы по двум сторонам (левая/правая) таким образом, что бы разница в весе между сторонами была минимальной. изначально предполагал следующий алгоритм: вес пихал в массив, предварительно отсортировав по убыванию. самый большой вес пихал по умолчанию на одну из сторон, затем перебором разносил по сторонам остальные, при том брался документ, который при добавлении на ту или иную сторону давал бы минимальную разницу по весу. но распределяет неоптимально. хотелось бы услышать правильную логику, что бы взять ее за основу.
1 Cube
 
12.07.13
13:31
(0) Опять задача про рюкзак?
Получи половину веса и заполни только левую сторону. Правую заполнишь потом методом исключения документов.
2 Wobland
 
12.07.13
13:32
иными словами, как из набора чисел максимально близко подобраться к СуммаВесов/2
3 Fragster
 
гуру
12.07.13
13:34
самый быстрый, но не совсем оптимальный - сортируешь по убыванию. проходишься по списку и добавляешь документ туда, где в данный момент меньше. все.
4 Лефмихалыч
 
12.07.13
13:35
где-то в интернетах должно быть порно про это...
5 AndyD
 
12.07.13
13:36
(3) потом можно еще пару раз пройти и менять местами 2 документа с похожим весом, чтобы уменьшить разницу
6 Fragster
 
гуру
12.07.13
13:36
а вообще прямо 100% оптимальность требуется редко когда, с практической погрешностью в 5% можно смириться (она по разному считается. когда WMS делал, сначала тоже хотел самое оптимальное размещение. но когда оно по 5-10 минут считалось, попробовал приближенный алгоритм - отрабатывал за доли секунды.)
7 Fragster
 
гуру
12.07.13
13:37
(5) ну да, можно. но ИМХО улучшение будет не сильно большое в % соотношении
8 Ненавижу 1С
 
гуру
12.07.13
13:44
(0) все верно, но надо брать ни какой-то документ, а все по очереди, по-убыванию и положить на ту сторону, где дельта уменьшается
9 fisher
 
12.07.13
13:45
(0) Я бы отсортировал по убыванию веса.
Потом влево.
А потом каждый раз туда, где общий итог меньше.
10 Кир Пластелинин
 
12.07.13
13:45
всем спасибо за ответы! может я излишне себе запарил голову, либо пятница сказывается, но, как говорится в одном из анекдотов: - "но есть нюанс!") это по сути маршрут, т.е. отрезок с точками, где каждая из точек - выгрузка документа, т.е. нужно не слепо раскидать по сторонам, но так же учесть очередность выгрузки, что бы не получилось, что одну сторону почти всю выгрузили, а другая под завязку и как итог - нехороший перекос. или это из области фантастики?) и я только насилую свой мозг за зря?)
11 Fragster
 
гуру
12.07.13
13:47
(10) ага. а потом - порядок разгрузки со следованием по маршруту с учетом пробок...
12 fisher
 
12.07.13
13:48
(10) Что такое "две стороны" в контексте маршрута? Две половины машины (продольное деление)?
13 Кир Пластелинин
 
12.07.13
13:49
(12) да. левая сторона, правая сторона
14 Серго62
 
12.07.13
13:49
(10) Это что же вы возите и на чем, если перекос так критичен?
15 Fragster
 
гуру
12.07.13
13:49
(13) дык разгружать-то как будут? лучше от порядка разгрузки идти, а то одну сторону разгрузят - и привет
16 Кир Пластелинин
 
12.07.13
13:51
(14) еду) много еды)
(15) так о чем я и написал в (10) просто хотелось понять - это излишняя заморочка или такое может быть
17 fisher
 
12.07.13
13:51
(13) А разгрузка с торца, что ли?
18 fisher
 
12.07.13
13:53
Стеклопакеты, что ли, возите? Так там обычно с бортов разгрузка...
19 Серго62
 
12.07.13
13:55
(16) А еда вся одинаковая или в каждом заказе индивидуальный набор? Если одинаковая, то разгружайте равномерно и проблема будет решена сама собой.
20 Fragster
 
гуру
12.07.13
13:55
короче - сортируешь по порядку разгрузки и раскидываешь как в (3). на остальное - насрать, выигрыша не будет.
21 fisher
 
12.07.13
13:56
(16) А, еда! Рефрижератор, что ли, двухсекционный?
22 Кир Пластелинин
 
12.07.13
13:57
(17) там на самом деле секции на каждой стороне. то ли 3, то ли 4 с каждой стороны, но об этом речь пока не идет. холодильник на колесах)
(19) заказы могу варьироваться от пары кг до полутонны условно
23 Серго62
 
12.07.13
14:00
(22) Тогда надо для начала поделить весь груз на две части, потом каждую часть отсортировать в порядке разгрузки. Как поделить на две части уже написали...
24 Fragster
 
гуру
12.07.13
14:01
(23) нет, сначала порядок разгрузки. ибо может случиться так, что все разгружаем с одной стороны...
25 fisher
 
12.07.13
14:03
(22) Что значит, "ПОКА не идет"? Если в риале неудобно будет разгружать - то можно и не начинать.
26 fisher
 
12.07.13
14:04
Если два критерия учитывать, то придется определиться и с приоритетами (весовыми коэффициентами).
27 fisher
 
12.07.13
14:10
А ограничение по объему разве нет?
По объему всегда недобор?
28 Серго62
 
12.07.13
14:12
(24) Тогда может так:
1. Сортируем все заказы в порядке разгрузки
2. Начинаем раскладывать - первый заказ налево, второй направо, если справа вес больше чем слева, то третий заказ налево иначе направо и т.д.
29 Кир Пластелинин
 
12.07.13
14:14
(27) касательно объема - верное замечание, т.к. есть товар у которого объем большой, но вес относительно объема не очень большой и наоборот, что логично. да и было бы вообще логично сделать своеобразную карту загрузки машины (по секциям и прочее). но руководство пока решило ограничиться распределением по весу. вполне может быть когда-нибудь этот вопрос поднимут, но это уже совсем другая история)
30 Кир Пластелинин
 
12.07.13
14:14
(28) звучит неплохо. спс. надо будет попробовать
31 Fragster
 
гуру
12.07.13
14:16
(28) я об этом уже писал в (20)
32 Кир Пластелинин
 
12.07.13
14:17
(31) сорри - пропустил)
33 Ненавижу 1С
 
гуру
12.07.13
14:35
(28) и я в (8)
34 Кир Пластелинин
 
12.07.13
14:41
(33) так стоп) а то описание, которое было в (0) разве не тоже самое?)
35 Ненавижу 1С
 
гуру
12.07.13
14:47
(34) я его не так как бы понял, ты там брал документ не подряд по убыванию: а подбирал лучший, не?
36 Кир Пластелинин
 
12.07.13
15:25
(35) похоже на то) "есть нюанс"
37 NS
 
12.07.13
15:26
(0) Это рюкзак, и к v8 алгоритм никаким боком не относится.
38 Fragster
 
гуру
12.07.13
15:27
(33) тогда я в (3) %)
39 Fragster
 
гуру
12.07.13
15:28
(37) мы уже поняли, что "рюкзак" автору не нужен. нужно, чтобы после каждой разгрузки баланс смещался наименьшим образом
40 Fragster
 
гуру
12.07.13
15:28
был ближе к центру
41 NS
 
12.07.13
15:29
(40) Тогда естественно в порядке обратном разгрузке суем в тот бок, в котором меньше.
42 Torquader
 
14.07.13
23:17
А потом автору поставят задачу, чтобы при разгрузке открывать меньше секций.
Да и, большая вероятность, что в разных заказах товар похожий - и проще грузить не по заказам, а по типу товара, ну и разгружать также.