デカルト積を計算するためのより良い方法はありますか?デカルト積は特殊なケースであるため、ケースごとに異なります。何を達成する必要があるのか、なぜデカルト積を実行するのかを説明する必要があると思います。デカルト積が私の問題の唯一の解決策である場合は、私を助けてください。もしそうなら、どのようにパフォーマンスを向上させるのですか?
バックグラウンド:
私たちは、お客様がより安く製品を購入できるように支援しようとしています。
顧客が5つの製品(prod1、prod2、prod3、prod4、prod5)を注文したとします。
注文した各製品は、さまざまなベンダーから提供されています。
表現形式1:
- ベンダー1-prod1、prod2、prod4を提供します
- ベンダー2-prod1、prod5を提供します
- ベンダー3-prod1、prod2、prod5を提供
- ベンダー4-prod1を提供
- ベンダー5-prod2を提供
- ベンダー6-prod3、prod4を提供
言い換えると
表現形式2:
- 製品1-vendor1、vendor2、vendor3、vendor4によって提供されます
- 製品2-vendor5、vendor3、vendor1によって提供されます
- prod3-vendor6が提供
- 製品4-vendor1、vendor6によって提供されます
- 製品5-vendor3、vendor2によって提供されます
次に、価格に基づいて最適なベンダーを選択します。価格で商品を並べ替えて、最初の商品を購入することができます。
その場合、
- ベンダー1の製品1
- ベンダー5の製品2
- ベンダー6の製品3
- ベンダー1の製品4
- ベンダー3の製品5
複雑:
4つのユニークなベンダーを選んだので、4つの送料を支払う必要があります。
また、各ベンダーには最小の発注書があります。それを満たさない場合は、その料金も支払うことになります。
製品の最適な組み合わせを選択するには、提供された製品のデカルト積を使用して合計価格を計算する必要があります。
total price computation algorithm:
foreach unique vendor
if (sum (product price offered by specific vendor * quantity) < minimum purchase order limit specified by specific vendor)
totalprice += sum (product price * quantity) + minimum purchase charge + shipping price
else
totalprice += sum (product price * quantity) + shipping price
end foreach
私たちの場合には
- {vendor1、vendor2、vendor3、vendor4}
- {vendor1、vendor3、vendor5}
- {vendor6}
- {vendor1、vendor6}
- {vendor2、vendor3}
4 * 3 * 1 * 2 * 2 = 48の組み合わせを計算して、最適な組み合わせを見つける必要があります。
- {vendor1、vendor1、vendor6、vendor1、vendor2} = totalprice1
- {vendor1、vendor3、vendor6、vendor1、vendor2} = totalprice2、
-
*
- {vendor4、vendor5、vendor6、vendor6、vendor3} = totalprice48
次に、計算された合計価格を並べ替えて、最適な組み合わせを見つけます。
実際の問題:
顧客が15を超える製品を注文し、各製品が8つの固有のベンダーによって提供されていると仮定すると、8 ^ 15 = 35184372088832の組み合わせを計算することになり、数時間以上かかります。顧客が20を超える製品を注文した場合、数日以上かかります。
この問題に別の角度で取り組むための解決策はありますか?