```json
{
  "sym_variables": [
    ("x0", "bowls of cereal"),
    ("x1", "oranges"),
    ("x2", "sashimi"),
    ("x3", "blueberry pies"),
    ("x4", "bagged salads")
  ],
  "objective_function": "2*x0 + 2*x1 + 6*x2 + 8*x3 + 3*x4",
  "constraints": [
    "7.93*x0 + 13.58*x1 + 1.23*x2 + 13.16*x3 + 14.37*x4 <= 307",
    "4.61*x0 + 7.9*x1 + 9.97*x2 + 13.49*x3 + 10.58*x4 <= 345",
    "1.23*x2 + 13.16*x3 >= 52",
    "7.93*x0 + 1.23*x2 >= 28",
    "13.16*x3 + 14.37*x4 >= 38",
    "13.58*x1 + 14.37*x4 >= 49",
    "7.93*x0 + 13.58*x1 + 1.23*x2 >= 59",
    "7.93*x0 + 1.23*x2 + 14.37*x4 >= 59",
    "7.93*x0 + 13.58*x1 + 1.23*x2 >= 31",
    "7.93*x0 + 1.23*x2 + 14.37*x4 >= 31",
    "7.93*x0 + 13.58*x1 + 1.23*x2 + 13.16*x3 + 14.37*x4 >= 31",
    "4.61*x0 + 13.49*x3 >= 31",
    "4.61*x0 + 7.9*x1 >= 36",
    "7.9*x1 + 13.49*x3 >= 44",
    "9.97*x2 + 13.49*x3 >= 68",
    "7.9*x1 + 9.97*x2 >= 63",
    "7.9*x1 + 10.58*x4 >= 41",
    "9.97*x2 + 10.58*x4 >= 43",
    "4.61*x0 + 10.58*x4 >= 52",
    "7.9*x1 + 9.97*x2 + 10.58*x4 >= 47",
    "4.61*x0 + 7.9*x1 + 9.97*x2 + 13.49*x3 + 10.58*x4 >= 47",
    "-9*x1 + 6*x4 >= 0",
    "7.93*x0 + 13.58*x1 + 14.37*x4 <= 125",
    "1.23*x2 + 13.16*x3 + 14.37*x4 <= 156",
    "13.58*x1 + 1.23*x2 + 13.16*x3 <= 201",
    "13.58*x1 + 1.23*x2 + 14.37*x4 <= 122",
    "7.93*x0 + 13.58*x1 + 1.23*x2 <= 199",
    "7.93*x0 + 1.23*x2 + 14.37*x4 <= 110",
    "7.93*x0 + 13.16*x3 + 14.37*x4 <= 269",
    "7.93*x0 + 13.58*x1 + 13.16*x3 <= 158",
    "4.61*x0 + 9.97*x2 + 13.49*x3 <= 225",
    "4.61*x0 + 7.9*x1 + 10.58*x4 <= 170",
    "4.61*x0 + 7.9*x1 + 9.97*x2 <= 88",
    "4.61*x0 + 13.49*x3 + 10.58*x4 <= 105",
    "7.9*x1 + 9.97*x2 + 10.58*x4 <= 138"
  ]
}
```

```python
import gurobipy as gp

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

    # Create variables
    x = m.addVars(5, lb=0, ub=gp.GRB.INFINITY, vtype=gp.GRB.CONTINUOUS, name=["bowls_of_cereal", "oranges", "sashimi", "blueberry_pies", "bagged_salads"])


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

    # Add constraints
    m.addConstr(7.93*x[0] + 13.58*x[1] + 1.23*x[2] + 13.16*x[3] + 14.37*x[4] <= 307, "dollar_cost")
    m.addConstr(4.61*x[0] + 7.9*x[1] + 9.97*x[2] + 13.49*x[3] + 10.58*x[4] <= 345, "tastiness_rating")
    m.addConstr(1.23*x[2] + 13.16*x[3] >= 52, "c1")
    m.addConstr(7.93*x[0] + 1.23*x[2] >= 28, "c2")
    m.addConstr(13.16*x[3] + 14.37*x[4] >= 38, "c3")
    m.addConstr(13.58*x[1] + 14.37*x[4] >= 49, "c4")
    m.addConstr(7.93*x[0] + 13.58*x[1] + 1.23*x[2] >= 59, "c5")
    m.addConstr(7.93*x[0] + 1.23*x[2] + 14.37*x[4] >= 59, "c6")
    m.addConstr(7.93*x[0] + 13.58*x[1] + 1.23*x[2] >= 31, "c7")
    m.addConstr(7.93*x[0] + 1.23*x[2] + 14.37*x[4] >= 31, "c8")
    m.addConstr(7.93*x[0] + 13.58*x[1] + 1.23*x[2] + 13.16*x[3] + 14.37*x[4] >= 31, "c9")
    m.addConstr(4.61*x[0] + 13.49*x[3] >= 31, "c10")
    m.addConstr(4.61*x[0] + 7.9*x[1] >= 36, "c11")
    m.addConstr(7.9*x[1] + 13.49*x[3] >= 44, "c12")
    m.addConstr(9.97*x[2] + 13.49*x[3] >= 68, "c13")
    m.addConstr(7.9*x[1] + 9.97*x[2] >= 63, "c14")
    m.addConstr(7.9*x[1] + 10.58*x[4] >= 41, "c15")
    m.addConstr(9.97*x[2] + 10.58*x[4] >= 43, "c16")
    m.addConstr(4.61*x[0] + 10.58*x[4] >= 52, "c17")
    m.addConstr(7.9*x[1] + 9.97*x[2] + 10.58*x[4] >= 47, "c18")
    m.addConstr(4.61*x[0] + 7.9*x[1] + 9.97*x[2] + 13.49*x[3] + 10.58*x[4] >= 47, "c19")
    m.addConstr(-9*x[1] + 6*x[4] >= 0, "c20")
    m.addConstr(7.93*x[0] + 13.58*x[1] + 14.37*x[4] <= 125, "c21")
    m.addConstr(1.23*x[2] + 13.16*x[3] + 14.37*x[4] <= 156, "c22")
    m.addConstr(13.58*x[1] + 1.23*x[2] + 13.16*x[3] <= 201, "c23")
    m.addConstr(13.58*x[1] + 1.23*x[2] + 14.37*x[4] <= 122, "c24")
    m.addConstr(7.93*x[0] + 13.58*x[1] + 1.23*x[2] <= 199, "c25")
    m.addConstr(7.93*x[0] + 1.23*x[2] + 14.37*x[4] <= 110, "c26")
    m.addConstr(7.93*x[0] + 13.16*x[3] + 14.37*x[4] <= 269, "c27")
    m.addConstr(7.93*x[0] + 13.58*x[1] + 13.16*x[3] <= 158, "c28")
    m.addConstr(4.61*x[0] + 9.97*x[2] + 13.49*x[3] <= 225, "c29")
    m.addConstr(4.61*x[0] + 7.9*x[1] + 10.58*x[4] <= 170, "c30")
    m.addConstr(4.61*x[0] + 7.9*x[1] + 9.97*x[2] <= 88, "c31")
    m.addConstr(4.61*x[0] + 13.49*x[3] + 10.58*x[4] <= 105, "c32")
    m.addConstr(7.9*x[1] + 9.97*x[2] + 10.58*x[4] <= 138, "c33")


    # 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 problem 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')
```
