Optaplanner перемещает заводской порядок итераций для имитации многоэтапного планирования - PullRequest
0 голосов
/ 06 мая 2020

Это продолжение моего предыдущего вопроса

Я работаю над проблемой планирования, включающей:

  • набор объектов планирования, каждая из которых содержит переменная планирования A
  • глобальная переменная планирования B (содержится в решении по планированию)

Хотя мой вариант использования не имеет ничего общего с финансами, он очень похож на инвестиции optaplanner пример.

Переменная планирования A представляет распределение некоторых ресурсов между единицами. Существует заданное, статическое c количество ресурсов, которые должны быть выделены, поэтому я реализовал настраиваемые ходы, чтобы гарантировать, что ходы распределения поддерживают игру с нулевой суммой .

Ключевое отличие заключается в том, что A не представляет собой коэффициент распределения, а представляет собой абсолютное значение. Последнее имеет значение при вычислении оценки решения.

Таким образом, абсолютное значение выделяемого бюджета ресурсов является релевантным планирующим объектом. И этап B моего решения по планированию - это исследование того, могут ли вариации общего бюджета ресурсов привести к более выгодным решениям.

Я не хочу менять B, одновременно оптимизируя A, так как я чувствую, что выбор перемещений связан с разными динамиками c (A, B) комбинации нельзя просто сравнить. Размер области поиска также может увеличиваться ...

Мне посоветовали реализовать эту двухэтапную оптимизацию либо как два решателя, каждый из которых взаимодействует с другим, либо как одну «большую» задачу планирования с несколькими объектами.

Я рассматриваю второй подход с настраиваемыми ходами, как рекомендовано. У меня уже есть MoveFactories для создания ходов для переменной планирования A при сохранении игры с нулевой суммой. Я думаю, что мог бы создать другие MoveFactories, которые начинаются с одного движения на B, а затем с последовательности ходов A. Но как мне объединить эти фабрики?

Кажется, unionMoveSelector будет выбирать ходы из своих дочерних фабрик и смешивать их, чтобы найти решение. Я хочу, чтобы решатель «следовал» за последовательностью ходов, возвращаемой его выбранной в данный момент фабрикой.

Это то, для чего нужен ORIGINAL selectionOrder?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...