我想为每辆车添加一个简单的布尔值,指示车辆是否安全,然后为每个客户添加一个类似的布尔值,表明客户需要一辆安全的车辆。
到目前为止,我需要:
这有点可怜 - 但是我被推了一段时间,流氓手册很庞大,我无法弄清楚我认为是一个简单规则的语法。有些善良的灵魂请给我一个首发。
答案 0 :(得分:2)
搞定了!
我做了以下事情:
扩展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扩展为至少有一个安全Vehicle和一个需要安全集合的Customer。
//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>
扩展vehicleRoutingScoreRules.drl以添加新规则&#34; secure&#34;有一个严格的约束。
rule "securePackage"
when
$customer : Customer(needsSecure == true, vehicle != null, vehicle.isSecure == false)
then
scoreHolder.addHardConstraintMatch(kcontext, -1);
end
一切正常!随着3&#34;安全&#34;总需求的客户=总安全车辆容量我可以看到一辆车(安全车辆)完成了所有3个车辆并且已满。