```json
{
  "sym_variables": [
    ("x0", "grams of protein"),
    ("x1", "milligrams of magnesium"),
    ("x2", "milligrams of vitamin B5"),
    ("x3", "grams of fat"),
    ("x4", "grams of fiber")
  ],
  "objective_function": "2*x0 + 6*x1 + 3*x2 + 2*x3 + 8*x4",
  "constraints": [
    "17*x0 + 17*x1 >= 24",
    "11*x2 + 7*x4 >= 38",
    "17*x1 + 7*x4 >= 47",
    "12*x3 + 7*x4 >= 38",
    "11*x2 + 12*x3 >= 36",
    "17*x0 + 12*x3 >= 36",
    "17*x1 + 11*x2 >= 21",
    "17*x1 + 11*x2 + 7*x4 >= 48",
    "17*x0 + 11*x2 + 12*x3 >= 48",
    "17*x1 + 11*x2 + 7*x4 >= 48",
    "17*x0 + 11*x2 + 12*x3 >= 48",
    "15*x0 + 7*x3 >= 48",
    "7*x1 + 5*x2 >= 23",
    "15*x0 + 7*x1 >= 27",
    "15*x0 + 16*x4 >= 60",
    "7*x1 + 16*x4 >= 50",
    "5*x2 + 7*x3 >= 57",
    "5*x2 + 16*x4 >= 43",
    "5*x2 + 7*x3 + 16*x4 >= 58",
    "7*x1 + 5*x2 + 16*x4 >= 58",
    "5*x2 + 7*x3 + 16*x4 >= 36",
    "7*x1 + 5*x2 + 16*x4 >= 36",
    "15*x0 + 8*x1 >= 45",
    "15*x0 + 11*x2 >= 80",
    "8*x1 + 4*x3 >= 30",
    "17*x0 + 11*x2 <= 130",
    "17*x1 + 12*x3 <= 193",
    "17*x0 + 17*x1 <= 202",
    "17*x0 + 7*x4 <= 254",
    "17*x0 + 17*x1 + 11*x2 <= 264",
    "17*x0 + 17*x1 + 7*x4 <= 133",
    "11*x2 + 12*x3 + 7*x4 <= 109",
    "17*x0 + 17*x1 + 12*x3 <= 187",
    "17*x0 + 17*x1 + 11*x2 + 12*x3 + 7*x4 <= 187",
    "15*x0 + 7*x3 <= 66",
    "7*x3 + 16*x4 <= 180",
    "7*x1 + 7*x3 <= 230",
    "15*x0 + 5*x2 <= 234",
    "7*x1 + 16*x4 <= 260",
    "5*x2 + 16*x4 <= 301",
    "7*x1 + 5*x2 <= 89",
    "7*x1 + 7*x3 + 16*x4 <= 263",
    "15*x0 + 7*x3 + 16*x4 <= 274",
    "15*x0 + 7*x1 + 16*x4 <= 108",
    "15*x0 + 5*x2 + 7*x3 <= 147",
    "15*x0 + 5*x2 + 16*x4 <= 109",
    "15*x0 + 7*x1 + 5*x2 + 7*x3 + 16*x4 <= 109",
    "8*x1 + 11*x2 <= 242",
    "15*x0 + 11*x2 <= 373",
    "8*x1 + 4*x3 <= 343",
    "4*x3 + 12*x4 <= 127",
    "15*x0 + 4*x3 <= 308",
    "8*x1 + 12*x4 <= 332",
    "15*x0 + 8*x1 <= 187",
    "15*x0 + 8*x1 + 12*x4 <= 321",
    "15*x0 + 8*x1 + 11*x2 + 4*x3 + 12*x4 <= 321",
    "x1 == int",
    "x0 >= 0",
    "x1 >= 0",
    "x2 >= 0",
    "x3 >= 0",
    "x4 >= 0"


  ]
}
```

```python
import gurobipy as gp

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

# Create variables
protein = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="protein")
magnesium = m.addVar(lb=0, vtype=gp.GRB.INTEGER, name="magnesium")
vitamin_b5 = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="vitamin_b5")
fat = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="fat")
fiber = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="fiber")


# Set objective function
m.setObjective(2*protein + 6*magnesium + 3*vitamin_b5 + 2*fat + 8*fiber, gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(17*protein + 17*magnesium >= 24)
m.addConstr(11*vitamin_b5 + 7*fiber >= 38)
m.addConstr(17*magnesium + 7*fiber >= 47)
m.addConstr(12*fat + 7*fiber >= 38)
m.addConstr(11*vitamin_b5 + 12*fat >= 36)
m.addConstr(17*protein + 12*fat >= 36)
m.addConstr(17*magnesium + 11*vitamin_b5 >= 21)
m.addConstr(17*magnesium + 11*vitamin_b5 + 7*fiber >= 48)
m.addConstr(17*protein + 11*vitamin_b5 + 12*fat >= 48)
m.addConstr(17*magnesium + 11*vitamin_b5 + 7*fiber >= 48)
m.addConstr(17*protein + 11*vitamin_b5 + 12*fat >= 48)
m.addConstr(15*protein + 7*fat >= 48)
m.addConstr(7*magnesium + 5*vitamin_b5 >= 23)
m.addConstr(15*protein + 7*magnesium >= 27)
m.addConstr(15*protein + 16*fiber >= 60)
m.addConstr(7*magnesium + 16*fiber >= 50)
m.addConstr(5*vitamin_b5 + 7*fat >= 57)
m.addConstr(5*vitamin_b5 + 16*fiber >= 43)
m.addConstr(5*vitamin_b5 + 7*fat + 16*fiber >= 58)
m.addConstr(7*magnesium + 5*vitamin_b5 + 16*fiber >= 58)
m.addConstr(5*vitamin_b5 + 7*fat + 16*fiber >= 36)
m.addConstr(7*magnesium + 5*vitamin_b5 + 16*fiber >= 36)
m.addConstr(15*protein + 8*magnesium >= 45)
m.addConstr(15*protein + 11*vitamin_b5 >= 80)
m.addConstr(8*magnesium + 4*fat >= 30)
m.addConstr(17*protein + 11*vitamin_b5 <= 130)
m.addConstr(17*magnesium + 12*fat <= 193)
m.addConstr(17*protein + 17*magnesium <= 202)
m.addConstr(17*protein + 7*fiber <= 254)
m.addConstr(17*protein + 17*magnesium + 11*vitamin_b5 <= 264)
m.addConstr(17*protein + 17*magnesium + 7*fiber <= 133)
m.addConstr(11*vitamin_b5 + 12*fat + 7*fiber <= 109)
m.addConstr(17*protein + 17*magnesium + 12*fat <= 187)
m.addConstr(17*protein + 17*magnesium + 11*vitamin_b5 + 12*fat + 7*fiber <= 187)
m.addConstr(15*protein + 7*fat <= 66)
m.addConstr(7*fat + 16*fiber <= 180)
m.addConstr(7*magnesium + 7*fat <= 230)
m.addConstr(15*protein + 5*vitamin_b5 <= 234)
m.addConstr(7*magnesium + 16*fiber <= 260)
m.addConstr(5*vitamin_b5 + 16*fiber <= 301)
m.addConstr(7*magnesium + 5*vitamin_b5 <= 89)
m.addConstr(7*magnesium + 7*fat + 16*fiber <= 263)
m.addConstr(15*protein + 7*fat + 16*fiber <= 274)
m.addConstr(15*protein + 7*magnesium + 16*fiber <= 108)
m.addConstr(15*protein + 5*vitamin_b5 + 7*fat <= 147)
m.addConstr(15*protein + 5*vitamin_b5 + 16*fiber <= 109)
m.addConstr(15*protein + 7*magnesium + 5*vitamin_b5 + 7*fat + 16*fiber <= 109)
m.addConstr(8*magnesium + 11*vitamin_b5 <= 242)
m.addConstr(15*protein + 11*vitamin_b5 <= 373)
m.addConstr(8*magnesium + 4*fat <= 343)
m.addConstr(4*fat + 12*fiber <= 127)
m.addConstr(15*protein + 4*fat <= 308)
m.addConstr(8*magnesium + 12*fiber <= 332)
m.addConstr(15*protein + 8*magnesium <= 187)
m.addConstr(15*protein + 8*magnesium + 12*fiber <= 321)
m.addConstr(15*protein + 8*magnesium + 11*vitamin_b5 + 4*fat + 12*fiber <= 321)


# Optimize model
m.optimize()

# Print results
if m.status == gp.GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    for v in m.getVars():
        print('%s %g' % (v.varName, v.x))
elif m.status == gp.GRB.INFEASIBLE:
    print("The model is infeasible.")
else:
    print("Optimization ended with status %d" % m.status)

```