この「買い物かご」の最適化問題の正しい定式化とは何ですか。どうすれば効率的に解決できますか?


8

次の問題の解決策を探していますが、賢明にそれを定式化し、それを解決するための適切なアルゴリズムを見つけるのに苦労しています。

ショッピングバッグに入れられたアイテムのリストを考えてみましょう:1、2、3、4 ...

各アイテムは、1つ以上のプロモーションの一部にすることができます:A、B、C、D

割引の価値を最大化するように、プロモーションのセットを適用します。アイテムは複数のプロモーションに参加できませんが、各プロモーションは複数回適用できます。

プロモーションはさまざまな方法で定義できますが、今のところ、「2つの対象アイテムを購入してXを節約」というタイプを検討しているだけなので、ここから一般化できると期待しています。

私の例は:

  • プロモーションA-購入2割引8
  • プロモーションB-購入2割引10
  • プロモーションC-購入2保存6

  • アイテム1-A、Bの対象

  • 項目2-Bの対象
  • 項目3-A、Cの対象
  • アイテム4-B、Cの対象

プロモーションの正しい適用は、アイテム1に対して3、Bに対して2、4であることが簡単にわかります。これにより、合計で18割引になります。

大きなケースでは困難になるため、アルゴリズム的に解決する必要があります。

私は以下を試しました:

  1. 適用可能なプロモーションの可能な組み合わせをすべてリストアップしてください。
  2. 明らかに貧弱なものはすべて破棄します(例:値の高いプロモーションの直接コピー)。
  3. 他のプロモーションと重複しないものを適用します(たとえば、アイテム1と2がプロモーションAに対してのみ有効である場合、そのプロモーションを適用します)。
  4. 残りのセットを取得し、結果に対してブランチアンドバウンドタイプの検索を試みます。

ただし、これには時間がかかる場合があります(同様の割引のある大規模なセットの場合)。

これは一種のナップザックまたは割り当て問題だと思いますが、私はそれを賢く書くことができません。うまく書けなくては解決できません。

これは問題の認識されたバリアントですか?特にそれを解決するのに役立つ擬似コードでそれを攻撃する助けは大歓迎です


2
データは2部グラフとして表すことができます。各プロモーションが最大で1回のみ適用される場合、それは非常によく理解されている最大重み2部グラフマッチングの問題になります。だからあなたが望むのは、その問題のリラックスした形だと私は思う。これは、文献から何かを見つけるのに役立つ場合があります。
仮名

それでは、今のところ、各プロモーションは1回だけ適用できると仮定した場合、どのようにグラフを形成しますか?いくつかの方法を試しましたが、有効であると見なされた場合にのみプロモーションの適用を許可するための制約を維持する方法がわかりません。
James Osborn 2013年

この問題を0-1整数プログラムとして形成し、オープンソースまたは商用ソルバーを使用して、より大きなバージョンの問題に取り組むことができます。
Aron Ahmadia 2013年

1
@James Osborn:すべてのプロモーションとすべてのアイテムの間にエッジがある二部グラフを考えてみましょう。そのプロモーションをそのアイテムに適用することが有効な場合、エッジの重みが「ゲイン」になります。それ以外の場合、エッジの重みはゼロです。次に、最大の重みの一致を見つけ、重みがゼロのエッジをすべて破棄します。基本的に、あなたは一致を起こさせますが、それによって何も得られないことを最適化アルゴリズムに明確にします。
仮名

これまでのご協力に感謝します。まだ解決策を検討する機会はあまりありませんでしたが、検討するのに適した場所がいくつか与えられました。
James Osborn 2013年

回答:


1

アイテムは1つのプロモーションにしか使用できないという問題の構造を利用したいと思うかもしれません。つまり、できるだけ多くのプロモーションを使用するソリューションを見つけた場合、より良い方法は、1つ以上のプロモーションと未割り当てのアイテムを取り、それらを別のプロモーションと未使用のアイテムのセットと交換する別のソリューションを見つけることです。より高い価値の。

たとえば、前の例を(1,2)と(3,4)で16に対して開始します。次に、(1,3)と(2,4)が18につながることを確認できます。スワップは製。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.