InverseRelationShadowVariable 始终为 null

问题描述 投票:0回答:1

我必须将订单列表计划到机器中,并使用 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 都包含数据。

如有任何帮助,我们将不胜感激。

optaplanner timefold
1个回答
0
投票

Order
可能未注册为规划实体。

如果您使用 Spring 或 Quarkus 扩展,这应该会自动发生。否则请检查您的 SolverConfig。

验证哪些规划实体已注册的最简单方法是在 OptaPlanner/

Timefold
中打开 TRACE 日志记录(并求解 1 秒)。在解决开始事件时,它将记录它检测到的所有规划实体。

© www.soinside.com 2019 - 2024. All rights reserved.