OptaPlanner 是否能够模拟随机程序?

Is OptaPlanner able to model stochastic programs?

在工作中,我们正在努力优化生产的商品数量以满足不确定的需求。通过分析之前发生的需求,我们知道需求的概率分布。

用数学术语来说,这个问题是一个多阶段随机整数规划。我们现在正在研究 OptaPlanner 来解决它。但是,OptaPlanner 似乎没有提供建模和解决此类问题的能力。一种可能是将程序转化为确定性问题,这可能是可以解决的,但这将花费很多时间来转换和解决。

所以我们的问题是:OptaPlanner能否对这类问题进行建模并高效解决?

这些用例不是开箱即用的示例,也不是经过充分研究的,但是使用一些自定义代码是可能的:

  • OptaPlanner 可以在任何分数计算函数之上进行优化。 唯一真正的要求是它 returns 一个 Score,本质上是一个 Comparable.
  • 您可以定义自定义 Score(请参阅文档),但在下面的示例中,我将使用标准 HardSoftScore 就可以了。一个HardSoftScore基本上就是2个int变量。

例如,假设下雨的概率是:星期一 50%,星期二 10%,星期三 20%。现在假设我们有车辆路线问题,需要在那一周运送 100 个包裹,有 2 辆卡车:卡车 A 可以运载 20 个包裹并且不受雨水影响,卡车 B 可以运载 40 个包裹但受雨水影响:雨水造成它的维护成本和 1 周内太多的雨水打破了它。

现在我们可以编写一个分数计算函数,在我们的分数规则中考虑这些因素:

  • 当B上积雨的概率"sum"过高时,hard score降低多少太多(所以方案不可行)
  • 使用 B 时下雨的概率会造成软成本(=> 降低软分数)
  • 使用 A 或 B 会造成每行驶距离的软成本

也就是说,OptaPlanner 不提供任何概率算术方法,例如求和概率(这是不平凡的)。但是,您可以插入任何提供该功能的 Java 框架,为 drools DRL 调用这些函数。此外,drools-chance 本来应该提供这一点,但该项目目前处于非活动状态(但迟早我们会重新启动它)。

这是一个使用 OptaPlanner 进行随机优化的示例:Investment Portfolio Optimization