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

lev*_*and 5 optimization rule-engine constraint-programming drools-planner optaplanner

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

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

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

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

Solution实现具有返回Collection的方法.该集合中的任何值都是此计划变量的可能计划值.

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

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

看看实际的算法,我没有看到任何实际上适合优化连续变量的东西,所以我怀疑它是否可能,但是如果澄清并明确表示它会很好.

Geo*_*met 5

我们正在努力全力支持连续变量.但目前(在6.0.0.CR2中)它还没有得到很好的支持.

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

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

一个ValueRange将是一个接口支持选择一个随机值,得到一个大小,...外的开箱,我们会支持IntValueRange,DoubleValueRange,BigDecimalValueRange,...(实现细节:我们将复古符合这些集合返回方法成a CollectionValueRange.)

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

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

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