Я хочу запланировать события с помощью 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;
}
Это работает, но медленно, я хочу получить эквивалентный код слюни для этой логики расчета мягких оценок.
Так как же написать для этого код слюни ??
Я проверил файл слюни о проблеме переназначения машины, но не смог связать его с моей проблемой.
Здесь Event - это объект моего планирования, а EventDate - переменная планирования.
Я пишу правило слюни вроде:
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