我必须将订单列表计划到机器中,并使用 TaskAssigning 作为示例对实体进行建模。
这是我的代码:
@PlanningEntity
public class Machine {
private List<Order> m_plannedOrders;
...
@PlanningListVariable
public List<Order> getPlannedOrders() {
return m_plannedOrders;
}
public void setPlannedOrders(List<Order> orders) {
m_plannedOrders = orders;
}
...
}
@PlanningEntity
public class Order {
private Machine m_machine;
...
@InverseRelationShadowVariable(sourceVariableName = "plannedOrders")
public Machine getMachine() {
return m_machine;
}
public void setMachine(Machine machine) {
m_machine = machine;
}
}
@PlanningSolution
public class MachineOrdersPlanning {
...
@PlanningEntityCollectionProperty
public List<Machine> getMachines() {
return m_machines;
}
@ValueRangeProvider
@ProblemFactCollectionProperty
public List<Order> getOrders() {
return m_orders;
}
@PlanningScore
public HardSoftScore getScore() {
return m_score;
}
}
问题出在逆关系影子变量上。每次求解完满数据的PlanningListVariable后,但逆数总是为空,我不知道为什么。
我调试了 TaskAssigning 示例,这里 PlanninListVar 和 Inverse 都包含数据。
如有任何帮助,我们将不胜感激。
Order
可能未注册为规划实体。
如果您使用 Spring 或 Quarkus 扩展,这应该会自动发生。否则请检查您的 SolverConfig。
验证哪些规划实体已注册的最简单方法是在 OptaPlanner/
Timefold中打开
TRACE
日志记录(并求解 1 秒)。在解决开始事件时,它将记录它检测到的所有规划实体。