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