1

私は optaplanner を使用して、ユーザーがアイテムのリスト (ショッピング カートなど) を購入するための最適な割引を計算するのに役立てたいと考えています。

これは良いアイデアのように聞こえますか?試した人いますか?どんな助けでも大歓迎です。

検討:

  • 多数の異なるアイテムを購入したいユーザーがいます
  • この顧客には、次のような多数のプロモーション割引があります: パーセンテージ ディスカウントと、多数のアイテムで 1 つ購入するともう 1 つ無料

    -

  • 各割引は一部の商品にのみ適用される場合があります
  • 各アイテムに適用できるプロモーションは 1 つだけです
  • ただし、各プロモーションは複数のアイテムに適用される場合があります。複数の商品に同じ割引率が適用される場合があります
  • 各プロモーションを異なる注文に適用すると、合計割引額が異なる場合があります

目標: 特定の順序で適用されたどのプロモーションがユーザーに最大の割引を提供するかを特定したいと考えています。

drools-expert (ブルート フォース オプションを考慮) と optaplanner の両方を調べました。optaplanner を使用すると、次のことができる方法がわかりません。

  • プロモーションが複数のアイテムに適用される場合があることを考慮してください
  • プロモーションから得られる割引は、適用時のバスケットの状態 (つまり、どのプロモーションが既に適用されているか) によって異なる場合があります。
4

1 に答える 1

0

このようなものがうまくいくはずです。これにより、同じプロモーションを複数のアイテムで使用できます。buy-3-get-1 が必要とする厳しい制約を追加する

class ItemAssignment {

  Item item;

  @PlanningVariable(nullable = true, ...)
  Promotion promotion;

}

1 回しか使用できないプロモーションの厳しい制約を追加します。ソフト制約を追加して、3 つのアイテムを購入する必要があるプロモーションを有効にします。そのソフトな制約で insertLogical(new Discount) を実行すると、他のルールは、どのプロモーションが既に適用されているかについて十分にスマートになります。

問題が非常に小さいと仮定して、メタヒューリスティックがこれに最適なアプローチであるかどうかは少し疑問です。誰かが一度に 10 個以上のアイテムを購入しない限り、ブルート フォース (optaplanner に実装されている) または branch&bound (optaplanner にまだ実装されていない) がより良い選択かもしれません...

于 2014-01-24T08:00:20.113 に答える