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

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

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

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

A planning value range is the set of possible planning values for a planning variable. This set can be a discrete (for example row 1, 2, 3 or 4) or continuous (for example any double between 0.0 and 1.0).



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

The Solution implementation has method which returns a Collection. Any value from that Collection is a possible planning value for this planning variable.



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

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

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

最佳答案

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

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

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

一个 ValueRange将是一个界面,支持选择随机值、获取大小、...
开箱即用,我们将支持 IntValueRange , DoubleValueRange , BigDecimalValueRange , ...
(实现细节:我们将把这些集合返回方法 retrofit 到 CollectionValueRange 中。)

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

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

  • JIT 随机选择将非常快速并且非常节省内存。
  • 如果您有一个 NP 完全/NP 难问题,那么 OptaPlanner 将是一个很好的选择。如果您只有连续变量(而不是单个离散变量),那么您的问题不太可能是 NP 完全的(除非您的约束证明了这一点),在这种情况下,您最好使用自定义的、手工制作的多项式算法(因为它不是 NP 完全的,所以有一个“简单”的解决方案)。
  • 关于optimization - OptaPlanner 是否支持对连续变量的优化和约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18343221/

    相关文章:

    python - 核心规则引擎之外

    java - 加速递归函数

    c++ - 使用参数优化编译器

    string - 从字符数组合并键值列表的有效方法

    wolfram-mathematica - 过滤掉 Mathematica 中的子列表

    AngularJS 和可重用的强制字段验证规则

    Prolog:将列表的元素限制在一个范围内

    c++ - 如何在 Gecode 中实现 'nested' 成本函数?

    constraint-programming - 使用累积函数进行矩形放置

    javascript - 如何压缩 ajax 请求的响应?