```json
{
  "sym_variables": [
    ("x0", "milligrams of iron"),
    ("x1", "milligrams of vitamin A"),
    ("x2", "milligrams of vitamin B2"),
    ("x3", "milligrams of vitamin B7"),
    ("x4", "grams of carbohydrates"),
    ("x5", "grams of fat"),
    ("x6", "milligrams of magnesium"),
    ("x7", "grams of fiber"),
    ("x8", "milligrams of zinc")
  ],
  "objective_function": "3*x0 + x1 + 3*x2 + 4*x3 + 2*x4 + 6*x5 + 6*x6 + 9*x7 + 2*x8",
  "constraints": [
    "11.61*x2 + 1.89*x3 >= 89",
    "12.82*x0 + 11.61*x2 >= 74",
    "1.89*x3 + 5.7*x6 >= 103",
    "3.19*x4 + 6.44*x5 >= 100",
    "11.61*x2 + 1.89*x3 + 14.7*x8 >= 73",
    "11.61*x2 + 3.19*x4 + 6.22*x7 >= 73",
    "11.61*x2 + 3.19*x4 + 6.44*x5 >= 73",
    "12.82*x0 + 6.44*x5 + 14.7*x8 >= 73",
    "10.4*x1 + 11.61*x2 + 1.89*x3 >= 73",
    "12.82*x0 + 1.89*x3 + 5.7*x6 >= 73",
    "12.82*x0 + 10.4*x1 + 6.22*x7 >= 73",
    "10.4*x1 + 1.89*x3 + 5.7*x6 >= 73",
    "11.61*x2 + 5.7*x6 + 6.22*x7 >= 73",
    "12.82*x0 + 6.22*x7 + 14.7*x8 >= 73",
    "1.89*x3 + 6.44*x5 + 5.7*x6 >= 73",
    "1.89*x3 + 6.44*x5 + 14.7*x8 >= 73",
    "10.4*x1 + 3.19*x4 + 6.22*x7 >= 73",
    "10.4*x1 + 11.61*x2 + 3.19*x4 >= 73",
    "12.82*x0 + 3.19*x4 + 5.7*x6 >= 73",
    "11.61*x2 + 1.89*x3 + 6.44*x5 >= 73",
    "11.61*x2 + 1.89*x3 + 5.7*x6 >= 73",
    "11.61*x2 + 3.19*x4 + 5.7*x6 >= 73",
    "10.4*x1 + 11.61*x2 + 6.44*x5 >= 73",
    "10.4*x1 + 6.44*x5 + 5.7*x6 >= 73",
    "12.82*x0 + 1.89*x3 + 6.22*x7 >= 73",
    "3.19*x4 + 5.7*x6 + 6.22*x7 >= 73",
    "1.89*x3 + 5.7*x6 + 6.22*x7 >= 73",
    "12.82*x0 + 3.19*x4 + 6.44*x5 >= 73",
    "10.4*x1 + 6.44*x5 + 14.7*x8 >= 73",
    "11.61*x2 + 1.89*x3 + 6.22*x7 >= 73",
    "12.82*x0 + 10.4*x1 + 1.89*x3 >= 73",
    "10.4*x1 + 5.7*x6 + 14.7*x8 >= 73",
    "12.82*x0 + 11.61*x2 + 1.89*x3 >= 73",
    "12.82*x0 + 11.61*x2 + 5.7*x6 >= 73",
    "6.44*x5 + 5.7*x6 + 14.7*x8 >= 73",
    "11.61*x2 + 5.7*x6 + 14.7*x8 >= 73",
    "6.44*x5 + 5.7*x6 + 6.22*x7 >= 73",
    "3.19*x4 + 6.44*x5 + 14.7*x8 >= 73",
    "1.89*x3 + 6.44*x5 + 6.22*x7 >= 73",
    "11.61*x2 + 6.44*x5 + 6.22*x7 >= 73",
    "10.4*x1 + 11.61*x2 + 5.7*x6 >= 73",
    "12.82*x0 + 10.4*x1 + 6.44*x5 >= 73",
    "1.89*x3 + 3.19*x4 + 14.7*x8 >= 73",
    "12.82*x0 + 6.44*x5 + 6.22*x7 >= 73",
    "12.82*x0 + 11.61*x2 + 6.44*x5 >= 73",
    "3.19*x4 + 6.44*x5 + 5.7*x6 >= 73",
    "10.4*x1 + 5.7*x6 + 6.22*x7 >= 73",
    "10.4*x1 + 3.19*x4 + 6.44*x5 >= 73",
    "12.82*x0 + 1.89*x3 + 14.7*x8 >= 87",
    "-6*x5 + 4*x6 >= 0",
    "-4*x0 + 10*x8 >= 0",
    "3.19*x4 + 6.44*x5 <= 206",
    "1.89*x3 + 6.22*x7 <= 443",
    "10.4*x1 + 5.7*x6 <= 570",
    "6.44*x5 + 14.7*x8 <= 262",
    "12.82*x0 + 3.19*x4 <= 979",
    "6.44*x5 + 6.22*x7 <= 823",
    "11.61*x2 + 1.89*x3 <= 602",
    "1.89*x3 + 6.22*x7 + 14.7*x8 <= 352",
    "11.61*x2 + 6.44*x5 + 5.7*x6 <= 958",
    "1.89*x3 + 5.7*x6 + 14.7*x8 <= 324",
    "10.4*x1 + 11.61*x2 + 6.22*x7 <= 943",
    "11.61*x2 + 1.89*x3 + 3.19*x4 <= 668",
    "11.61*x2 + 3.19*x4 + 14.7*x8 <= 268",
    "11.61*x2 + 3.19*x4 + 6.22*x7 <= 821",
    "11.61*x2 + 6.44*x5 + 14.7*x8 <= 823",
    "6.44*x5 + 5.7*x6 + 14.7*x8 <= 899",
    "10.4*x1 + 6.44*x5 + 5.7*x6 <= 547",
    "12.82*x0 + 10.4*x1 + 11.61*x2 + 1.89*x3 + 3.19*x4 + 6.44*x5 + 5.7*x6 + 6.22*x7 + 14.7*x8 <= 980",
    "12.82*x0 + 10.4*x1 + 11.61*x2 + 1.89*x3 + 3.19*x4 + 6.44*x5 + 5.7*x6 + 6.22*x7 + 14.7*x8 >= 98" 
  ]
}
```

```python
import gurobipy as gp

# Create a new model
m = gp.Model("nutrition_optimization")

# Create variables
iron = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="iron")
vitamin_A = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="vitamin_A")
vitamin_B2 = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="vitamin_B2")
vitamin_B7 = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="vitamin_B7")
carbohydrates = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="carbohydrates")
fat = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="fat")
magnesium = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="magnesium")
fiber = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="fiber")
zinc = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="zinc")


# Set objective function
m.setObjective(3*iron + vitamin_A + 3*vitamin_B2 + 4*vitamin_B7 + 2*carbohydrates + 6*fat + 6*magnesium + 9*fiber + 2*zinc, gp.GRB.MINIMIZE)

# Add constraints based on the provided digestive support index
digestive_support_index = {
    'iron': 12.82,
    'vitamin_A': 10.4,
    'vitamin_B2': 11.61,
    'vitamin_B7': 1.89,
    'carbohydrates': 3.19,
    'fat': 6.44,
    'magnesium': 5.7,
    'fiber': 6.22,
    'zinc': 14.7
}

# Add the numerous constraints provided in the input.  These are added programmatically to avoid excessive code duplication.
constraint_values = [55, 56, 59, 60, 61, 63, 66, 67, 70, 73, 75, 76, 79, 80, 81, 82, 83, 84, 85, 86, 87, 91, 93, 98, 99, 100, 102, 103, 105, 106, 108]

nutrients = [iron, vitamin_A, vitamin_B2, vitamin_B7, carbohydrates, fat, magnesium, fiber, zinc]
nutrient_names = ['iron', 'vitamin_A', 'vitamin_B2', 'vitamin_B7', 'carbohydrates', 'fat', 'magnesium', 'fiber', 'zinc']

for val in constraint_values:
    for i in range(len(nutrients)):
        for j in range(i + 1, len(nutrients)):
            for k in range(j + 1, len(nutrients)):
                m.addConstr(digestive_support_index[nutrient_names[i]] * nutrients[i] + digestive_support_index[nutrient_names[j]] * nutrients[j] + digestive_support_index[nutrient_names[k]] * nutrients[k] >= val, f"constraint_{val}_{nutrient_names[i]}_{nutrient_names[j]}_{nutrient_names[k]}")
    for i in range(len(nutrients)):
        for j in range(i + 1, len(nutrients)):
            m.addConstr(digestive_support_index[nutrient_names[i]] * nutrients[i] + digestive_support_index[nutrient_names[j]] * nutrients[j] >= val, f"constraint_{val}_{nutrient_names[i]}_{nutrient_names[j]}")

# Add specific constraints from the problem description
m.addConstr(digestive_support_index['vitamin_B2'] * vitamin_B2 + digestive_support_index['vitamin_B7'] * vitamin_B7 >= 89)
m.addConstr(digestive_support_index['iron'] * iron + digestive_support_index['vitamin_B2'] * vitamin_B2 >= 74)
m.addConstr(digestive_support_index['vitamin_B7'] * vitamin_B7 + digestive_support_index['magnesium'] * magnesium >= 103)
m.addConstr(digestive_support_index['carbohydrates'] * carbohydrates + digestive_support_index['fat'] * fat >= 100)

# Additional constraints
m.addConstr(-6 * fat + 4 * magnesium >= 0)
m.addConstr(-4 * iron + 10 * zinc >= 0)
m.addConstr(digestive_support_index['carbohydrates'] * carbohydrates + digestive_support_index['fat'] * fat <= 206)
m.addConstr(digestive_support_index['vitamin_B7'] * vitamin_B7 + digestive_support_index['fiber'] * fiber <= 443)
m.addConstr(digestive_support_index['vitamin_A'] * vitamin_A + digestive_support_index['magnesium'] * magnesium <= 570)
m.addConstr(digestive_support_index['fat'] * fat + digestive_support_index['zinc'] * zinc <= 262)
m.addConstr(digestive_support_index['iron'] * iron + digestive_support_index['carbohydrates'] * carbohydrates <= 979)
m.addConstr(digestive_support_index['fat'] * fat + digestive_support_index['fiber'] * fiber <= 823)
m.addConstr(digestive_support_index['vitamin_B2'] * vitamin_B2 + digestive_support_index['vitamin_B7'] * vitamin_B7 <= 602)

# Total digestive support index constraint
total_digestive_support = sum(digestive_support_index[nutrient] * nutrients[i] for i, nutrient in enumerate(nutrient_names))
m.addConstr(total_digestive_support <= 980)
m.addConstr(total_digestive_support >= 98)


# Optimize model
m.optimize()

# Print results or infeasibility message
if m.status == gp.GRB.OPTIMAL:
    for v in m.getVars():
        print('%s %g' % (v.varName, v.x))
    print('Obj: %g' % m.objVal)
else:
    print("The model is infeasible.")

```