2017-11-23 3 views
2

私はMinizincからちょうど始まりました。私はアイテムの組み合わせを得ることができます

は、私は、ほとんどの100 $で過ごす提供しています高々4 GROUPを購入したいと私はすべてのグループから 一つだけのアイテムを購入することができます:

は、どのように私は次の制約を書くことができます。品質を最大化する。

int: items = 10; 
set of int: GROUPS = 0..itms; 
set of int: PRODUCTS = 1..7; 

set of int:BUYS = 1..4; 
int : max_spent = 100; 

array[GROUPS] of set of int : package = array1d(GROUPS,[{},{1,2,3},{4,7},{3,6},{1,4,5},{3,4,7},{1,2,5},{4,6},{3,7},{3,7,5},{2,3}]); 
array[GROUPS] of int: package_price = array1d(GROUPS,[0,5,5,25,10,12,20,40,55,52,10]); 
array[GROUPS] of int: package_quality = array1d(GROUPS,[0,7,2,7,2,3,5,4,9,6,5]); 

所望の出力のようなものでなければなりません:---

{3,7} {4,6} {1,2,5} {} 
quality = 10; 
price = 97; 

---更新

は、これまで私が試した:

var int : will_buy; 
will_buy = sum(i in BUYS)(package_price[i]); 
constraint will_buy <= max_spent; 

var int : quality; 
quality = sum(i in GROUPS)(package_quality[i]); 

array[GROUPS] of var BUYS: index; 
include "element.mzn"; 
constraint forall(t in GROUPS) 
      ( 
      element(index[t], package_price, package_price[t]) 
      /\ 
      element(index[t], package_quality, package_quality[t]) 
      ); 

:/

+1

あなたはこれまで何をしていますか?あなたがあなたの解決策を示すなら、私たちはあなたを助けるかもしれません。 – hakank

答えて

2

あなたの問題は、よく知られているナップザック問題のバリエーションです。この問題に対する解決策は、MiniZinc tutorialの3.6章に記載されています。ナップザックモデルのMiniZincモデルを理解することで、この問題を解決するためのガイドが得られます。

また、global packing constraintsを見ると、モデリングが楽になる場合があります。

+1

ありがとうDeker。 MZチュートリアルには2.6がありません。それは2.5で終わります。あなたは3.6を意味しますか? – Antonis

関連する問題