```json
{
  "sym_variables": [
    ("x0", "bananas"),
    ("x1", "eggs"),
    ("x2", "apple pies")
  ],
  "objective_function": "3.99*x0 + 4.83*x1 + 2.67*x2",
  "constraints": [
    "29*x0 + 1*x2 >= 52",
    "29*x0 + 15*x1 >= 35",
    "15*x1 + 1*x2 >= 29",
    "29*x0 + 15*x1 + 1*x2 >= 44",
    "28*x0 + 8*x2 >= 33",
    "28*x0 + 28*x1 >= 60",
    "28*x0 + 28*x1 + 8*x2 >= 60",
    "24*x0 + 25*x2 >= 119",
    "24*x0 + 5*x1 >= 83",
    "24*x0 + 5*x1 + 25*x2 >= 117",
    "8*x0 + 23*x1 >= 76",
    "23*x1 + 20*x2 >= 71",
    "8*x0 + 23*x1 + 20*x2 >= 71",
    "6*x0 - 4*x1 >= 0",
    "6*x1 - 9*x2 >= 0",
    "29*x0 + 15*x1 <= 160",
    "29*x0 + 1*x2 <= 68",
    "28*x0 + 8*x2 <= 190",
    "28*x0 + 28*x1 <= 85",
    "28*x1 + 8*x2 <= 109",
    "8*x0 + 23*x1 <= 150",
    "8*x0 + 23*x1 + 20*x2 <= 310",
    "29*x0 <= 160",
    "28*x0 <= 210",
    "24*x0 <= 365",
    "8*x0 <= 348",
    "15*x1 <= 160",
    "28*x1 <= 210",
    "5*x1 <= 365",
    "23*x1 <= 348",
    "1*x2 <= 160",
    "8*x2 <= 210",
    "25*x2 <= 365",
    "20*x2 <= 348"

  ]
}
```

```python
import gurobipy as gp

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

# Create variables
bananas = m.addVar(vtype=gp.GRB.INTEGER, name="bananas")
eggs = m.addVar(vtype=gp.GRB.CONTINUOUS, name="eggs")
apple_pies = m.addVar(vtype=gp.GRB.CONTINUOUS, name="apple_pies")

# Set objective function
m.setObjective(3.99 * bananas + 4.83 * eggs + 2.67 * apple_pies, gp.GRB.MINIMIZE)

# Add constraints
m.addConstr(29 * bananas + 1 * apple_pies >= 52, "fat_constraint1")
m.addConstr(29 * bananas + 15 * eggs >= 35, "fat_constraint2")
m.addConstr(15 * eggs + 1 * apple_pies >= 29, "fat_constraint3")
m.addConstr(29 * bananas + 15 * eggs + 1 * apple_pies >= 44, "fat_constraint4")
m.addConstr(28 * bananas + 8 * apple_pies >= 33, "calcium_constraint1")
m.addConstr(28 * bananas + 28 * eggs >= 60, "calcium_constraint2")
m.addConstr(28 * bananas + 28 * eggs + 8 * apple_pies >= 60, "calcium_constraint3")
m.addConstr(24 * bananas + 25 * apple_pies >= 119, "umami_constraint1")
m.addConstr(24 * bananas + 5 * eggs >= 83, "umami_constraint2")
m.addConstr(24 * bananas + 5 * eggs + 25 * apple_pies >= 117, "umami_constraint3")
m.addConstr(8 * bananas + 23 * eggs >= 76, "carbs_constraint1")
m.addConstr(23 * eggs + 20 * apple_pies >= 71, "carbs_constraint2")
m.addConstr(8 * bananas + 23 * eggs + 20 * apple_pies >= 71, "carbs_constraint3")
m.addConstr(6 * bananas - 4 * eggs >= 0, "constraint1")
m.addConstr(6 * eggs - 9 * apple_pies >= 0, "constraint2")
m.addConstr(29 * bananas + 15 * eggs <= 160, "fat_constraint5")
m.addConstr(29 * bananas + 1 * apple_pies <= 68, "fat_constraint6")
m.addConstr(28 * bananas + 8 * apple_pies <= 190, "calcium_constraint4")
m.addConstr(28 * bananas + 28 * eggs <= 85, "calcium_constraint5")
m.addConstr(28 * eggs + 8 * apple_pies <= 109, "calcium_constraint6")
m.addConstr(8 * bananas + 23 * eggs <= 150, "carbs_constraint4")
m.addConstr(8 * bananas + 23 * eggs + 20 * apple_pies <= 310, "carbs_constraint5")


# Resource Constraints
m.addConstr(29 * bananas <= 160, "fat_resource")
m.addConstr(28 * bananas <= 210, "calcium_resource")
m.addConstr(24 * bananas <= 365, "umami_resource")
m.addConstr(8 * bananas <= 348, "carbs_resource")
m.addConstr(15 * eggs <= 160, "fat_resource_eggs")
m.addConstr(28 * eggs <= 210, "calcium_resource_eggs")
m.addConstr(5 * eggs <= 365, "umami_resource_eggs")
m.addConstr(23 * eggs <= 348, "carbs_resource_eggs")
m.addConstr(1 * apple_pies <= 160, "fat_resource_pies")
m.addConstr(8 * apple_pies <= 210, "calcium_resource_pies")
m.addConstr(25 * apple_pies <= 365, "umami_resource_pies")
m.addConstr(20 * apple_pies <= 348, "carbs_resource_pies")



# Optimize model
m.optimize()

# Print results
if m.status == gp.GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    print('bananas:', bananas.x)
    print('eggs:', eggs.x)
    print('apple_pies:', apple_pies.x)
elif m.status == gp.GRB.INFEASIBLE:
    print('The model is infeasible.')
else:
    print('Optimization ended with status %d' % m.status)

```
