OptaPlanner是否支持对连续变量的优化和约束?

时间:2013-08-20 19:12:57

标签: optimization rule-engine constraint-programming drools-planner optaplanner

我正在阅读文档中的矛盾内容。

一方面,这段经文似乎表明连续的计划变量是可能的:

  

计划值范围是a的可能计划值的集合   规划变量。该集合可以是离散的(例如,行1,2,3   或4)或连续的(例如0.0和1.0之间的任何双倍)。

另一方面,在定义计划变量时,必须在字段上指定ValueRangeProvider注释以用于值集:

  

Solution实现具有返回Collection的方法。任何   该集合的价值是一个可能的计划价值   规划变量。

这两个片段都在文档的相同部分(http://docs.jboss.org/drools/release/latest/optaplanner-docs/html_single/#d0e2518

那么,这是什么?我可以使用完整的double作为我的计划变量,还是需要将其范围限制为特定Collection中的值?

看一下实际的算法,我没有看到任何实际上适合优化连续变量的算法,所以我怀疑它是否可行,但是明确澄清并明确这一点会很好。

1 个答案:

答案 0 :(得分:5)

我们正在努力全力支持连续变量。但目前(在6.0.0.CR2中)尚未得到支持

值范围确实可以是连续范围,但实际使用它们的管道还没有。我们最近取得了很好的进展,请参阅https://issues.jboss.org/browse/PLANNER-160

以下是它的工作原理: 您将能够在返回@ValueRangeProvider(而不是ValueRange)的方法上使用Collection注释。

ValueRange将是一个支持选择随机值,获取大小,...的接口 开箱即用,我们将支持IntValueRangeDoubleValueRangeBigDecimalValueRange,... (实现细节:我们将这些Collection-returns方法改编为CollectionValueRange。)

然后ValueSelector实现将直接使用它。

至于优化连续变量的适用性:

  • JIT随机选择将非常快速且内存效率非常高。
  • 如果您有NP-complete / NP-hard问题,那么OptaPlanner将是一个很好的匹配。如果您只有连续变量(而不是单个离散变量),那么您的问题不太可能是NP完全的(除非您的约束反证出来),在这种情况下,您最好使用自定义的手工多项式算法(因为它不是NP完全的,所以有一个“简单”的解决方案)。