Алгоритм расписания учителей - PullRequest
29 голосов
/ 17 октября 2008

Это проблема, о которой я долго думал. Будучи сыном учителя и программиста, это пришло мне в голову на раннем этапе ... но я до сих пор не нашел решения для этого.

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

Проверки Sanity

  • Учитель не может вести два занятия одновременно
  • Студент не может посещать два урока одновременно
  • У некоторых учителей должен быть хотя бы один выходной в течение недели
  • Все дни недели должны охватываться расписанием
  • Субъект X должен иметь ровно столько же часов в неделю
  • ...

Предпочтения

  • Расписание каждого учителя должно быть как можно более компактным (то есть учитель должен работать все часы в течение дня без пауз, если это возможно)
  • Учителя, у которых есть выходные, должны иметь возможность выразить предпочтение, в какой день
  • Учителя, работающие неполный рабочий день, должны иметь возможность выразить предпочтение, работать ли в начале или в конце учебного дня.
  • ...

Теперь, после нескольких лет не находя решения (и изучая что-то одно или два за это время ...), я понял, что это пахнет как NP-трудная проблема.

Это доказано как NP-hard?

У кого-нибудь есть идеи, как взломать эту штуку?

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


Небольшое дополнение, чтобы лучше указать проблему. Это применимо к классным комнатам в итальянском стиле, в которых все учащиеся объединены в разные классы (например, 1-й класс, раздел A), и учителя перемещаются между классами. Все ученики одного класса имеют одинаковое расписание и не имеют выбора, какие уроки посещать.

Ответы [ 12 ]

0 голосов
/ 21 февраля 2009

Да, я думаю, что NP завершен - или, по крайней мере, найти оптимальное решение - NP complete.

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

Я понятия не имел, во что ввязался. К счастью для нас все, что мне нужно было сделать, это найти одно решение, которое соответствовало бы ограничениям. Но в моем тестировании я всегда волновался, определяя, было ли решение вообще. У него никогда не было слишком много ограничений, и в программе использовалась различная эвристика и отслеживание задним числом. Это было очень весело.

Я думаю, что Билл Гейтс также работал над такой системой в старшей школе или колледже для своей старшей школы. Хотя не уверен.

Удачи. Все мои заметки исчезли, и я так и не смог найти решение, которое смог бы продать. Это был специальный проект, который я перекодировал, изучая новые языки (Basic, Scheme, C, VB, C ++)

Веселитесь вместе с ним

0 голосов
/ 24 декабря 2008

Удачи. Сын отца с такой проблемой - вот что привело меня в исследовательскую группу, в которой я оказался ...


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

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

Основная идея заключается в том, что я начал с «случайного» решения и оценил его; затем внесли изменения путем замены небольшого числа заданий, переоценили его, а затем, с большой вероятностью, приняли или отклонили изменение.

После тысяч итераций вы приближаетесь к приемлемому решению.

Поверьте, однако, что в этом классе проблем исследовательские группы выпускают кандидатов наук, поэтому вы находитесь в очень хорошей компании.

Вы также можете найти некоторый интерес в области линейного программирования, например, симплекс и т. Д.

...