我正在阅读文档中矛盾的内容。
一方面,这段话似乎表明连续计划变量是可能的:
规划值范围是一个可能的规划值的集合
规划变量。该集合可以是离散的(例如第 1、2、3 行
或 4) 或连续(例如 0.0 和 1.0 之间的任何双精度值)。
另一方面,在定义计划变量时,您必须指定ValueRangeProvider
用于值集的字段上的注释:
解决方案实现具有返回集合的方法。任何
该集合的价值是该集合的可能的规划价值
规划变量。
这两个片段都位于文档的同一部分(http://docs.jboss.org/drools/release/latest/optaplanner-docs/html_single/#d0e2518 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 https://issues.jboss.org/browse/PLANNER-160.
其工作原理如下:
您将能够使用@ValueRangeProvider
返回一个方法的注释ValueRange
(代替Collection
) too.
A ValueRange
将是一个支持选择随机值、获取大小等的界面
我们将支持开箱即用的IntValueRange
, DoubleValueRange
, BigDecimalValueRange
, ...
(实现细节:我们将把那些返回 Collection 的方法改造为CollectionValueRange
.)
然后 ValueSelector 实现将直接使用它。
至于优化连续变量的适宜性:
- JIT 随机选择速度将非常快,并且非常节省内存。
- 如果您有 NP 完全/NP 困难问题,那么 OptaPlanner 将是一个很好的选择。如果你只有连续变量(而不是单个离散变量),那么你的问题不太可能是 NP 完全的(除非你的约束反证了这一点),在这种情况下,你最好使用自定义的、手工制作的多项式算法(因为它不是 NP 完全的,所以有一个“简单”的解决方案)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)