set NUTR; set FOOD; param cost {FOOD} > 0; param f_min {FOOD} >= 0; param f_max { f in FOOD} >= f_min[f]; param n_min { NUTR } >= 0; param n_max {n in NUTR } >= n_min[n]; param amt {NUTR,FOOD} >= 0; param inf; # used to diagnose infeasibility var Buy { f in FOOD} >= f_min[f], <= f_max[f]; minimize total_cost: sum { f in FOOD } cost [f] * Buy[f]; subject to diet { n in NUTR }: n_min[n] <= sum { f in FOOD} amt [n,f] * Buy[f] <= n_max[n];