Грубая сила или алгоритм

Я не уверен, какой подход нужен, но позвольте мне описать проблему:

  1. При заданном произвольном количестве рабочих (2 и более) планируется работа в любом заданном месяце (включая выходные).
  2. В назначенный день может работать только один работник. 2а. Этот работник может не работать ни накануне, ни после.
  3. Рабочие также работают по выходным и по возможности поровну распределяются по числу рабочих. 3а. Суббота и воскресенье оцениваются одинаково.
  4. Выделять на возможные отпуска, взятые 4a. Без ограничений по последовательным дням 4b. Нельзя брать отпуск так долго, чтобы это мешало правилу № 2 и № 3.

Каков наиболее гибкий способ сортировки этих критериев. Как называется этот тип проблемы?

Может ли кто-нибудь указать мне правильное направление, чтобы я мог прочитать и узнать об этом. Очевидно, если это что-то, что уже было решено с помощью алгоритма, укажите мне нужную статью или книгу, чтобы я мог прочитать и понять ее.

Пояснение: я не ищу, сколько [всего] дней и выходных будет работать каждый рабочий, а способ [равномерно] распределить отработанные дни в этом месяце.

Например. Рабочие A B C; Запрошенный отпуск с 17 до 20

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

        M  T  W  Th F  Sa Su
        ====================
October 1  2  3  4  5  6  7
2012    A  B  C  A  B  C  A

        8  9 10 11 12 13 14
        B  C  A  B  C  A  B

       15 16 17 18 19 20 21
        C  A  B  C  B  C  A

       22 23 24 25 26 27 28
        B  A  C  A  C  B  C

       29 30 31
        A  B  A

person Steve L    schedule 01.09.2012    source источник
comment
Похоже на динамическое программирование, вероятно, целочисленное программирование, поскольку дни недели представляют собой дискретный набор.   -  person Ben Voigt    schedule 02.09.2012
comment
Как сказал @BenVoigt, это похоже на проблему целочисленного программирования (операция-исследование).   -  person    schedule 02.09.2012
comment
Я обновил свой вопрос и начну читать о целочисленном программировании.   -  person Steve L    schedule 04.09.2012


Ответы (1)


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

Каждый день должен быть заполнен ровно одним человеком. На каждый день и на каждого работника они должны отработать хотя бы один блок из трех дней. Никто не должен работать в дни отпуска. не более 1+этажа(смены выходного дня/рабочие)

person argentage    schedule 01.09.2012
comment
Я читал о симплексном методе, но не думаю, что правильно сформулировал свой ответ, я обновил свой вопрос примером и пояснением. - person Steve L; 04.09.2012