Drools Optaplanner:扩展VehiclerRouting示例以包括安全传输

Drools Optaplanner:扩展VehiclerRouting示例以包括安全传输,drools,optaplanner,Drools,Optaplanner,我想为每辆车添加一个简单的布尔值,指示车辆是否安全,然后为每个客户添加一个类似的布尔值,指示客户需要安全的车辆 我已经完成了我需要的工作: 扩展Vehicle和Customer的域对象以反映这些特性 扩展输入XML,使至少有一个安全的车辆和一个需要安全收集的客户 扩展vehicleRoutingScoreRules.drl以添加具有硬约束的新规则“安全” 这有点可悲——但我被时间所迫,drools手册非常庞大,我无法理解我认为是一条简单规则的语法。请给我一杯开胃酒好吗 成功了 我已经做了以下

我想为每辆车添加一个简单的布尔值,指示车辆是否安全,然后为每个客户添加一个类似的布尔值,指示客户需要安全的车辆

我已经完成了我需要的工作:

  • 扩展Vehicle和Customer的域对象以反映这些特性
  • 扩展输入XML,使至少有一个安全的车辆和一个需要安全收集的客户
  • 扩展vehicleRoutingScoreRules.drl以添加具有硬约束的新规则“安全”
这有点可悲——但我被时间所迫,drools手册非常庞大,我无法理解我认为是一条简单规则的语法。请给我一杯开胃酒好吗

成功了

我已经做了以下工作:

  • 扩展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