```json
{
  "sym_variables": [
    ("x0", "milligrams of zinc"),
    ("x1", "milligrams of potassium"),
    ("x2", "milligrams of vitamin C"),
    ("x3", "milligrams of vitamin B2")
  ],
  "objective_function": "4.91 * x0 + 6.7 * x1 + 8.7 * x2 + 1.7 * x3",
  "constraints": [
    "4 * x1 + 9 * x3 >= 37",
    "6 * x1 + 4 * x2 >= 45",
    "4 * x2 + 9 * x3 >= 39",
    "4 * x0 + 4 * x2 >= 24",
    "4 * x0 + 6 * x1 >= 39",
    "6 * x1 + 4 * x2 + 9 * x3 >= 27",
    "4 * x0 + 6 * x1 + 4 * x2 >= 27",
    "4 * x0 + 4 * x2 + 9 * x3 >= 27",
    "6 * x1 + 4 * x2 + 9 * x3 >= 23",
    "4 * x0 + 6 * x1 + 4 * x2 >= 23",
    "4 * x0 + 4 * x2 + 9 * x3 >= 23",
    "6 * x1 + 4 * x2 + 9 * x3 >= 26",
    "4 * x0 + 6 * x1 + 4 * x2 >= 26",
    "4 * x0 + 4 * x2 + 9 * x3 >= 26",
    "4 * x0 + 6 * x1 + 4 * x2 + 9 * x3 >= 26",
    "10 * x2 + 7 * x3 >= 53",
    "16 * x1 + 7 * x3 >= 48",
    "20 * x0 + 16 * x1 >= 27",
    "20 * x0 + 16 * x1 + 10 * x2 + 7 * x3 >= 27",
    "6 * x2 - 9 * x3 >= 0",
    "6 * x0 - 4 * x1 >= 0",
    "8 * x0 - 10 * x2 >= 0",
    "4 * x0 + 6 * x1 <= 174",
    "20 * x0 + 16 * x1 + 10 * x2 <= 90",
    "20 * x0 + 16 * x1 + 7 * x3 <= 236",
    "4 * x0 + 6 * x1 + 4 * x2 + 9 * x3 <= 181",  % kidney support index
    "20 * x0 + 16 * x1 + 10 * x2 + 7 * x3 <= 248"  % energy stability index

  ]
}
```

```python
import gurobipy as gp

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

# Create variables
zinc = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="zinc")
potassium = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="potassium")
vitamin_c = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="vitamin_c")
vitamin_b2 = m.addVar(lb=0, vtype=gp.GRB.INTEGER, name="vitamin_b2")


# Set objective function
m.setObjective(4.91 * zinc + 6.7 * potassium + 8.7 * vitamin_c + 1.7 * vitamin_b2, gp.GRB.MINIMIZE)

# Add constraints
m.addConstr(4 * potassium + 9 * vitamin_b2 >= 37)
m.addConstr(6 * potassium + 4 * vitamin_c >= 45)
m.addConstr(4 * vitamin_c + 9 * vitamin_b2 >= 39)
m.addConstr(4 * zinc + 4 * vitamin_c >= 24)
m.addConstr(4 * zinc + 6 * potassium >= 39)
m.addConstr(6 * potassium + 4 * vitamin_c + 9 * vitamin_b2 >= 27)
m.addConstr(4 * zinc + 6 * potassium + 4 * vitamin_c >= 27)
m.addConstr(4 * zinc + 4 * vitamin_c + 9 * vitamin_b2 >= 27)
m.addConstr(6 * potassium + 4 * vitamin_c + 9 * vitamin_b2 >= 23)
m.addConstr(4 * zinc + 6 * potassium + 4 * vitamin_c >= 23)
m.addConstr(4 * zinc + 4 * vitamin_c + 9 * vitamin_b2 >= 23)
m.addConstr(6 * potassium + 4 * vitamin_c + 9 * vitamin_b2 >= 26)
m.addConstr(4 * zinc + 6 * potassium + 4 * vitamin_c >= 26)
m.addConstr(4 * zinc + 4 * vitamin_c + 9 * vitamin_b2 >= 26)
m.addConstr(4 * zinc + 6 * potassium + 4 * vitamin_c + 9 * vitamin_b2 >= 26)
m.addConstr(10 * vitamin_c + 7 * vitamin_b2 >= 53)
m.addConstr(16 * potassium + 7 * vitamin_b2 >= 48)
m.addConstr(20 * zinc + 16 * potassium >= 27)
m.addConstr(20 * zinc + 16 * potassium + 10 * vitamin_c + 7 * vitamin_b2 >= 27)
m.addConstr(6 * vitamin_c - 9 * vitamin_b2 >= 0)
m.addConstr(6 * zinc - 4 * potassium >= 0)
m.addConstr(8 * zinc - 10 * vitamin_c >= 0)
m.addConstr(4 * zinc + 6 * potassium <= 174)
m.addConstr(20 * zinc + 16 * potassium + 10 * vitamin_c <= 90)
m.addConstr(20 * zinc + 16 * potassium + 7 * vitamin_b2 <= 236)

# Resource Constraints
m.addConstr(4 * zinc + 6 * potassium + 4 * vitamin_c + 9 * vitamin_b2 <= 181) # Kidney support
m.addConstr(20 * zinc + 16 * potassium + 10 * vitamin_c + 7 * vitamin_b2 <= 248) # Energy stability


# Optimize model
m.optimize()

# Print results
if m.status == gp.GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    print('zinc:', zinc.x)
    print('potassium:', potassium.x)
    print('vitamin_c:', vitamin_c.x)
    print('vitamin_b2:', vitamin_b2.x)
elif m.status == gp.GRB.INFEASIBLE:
    print('Model is infeasible')
else:
    print('Optimization ended with status %d' % m.status)

```
