Есть ли в OptaPlanner "встроенный" способ выполнения нормализации нескольких единиц оценки?
На данный момент у моей проблемы четыре метрики. Каждый из них измеряет что-то совершенно другое (у каждого разные единицы, разный диапазон и т. Д.), И каждый имеет внешнюю оценку. Я использую Drools для подсчета очков.
У меня только один балл (SimpleLongScore
), и мне нужно найти способ соответствующим образом объединить отдельные оценки этих показателей в одну long
значение
Самая серьезная проблема на данный момент заключается в том, что диапазон значений показателей может сильно отличаться.
Так, если, например, после хода оценка метрики с небольшим возможным диапазоном улучшается, скажем, на 10%, это может быть полностью затмевается альтернативным ходом, который улучшает метрику с оценкой большего диапазона только на 1%, потому что OptaPlanner учитывает только фактическое значение оценки, а не возможный диапазон значений и то, как изменения влияют на них пропорционально (насколько мне известно).
Итак, есть ли способ справиться с этим чисто, который уже является частью OptaPlanner, который я не могу найти?
Единственно возможное решение для реализации скоринга Парето? Потому что это похоже на хакерский кошмар.
До сих пор у меня есть код / математика для вычисления наилучших и наихудших оценок для метрики, к которой я обращаюсь из Drools, а затем я могу вычислить, где в этом диапазоне нас ставит ход, но это также кажется довольно хакерским и вызовет проблемы с инкрементальной оценкой, если мы хотим нелинейно масштабироваться в этом диапазоне.
Я все время возвращаюсь к мысли, что мне нужно просто перекусить и реализовать систему подсчета очков Парето.
Благодарность!
1 ответ
Взгляни на @ConstraintConfiguration
а также @ConstraintWeight
в документах.
Также обратите внимание на главу "Объяснение оценки", в которой вы можете точно сказать, какое ограничение оказало влияние на найденное лучшее решение.
Если, однако, вам нужна оптимизация Парето, поэтому вам нужно несколько лучших решений, которые не доминируют друг над другом, знайте, что OptaPlanner еще не поддерживает это, но я знаю 2 случая, когда это реализовано в OptaPlanner путем взломаBestSolutionRecaller
.
При этом 99% случаев, которые думают об оптимизации Парето, на 100% удовлетворены @ConstraintWeight
вместо этого, поскольку пользователям не нужно несколько лучших решений (кроме как во время моделирования), им просто нужно одно в производстве.