Случайное присвоение позиций - PullRequest
2 голосов
/ 03 июля 2010

Вот моя основная проблема.Скажем, у меня 50 сотрудников, работающих в определенный день, и я хочу, чтобы моя программа случайным образом распределяла их по «должностям» (т. Е. На стойке регистрации, телефонам и т. Д.) В зависимости от того, на чем они были обучены.Программа уже знает, на чем обучался каждый сотрудник.Какой лучший способ прагматично пройти и назначить сотрудника на каждую из 50 должностей?

Ps Я программирую это в Access, используя VBA, но это больше вопрос процесса, чем фактического кода.

Ответы [ 2 ]

2 голосов
/ 04 июля 2010

Привет тепло,

Вы ищете максимальное двойное соответствие . Это проблема из теории графов. Это сводится к определению максимального потока в неориентированном двудольном графе с постоянными весами ребер 1:

  1. Вы делите все вершины в графе на два отдельных набора. Первый набор содержит всех Ваших работников, второй - все доступные позиции.
  2. Теперь вы вставляете ребро каждого работника в каждую позицию, на которой он / она может работать.
  3. Вставьте еще две вершины: источник и приемник. Соедините источник с каждой рабочей вершиной, а приемник - с каждой вершиной позиции.
  4. Определить максимальный поток от источника к раковине
Надеюсь, что смогу помочь, привет.

РЕДАКТИРОВАТЬ: Поддержка случайности

Поскольку определение максимального соответствия двухстороннего / максимального потока является детерминированным алгоритмом, он всегда будет возвращать один и тот же результат. Чтобы изменить это, вы можете смешать / перемешать порядок ребер в графе перед применением алгоритма.

0 голосов
/ 05 июля 2010

В вашей таблице позиций есть последовательность, 1, 2, 3, 4 и количество позиций для заполнения.Затем посмотрите на то, что человек сделал вчера, и 1 на последовательность позиций, и теперь они назначены на следующую позицию.Если сегодня для этой позиции достаточно, перейдите к следующей приоритетной позиции.

Не случайно, но, может быть, достаточно близко.

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