制定时间表

所以..有人最近让我为他们制定时间表,我同意了。当我坐下来做它时,我意识到它比我想象的要难。这只是一个时间表,无论白天或晚上都可以转移到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
我觉得这很有效,但有点明显。问我的人想要看到不同的选择。有没有更好的方法来做到这一点,看到的不仅仅是这个选项?或者甚至有一个程序为你做这个?     
已邀请:
我认为你应该使用遗传算法,因为: 它最适合大型问题实例。 它可以降低不准确答案价格的时间复杂度(不是最好的) 您可以指定约束和&amp;通过调整不符合的健身惩罚,可以轻松实现偏好。 您可以指定程序执行的时间限制。 解决方案的质量取决于您打算花多少时间来解决该计划。 遗传算法定义 遗传算法教程 GA的班级调度项目 还要看一下:类似的问题和另一个问题     
蛮力是没有意义的。 使用Drools Planner,Choco,JGap,cpsolver等框架为您解决问题。其中一些框架(包括Drools Planner)允许您轻松切换优化算法并包含用于确定最适合您的问题的工具。     
约束编程问题很复杂,一般难以编程。即使你的问题很简单,你也可以下载一个工具来完成它。 Gnu线性编程套件可能是最好的选择,它有一个可以使用的求解器和建模语言。我写了一篇关于安排一次的长篇文章。     

要回复问题请先登录注册