时间表/调度库

时间:2015-11-12 22:21:40

标签: constraint-programming

我正在寻找一个库来帮助我解决基于约束的逻辑问题,我需要安排一系列不同持续时间的不同事件。这些事件具有与它们相关的不同属性,我的主要问题是我需要根据这些属性对“首选项”进行编码。这些偏好不是硬约束,但我希望最大限度地提高它们在解决方案中的满意程度。竞争优先权也有不同的偏好。

我已经看了几个约束求解器(Sat4j,clasp,Glucose,GlueMiniSat等)但是从我看到它们似乎只处理固定约束,并且设置首选项将是非-不重要的。

我不太关心它所使用的技术/语言 - 我很乐意为它编写一个包装器。

4 个答案:

答案 0 :(得分:1)

当然,Choco Solver是一个功能强大的Java约束求解器,通常用于调度和规划。

我们来看下面的例子: "如果x = 10"

,那就太好了

您可以通过不同方式对首选项进行编码。

1)通过变量和约束。

1.1)使用二进制变量

来修复约束
ICF.arithm(x,"=",10).reifyWith(b);

它基本上意味着b = 1< => x = 10(因此约束可能满足也可能不满足),那么你可以最大化b(可能有一个权重)

1.2)通过差距变量

solver.post(ICF.arithm(x,'-',gap,"=",10);

然后你可以最小化间隙的绝对值(可能有一个重量)  约束。

2)通过搜索:在解决问题时,请求搜索策略在尝试其他值之前尝试x = 10。没有最优性证明,但它在实践中运作良好。

希望这有帮助。有关Choco Solver www.cosling.com

的更多支持,请随时与我们联系

最好的,

答案 1 :(得分:0)

我认为OptaPlanner是一个可以帮助您解决此问题的工具,请查看:

  

OptaPlanner是一个约束满足求解器。它优化了业务   资源规划。每个组织都面临着调度难题:分配   一组有限的约束资源(员工,资产,时间和   钱)为客户提供产品或服务。 OptaPlanner   优化此类规划问题,以更少的方式开展更多业务   资源。用例包括车辆路线,员工排班,工作   调度,Bin装箱等等。

     

OptaPlanner是一款轻量级,可嵌入的计划引擎。它使   普通的Java™程序员可以有效地解决优化问题。   约束适用于纯域对象,可以重用现有代码。   无需输入困难的数学方程式。在下面   引擎盖,OptaPlanner结合了复杂的优化启发式和   元启发式(如禁忌搜索,模拟退火和后期   接受)和非常有效的分数计算。

     

OptaPlanner是Apache下发布的开源软件   软件许可。它使用100%纯Java™编写,可在任何JVM上运行   并且也可以在Maven Central存储库中找到。

来源:

http://www.optaplanner.org/

它是Drools的一部分,它有另一个有趣的工具:

http://www.drools.org/

答案 2 :(得分:0)

另一个积极维护的图书馆是" choco-solver"。

答案 3 :(得分:0)

另一种选择是Gecode Toolkit。它是一个开源和现代的Constraint Programming Solver。