```json
{
  "sym_variables": [
    ("x0", "milligrams of vitamin E"),
    ("x1", "milligrams of vitamin B3"),
    ("x2", "milligrams of zinc"),
    ("x3", "grams of fat"),
    ("x4", "milligrams of vitamin B9")
  ],
  "objective_function": "7*x0 + 6*x1 + 7*x2 + 9*x3 + 6*x4",
  "constraints": [
    "8.51*x0 + 2.48*x1 >= 47",
    "6.81*x2 + 4.66*x4 >= 48",
    "2.48*x1 + 8.54*x3 >= 17",
    "2.48*x1 + 4.66*x4 >= 52",
    "8.51*x0 + 4.66*x4 >= 49",
    "8.51*x0 + 2.48*x1 + 6.81*x2 + 8.54*x3 + 4.66*x4 >= 49",
    "6.29*x0 + 4.54*x4 >= 52",
    "7.02*x1 + 5.27*x3 >= 47",
    "7.02*x1 + 4.54*x4 >= 22",
    "7.02*x1 + 3.93*x2 >= 57",
    "6.29*x0 + 3.93*x2 >= 62",
    "3.93*x2 + 5.27*x3 + 4.54*x4 >= 42",
    "7.02*x1 + 3.93*x2 + 4.54*x4 >= 42",
    "7.02*x1 + 3.93*x2 + 5.27*x3 >= 42",
    "3.93*x2 + 5.27*x3 + 4.54*x4 >= 56",
    "7.02*x1 + 3.93*x2 + 4.54*x4 >= 56",
    "7.02*x1 + 3.93*x2 + 5.27*x3 >= 56",
    "3.93*x2 + 5.27*x3 + 4.54*x4 >= 56",
    "7.02*x1 + 3.93*x2 + 4.54*x4 >= 56",
    "7.02*x1 + 3.93*x2 + 5.27*x3 >= 56",
    "6.29*x0 + 7.02*x1 + 3.93*x2 + 5.27*x3 + 4.54*x4 >= 56",
    "-x2 + 9*x4 >= 0",
    "8*x2 - 8*x3 >= 0",
    "6.81*x2 + 4.66*x4 <= 192",
    "8.54*x3 + 4.66*x4 <= 146",
    "2.48*x1 + 8.54*x3 <= 75",
    "2.48*x1 + 6.81*x2 + 8.54*x3 <= 172",
    "8.51*x0 + 2.48*x1 + 8.54*x3 <= 107",
    "8.51*x0 + 2.48*x1 + 4.66*x4 <= 210",
    "8.51*x0 + 8.54*x3 + 4.66*x4 <= 91",
    "8.51*x0 + 2.48*x1 + 6.81*x2 <= 133",
    "2.48*x1 + 6.81*x2 + 4.66*x4 <= 240",
    "6.81*x2 + 8.54*x3 + 4.66*x4 <= 57",
    "7.02*x1 + 3.93*x2 <= 229",
    "6.29*x0 + 3.93*x2 <= 315",
    "3.93*x2 + 5.27*x3 <= 314",
    "5.27*x3 + 4.54*x4 <= 323"

  ]
}
```

```python
import gurobipy as gp

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

    # Create variables
    x = m.addVars(5, lb=0, vtype=gp.GRB.CONTINUOUS, names=["x0", "x1", "x2", "x3", "x4"])


    # Set objective function
    m.setObjective(7*x[0] + 6*x[1] + 7*x[2] + 9*x[3] + 6*x[4], gp.GRB.MINIMIZE)

    # Add constraints
    m.addConstr(8.51*x[0] + 2.48*x[1] >= 47)
    m.addConstr(6.81*x[2] + 4.66*x[4] >= 48)
    m.addConstr(2.48*x[1] + 8.54*x[3] >= 17)
    m.addConstr(2.48*x[1] + 4.66*x[4] >= 52)
    m.addConstr(8.51*x[0] + 4.66*x[4] >= 49)
    m.addConstr(8.51*x[0] + 2.48*x[1] + 6.81*x[2] + 8.54*x[3] + 4.66*x[4] >= 49)
    m.addConstr(6.29*x[0] + 4.54*x[4] >= 52)
    m.addConstr(7.02*x[1] + 5.27*x[3] >= 47)
    m.addConstr(7.02*x[1] + 4.54*x[4] >= 22)
    m.addConstr(7.02*x[1] + 3.93*x[2] >= 57)
    m.addConstr(6.29*x[0] + 3.93*x[2] >= 62)
    m.addConstr(3.93*x[2] + 5.27*x[3] + 4.54*x[4] >= 42)
    m.addConstr(7.02*x[1] + 3.93*x[2] + 4.54*x[4] >= 42)
    m.addConstr(7.02*x[1] + 3.93*x[2] + 5.27*x[3] >= 42)
    m.addConstr(3.93*x[2] + 5.27*x[3] + 4.54*x[4] >= 56)
    m.addConstr(7.02*x[1] + 3.93*x[2] + 4.54*x[4] >= 56)
    m.addConstr(7.02*x[1] + 3.93*x[2] + 5.27*x[3] >= 56)
    m.addConstr(6.29*x[0] + 7.02*x[1] + 3.93*x[2] + 5.27*x[3] + 4.54*x[4] >= 56)
    m.addConstr(-x[2] + 9*x[4] >= 0)
    m.addConstr(8*x[2] - 8*x[3] >= 0)
    m.addConstr(6.81*x[2] + 4.66*x[4] <= 192)
    m.addConstr(8.54*x[3] + 4.66*x[4] <= 146)
    m.addConstr(2.48*x[1] + 8.54*x[3] <= 75)
    m.addConstr(2.48*x[1] + 6.81*x[2] + 8.54*x[3] <= 172)
    m.addConstr(8.51*x[0] + 2.48*x[1] + 8.54*x[3] <= 107)
    m.addConstr(8.51*x[0] + 2.48*x[1] + 4.66*x[4] <= 210)
    m.addConstr(8.51*x[0] + 8.54*x[3] + 4.66*x[4] <= 91)
    m.addConstr(8.51*x[0] + 2.48*x[1] + 6.81*x[2] <= 133)
    m.addConstr(2.48*x[1] + 6.81*x[2] + 4.66*x[4] <= 240)
    m.addConstr(6.81*x[2] + 8.54*x[3] + 4.66*x[4] <= 57)
    m.addConstr(7.02*x[1] + 3.93*x[2] <= 229)
    m.addConstr(6.29*x[0] + 3.93*x[2] <= 315)
    m.addConstr(3.93*x[2] + 5.27*x[3] <= 314)
    m.addConstr(5.27*x[3] + 4.54*x[4] <= 323)



    # Optimize model
    m.optimize()

    if m.status == gp.GRB.OPTIMAL:
        for v in m.getVars():
            print(f'{v.varName}: {v.x}')
        print(f'Obj: {m.objVal}')
    elif m.status == gp.GRB.INFEASIBLE:
        print("The model is infeasible.")
    else:
        print(f"Optimization ended with status {m.status}")


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

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