Как минимизировать общую сумму значений в фрейме данных pandas в соответствии с дополнительными требованиями

#python #pandas #mathematical-optimization #driving-distance

Вопрос:

с помощью API Google Distance Matrix я могу вычислить все время движения в секундах между адресами каждого из моих сотрудников и каждого из моих клиентов (поддельные данные в этом примере). Я поместил это в сводный фрейм данных после его вычисления. Итак, теперь у меня по оси x все клиенты, по оси y-весь мой персонал, в то время как время в пути в секундах-это значения в ячейках (данные, конечно, также доступны без рекламы с клиентами и персоналом в столбце каждый, а время в пути в другом столбце).

Теперь я хочу рассчитать оптимальное распределение моего персонала среди клиентов, тем самым сведя к минимуму секунды времени в пути. Важное требование: Некоторым клиентам требуется 2, другим клиентам требуется 3 назначенных сотрудника. 1 Персонал может быть выделен только 1 клиенту (это указано в столбце «Versorgung»).

Я уверен, что для этого есть математическое решение, но я просто не могу понять, как его решить. Заранее спасибо.

Фрейм данных (не загруженный)
введите описание изображения здесь

Поворотный кадр данных с секундами времени в пути в качестве значений
введите описание изображения здесь

Комментарии:

1. Лучшее, что можно сделать (ИМХО), — это сначала записать математическую модель проблемы. Это более точно, чем фрагмент текста. После этого реализация и выбор подходящего решателя не составит большого труда. С первого взгляда. мне это кажется проблемой с заданием.

2. Спасибо @ErwinKalvelagen! Я записал это как математическую задачу и решил ее с помощью PULP на Python.