```json
{
  "sym_variables": [
    ("x0", "chicken drumsticks"),
    ("x1", "bowls of instant ramen"),
    ("x2", "knishes"),
    ("x3", "bowls of cereal"),
    ("x4", "cantaloupes")
  ],
  "objective_function": "2*x0 + 2*x1 + 5*x2 + 7*x3 + 3*x4",
  "constraints": [
    "14.54*x0 + 15.72*x2 >= 26",
    "14.25*x3 + 6.87*x4 >= 38",
    "3.48*x1 + 14.25*x3 >= 45",
    "3.48*x1 + 6.87*x4 >= 16",
    "14.54*x0 + 6.87*x4 >= 33",
    "3.48*x1 + 15.72*x2 >= 33",
    "15.72*x2 + 14.25*x3 >= 44",
    "14.54*x0 + 3.48*x1 + 15.72*x2 >= 38",
    "3.48*x1 + 15.72*x2 + 14.25*x3 >= 38",
    "14.54*x0 + 3.48*x1 + 15.72*x2 >= 44",
    "3.48*x1 + 15.72*x2 + 14.25*x3 >= 44",
    "9.36*x1 + 10.25*x4 >= 66",
    "6.9*x0 + 9.36*x1 >= 62",
    "9.36*x1 + 14.1*x2 >= 66",
    "14.1*x2 + 10.96*x3 >= 45",
    "6.9*x0 + 10.96*x3 >= 41",
    "6.9*x0 + 10.25*x4 >= 33",
    "6.9*x0 + 9.36*x1 + 10.96*x3 >= 49",
    "6.9*x0 + 14.1*x2 + 10.96*x3 >= 49",
    "14.1*x2 + 10.96*x3 + 10.25*x4 >= 49",
    "9.36*x1 + 10.96*x3 + 10.25*x4 >= 49",
    "6.9*x0 + 9.36*x1 + 10.25*x4 >= 49",
    "6.9*x0 + 14.1*x2 + 10.25*x4 >= 49",
    "6.9*x0 + 9.36*x1 + 10.96*x3 >= 59",
    "6.9*x0 + 14.1*x2 + 10.96*x3 >= 59",
    "14.1*x2 + 10.96*x3 + 10.25*x4 >= 59",
    "9.36*x1 + 10.96*x3 + 10.25*x4 >= 59",
    "6.9*x0 + 9.36*x1 + 10.25*x4 >= 59",
    "6.9*x0 + 14.1*x2 + 10.25*x4 >= 59",

    "15.72*x2 + 14.25*x3 <= 254",
    "3.48*x1 + 15.72*x2 <= 82",
    "15.72*x2 + 6.87*x4 <= 203",
    "14.54*x0 + 3.48*x1 <= 124",
    "14.25*x3 + 6.87*x4 <= 211",
    "14.54*x0 + 3.48*x1 + 6.87*x4 <= 92",
    "14.54*x0 + 3.48*x1 + 15.72*x2 + 14.25*x3 + 6.87*x4 <= 92",


    "9.36*x1 + 14.1*x2 <= 265",
    "14.1*x2 + 10.25*x4 <= 150",
    "14.1*x2 + 10.96*x3 <= 318",
    "9.36*x1 + 10.25*x4 <= 211",
    "6.9*x0 + 14.1*x2 <= 252",
    "9.36*x1 + 10.96*x3 <= 81",
    "6.9*x0 + 9.36*x1 <= 231",
    "6.9*x0 + 10.25*x4 <= 311",
    "6.9*x0 + 14.1*x2 + 10.25*x4 <= 167",
    "9.36*x1 + 14.1*x2 + 10.25*x4 <= 115",
    "9.36*x1 + 14.1*x2 + 10.96*x3 <= 210",
    "6.9*x0 + 9.36*x1 + 10.96*x3 <= 361",
    "6.9*x0 + 9.36*x1 + 14.1*x2 + 10.96*x3 + 10.25*x4 <= 361"

    
  ]
}
```

```python
import gurobipy as gp

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

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


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

# Add constraints

tastiness = [14.54, 3.48, 15.72, 14.25, 6.87]
umami = [6.9, 9.36, 14.1, 10.96, 10.25]

m.addConstr(tastiness[0]*x[0] + tastiness[2]*x[2] >= 26)
m.addConstr(tastiness[3]*x[3] + tastiness[4]*x[4] >= 38)
m.addConstr(tastiness[1]*x[1] + tastiness[3]*x[3] >= 45)
m.addConstr(tastiness[1]*x[1] + tastiness[4]*x[4] >= 16)
m.addConstr(tastiness[0]*x[0] + tastiness[4]*x[4] >= 33)
m.addConstr(tastiness[1]*x[1] + tastiness[2]*x[2] >= 33)
m.addConstr(tastiness[2]*x[2] + tastiness[3]*x[3] >= 44)
m.addConstr(tastiness[0]*x[0] + tastiness[1]*x[1] + tastiness[2]*x[2] >= 38)
m.addConstr(tastiness[1]*x[1] + tastiness[2]*x[2] + tastiness[3]*x[3] >= 38)
m.addConstr(tastiness[0]*x[0] + tastiness[1]*x[1] + tastiness[2]*x[2] >= 44)
m.addConstr(tastiness[1]*x[1] + tastiness[2]*x[2] + tastiness[3]*x[3] >= 44)


m.addConstr(umami[1]*x[1] + umami[4]*x[4] >= 66)
m.addConstr(umami[0]*x[0] + umami[1]*x[1] >= 62)
m.addConstr(umami[1]*x[1] + umami[2]*x[2] >= 66)
m.addConstr(umami[2]*x[2] + umami[3]*x[3] >= 45)
m.addConstr(umami[0]*x[0] + umami[3]*x[3] >= 41)
m.addConstr(umami[0]*x[0] + umami[4]*x[4] >= 33)
m.addConstr(umami[0]*x[0] + umami[1]*x[1] + umami[3]*x[3] >= 49)
m.addConstr(umami[0]*x[0] + umami[2]*x[2] + umami[3]*x[3] >= 49)
m.addConstr(umami[2]*x[2] + umami[3]*x[3] + umami[4]*x[4] >= 49)
m.addConstr(umami[1]*x[1] + umami[3]*x[3] + umami[4]*x[4] >= 49)
m.addConstr(umami[0]*x[0] + umami[1]*x[1] + umami[4]*x[4] >= 49)
m.addConstr(umami[0]*x[0] + umami[2]*x[2] + umami[4]*x[4] >= 49)
m.addConstr(umami[0]*x[0] + umami[1]*x[1] + umami[3]*x[3] >= 59)
m.addConstr(umami[0]*x[0] + umami[2]*x[2] + umami[3]*x[3] >= 59)
m.addConstr(umami[2]*x[2] + umami[3]*x[3] + umami[4]*x[4] >= 59)
m.addConstr(umami[1]*x[1] + umami[3]*x[3] + umami[4]*x[4] >= 59)
m.addConstr(umami[0]*x[0] + umami[1]*x[1] + umami[4]*x[4] >= 59)
m.addConstr(umami[0]*x[0] + umami[2]*x[2] + umami[4]*x[4] >= 59)



m.addConstr(tastiness[2]*x[2] + tastiness[3]*x[3] <= 254)
m.addConstr(tastiness[1]*x[1] + tastiness[2]*x[2] <= 82)
m.addConstr(tastiness[2]*x[2] + tastiness[4]*x[4] <= 203)
m.addConstr(tastiness[0]*x[0] + tastiness[1]*x[1] <= 124)
m.addConstr(tastiness[3]*x[3] + tastiness[4]*x[4] <= 211)
m.addConstr(tastiness[0]*x[0] + tastiness[1]*x[1] + tastiness[4]*x[4] <= 92)
m.addConstr(sum([tastiness[i]*x[i] for i in range(5)]) <= 92)

m.addConstr(umami[1]*x[1] + umami[2]*x[2] <= 265)
m.addConstr(umami[2]*x[2] + umami[4]*x[4] <= 150)
m.addConstr(umami[2]*x[2] + umami[3]*x[3] <= 318)
m.addConstr(umami[1]*x[1] + umami[4]*x[4] <= 211)
m.addConstr(umami[0]*x[0] + umami[2]*x[2] <= 252)
m.addConstr(umami[1]*x[1] + umami[3]*x[3] <= 81)
m.addConstr(umami[0]*x[0] + umami[1]*x[1] <= 231)
m.addConstr(umami[0]*x[0] + umami[4]*x[4] <= 311)
m.addConstr(umami[0]*x[0] + umami[2]*x[2] + umami[4]*x[4] <= 167)
m.addConstr(umami[1]*x[1] + umami[2]*x[2] + umami[4]*x[4] <= 115)
m.addConstr(umami[1]*x[1] + umami[2]*x[2] + umami[3]*x[3] <= 210)
m.addConstr(umami[0]*x[0] + umami[1]*x[1] + umami[3]*x[3] <= 361)
m.addConstr(sum([umami[i]*x[i] for i in range(5)]) <= 361)



# Optimize model
m.optimize()

# Print results
if m.status == gp.GRB.OPTIMAL:
    print("Optimal solution found:")
    for v in m.getVars():
        print(f"{v.varName}: {v.x}")
    print(f"Objective value: {m.objVal}")
elif m.status == gp.GRB.INFEASIBLE:
    print("Model is infeasible.")
else:
    print(f"Optimization terminated with status {m.status}.")

```
