Способен ли OptaPlanner моделировать стохастические программы?
На работе мы пытаемся оптимизировать количество производимых товаров для удовлетворения неопределенного спроса. Мы знаем распределение вероятности спроса, анализируя спрос, возникший ранее.
С математической точки зрения эта задача представляет собой многоступенчатую стохастическую целочисленную программу. Сейчас мы ищем OptaPlanner, чтобы решить эту проблему. Тем не менее, кажется, что OptaPlanner не предлагает возможность моделировать и решать такого рода проблемы. Одной из возможностей может быть преобразование программы в детерминированную проблему, которая может быть решаемой, но для преобразования и решения потребуется много времени.
Итак, наш вопрос: может ли OptaPlanner моделировать такого рода проблемы и эффективно их решать?
2 ответа
Этот вид использования не является готовым примером и хорошо изучен, но возможен с некоторым пользовательским кодом:
- OptaPlanner может оптимизировать любую функцию подсчета очков. Единственным реальным требованием является то, что он возвращает
Score
что по сутиComparable
, - Вы можете определить пользовательский
Score
(см. документы), но в приведенном ниже примере я буду использовать стандартHardSoftScore
и это будет делать.HardSoftScore
в основном 2int
переменные.
Например, предположим, что вероятность дождя: 50% в понедельник, 10% во вторник, 20% в среду. Теперь предположим, что у нас есть проблема с маршрутизацией транспортных средств, и нам необходимо доставить 100 упаковок в течение этой недели с двумя грузовыми автомобилями: грузовик A, который может перевозить 20 пакетов, и не подвержен влиянию дождя, и грузовик B, который может перевозить 40 пакетов, но подвержен влиянию дождя: дождь причиняет a стоимость обслуживания на нем и слишком много дождя за 1 неделю разбивают его.
Теперь мы можем написать функцию подсчета очков, чтобы учесть это в наших правилах подсчета очков:
- когда "сумма" вероятности накопленного дождя на B слишком велика, уменьшите жесткий балл на сколько слишком много (так что решение неосуществимо)
- вероятность дождя при использовании B приводит к мягким затратам (=> уменьшает мягкие оценки)
- использование A или B накладывает мягкую стоимость на пройденное расстояние
При этом OptaPlanner не предоставляет никаких методов для арифметики вероятностей, например, для суммирования вероятностей (что нетривиально). Однако вы можете подключить любую инфраструктуру Java, которая обеспечивает это, и вызвать эти функции для DRL drools. Более того, предполагалось, что drools-chance предоставит это, но этот проект в настоящее время неактивен (но рано или поздно мы его перезагрузим).
Вот пример стохастической оптимизации с OptaPlanner: Оптимизация инвестиционного портфеля.