Я работаю над такой проблемой, как CloudBalancing с OptaPlanner 7.33.0.
Возвращенный объект PlanningSolution содержит наилучший расчетный показатель, но решение не соответствует. Я отладил все решения с очень маленьким набором данных, и возвращенное решение кажется последним, так как оно не имеет возвращенного результата.
Пример:
- 1: Решение с наилучшей оценкой имеет оценку 0hard / -1197medium / 4soft
- 2: Возвращенное решение имеет оценку: 0hard / -1198medium / 2soft
- Решатель возвращает объект PlanningSolution с оценкой решения 1, но с содержанием решения 2
Это мой класс решения планирования
@PlanningSolution
public class GroupSolution
{
@PlanningEntityCollectionProperty
private List<Request> request;
@ValueRangeProvider(id = "groupRange")
@ProblemFactCollectionProperty
private List<Group> proposedGroups;
@PlanningScore
private HardMediumSoftScore score;
// Others planning fact that I use in my EasyScoreCalculator
}
Класс запроса
@PlanningEntity
public class Request
{
@PlanningVariable(valueRangeProviderRefs = {
"groupRange"
}, nullable = false)
private Group group;
// Other properties
}
Конфигурация
<?xml version="1.0" encoding="UTF-8"?>
<solver>
<scanAnnotatedClasses>
<packageInclude>my.package.domain</packageInclude>
</scanAnnotatedClasses>
<!-- Score configuration -->
<scoreDirectorFactory>
<initializingScoreTrend>ONLY_DOWN</initializingScoreTrend>
<easyScoreCalculatorClass>my.package.MyEasyScoreCalculator</easyScoreCalculatorClass>
</scoreDirectorFactory>
<constructionHeuristic />
<termination>
<minutesSpentLimit>5</minutesSpentLimit>
</termination>
</solver>
Я использую EasyScoreCalculator с 3 уровнями оценки и использую их следующим образом:
- hard: я только установил 0 или -1. если -1 я не называю c, другие оценивают как -1, значит, решение не применимо
- средний: цена, например, если решение стоит 100 евро, мой средний балл будет -100
- soft: если 2 цены одинаковы, я использую этот показатель, чтобы предпочесть решение с более пустой группой (наибольшее количество запросов на группу). Эта оценка никогда не бывает отрицательной
Я буду продолжать расследование по этому вопросу, но если у вас есть какие-либо предложения, чтобы получить правильный результат, вы можете сказать мне.
Но главный вопрос, сделать Вы знаете, нормальное ли это поведение OptaPlanner или нет? Если это нормально, то в каком случае он вернет несоответствующий счет и решение?