Имя: Пароль:
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) количество полностью покрытых строк

Дальше по фифо
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн