![](/img/trans.png)
[英]OptaPlanner - Problem with using @PlanningListVariable and @PlanningVariable in the same planning entity
[英]Optaplanner Constraint Streams Join Problem Fact and Planning Entity
我正在嘗試在約束流中加入規划實體和問題事實,但我的 IDE 對此拋出錯誤: Cannot resolve method 'join(java.lang.Class<Edge>, org.optaplanner.core.api.score.stream.bi.BiJoiner<A,B>)'
我的問題結構與運輸問題非常相似。 我有節點和邊,想計算邊的數量。
我的主要問題事實是:
class Node{
UUID id;
int itemsInInventory;
...
}
規划實體:
@PlanningEntity
class Edge{
Node from;
Node to;
@PlanningVariable
int itemsTransported;
getFromId(){return from.getId()}
getToId(){return to.getId()}
}
約束的代碼是:
public Constraint minimizeShortage(ConstraintFactory constraintFactory) {
return constraintFactory.from(Node.class)
.join(Edge.class, equal(Edge::getFromId, Edge::getId))
...
}
如果我嘗試將邊緣與邊緣連接起來,例如:
public Constraint minimizeShortage(ConstraintFactory constraintFactory) {
return constraintFactory.from(Node.class)
.join(Node, equal(Node:: getId, Node::getId)) //EDITED
...
}
這工作沒有錯誤。 是因為我嘗試將節點加入節點中邊緣屬性的邊緣嗎? 還有另一種方法可以做我想做的事嗎?
我不得不說我不明白你的后一個例子是如何工作的:
public Constraint minimizeShortage(ConstraintFactory constraintFactory) {
return constraintFactory.from(Node.class)
.join(Node, equal(Node:: getId, Edge::getId))
...
}
在這種情況下,您將加入Node
和另一個Node
。 因此, equal(...)
連接器需要在兩邊都使用Node
,如下所示:
public Constraint minimizeShortage(ConstraintFactory constraintFactory) {
return constraintFactory.from(Node.class)
.join(Node.class, equal(Node::getId, Node::getId))
...
}
或者,更簡短地說:
public Constraint minimizeShortage(ConstraintFactory constraintFactory) {
return constraintFactory.from(Node.class)
.join(Node.class, equal(Node::getId))
...
}
這也是您的第一個示例無法編譯的原因:
public Constraint minimizeShortage(ConstraintFactory constraintFactory) {
return constraintFactory.from(Node.class)
.join(Edge.class, equal(Edge::getFromId, Edge::getId))
...
}
在這種情況下,您將Node
與Edge
連接起來,因此equal(...)
連接器需要使用左側的Node
和右側的Edge
,如下所示:
public Constraint minimizeShortage(ConstraintFactory constraintFactory) {
return constraintFactory.from(Node.class)
.join(Edge.class, equal(Node::getId, Edge::getFromId))
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.