Drools能否在此调度项目中提供近乎理想的解决方案?

时间:2013-07-22 01:25:21

标签: drools drools-planner optaplanner

我被分配了一个项目,要求安排(构建一个时间表)大约30个资源,每天2个班次,为期6个月,并且有非常复杂的硬约束,如

  1. 没有连续几天轮班
  2. 每个资源:总夜晚(和日)班次的总和,精细分配.... SumShifts(星期一)= SumShifts(星期二)....
  3. 所有资源:SumTotalDayShifts(和夜班)分发
  4. 不能使用resource_y在day_x上为resource_a分配各种其他约束。
  5. 最初,我决定构建数学模型,对其进行编码并使用GA进行求解。 然后我发现Drools看起来很有希望......但是有一个学习期。

    选择哪种方式?有任何想法吗?

2 个答案:

答案 0 :(得分:1)

我确实在1.5个月内制作了一个大学时间表项目而不太了解java。它使用模拟退火并在40秒内运行(28个等级,约1000个周期)。

我对每天的小时数有严格的限制和软约束。添加的硬约束使得当前状态变得不可能。软约束每次违规减去几个点。我已经指定每天的工作量或多或少均匀分布。

这些点很容易调整,因为它们在规则文件中指定。用方言指定规则很简单,不需要编译任何东西来添加/调整规则

我可以通过在问题状态和规则中以声明方式指定教师来阻止教师教授冲突的时期:

...p1 = new Period(class, day ,num)
...p2 = new Period(class, day ,num)
...periodConflict1 = new PeriodConflict( p1, p2)

并编写一个处理PeriodConflict的规则(如果存在)。所以我想它可以解决你的4分。

然后作者Geoffrey De Smet亲自处理查询和错误。

因此,Drools规划师比编写自己的算法和处理域规则要好得多。

我首先提到N Queens(最简单)然后云平衡(第二个最简单),制作一个数独应用程序和一个桶装填应用程序(在10个桶中放置100个数字,以便它们的总和彼此接近)和从那里建造它。

答案 1 :(得分:0)

这些约束听起来与OptaPlanner (= Drools Planner)中的Nurse Rostering示例非常相似。您可能希望从该示例开始。