首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Optaplanner分数计算类型问题

Optaplanner分数计算类型问题
EN

Stack Overflow用户
提问于 2020-10-10 02:19:48
回答 1查看 92关注 0票数 0

解决对OptaPlanner使用的疑问。OptaPlanner使用下列分数计算类型:Drools、分数计算或约束流分数计算。这两种方法都支持分数的增量计算。对分数的增量计算有一个疑问:

演示:

代码语言:javascript
复制
import org.optaplanner.examples.cloudbalancing.domain.CloudBalance;
import org.optaplanner.examples.cloudbalancing.domain.CloudComputer;
import org.optaplanner.examples.cloudbalancing.domain.CloudProcess;

global HardSoftScoreHolder scoreHolder;

// ############################################################################
// Hard constraints
// ############################################################################

rule "requiredCpuPowerTotal"
    when
        $computer : CloudComputer($cpuPower : cpuPower)
        accumulate(
            CloudProcess(
                computer == $computer,
                $requiredCpuPower : requiredCpuPower);
            $requiredCpuPowerTotal : sum($requiredCpuPower);
            $requiredCpuPowerTotal > $cpuPower
        )
    then
        scoreHolder.addHardConstraintMatch(kcontext, $cpuPower - $requiredCpuPowerTotal);
end

假设建立了

  1. 条件,然后执行逻辑,并添加硬分数,假设-100.

此时,

  1. 已经更改了CloudProcess解决方案。CloudComputer减少了一些CloudProcess接收,使其不会超过此计算机CloudComputer的cpu限制。此条件不适用。

我的问题是

  1. 如果第一次满足该条件,计算机A会将2个线程分配给一台总共有4个核心CPU的计算机,但是第一次计算机A有两个核心,所以这一次的解决方案是硬-100的负分数。
  2. 第二个程序A计算机分配一个线程,如果不满足当前条件,则负分数不会增加。结果是0。问题: 1.但是如何删除以前的负面分数?
  3. 还是意味着该分数将被重新计算?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-14 08:33:25

  1. 以前的负数将被删除,因为addHardConstraintMatch()正在执行一些黑魔法:它注册了一个规则不匹配的侦听器,以便在分数不再匹配时撤销该负数添加。

  1. scoreDRL是增量式的,因此只有分数变化的增量才会被重新计算。

PS:看看ConstraintStreams,它们也是增量式的:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64289357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档