【问题标题】:drools code for score calculation logic分数计算逻辑的drools代码
【发布时间】: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


    【解决方案1】:

    来自the machine reassignment example

    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
    

    【讨论】:

    • 请再看一遍,仔细查看机器重新分配示例和 Drools 规则引擎参考手册中关于规则语言的章节(以及 OptaPlanner 参考手册中的分数计算章节)。
    猜你喜欢
    • 1970-01-01
    • 2012-12-14
    • 2021-12-05
    • 2018-02-16
    • 2014-06-28
    • 2014-01-14
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多