Имя: Пароль:
1C
1С v8
Формирование возврата из минимального количества реализаций
0 Надо работать
 
21.01.20
09:38
Есть список товаров для возврата. Нужно подобрать реализации за период так, чтобы из количество было минимальным. Какой алгоритм посоветуете?
1 Михаил Козлов
 
21.01.20
09:42
Многомерный ранец. Попробуйте жадным алгоритмом. Если задача на равенство, как Вы понимаете, решения может не быть.
2 Надо работать
 
21.01.20
11:38
Мда уж, задача нетривиальна. Удивительно то никто в сообществе 1С ее еще не решал
3 catena
 
21.01.20
12:12
(2)Удивительно, как вы делаете такие выводы. Решали и не один раз, но вряд ли кто-то поделится готовым кодом забесплатно. Описания алгоритма есть в гугле.
4 Надо работать
 
21.01.20
12:24
Я в гугле не нашел
5 catena
 
21.01.20
12:27
6 Надо работать
 
21.01.20
12:30
(5) серьезно? это не задача о рюкзаке, как минимум читайте (1)
7 Жан Пердежон
 
21.01.20
12:36
пахнет NP-задачкой;
(6) да, но похоже, что решается точно также
8 catena
 
21.01.20
12:45
(6)Это задача о рюкзаке - набрать сумму минимальным/максимальным количеством предметов. Задача о рюкзаке и ее вариации читаются в первые недели на курсах комбинаторики, алгоритмов, теории чисел. Неужели у вас не было ничего из этого?
9 Надо работать
 
21.01.20
13:07
(8) у вас в возвратах всегда одна строка?
10 catena
 
21.01.20
13:15
(9)При чем тут количество строк?
11 FIXXXL
 
22.01.20
08:30
(10) возврат на 10 товаров, надо найти реализации, максимально покрывающие товарный состав и количество...
не понятно как выбирать документ реализации, какой лучше, каков "весовой" коэффициент? макс.список товаров? макс.количество по каждому товару?
12 FIXXXL
 
22.01.20
08:32
(11) +
к примеру, есть реализация, которая закроет один товар полностью, но других в ней нет
есть реализация, в которой представлены все 10 товаров, но количества маловато
что в приоритете?
13 Сияющий в темноте
 
22.01.20
08:34
Смысл этого действа?
потом пояаляется другой возврат,например,весь по одной реализаци,а ее уже в прошлом использовали.
14 FIXXXL
 
22.01.20
08:36
(13) значит неповезло :)
15 d4rkmesa
 
22.01.20
09:03
(0) Самому интересно, есть ли приемлемое по скорости и "попаданию" решение. Когда прикидывал подобную задачу, пришел к выводу примерно как в (7). Сделал пока обработку, которая предлагает пользователю потыкать галочки напротив ссылок на реализации, минимизировав результат, благо такие возвраты единичны.
16 Папа Гапа
 
22.01.20
11:42
Корявое условие, даже не понятно по количеству приоритет строить или по сумме. Одинэсники опять изобретают что-то несуществующее.
17 Михаил Козлов
 
23.01.20
10:52
Формально:
{I} - множество товаров в возврате
{J} - множество расходных накладных, которые можно выбирать
Bi - количество товара i в возврате
Aij - количество товара I в реализации j.
Xj - искомые переменные = 0 или 1 в зависимости от того, выбрана или нет накладная.

Условие "покрытия" возврата:
СУММА(Aij*Xj)>=Bi

Минимизация числа накладных:
СУММА(Xj) -> MIN

Это многомерный ранец. Можно про него почитать. Можно попробовать жадный алгоритм, придумав критерий упорядочения реализаций.
Можно попробовать схему "ветвей и границ", используя для отсечения решение задачи линейного программирования с релаксированными ограничениями 0<=Xj<=1.
Реализацию симплекс метода (мыло в профиле) могу выслать.
18 Надо работать
 
23.01.20
16:47
Короче многомерные ранцы и генетические алгоритмы это хорошо, но очень долго...

Запросом выбираем партии с таким упорядочиванием
1) полное покрытие
2) общее количество совпадающих товаров
3) количество совпадающих строк
4) количество полностью покрытых строк

Дальше по фифо
2 + 2 = 3.9999999999999999999999999999999...