Алгоритм упорядоченных комбинаций C # - PullRequest
6 голосов
/ 14 сентября 2010

Я пытаюсь разработать приложение на c #, которое будет генерировать список всех возможных перестановок, в пределах лимита и стоимости. Например, у меня есть список из 80 рабочих мест. Каждое задание имеет значение (1-5) (обычно 3), и у каждого инженера есть предел того, сколько они могут сделать, обычно это значение 20.

В данный момент я начал с составления списка всех возможных комбинаций (n! / (K! * (Nk)! Где n - общее количество заданий, а k - 2). Связь между каждым заданием должна быть взвешенным с расстоянием между каждой работой.

Отсюда я хотел бы выбрать начальное начальное задание и составить список всех возможных комбинаций заданий (от начального задания) до предела 20, а затем упорядочить их по сумме веса. Маршрут с наименьшим весом победит и будет выделен инженеру. Моя проблема в том, что я не знаю, как подойти к этому - какая структура данных будет лучше?

Как правило, есть приблизительно 6-8 инженеров (в зависимости от рабочей нагрузки), я планировал маршрутизировать каждого инженера по одному - после того, как маршрут был назначен другому инженеру, эти задания будут удалены из списка и новые начать задание, выбранное с новым набором комбинаций. Это звучит как приемлемый подход?

Любая помощь будет приветствоваться.

Ответы [ 3 ]

2 голосов
/ 25 мая 2011

Я бы попробовал моделируемый отжиг, алгоритм для поиска глобального оптимума путем случайного тестирования конфигураций в соответствии с энергией системы.

http://en.wikipedia.org/wiki/Simulated_annealing

Проверьте статью на наличие псевдокода.

1 голос
/ 14 июня 2011

Нет эффективного алгоритма для решения этой проблемы.Я бы использовал генетический алгоритм (не обязательно находит оптимальное решение, но находит приемлемое решение).

1 голос
/ 26 мая 2011

Вы можете взглянуть на Microsoft Solver Foundation: http://msdn.microsoft.com/en-us/devlabs/hh145003.aspx

Также посмотрите на Linq to Z3 Барта де Смета, если вы любите Linq to Anything :) http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-LINQ-to-Z3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...