Построение цепочки взаиморасчетов

1. _Sasha_ 16.08.23 04:23 Сейчас в теме
Дано.
Есть группа компаний.
Внутри группы есть взаиморасчеты между компаниями.
Необходимо найти цепочку взаиморасчетов, что максимально уменьшить долги внутри группы компаний.

Критерии цепочки - цепочка должна сделать петлю (то есть деньги должны вернуться той же компании, с которой началась цепочка) и закрыться в ноль.

Для упрощения ситуации добавлены следующие критерии, любая компания (кроме той с которой началась цепочка) должна в цепочке встречаться один раз. Сама цепочка не должна внутри себя разделятся и снова собираться.
Соотвественно сумма каждой транзакции внутри цепочки определяется по сумме наименьшего долга внутри цепочки.

Предпочтение отдается той цепочке - где объем транзакции (сумма всех транзакций в цепочке) максимальный.

Собственно на данный момент задача решена примитивным перебором.
Но работа алгоритма на достаточно небольшой и разреженной матрице - 26 компаний и примерно 80 связей занимает порядка 3-5 минут.

Поскольку в перспективе есть потенциальная потребность расширить матрицу с регионального на федеральный уровень - а это значит в матрице будет от 80 до 100 компаний и количество связей может вырасти до 300-400 - то уже сейчас границы применимости алгоритма видны невооруженным глазом.

Соотвественно вопрос - есть ли смысл пытаться что то оптимизировать в самой 1С?
Или уже стоит обращаться к другим языкам?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. laperuz 47 16.08.23 05:56 Сейчас в теме
Правильно понимаю, что по факту решаете СЛАУ?
У 1С для решения СЛАУ есть собственная платформенная реализация, см. объект РасчетСистемЛинейныхУравнений.
У нас есть проект, где переписывали расчет затрат с самописного алгоритма на платформенный по причине как раз производительности(правда у вас прямо очень долгий расчет для такой матрицы) - результат устроил. Попробуйте в эту сторону глянуть.
3. _Sasha_ 16.08.23 08:09 Сейчас в теме
(2)
Правильно понимаю, что по факту решаете СЛАУ?


Вот не уверен. Конечно матрица взаиморасчетов легко представляется в виде ориентированного графа. Но дальше фантазия буксует.

Петля взаиморасчетов с максимально возможным объемом транзакций, с учетом минимальной суммы транзакции как то не накладывается на типичные примеры с поиском минимального пути между точками или максимального заполнения рюкзака , которые обычно рассматриваются на первых двух страницах яндекса когда ищешь решение подобных задач.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот