2017-11-23 6 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