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

时间:2017-01-16 12:54:18

标签: drools 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

但是在运行之后,所有客户都没有被分配。我在流口水中做错了什么?

UseCase for This: 如果我想将订单分配给 biker ,只要它的重量小于5Kg。

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

1 个答案:

答案 0 :(得分:2)

试试这个

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