Я пытаюсь создать модель для работы с проблемой, связанной с проблемой Set Packing.
В этом случае у меня есть параметр nRecipes, который представляет количество рецептов, и другой параметр, называемый nIngred, который представляет количество ингредиентов. Каждый рецепт имеет определенную пищевую ценность, которая представлена параметром значение.
Я хочу выбрать меню, содержащее не более numDishes рецептов, чтобы пищевая ценность меню была максимальной. Еще одно ограничение - каждое выбранное блюдо не содержит ингредиентов других выбранных блюд.
Я пробовал следующее:
int: nRecipes;
set of int: RECIPES = 1..nRecipes;
array[RECIPES] of int: value;
int: nIngred;
set of int: INGREDIENTS = 1..nIngred;
int: numDishes;
array[INGREDIENTS] of set of RECIPES: group;
var set of RECIPES: menu;
array[1..numDishes] of var RECIPES: selected_menu;
constraint menu <= selected_menu; % Error
constraint alldifferent(selected_menu);
solve maximize value;
Пример теста:
nRecipes = 10;
value = [10,8,4,2,6,9,5,3,8,10];
group = [{1,4,6},{1,2,6,7},{1,3,6,8},
{1,2,3},{2,9,10},{5,6,8,10},
{7,8,10},{1,3,5}];
numDishes = 3;
nIngred = 8;
Ожидаемый результат:
Value:20
Recipe:{1,10}