def add_calorie_count_constraint(self, csp): varsList = [] for req in self.profile.requests: for meal in self.profile.meals: var = (req.rid, meal) csp.add_variable(var, [0,req.getCalorieCount()]) varsList.append(var) csp.add_binary_factor((req, meal), var, lambda taken1, calorieCount: calorieCount > 0 if taken1 else calorieCount == 0 ) util.get_sum_variable(csp, "total", varsList, self.profile.maxTotalCalories)
def add_ingredient_quantity_constraint(self, csp): for ingred in self.profile.availableIngreds: varsList = [] for req in self.profile.requests: if req.getIngredients()[ingred] > 0: for meal in self.profile.meals: var = (req.rid, meal, ingred) if ingred in req.getIngredients(): csp.add_variable(var, [0,req.getIngredients()[ingred]]) else: csp.add_variable(var, [0]) varsList.append(var) csp.add_binary_factor((req, meal), var, lambda taken1, ingredQty: ingredQty > 0 if taken1 else ingredQty == 0 ) util.get_sum_variable(csp, ingred + "total", varsList, self.profile.availableIngreds[ingred])
def add_salary_constraints(csp, players): sum_var = util.get_sum_variable(csp, "salary", positions, TOTAL_SALARY_LIMIT + 1, players) csp.add_unary_factor(sum_var, lambda x: x <= TOTAL_SALARY_LIMIT) print "Finished adding salary constraints"