这是optaPlanner的智能用例吗?

时间:2014-10-14 05:51:47

标签: project-planning optaplanner resource-scheduling

我正在尝试清理当前正在使用优先级FIFO调度算法的企业BI系统(因此周二优先级4报告将在周四优先级4报告和周一优先级3报告之前执行。)其他详细信息:

  • 队列永远不会为空,工作总是被添加
  • 工作范围从执行时间从一分钟到24小时以上
  • 有40个奇怪的相同应用服务器用于执行作业

我认为我可以为这种情况启动并运行optaPlanner,其中包含优先级的硬规则以及队列中平均时间周围的一些软规则。我是调度优化的新手,所以我想我的问题是在这种情况下我应该寻找什么来决定optaPlanner是否会帮助我?

1 个答案:

答案 0 :(得分:2)

问题看起来像 bin packing (可能作业车间调度), NP-complete ,因此OptaPlanner将做得比FIFO算法好。

但它真的 NP-complete ?如果满足所有条件,则可能不是:

  • 所有40台服务器都是相同的。因此,在服务器A而不是服务器B上运行优先级报告不会更快地提交报告。
  • 所有40台服务器都是相同的。所以总持续时间(对于特定的输入集)是一个常数。
  • 总的完工时间并不重要。因此,考虑到20个小工作1小时和1个大工作20小时和2台机器,所以在大工作开始前10小时完成所有小工作都很好,因为总工作时间为30小时。没有希望将完工时间减少到20个小时。
  • "队列中的平均时间"值得商榷的是:在你完成工作之前,你是否关心这些工作在队列中的持续时间?如果总持续时间是一个常数,那么这可以通过FIFO首先或最后的小工作来完成(当然仍然尊重优先级)。
  • 作业之间没有依赖关系。

如果满足所有这些条件,OptaPlanner将无法比正确编写的贪婪算法(它安排最小/最大优先级最高优先级作业)做得更好。如果不满足任何这些条件(例如,您购买10台更快的新服务器),那么OptaPlanner可以做得更好。你只需要评估它是否值得用1个线程来解决这个问题。

如果您使用OptaPlanner,请务必查看实时调度和守护进程模式,以便在新报告进入系统时进行重新计划。