如果连接不依赖于规划变量,我可以告诉Optaplanner(带有约束流)不要重新计算连接吗? [英] Can I tell Optaplanner (with constraint streams) not to recalculate join if it doesn't depend on planning variable?

查看:31
本文介绍了如果连接不依赖于规划变量,我可以告诉Optaplanner(带有约束流)不要重新计算连接吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在约束流的开头使用fromUniquePair​(Class<A> fromClass, BiJoiner<A,​A> joiner)。FromClass是一个计划实体,表示一个时隙。我需要所有重叠的时隙对的流,以便稍后检查它们的计划变量是否不冲突。时隙不会根据任何规划变量在时间上移动,因此此来自UniquePair联接的结果在优化时不会更改。

但是,每当规划变量发生变化时,就会将该时隙与所有其他时隙进行比较,以确定是否需要在流中添加或删除一对。这是不必要的,因为此连接器的结果以任何方式都不依赖于规划变量。我认为大部分时间都花在了这一点上,因为每次更改计划变量时,它都需要检查数千个其他时隙,而它只需要对计划变量本身进行几次快速检查。

有没有办法告诉Optaplanner不要这样做?

推荐答案

您在这里要求的内容可以与Drool中的属性反应性功能进行比较。不幸的是,约束流不支持这一点,也没有一种方法可以这样做--约束流不能看到过滤器lambdas或方法引用的内部,因此它不知道您访问的是哪些字段。这是我们为更好的抽象付出的代价。

我认为flattenLast()在这方面不会做任何事情。您对其执行from(...)操作的实体在每次更改时仍将被重新计算,然后所有拼合的数据也将被重新计算。也就是说,可能我误解了您的意图,如果您使用其他信息更新您的原始问题,我将重新考虑。

这篇关于如果连接不依赖于规划变量,我可以告诉Optaplanner(带有约束流)不要重新计算连接吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆