6

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

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

计划值范围是计划变量的一组可能的计划值。该集合可以是离散的(例如第 1、2、3 或 4 行)或连续的(例如 0.0 和 1.0 之间的任何双精度)。

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

解决方案实现具有返回集合的方法。该集合中的任何值都是此计划变量的可能计划值。

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

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

查看所提供的实际算法,我没有看到任何真正适合优化连续变量的算法,所以我怀疑它是否可能,但最好能澄清并明确说明。

4

1 回答 1

6

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

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

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

AValueRange将是一个接口,支持选择一个随机值,获取一个大小,... 开箱即用,我们将支持IntValueRange, DoubleValueRange, BigDecimalValueRange, ... (实现细节:我们将把那些返回集合的方法改装成一个CollectionValueRange。)

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

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

  • JIT 随机选择将非常快速并且非常节省内存。
  • 如果你有一个 NP 完全/NP 难题,那么 OptaPlanner 将是一个很好的匹配。如果您只有连续变量(而不是单个离散变量),那么您的问题不太可能是 NP 完全的(除非您的约束反证了这一点),在这种情况下,您最好使用自定义的手工多项式算法(因为它不是NP完全的,所以有一个“简单”的解决方案)。
于 2013-08-21T08:06:54.737 回答