Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drools能否在此调度项目中提供接近最优的解决方案?_Drools_Drools Planner_Optaplanner - Fatal编程技术网

Drools能否在此调度项目中提供接近最优的解决方案?

Drools能否在此调度项目中提供接近最优的解决方案?,drools,drools-planner,optaplanner,Drools,Drools Planner,Optaplanner,我被分配了一个项目,要求在6个月的时间内每天2班安排约30个资源(构建时间表),包括 无连续日班 对于每种资源:夜班(和白班)总数,精细分配….SumShifts(周一)=SumShifts(周二) 对于所有资源:SumTotalDayShifts(和夜班)分布 其他各种约束条件,如资源a,无法在第x天与资源y一起分配班次 最初,我决定构建数学模型,对其进行编码并用遗传算法进行求解。 然后我发现了口水,看起来很有希望…但有一个学习期 选择哪条路?有什么想法吗 这些约束听起来与中的护士排班示例非常

我被分配了一个项目,要求在6个月的时间内每天2班安排约30个资源(构建时间表),包括

  • 无连续日班
  • 对于每种资源:夜班(和白班)总数,精细分配….SumShifts(周一)=SumShifts(周二)
  • 对于所有资源:SumTotalDayShifts(和夜班)分布
  • 其他各种约束条件,如资源a,无法在第x天与资源y一起分配班次
  • 最初,我决定构建数学模型,对其进行编码并用遗传算法进行求解。 然后我发现了口水,看起来很有希望…但有一个学习期


    选择哪条路?有什么想法吗

    这些约束听起来与中的护士排班示例非常相似。你可能想从这个例子开始。

    我的确在不太懂java的情况下,在1.5个月内完成了一个大学时间表项目。它使用模拟退火,运行时间为40秒(28个类,约1000个周期)

    我对每天的小时数有硬约束和软约束。添加的硬约束使得当前状态不可能。“软约束”每次违反都会减去几个点。我已经明确指出,每天的工作量或多或少是均匀分布的

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

    我可以通过在问题状态和规则中声明性地指定冲突时段来防止教师讲授冲突时段:

    ...p1 = new Period(class, day ,num)
    ...p2 = new Period(class, day ,num)
    ...periodConflict1 = new PeriodConflict( p1, p2)
    
    并编写一个规则来处理
    周期冲突
    (如果存在)。所以我想它解决了你的4个问题

    然后作者Geoffrey De Smet亲自处理查询和bug

    所以Drools planner比编写自己的算法和处理域规则要好得多

    我首先提到了N皇后(最简单的),然后是云平衡(第二简单的),制作了一个数独应用程序和一个桶填充应用程序(将100个数字放入10个桶中,使它们的总和彼此接近),并从那里构建了它