制定时间表

时间:2010-10-18 15:21:33

标签: algorithm timetable

所以..有人最近要我为他们制定时间表,我同意了。当我坐下来做它时,我意识到它比我想象的要难。这只是一个时间表,无论白天或晚上都可以转移到4人。

我想到了这样的事情:

for Monday to Saturday {
  for(i=0;i<people.length;i++){
    if (person[i].available()){
      person.worksDay()
      person is now not available.
    }
  }

  for(i=0;i<people.length;i++){
    if (person[i].available()){
      person[i].worksNight()
      person[i] is now not available.
    }
  }
}

因此,这种算法背后的想法是,每天,一个人被分配到白天或夜班。如果一个人没有轮班工作并且他们没有休假,那么他们就可以使用。这是周一到周六。正如你可能知道的那样,给定A,B,C,D人的任务看起来像这样(如果没有人在假期):

Mon A B
Tue C D
Wed A B
Th  C D
Fri A B
Sat C D

我觉得这很有效,但有点明显。问我的人想要看到不同的选择。有没有更好的方法来做到这一点,看到的不仅仅是这个选项?或者甚至有一个程序为你做这个?

3 个答案:

答案 0 :(得分:2)

我认为你应该使用遗传算法,因为:

另请注意:a similar questionanother one

答案 1 :(得分:1)

蛮力是pointless

使用Drools Planner,Choco,JGap,cpsolver等框架为您解决问题。其中一些框架(包括Drools Planner)允许您轻松切换优化算法并包含用于确定最适合您的问题的工具。

答案 2 :(得分:0)

约束编程问题很复杂,一般难以编程。即使你的问题很简单,你也可以下载一个工具来完成它。 Gnu线性编程套件可能是最好的选择,它有一个可以使用的求解器和建模语言。我写了一篇关于安排one time的非常长的帖子。