【发布时间】:2014-08-25 11:19:44
【问题描述】:
我想使用 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代码呢??
我检查了机器重新分配问题的drools文件,但无法将其与我的问题联系起来。
这里 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
【问题讨论】:
标签: drools optaplanner