```json
{
  "sym_variables": [
    ("x0", "bagged salads"),
    ("x1", "apples"),
    ("x2", "hamburgers"),
    ("x3", "sashimi"),
    ("x4", "bowls of instant ramen")
  ],
  "objective_function": "6*x0 + 4*x1 + 8*x2 + 8*x3 + 8*x4",
  "constraints": [
    "16*x1 + 18*x4 >= 46",
    "10*x0 + 18*x4 >= 77",
    "10*x0 + 16*x1 >= 76",
    "10*x0 + 17*x3 >= 79",
    "16*x1 + 25*x2 >= 65",
    "16*x1 + 17*x3 >= 44",
    "10*x0 + 16*x1 + 25*x2 + 17*x3 + 18*x4 >= 44",
    "12*x2 + 18*x3 >= 58",
    "14*x1 + 22*x4 >= 88",
    "4*x0 + 12*x2 >= 39",
    "14*x1 + 12*x2 >= 80",
    "4*x0 + 14*x1 >= 91",
    "14*x1 + 12*x2 + 22*x4 >= 50",
    "4*x0 + 12*x2 + 18*x3 >= 50",
    "14*x1 + 12*x2 + 22*x4 >= 74",
    "4*x0 + 12*x2 + 18*x3 >= 74",
    "4*x0 + 14*x1 + 12*x2 + 18*x3 + 22*x4 >= 74",
    "3*x0 - 3*x3 >= 0",
    "6*x0 - 6*x2 >= 0",
    "10*x0 + 25*x2 <= 311",
    "10*x0 + 16*x1 + 18*x4 <= 371",
    "16*x1 + 25*x2 + 18*x4 <= 277",
    "10*x0 + 16*x1 + 17*x3 <= 392",
    "25*x2 + 17*x3 + 18*x4 <= 196",
    "10*x0 + 17*x3 + 18*x4 <= 306",
    "10*x0 + 25*x2 + 18*x4 <= 245",
    "16*x1 + 17*x3 + 18*x4 <= 384",
    "10*x0 + 16*x1 + 25*x2 <= 389",
    "10*x0 + 25*x2 + 17*x3 <= 334",
    "14*x1 + 22*x4 <= 376",
    "4*x0 + 14*x1 <= 377",
    "12*x2 + 22*x4 <= 398",
    "4*x0 + 12*x2 <= 130",
    "4*x0 + 14*x1 + 12*x2 <= 136",
    "x0 >= 0",
    "x1 >= 0",
    "x2 >= 0",
    "x3 >= 0",
    "x4 >= 0"

  ]
}
```

```python
import gurobipy as gp

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

# Create variables
x = m.addVars(5, lb=0, vtype=gp.GRB.CONTINUOUS, name=["bagged salads", "apples", "hamburgers", "sashimi", "bowls of instant ramen"])


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

# Add constraints

protein = [10, 16, 25, 17, 18]
calcium = [4, 14, 12, 18, 22]

m.addConstr(16*x[1] + 18*x[4] >= 46)
m.addConstr(10*x[0] + 18*x[4] >= 77)
m.addConstr(10*x[0] + 16*x[1] >= 76)
m.addConstr(10*x[0] + 17*x[3] >= 79)
m.addConstr(16*x[1] + 25*x[2] >= 65)
m.addConstr(16*x[1] + 17*x[3] >= 44)
m.addConstr(10*x[0] + 16*x[1] + 25*x[2] + 17*x[3] + 18*x[4] >= 44)


m.addConstr(12*x[2] + 18*x[3] >= 58)
m.addConstr(14*x[1] + 22*x[4] >= 88)
m.addConstr(4*x[0] + 12*x[2] >= 39)
m.addConstr(14*x[1] + 12*x[2] >= 80)
m.addConstr(4*x[0] + 14*x[1] >= 91)
m.addConstr(14*x[1] + 12*x[2] + 22*x[4] >= 50)
m.addConstr(4*x[0] + 12*x[2] + 18*x[3] >= 50)
m.addConstr(14*x[1] + 12*x[2] + 22*x[4] >= 74)
m.addConstr(4*x[0] + 12*x[2] + 18*x[3] >= 74)
m.addConstr(4*x[0] + 14*x[1] + 12*x[2] + 18*x[3] + 22*x[4] >= 74)

m.addConstr(3*x[0] - 3*x[3] >= 0)
m.addConstr(6*x[0] - 6*x[2] >= 0)


m.addConstr(10*x[0] + 25*x[2] <= 311)
m.addConstr(10*x[0] + 16*x[1] + 18*x[4] <= 371)
m.addConstr(16*x[1] + 25*x[2] + 18*x[4] <= 277)
m.addConstr(10*x[0] + 16*x[1] + 17*x[3] <= 392)
m.addConstr(25*x[2] + 17*x[3] + 18*x[4] <= 196)
m.addConstr(10*x[0] + 17*x[3] + 18*x[4] <= 306)
m.addConstr(10*x[0] + 25*x[2] + 18*x[4] <= 245)
m.addConstr(16*x[1] + 17*x[3] + 18*x[4] <= 384)
m.addConstr(10*x[0] + 16*x[1] + 25*x[2] <= 389)
m.addConstr(10*x[0] + 25*x[2] + 17*x[3] <= 334)

m.addConstr(14*x[1] + 22*x[4] <= 376)
m.addConstr(4*x[0] + 14*x[1] <= 377)
m.addConstr(12*x[2] + 22*x[4] <= 398)
m.addConstr(4*x[0] + 12*x[2] <= 130)
m.addConstr(4*x[0] + 14*x[1] + 12*x[2] <= 136)



# Optimize model
m.optimize()

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

```