Разрешите сомнения по поводу использования OptaPlanner. OptaPlanner использует следующие типы подсчета баллов: Расчет баллов слюни или расчет баллов для потоков ограничений. Оба метода поддерживают инкрементный подсчет баллов. Одно сомнение по поводу инкрементального подсчета баллов:
Демо:
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.
На данный момент решение CloudProcess было изменено. CloudComputer сократил часть приема CloudProcess, чтобы он не превышал лимит ЦП этого компьютера CloudComputer. Это условие не выполняется.
Мои вопросы:
- Если условие выполняется в первый раз, компьютер A выделяет 2 потока компьютеру с 4 ядерными процессорами, но первый раз компьютер A имеет 2 ядра, поэтому на этот раз решение представляет собой отрицательную оценку -100.
- Вторая программа Компьютер выделяет 1 поток, если текущие условия не выполняются, отрицательная оценка не будет увеличиваться. Результат жесткий 0. Вопросы: 1. А как удалили предыдущую отрицательную оценку?
- Или это означает, что оценка будет пересчитываться при каждом новом решении?