```json
{
  "sym_variables": [
    ("x0", "milligrams of vitamin B2"),
    ("x1", "milligrams of vitamin B9"),
    ("x2", "milligrams of zinc"),
    ("x3", "milligrams of iron")
  ],
  "objective_function": "8.66 * x0 + 4.61 * x1 + 2.52 * x2 + 4.85 * x3",
  "constraints": [
    "3 * x0 + 9 * x2 >= 36",
    "3 * x0 + 8 * x1 + 9 * x2 + 14 * x3 >= 36",
    "10 * x1 + 8 * x3 >= 64",
    "5 * x0 + 13 * x2 >= 86",
    "10 * x1 + 13 * x2 >= 34",
    "5 * x0 + 10 * x1 >= 77",
    "5 * x0 + 10 * x1 + 13 * x2 >= 53",
    "5 * x0 + 10 * x1 + 13 * x2 + 8 * x3 >= 53",
    "11 * x0 + 11 * x2 >= 29",
    "3 * x1 + 3 * x3 >= 29",
    "11 * x2 + 3 * x3 >= 32",
    "11 * x0 + 3 * x1 + 11 * x2 + 3 * x3 >= 32",
    "5 * x0 + 12 * x2 >= 66",
    "8 * x1 + 2 * x3 >= 69",
    "5 * x0 + 8 * x1 + 12 * x2 >= 56",
    "8 * x1 + 12 * x2 + 2 * x3 >= 56",
    "5 * x0 + 12 * x2 + 2 * x3 >= 56",
    "5 * x0 + 8 * x1 + 12 * x2 >= 67",
    "8 * x1 + 12 * x2 + 2 * x3 >= 67",
    "5 * x0 + 12 * x2 + 2 * x3 >= 67",
    "5 * x0 + 8 * x1 + 12 * x2 >= 43",
    "8 * x1 + 12 * x2 + 2 * x3 >= 43",
    "5 * x0 + 12 * x2 + 2 * x3 >= 43",
    "5 * x0 + 8 * x1 + 12 * x2 + 2 * x3 >= 43",
    "1 * x1 - 3 * x3 >= 0",
    "-8 * x0 + 9 * x2 >= 0",
    "13 * x2 + 8 * x3 <= 195",
    "5 * x0 + 13 * x2 + 8 * x3 <= 265",
    "8 * x1 + 12 * x2 <= 191",
    "12 * x2 + 2 * x3 <= 311",
    "8 * x1 + 2 * x3 <= 281",
    "5 * x0 + 2 * x3 <= 132",
    "x0 >= 0",
    "x1 >= 0",
    "x2 >= 0",
    "x3 >= 0"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
vitamin_b2 = m.addVar(lb=0, name="vitamin_b2")
vitamin_b9 = m.addVar(lb=0, name="vitamin_b9")
zinc = m.addVar(lb=0, name="zinc")
iron = m.addVar(lb=0, name="iron")

# Set objective function
m.setObjective(8.66 * vitamin_b2 + 4.61 * vitamin_b9 + 2.52 * zinc + 4.85 * iron, gp.GRB.MINIMIZE)

# Add constraints
m.addConstr(3 * vitamin_b2 + 9 * zinc >= 36)
m.addConstr(3 * vitamin_b2 + 8 * vitamin_b9 + 9 * zinc + 14 * iron >= 36)
m.addConstr(10 * vitamin_b9 + 8 * iron >= 64)
m.addConstr(5 * vitamin_b2 + 13 * zinc >= 86)
m.addConstr(10 * vitamin_b9 + 13 * zinc >= 34)
m.addConstr(5 * vitamin_b2 + 10 * vitamin_b9 >= 77)
m.addConstr(5 * vitamin_b2 + 10 * vitamin_b9 + 13 * zinc >= 53)
m.addConstr(5 * vitamin_b2 + 10 * vitamin_b9 + 13 * zinc + 8 * iron >= 53)
m.addConstr(11 * vitamin_b2 + 11 * zinc >= 29)
m.addConstr(3 * vitamin_b9 + 3 * iron >= 29)
m.addConstr(11 * zinc + 3 * iron >= 32)
m.addConstr(11 * vitamin_b2 + 3 * vitamin_b9 + 11 * zinc + 3 * iron >= 32)
m.addConstr(5 * vitamin_b2 + 12 * zinc >= 66)
m.addConstr(8 * vitamin_b9 + 2 * iron >= 69)
m.addConstr(5 * vitamin_b2 + 8 * vitamin_b9 + 12 * zinc >= 56)
m.addConstr(8 * vitamin_b9 + 12 * zinc + 2 * iron >= 56)
m.addConstr(5 * vitamin_b2 + 12 * zinc + 2 * iron >= 56)
m.addConstr(5 * vitamin_b2 + 8 * vitamin_b9 + 12 * zinc >= 67)
m.addConstr(8 * vitamin_b9 + 12 * zinc + 2 * iron >= 67)
m.addConstr(5 * vitamin_b2 + 12 * zinc + 2 * iron >= 67)
m.addConstr(5 * vitamin_b2 + 8 * vitamin_b9 + 12 * zinc >= 43)
m.addConstr(8 * vitamin_b9 + 12 * zinc + 2 * iron >= 43)
m.addConstr(5 * vitamin_b2 + 12 * zinc + 2 * iron >= 43)
m.addConstr(5 * vitamin_b2 + 8 * vitamin_b9 + 12 * zinc + 2 * iron >= 43)
m.addConstr(vitamin_b9 - 3 * iron >= 0)
m.addConstr(-8 * vitamin_b2 + 9 * zinc >= 0)
m.addConstr(13 * zinc + 8 * iron <= 195)
m.addConstr(5 * vitamin_b2 + 13 * zinc + 8 * iron <= 265)
m.addConstr(8 * vitamin_b9 + 12 * zinc <= 191)
m.addConstr(12 * zinc + 2 * iron <= 311)
m.addConstr(8 * vitamin_b9 + 2 * iron <= 281)
m.addConstr(5 * vitamin_b2 + 2 * iron <= 132)


# 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)

```
