Can I tell Optaplanner (with constraint streams) not to recalculate join if it doesn#39;t depend on planning variable?(如果连接不依赖于规划变量,我可以告诉Optaplanner(带有约束流)不要重新计算连接吗?)
问题描述
我在约束流的开头使用fromUniquePair(Class<A> fromClass, BiJoiner<A,A> joiner)
。FromClass是一个计划实体,表示一个时隙。我需要所有重叠的时隙对的流,以便稍后检查它们的计划变量是否不冲突。时隙不会根据任何规划变量在时间上移动,因此此来自UniquePair联接的结果在优化时不会更改。
但是,每当规划变量发生变化时,就会将该时隙与所有其他时隙进行比较,以确定是否需要在流中添加或删除一对。这是不必要的,因为此连接器的结果以任何方式都不依赖于规划变量。我认为大部分时间都花在了这一点上,因为每次更改计划变量时,它都需要检查数千个其他时隙,而它只需要对计划变量本身进行几次快速检查。
有没有办法告诉Optaplanner不要这样做?
推荐答案
您在这里要求的内容可以与Drool中的属性反应性功能进行比较。不幸的是,约束流不支持这一点,也没有一种方法可以这样做--约束流不能看到过滤器lambdas或方法引用的内部,因此它不知道您访问的是哪些字段。这是我们为更好的抽象付出的代价。
我认为flattenLast()
在这方面不会做任何事情。您对其执行from(...)
操作的实体在每次更改时仍将被重新计算,然后所有拼合的数据也将被重新计算。也就是说,可能我误解了您的意图,如果您使用其他信息更新您的原始问题,我将重新考虑。
这篇关于如果连接不依赖于规划变量,我可以告诉Optaplanner(带有约束流)不要重新计算连接吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如果连接不依赖于规划变量,我可以告诉Optaplanner(带有约束流)不要重新计算连接吗?
基础教程推荐
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01