購入したい商品のリストがあります。アイテムは、さまざまなショップとさまざまな価格で提供されています。ショップには個別の配送料がかかります。最小限の合計価格ですべてのアイテムを購入するための最適なショッピング戦略(およびそれをサポートするJavaライブラリ)を探しています。
例:
- Item1はShop1で$100、Shop2で$111で提供されます。
- Item2はShop1で$90、Shop2で$85で提供されます。
- Shop1の配送料1:注文総額が150ドル未満の場合は10ドル。それ以外の場合は$0
- Shop2の配送料:注文合計が$50未満の場合は$5。それ以外の場合は$0
- Shop1でItem1とItem2を購入した場合、合計費用は$ 100 + $ 90 + $ 0 =$190になります。
- Shop2でItem1とItem2を購入した場合、合計費用は$ 111 + $ 85 + $ 0 =$196です。
- Shop1でItem1を購入し、Shop2でItem2を購入した場合、合計コストは$ 100 + $ 10 + $ 85 + $ 0=195になります。
Shop1でItem1とItem2を注文すると、最低価格が表示されます:$ 190
これまでに試したこと
その前に別の質問をしたところ、制約プログラミングの分野にたどり着きました。クリームとチョコを見てみましたが、問題を解決するためのモデルの作り方がわかりませんでした。
| shop1 | shop2 | shop3 | ...
-----------------------------------------
item1 | p11 | p12 | p13 |
item2 | p21 | p22 | p23 |
. | | | |
. | | | |
-----------------------------------------
shipping | s1 | s2 | s3 |
limit | l1 | l2 | l3 |
-----------------------------------------
total | t1 | t2 | t3 |
-----------------------------------------
私のアイデアは、これらの制約を定義することでした。
- 各価格「pxy」はドメイン(0、c)で定義されます。ここで、cはこのショップの商品の価格です。
- 1行の1つの価格のみがゼロ以外である必要があります
- 1つのショップで1つ以上の商品を購入し、価格の合計が制限を下回っている場合は、合計費用に送料を追加します。
- ショップの総費用は、ショップ内のすべてのアイテムの価格の合計です。
- 総費用は、すべてのショップの合計の合計です
目的は「総コスト」です。これを最小限に抑えたい。
クリームでは、条件付き送料の「ifthen」制約を表現できませんでした。
チョコにはこれらの制約がありますが、5つのアイテムと10のショップでさえ、プログラムは解決策を見つけることなく10分間実行されていました。
質問
この問題を制約プログラミングソルバーで解決できるようにするには、制約をどのように表現すればよいですか?