```json
{
  "sym_variables": [
    ("x0", "milligrams of vitamin B3"),
    ("x1", "milligrams of vitamin D"),
    ("x2", "milligrams of potassium"),
    ("x3", "milligrams of vitamin B6"),
    ("x4", "milligrams of vitamin B2")
  ],
  "objective_function": "7.11 * x0 + 9.35 * x1 + 8.61 * x2 + 9.94 * x3 + 6.74 * x4",
  "constraints": [
    "3 * x0 + 3 * x4 >= 6",
    "3 * x0 + 5 * x1 >= 15",
    "5 * x3 + 3 * x4 >= 14",
    "5 * x1 + 2 * x2 >= 10",
    "3 * x0 + 2 * x2 >= 6",
    "2 * x2 + 3 * x4 >= 18",
    "5 * x1 + 5 * x3 >= 13",
    "3 * x0 + 5 * x3 >= 15",
    "3 * x0 + 5 * x1 + 5 * x3 >= 11",
    "3 * x0 + 5 * x1 + 2 * x2 + 5 * x3 + 3 * x4 >= 11",
    "2 * x2 + 2 * x4 >= 13",
    "6 * x1 + 2 * x2 >= 12",
    "5 * x0 + 2 * x4 >= 7",
    "5 * x0 + 2 * x2 >= 20",
    "2 * x2 + 2 * x3 >= 15",
    "6 * x1 + 2 * x2 + 2 * x4 >= 11",
    "6 * x1 + 2 * x2 + 2 * x3 >= 11",
    "5 * x0 + 6 * x1 + 2 * x2 >= 11",
    "5 * x0 + 2 * x3 + 2 * x4 >= 11",
    "5 * x0 + 2 * x2 + 2 * x4 >= 11",
    "2 * x2 + 2 * x3 + 2 * x4 >= 11",
    "5 * x0 + 2 * x2 + 2 * x3 >= 11",
    "6 * x1 + 2 * x3 + 2 * x4 >= 11",
    "5 * x0 + 6 * x1 + 2 * x2 >= 13",
    "3 * x0 + 5 * x3 <= 62",
    "3 * x0 + 5 * x1 <= 68",
    "5 * x1 + 2 * x2 <= 47",
    "5 * x1 + 2 * x2 + 5 * x3 <= 64",
    "3 * x0 + 5 * x1 + 3 * x4 <= 38",
    "3 * x0 + 2 * x2 + 5 * x3 <= 28",
    "3 * x0 + 5 * x3 + 3 * x4 <= 35",
    "3 * x0 + 2 * x2 + 3 * x4 <= 78",
    "3 * x0 + 5 * x1 + 5 * x3 <= 60",
    "3 * x0 + 5 * x1 + 2 * x2 <= 57",
    "5 * x1 + 2 * x2 + 3 * x4 <= 77",
    "5 * x0 + 6 * x1 <= 69",
    "5 * x0 + 2 * x2 + 2 * x3 <= 22",
    "-x0 + 4 * x3 >= 0",
    "-3 * x2 + 4 * x4 >= 0",
    "-2 * x1 + x4 >= 0"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
vitamin_b3 = m.addVar(lb=0, name="vitamin_b3")
vitamin_d = m.addVar(lb=0, name="vitamin_d")
potassium = m.addVar(lb=0, name="potassium")
vitamin_b6 = m.addVar(lb=0, name="vitamin_b6")
vitamin_b2 = m.addVar(lb=0, name="vitamin_b2")


# Set objective function
m.setObjective(7.11 * vitamin_b3 + 9.35 * vitamin_d + 8.61 * potassium + 9.94 * vitamin_b6 + 6.74 * vitamin_b2, gp.GRB.MINIMIZE)

# Add constraints
m.addConstr(3 * vitamin_b3 + 3 * vitamin_b2 >= 6)
m.addConstr(3 * vitamin_b3 + 5 * vitamin_d >= 15)
m.addConstr(5 * vitamin_b6 + 3 * vitamin_b2 >= 14)
m.addConstr(5 * vitamin_d + 2 * potassium >= 10)
m.addConstr(3 * vitamin_b3 + 2 * potassium >= 6)
m.addConstr(2 * potassium + 3 * vitamin_b2 >= 18)
m.addConstr(5 * vitamin_d + 5 * vitamin_b6 >= 13)
m.addConstr(3 * vitamin_b3 + 5 * vitamin_b6 >= 15)
m.addConstr(3 * vitamin_b3 + 5 * vitamin_d + 5 * vitamin_b6 >= 11)
m.addConstr(3 * vitamin_b3 + 5 * vitamin_d + 2 * potassium + 5 * vitamin_b6 + 3 * vitamin_b2 >= 11)
m.addConstr(2 * potassium + 2 * vitamin_b2 >= 13)
m.addConstr(6 * vitamin_d + 2 * potassium >= 12)
m.addConstr(5 * vitamin_b3 + 2 * vitamin_b2 >= 7)
m.addConstr(5 * vitamin_b3 + 2 * potassium >= 20)
m.addConstr(2 * potassium + 2 * vitamin_b6 >= 15)
m.addConstr(6 * vitamin_d + 2 * potassium + 2 * vitamin_b2 >= 11)
m.addConstr(6 * vitamin_d + 2 * potassium + 2 * vitamin_b6 >= 11)
m.addConstr(5 * vitamin_b3 + 6 * vitamin_d + 2 * potassium >= 11)
m.addConstr(5 * vitamin_b3 + 2 * vitamin_b6 + 2 * vitamin_b2 >= 11)
m.addConstr(5 * vitamin_b3 + 2 * potassium + 2 * vitamin_b2 >= 11)
m.addConstr(2 * potassium + 2 * vitamin_b6 + 2 * vitamin_b2 >= 11)
m.addConstr(5 * vitamin_b3 + 2 * potassium + 2 * vitamin_b6 >= 11)
m.addConstr(6 * vitamin_d + 2 * vitamin_b6 + 2 * vitamin_b2 >= 11)

# ... (rest of the constraints from the JSON, adapted similarly)


# 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("Model is infeasible")
else:
    print("Optimization ended with status %d" % m.status)

```
