当前位置: 首页 > 知识库问答 >
问题:

Optaplanner得分计算类型问题

关宏毅
2023-03-14

解决Optaplanner使用中的疑点。OptaPlanner使用以下分数计算类型:Drools分数计算或约束流分数计算。两种方法都支持分数的增量计算。分数增量计算的一个疑点:

演示:

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

>

  • 假设requiredCpuPowerTotal条件成立,则执行then逻辑,并添加硬分数,假设为-100。

      null
  • 共有1个答案

    充修能
    2023-03-14

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

    scoreDRL是增量的,因此只会重新计算分数变化的增量。

    ps:也看看约束流,它们也是增量的:)

     类似资料:
    • 在这一点上,如果你有兴趣像MPL一样进行类型计算,你可能会想知道Hana如何帮助你。不用担心,Hana提供了一种通过将类型表示为值来执行具有大量表达性的类型计算的方法,就像我们将编译时数字表示为值一样。 这是一种全新的接触元编程的方法,如果你想熟练使用Hana,你应该尝试将你的旧MPL习惯放在一边。 但是,请注意,现代C++的功能,如自动推导返回类型,在许多情况下不需要类型计算。 因此,在考虑做一

    • 如何使用约束流api计算员工的公平性。 https://www.optaplanner.org/blog/2017/02/03/FormulaForMeasuringUnfairness.html 我在网球求解器示例中看到了上述流口水的实现。 https://github.com/kiegroup/optaplanner/blob/581d10fb8140f37b7491d06b2bab8d5ac

    • 我想用Optaplanner解决VRP问题(添加一些内容)。在文档中,人们经常说,预先计算位置之间的距离,然后对每个位置使用

    • 问题内容: 我有一个数据框,其中包含一列ID,其他所有列都是我要为其计算z分数的数值。这是它的一个小节: 我的某些列包含不希望包含在z分数计算中的NaN值,因此我打算使用提供给此问题的解决方案:如何使用nans将zscore归一化熊猫列? 我有兴趣将此解决方案应用于除ID列之外的所有列,以生成新的数据框,我可以使用以下格式将其另存为Excel文件: 所以基本上 如何计算每列的z分数(忽略NaN值)

    • 如题,数据库中的数据为了保证精度,使用 Decimal 类型存储, 前端需要使用此数据绘制图表,其中有平均值等计算需求。 但是 js 并没有办法准确的表示 Decimal 类型,如果直接使用 parseFloat 转为 number 类型,恐怕会有精度丢失的问题,类似这种问题,请问一般是怎么解决的? 我使用 ECharts 绘制图表。