Optaplanner计算最佳折扣



我希望使用optaplanner来帮助用户购买商品列表的最佳折扣(例如,购物车)。

这听起来像是个好主意吗?有没有尝试过?任何帮助将不胜感激。

考虑:

  • 我有一个用户想要购买许多不同的项目
  • 该客户提供了许多促销折扣,包括:百分比折扣和许多物品上的一项购买

    -

  • 每个折扣只能适用于某些项目
  • 每个项目只能应用一个促销
  • 但每个促销活动都可以应用于多个项目。多个项目可以使用相同的百分比折扣
  • 以不同的订单应用每个促销活动可能会导致不同的总折扣

目标:我想确定以一定顺序应用的促销活动将为用户提供最大的折扣。

我已经研究了Drools-expert(考虑到蛮力选项)和optaplanner。使用OptaPlanner,我看不到如何执行以下操作:

  • 考虑到促销可能适用于多个项目
  • 从促销中获得的折扣可能会有所不同,具体取决于篮子的状态(即应用哪些促销活动)。

类似的东西应该起作用。它允许在多个项目上使用相同的促销活动。添加一个硬性约束,即Buy-3-Get-1需要

class ItemAssignment {
  Item item;
  @PlanningVariable(nullable = true, ...)
  Promotion promotion;
}

为促销活动添加一个硬约束,只能使用一次。添加软限制以激活需要购买3个项目的促销活动。我在该软限制中进行插入术(新折扣),因此其他规则可以变得足够聪明,以至于已经应用了哪些促销活动。

我是否有点怀疑元启发式学是最好的方法,认为您的问题很小。除非有人一次购买10个以上的商品,否则我认为Brute(在Optaplanner中实施)或Branch& Bound(尚未在Optaplanner中实施)可能是一个更好的选择...

最新更新