diet4.py#

#!/usr/bin/env python3.11

# Copyright 2025, Gurobi Optimization, LLC

# Read diet model data from an Excel spreadsheet (diet.xlsx).
# Pass the imported data into the diet model (dietmodel.py).
#
# Note that this example reads an external data file (..\data\diet.xlsx).
# As a result, it must be run from the Gurobi examples/python directory.
#
# This example uses Python package 'openpyxl', which isn't included
# in most Python distributions.  You can install it with
# 'pip install openpyxl'.

import os
import openpyxl
import dietmodel

# Open 'diet.xlsx'
book = openpyxl.load_workbook(os.path.join("..", "data", "diet.xlsx"))

# Read min/max nutrition info from 'Categories' sheet
sheet = book["Categories"]
categories = []
minNutrition = {}
maxNutrition = {}
for row in sheet.iter_rows():
    category = row[0].value
    if category != "Categories":
        categories.append(category)
        minNutrition[category] = row[1].value
        maxNutrition[category] = row[2].value

# Read food costs from 'Foods' sheet
sheet = book["Foods"]
foods = []
cost = {}
for row in sheet.iter_rows():
    food = row[0].value
    if food != "Foods":
        foods.append(food)
        cost[food] = row[1].value

# Read food nutrition info from 'Nutrition' sheet
sheet = book["Nutrition"]
nutritionValues = {}
for row in sheet.iter_rows():
    if row[0].value == None:  # column labels - categories
        cats = [v.value for v in row]
    else:  # nutrition values
        food = row[0].value
        for col in range(1, len(row)):
            nutritionValues[food, cats[col]] = row[col].value


dietmodel.solve(categories, minNutrition, maxNutrition, foods, cost, nutritionValues)