分数计算逻辑的drools代码

分数计算逻辑的drools代码,drools,optaplanner,Drools,Optaplanner,我想使用optaplanner安排事件,其中事件所需的资源是一个软约束 我用java代码进行了分数计算,如: int resources = 0; int quantity = 0; for(ResourceAvailability availability : eventDate.getResourceAvailabilities()){ for(ResourceAvailability required : event.getResourceAvailabilities()){

我想使用optaplanner安排事件,其中事件所需的资源是一个软约束

我用java代码进行了分数计算,如:

int resources = 0;
int quantity = 0;
for(ResourceAvailability availability : eventDate.getResourceAvailabilities()){
    for(ResourceAvailability required : event.getResourceAvailabilities()){
         if(availability.equals(required)){
              resources += required.getQuantity();
              quantity += availability.getQuantity();
         }
    }
}
// Soft constraints
int resourcesAvailable = quantity - resources;
if (resourcesAvailable < 0) {
    softScore += resourcesAvailable;
}
发件人:


请再仔细查看机器重新分配示例和Drools规则引擎参考手册中有关规则语言的章节(以及OptaPlanner参考手册中的分数计算章节)。
rule "requiredResources"
    when
        $eventDate : EventDate()
        $requiredResources : Number(intValue > 1) from accumulate(
            Event(
                eventDate == $eventDate,
                //here logic for comparing required and available resource and then find
                //sum of required resources and available resoulces
                //add difference to score
            ),
            sum($quantity)
        )
    then
        System.out.println($requiredResources+$availableResources);
end
rule "machineUsage"
  when
    $machineCapacity : MrMachineCapacity($machine : machine, $resource : resource)
    accumulate(
        $processAssignment : MrProcessAssignment(machine == $machine),
        $usageTotal : sum($processAssignment.getUsage($resource))
    )
  then
    scoreHolder.addHardConstraintMatch($capacity - $usage); // see docs chapter score calculation
end