我正在阅读文档中相互矛盾的内容。
一方面,这段话似乎表明连续规划变量是可能的:
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 实现将直接使用它。
至于优化连续变量的适用性:
关于optimization - OptaPlanner 是否支持对连续变量的优化和约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18343221/