如何在 optaplanner 的 VRP 中添加自定义 HardConstraint?

How to add custom HardConstraint in VRP for optaplanner?

感谢 optaplanner 团队提供如此出色的项目。

我需要在 Vehicle 中添加一个名为 capacityCap 的约束(仅当 "demand <= capacityCap" 时才将客户分配给车辆) 我在 Vehicle.java.

中添加了一个变量 capacityCap
protected int capacityCap;
public int getCapacityCap() {
    return capacityCap;
}

public void setCapacityCap(int capacityCap) {
    this.capacityCap = capacityCap;
}

并为此添加了流口水 vehicleRoutingScoreRules.drl

// Hard constraints
rule "vehicleCapacityCap"
when
    $vehicle : Vehicle($capacityCap : capacityCap)
    $customer : Customer(demand > $capacityCap);
then
    scoreHolder.addHardConstraintMatch(kcontext, -1);
end

但在 运行 之后它离开了所有客户 unassigned.Am 我在流口水时做错了什么?

用例: 如果我想将订单分配给 骑自行车的人 只有当它的重量小于 5Kg 时。

请询问是否需要更多信息。 谢谢

试试这个

// Hard constraints
rule "vehicleCapacityCap"
when
   $vehicle : Vehicle($capacityCap : capacityCap)
   $customer : Customer(vehicle == $vehicle, demand > $capacityCap);
then
   scoreHolder.addHardConstraintMatch(kcontext, -1);
end