@ Ханед, самый простой способ сделать то, что ты хочешь, это настроить два экземпляра задачи.Один будет иметь мясные блюда, а другой - вегетарианские.Используйте каждый в разные дни.Вы можете чередовать начальную проблему для каждой недели, в которую вы хотите запустить план, чтобы получить двухнедельный план питания.
Вы можете настроить решатели следующим образом:
prob1 = LpProblem("Simple Diet Problem Meat Day",LpMinimize)
prob2 = LpProblem("Simple Diet Problem Vegetarian Day",LpMinimize)
#create data variables and dictionary
day1_df = df[df['Food_Groups'] != 'vegetarian']
day1_items = list(day1_df['name'])
day1_calories = dict(zip(day1_items,day1_df['energy']))
day1_sugars = dict(zip(day1_items,day1_df['sugar']))
day2_df = df[df['Food_Groups'] != 'Meat']
day2_items = list(day2_df['name'])
day2_calories = dict(zip(day2_items,day2_df['energy']))
day2_sugars = dict(zip(day2_items,day2_df['sugar']))
# variables
day1_vars =LpVariable.dicts("Food",day1_items,lowBound=0,cat='Integer')
day2_vars =LpVariable.dicts("Food",day2_items,lowBound=0,cat='Integer')
#Building the LP problem by adding the main objective function.
prob1 += lpSum([day1_sugars[i]*day1_vars[i] for i in day1_items])
prob2 += lpSum([day2_sugars[i]*day2_vars[i] for i in day2_items])
Если вы по-прежнемуЧтобы отображать варианты, которые вы не выбираете между мясными и вегетарианскими, во все дни, вам нужно создать более сложную модель с ограничениями, указав food_vars для этих элементов, равных нулю.
Решите обе проблемы по одному.
Затем назначьте каждому дню недели одну из проблем в списке, например:
days = [('Monday', prob1), ('Tuesday', prob2), ...]
Затем выполните циклическое переключение по дням и напечатайте переменные, как вы уже сделали.
for day, prob in days:
print(day)
print("Therefore, the optimal balanced diet consists of\n"+"-")
for v in prob.variables():
if v.varValue:
print(v.name , "=", v.varValue)
print("The total sugar of this balanced diet is: {}\n\n".format(round(value(prob.objective),2)))