запуск примера ProjectJobScheduling с конфигурацией drl, кажется, занимает на несколько порядков больше времени, чтобы прийти к реальному решению.Для версии "ProjectJobSchedulingIncrementalScoreCalculator" он находит выполнимое решение сложной примерной проблемы за пару минут, версия drl не находит ее за два часа.
Есть ли способ сделать версию drl пригодной для использованияили этот тип проблемы требует добавочного значения java?
Единственное изменение, которое я сделал, это:
<scoreDirectorFactory>
<!--<incrementalScoreCalculatorClass>org.optaplanner.examples.projectjobscheduling.solver.score.ProjectJobSchedulingIncrementalScoreCalculator</incrementalScoreCalculatorClass>-->
<scoreDrl>org/optaplanner/examples/projectjobscheduling/solver/projectJobSchedulingScoreRules.drl</scoreDrl>
</scoreDirectorFactory>
РЕДАКТИРОВАТЬ: комментирование правила с помощью insertLogical увеличило оценку / спримерно в 20 раз для проблемы, которую я использовал.
Итак, я попробовал несколько вариантов, которые не используют insertLogical, каждый с одним правилом, чтобы заменить два, которые я удалил (правило вставки инакопление вставленного логика) Они были быстрее, но все же непрактично медленны.
«Лучшая» версия drl для меня - это добавить проблемный факт для каждого возможного дня с нуля до истечения срока, но выбираясрок исполнения меняет дело:
rule "renewableResourceCapacity"
salience 3
when
ResourceDay( $day: usedDay)
$resource : Resource(renewable == true, $capacity:capacity)
accumulate(
ResourceRequirement(resource == $resource,
$executionMode : executionMode,
$requirement : requirement)
and Allocation(executionMode == $executionMode, $day >= startDate, $day < endDate);
$used : sum($requirement);
$used > $capacity
)
then
scoreHolder.addHardConstraintMatch(kcontext, 0, $capacity - $used);
end
Самое быстрое решение drl все еще примерно в 100 раз медленнее, чем версия javaGH.И чтобы быть ясным, модифицированный drl примерно в 20 раз быстрее, чем существующий drl, который в 100 раз медленнее, чем java.