本文介紹了如果連接不依賴于規劃變量,我可以告訴Optaplanner(帶有約束流)不要重新計算連接嗎?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我在約束流的開頭使用fromUniquePair?(Class<A> fromClass, BiJoiner<A,?A> joiner)
。FromClass是一個計劃實體,表示一個時隙。我需要所有重疊的時隙對的流,以便稍后檢查它們的計劃變量是否不沖突。時隙不會根據任何規劃變量在時間上移動,因此此來自UniquePair聯接的結果在優化時不會更改。
但是,每當規劃變量發生變化時,就會將該時隙與所有其他時隙進行比較,以確定是否需要在流中添加或刪除一對。這是不必要的,因為此連接器的結果以任何方式都不依賴于規劃變量。我認為大部分時間都花在了這一點上,因為每次更改計劃變量時,它都需要檢查數千個其他時隙,而它只需要對計劃變量本身進行幾次快速檢查。
有沒有辦法告訴Optaplanner不要這樣做?
推薦答案
您在這里要求的內容可以與Drool中的屬性反應性功能進行比較。不幸的是,約束流不支持這一點,也沒有一種方法可以這樣做–約束流不能看到過濾器lambdas或方法引用的內部,因此它不知道您訪問的是哪些字段。這是我們為更好的抽象付出的代價。
我認為flattenLast()
在這方面不會做任何事情。您對其執行from(...)
操作的實體在每次更改時仍將被重新計算,然后所有拼合的數據也將被重新計算。也就是說,可能我誤解了您的意圖,如果您使用其他信息更新您的原始問題,我將重新考慮。
這篇關于如果連接不依賴于規劃變量,我可以告訴Optaplanner(帶有約束流)不要重新計算連接嗎?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,