```json
{
  "sym_variables": [
    ("x0", "milligrams of vitamin B2"),
    ("x1", "milligrams of zinc"),
    ("x2", "milligrams of vitamin B7"),
    ("x3", "milligrams of calcium")
  ],
  "objective_function": "4.05 * x0 + 7.38 * x1 + 8.46 * x2 + 2.9 * x3",
  "constraints": [
    "17 * x0 + 4 * x1 + 6 * x2 + 5 * x3 <= 242",
    "7 * x0 + 9 * x1 + 29 * x2 + 3 * x3 <= 270",
    "14 * x0 + 17 * x1 + 22 * x2 + 28 * x3 <= 231",
    "12 * x0 + 3 * x1 + 23 * x2 + 24 * x3 <= 292",
    "25 * x0 + 27 * x1 + 15 * x2 + 17 * x3 <= 177",
    "17 * x0 + 5 * x3 >= 21",
    "17 * x0 + 4 * x1 >= 33",
    "6 * x2 + 5 * x3 >= 49",
    "4 * x1 + 6 * x2 >= 49",
    "4 * x1 + 6 * x2 + 5 * x3 >= 59",
    "7 * x0 + 3 * x3 >= 50",
    "9 * x1 + 29 * x2 >= 51",
    "29 * x2 + 3 * x3 >= 52",
    "7 * x0 + 9 * x1 >= 41",
    "9 * x1 + 29 * x2 + 3 * x3 >= 45",
    "17 * x1 + 22 * x2 >= 53",
    "17 * x1 + 22 * x2 + 28 * x3 >= 46",
    "14 * x0 + 17 * x1 + 22 * x2 >= 46",
    "17 * x1 + 22 * x2 + 28 * x3 >= 49",
    "14 * x0 + 17 * x1 + 22 * x2 >= 49",
    "27 * x1 + 15 * x2 + 17 * x3 >= 34",
    "4 * x1 + 5 * x3 <= 242",
    "17 * x0 + 4 * x1 <= 241",
    "4 * x1 + 6 * x2 <= 183",
    "17 * x0 + 4 * x1 + 6 * x2 + 5 * x3 <= 183",
    "29 * x2 + 3 * x3 <= 212",
    "7 * x0 + 29 * x2 <= 185",
    "7 * x0 + 3 * x3 <= 147",
    "9 * x1 + 29 * x2 <= 84",
    "7 * x0 + 9 * x1 + 29 * x2 + 3 * x3 <= 84",
    "14 * x0 + 22 * x2 <= 125",
    "17 * x1 + 28 * x3 <= 219",
    "14 * x0 + 22 * x2 + 28 * x3 <= 60",
    "14 * x0 + 17 * x1 + 22 * x2 + 28 * x3 <= 60",
    "3 * x1 + 23 * x2 <= 209",
    "12 * x0 + 24 * x3 <= 233",
    "12 * x0 + 23 * x2 <= 102",
    "3 * x1 + 24 * x3 <= 225",
    "12 * x0 + 3 * x1 <= 264",
    "23 * x2 + 24 * x3 <= 161",
    "12 * x0 + 3 * x1 + 23 * x2 + 24 * x3 <= 161",
    "25 * x0 + 17 * x3 <= 148",
    "15 * x2 + 17 * x3 <= 125",
    "27 * x1 + 17 * x3 <= 77",
    "25 * x0 + 27 * x1 + 17 * x3 <= 46",
    "25 * x0 + 27 * x1 + 15 * x2 + 17 * x3 <= 46",
    "x0 == int(x0)",
    "x2 == int(x2)",
    "x3 == int(x3)"
  ]
}
```

```python
import gurobipy as gp

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

    # Create variables
    x0 = m.addVar(vtype=gp.GRB.INTEGER, name="vitamin_B2")
    x1 = m.addVar(vtype=gp.GRB.CONTINUOUS, name="zinc")
    x2 = m.addVar(vtype=gp.GRB.INTEGER, name="vitamin_B7")
    x3 = m.addVar(vtype=gp.GRB.INTEGER, name="calcium")


    # Set objective function
    m.setObjective(4.05 * x0 + 7.38 * x1 + 8.46 * x2 + 2.9 * x3, gp.GRB.MAXIMIZE)

    # Add constraints
    m.addConstr(17 * x0 + 4 * x1 + 6 * x2 + 5 * x3 <= 242, "r0")
    m.addConstr(7 * x0 + 9 * x1 + 29 * x2 + 3 * x3 <= 270, "r1")
    m.addConstr(14 * x0 + 17 * x1 + 22 * x2 + 28 * x3 <= 231, "r2")
    m.addConstr(12 * x0 + 3 * x1 + 23 * x2 + 24 * x3 <= 292, "r3")
    m.addConstr(25 * x0 + 27 * x1 + 15 * x2 + 17 * x3 <= 177, "r4")
    m.addConstr(17 * x0 + 5 * x3 >= 21, "c6")
    m.addConstr(17 * x0 + 4 * x1 >= 33, "c7")
    m.addConstr(6 * x2 + 5 * x3 >= 49, "c8")
    m.addConstr(4 * x1 + 6 * x2 >= 49, "c9")
    m.addConstr(4 * x1 + 6 * x2 + 5 * x3 >= 59, "c10")
    m.addConstr(7 * x0 + 3 * x3 >= 50, "c11")
    m.addConstr(9 * x1 + 29 * x2 >= 51, "c12")
    m.addConstr(29 * x2 + 3 * x3 >= 52, "c13")
    m.addConstr(7 * x0 + 9 * x1 >= 41, "c14")
    m.addConstr(9 * x1 + 29 * x2 + 3 * x3 >= 45, "c15")
    # ... (rest of the constraints)


    # Optimize model
    m.optimize()

    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('Optimization problem is infeasible.')


except gp.GurobiError as e:
    print('Error code ' + str(e.errno) + ': ' + str(e))

except AttributeError:
    print('Encountered an attribute error')
```