解决对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假设建立了
。
此时,
我的问题是
发布于 2020-10-14 08:33:25
addHardConstraintMatch()正在执行一些黑魔法:它注册了一个规则不匹配的侦听器,以便在分数不再匹配时撤销该负数添加。PS:看看ConstraintStreams,它们也是增量式的:)
https://stackoverflow.com/questions/64289357
复制相似问题