Drools Optaplanner:扩展VehiclerRouting示例以包括安全传输
我想为每辆车添加一个简单的布尔值,指示车辆是否安全,然后为每个客户添加一个类似的布尔值,指示客户需要安全的车辆 我已经完成了我需要的工作:Drools Optaplanner:扩展VehiclerRouting示例以包括安全传输,drools,optaplanner,Drools,Optaplanner,我想为每辆车添加一个简单的布尔值,指示车辆是否安全,然后为每个客户添加一个类似的布尔值,指示客户需要安全的车辆 我已经完成了我需要的工作: 扩展Vehicle和Customer的域对象以反映这些特性 扩展输入XML,使至少有一个安全的车辆和一个需要安全收集的客户 扩展vehicleRoutingScoreRules.drl以添加具有硬约束的新规则“安全” 这有点可悲——但我被时间所迫,drools手册非常庞大,我无法理解我认为是一条简单规则的语法。请给我一杯开胃酒好吗 成功了 我已经做了以下
- 扩展Vehicle和Customer的域对象以反映这些特性李>
- 扩展输入XML,使至少有一个安全的车辆和一个需要安全收集的客户
- 扩展vehicleRoutingScoreRules.drl以添加具有硬约束的新规则“安全”李>
- 扩展Vehicle和Customer的域对象以反映这些特性
//Vehicle.java protected boolean secure; public boolean isSecure() {return secure;} public void setSecure(boolean secure) {this.secure = secure;} //Customer.java protected boolean needsSecure; public boolean isNeedsSecure() {return needsSecure;} public void setNeedsSecure(boolean needsSecure) {this.needsSecure = needsSecure;}
- 扩展输入XML,使至少有一个安全的车辆和一个需要安全收集的客户
//cvrptw-25customers-secure.xml - cloned from cvrptw-25customers.xml <VrpVehicle id="56"> <id>24</id> <capacity>200</capacity> <depot class="VrpTimeWindowedDepot" reference="30"/> <secure>true</secure> </VrpVehicle> <VrpTimeWindowedCustomer id="58"> <id>1</id> <location reference="4"/> <demand>10</demand> <readyTime>912000</readyTime> <dueTime>967000</dueTime> <serviceDuration>90000</serviceDuration> <needsSecure>true</needsSecure> </VrpTimeWindowedCustomer>
一切都很好!有3个“安全”客户,总需求=安全车辆的总容量,我可以看到一辆车(安全的一辆)完成所有3次取车,并且已满。更多研究,我认为这与问题相同-因此我可以结束我自己的问题!
rule "securePackage"
when
$customer : Customer(needsSecure == true, vehicle != null, vehicle.isSecure == false)
then
scoreHolder.addHardConstraintMatch(kcontext, -1);
end