用Java实现调度算法

时间:2010-10-08 07:40:28

标签: java algorithm optimization data-structures scheduling

有没有人曾经处理过Java的作业调度问题? 我必须处理资源受限的项目调度问题,并想要求一些实用技巧。有没有好的库可用于实现算法?我应该使用哪些有效的数据结构?

修改

似乎我没有正确解释。我想解决资源受限的项目调度问题(RCPSP),它已知具有不同启发式的NP-complete。问题定义如下:

项目由一组A = {1,...,n}的活动组成,这些活动必须在一组R = {1,...,m}的资源上执行。在其非可抢占处理时间pj≥0期间,活动j∈A要求rjk≥0个单位的资源k∈R。每个资源k∈R具有有限的容量Rk> 0。 0.活动之间存在优先关系,这样一个活动j∈A就不能在其所有直系前辈完成之前开始。目标是找到一个优先级和资源容量可行的计划,最大限度地减少总体完工时间。

5 个答案:

答案 0 :(得分:1)

OpenSymphony Quartz Scheduller是完成任务的正确工具。

来自Quartz的网页:

“什么是Quartz?

Quartz是一个功能齐全的开源作业调度服务,可以与几乎任何Java EE或Java SE应用程序集成或一起使用 - 从最小的独立应用程序到最大的电子商务系统。 Quartz可用于创建简单或复杂的计划,以执行数十,数百甚至数万个作业;任务被定义为标准Java组件的作业,几乎可以执行任何您可以编程的任务。 Quartz Scheduler包含许多企业级功能,例如JTA事务和集群。

Quartz可以免费使用,根据Apache 2.0许可证授权。

请阅读我们的概述以获取更多快速信息。“

答案 1 :(得分:1)

JDK 1.6已经非常好了。 看看java.util.concurrent.ScheduledThreadPoolExecutor

答案 2 :(得分:1)

AMPL是一种可以用于此的建模语言,它可以编译成混合整数线性程序,并通过多个求解器求解。我建议使用GNU MathProg建模语言,它是AMPL语言的一个子集,您可以将它与GLPK求解器一起使用。这是一个非常常见的问题,您可能会找到一个非常接近您想要做的示例。

编辑:实际上glpk带有它自己的建模语言,它只是AMPL的一个子集,可能会让事情变得更容易。

答案 3 :(得分:1)

有一些用于NP完整规划问题的库:Drools Planner(开源,ASL java),JGap,cpsolver,opents,......

答案 4 :(得分:0)

您可以使用backSolver

使用finite capacity scheduling model来解决此问题