Страницы: 1
RSS
Выбор пар уникальных значений по условию через Power Query, логистика исполнитель-задание выбирая минимальные пробеги
 
Уважаемые коллеги, прошу помощи.
Есть адреса с заданиями, есть исполнители.
В «Исходной» таблице указаны расстояния между всеми исполнителями и всеми заданиями.
Необходимо распределить исполнителей по заданиям по следующему принципу.
  1. Вычислить пару с минимальным расстоянием, записать её в таблицу «Распределённые».
  2. Исключить из «Исходной» таблицы исполнителя и задание, выбранных в п.1.
  3. Если нераспределённые задания ещё остались, вернуться в п.1
Удалось с помощью List.Accumulate построить таблицу распределённых заданий и пошагово перебрать исходную. Получил единственную пару с минимальным расстоянием.
Нужно уменьшать исходную таблицу внутри перебора. Вроде в шаге fn надо отфильтровать tbl, исключив выбранную пару. Но как?
Или я не в ту сторону думаю?
Пытался свернуть исходную таблицу в подобие матрицы и пойти по пути исключения строки и столбца с минимальным значением на пересечении. Но и там не справился(((.
 
Виталий, добрый день. Вариант во вложении.
 
Alex, благодарю.
Работает))) Позже буду "курить" List.Generate.

Подставил реальные значения. Если в лоб перемножить всех на всех, то это 33 тысячи строк. Не дождался окончания расчёта.
Сократил исходник. 20 заданий на 200 исполнителей распределяются 8 минут.
В конечном файле будут предварительные фильтры на доступных исполнителей, их квалификацию, требования в заданиях и т.д. Так что исходник будет вполне вменяемый.
20 заданий на 50 исполнителей распределяются за десять секунд. Этого вполне достаточно.
Спасибо Вам огромное))
 
Цитата
Виталий написал:
Если в лоб перемножить всех на всех, то это 33 тысячи строк. Не дождался окончания расчёта.
что-то вы, друзья, не то делаете. 33 тыс и такие тормоза? Вот так рождаются легенды про тормоза PQ M. Попробуйте вот этот код
код

Я б еще один вариант попробовал с List.Skip, но уже пятница, вечер...
Изменено: AlienSx - 13.12.2024 20:07:00
Пришелец-прораб.
 
AlienSx, это просто фантастика))
17 секунд на 59 тысяч строк. В реальном файле будет на порядок меньше.
Огромное спасибо за помощь Вам и Alex'у.
Изменено: Виталий - 16.12.2024 16:53:11
Страницы: 1
Наверх