```json
{
  "sym_variables": [
    ("x0", "ham sandwiches"),
    ("x1", "kale salads"),
    ("x2", "chicken drumsticks"),
    ("x3", "bowls of cereal"),
    ("x4", "hot dogs"),
    ("x5", "cantaloupes")
  ],
  "objective_function": "6.16*x0*x1 + 3.17*x0*x4 + 8.01*x1**2 + 5.61*x1*x3 + 9.03*x1*x4 + 4.95*x2*x4 + 9.57*x2*x5 + 6.49*x3**2 + 7.91*x0 + 6.47*x1 + 5.53*x3 + 9.15*x4 + 5.29*x5",
  "constraints": [
    "3.21*x0 + 0.05*x3 >= 18",
    "0.05*x3**2 + 1.57*x5**2 >= 10",
    "3.21*x0 + 3.83*x4 >= 9",
    "1.4*x2 + 0.05*x3 >= 14",
    "0.05*x3**2 + 3.83*x4**2 + 1.57*x5**2 >= 17",
    "3.24*x1 + 3.83*x4 + 1.57*x5 >= 17",
    "0.05*x3 + 3.83*x4 + 1.57*x5 >= 10",
    "3.24*x1**2 + 3.83*x4**2 + 1.57*x5**2 >= 10",
    "3.21*x0 + 3.24*x1 + 1.4*x2 + 0.05*x3 + 3.83*x4 + 1.57*x5 >= 10",
    "4.04*x2 + 3.05*x4 >= 13",
    "2.9*x1 + 4.04*x2 >= 14",
    "2.9*x1 + 0.4*x5 >= 19",
    "3.05*x4 + 0.4*x5 >= 18",
    "4.39**2*x0**2 + 4.04**2*x2**2 >= 8",
    "4.39*x0 + 3.05*x4 >= 20",
    "4.39*x0 + 0.4*x5 >= 12",
    "4.39*x0 + 1.09*x3 >= 14",
    "4.04*x2 + 0.4*x5 >= 18",
    "1.09*x3 + 0.4*x5 >= 16",
    "4.39*x0 + 2.9*x1 + 4.04*x2 >= 21",
    "2.9*x1 + 1.09*x3 + 0.4*x5 >= 21",
    "2.9**2*x1**2 + 3.05**2*x4**2 + 0.4**2*x5**2 >= 21",
    "4.39**2*x0**2 + 4.04**2*x2**2 + 1.09**2*x3**2 >= 21",
    "4.39*x0 + 3.05*x4 + 0.4*x5 >= 21",
    "4.39*x0 + 4.04*x2 + 3.05*x4 >= 21",
    "4.04**2*x2**2 + 1.09**2*x3**2 + 3.05**2*x4**2 >= 21",
    "3.21*x0 + 0.05*x3 <= 81",
    "2.81*x0 + 2.18*x3 >= 36",
    "2.81*x0 + 1.54*x2 >= 12",
    "x0 >= 0",
    "x1 >= 0",
    "x2 >= 0",
    "x3 >= 0",
    "x4 >= 0",
    "x5 >= 0",
    "3.21*x0 <= 109",
    "3.24*x1 <= 109",
    "1.4*x2 <= 109",
    "0.05*x3 <= 109",
    "3.83*x4 <= 109",
    "1.57*x5 <= 109",
    "4.39*x0 <= 129",
    "2.9*x1 <= 129",
    "4.04*x2 <= 129",
    "1.09*x3 <= 129",
    "3.05*x4 <= 129",
    "0.4*x5 <= 129",
    "1.66*x0 <= 108",
    "1.27*x1 <= 108",
    "1.43*x2 <= 108",
    "4.57*x3 <= 108",
    "2.6*x4 <= 108",
    "2.38*x5 <= 108",
    "2.81*x0 <= 225",
    "3.56*x1 <= 225",
    "1.54*x2 <= 225",
    "2.18*x3 <= 225",
    "3.67*x4 <= 225",
    "0.13*x5 <= 225",
    "x0 % 1 == 0",
    "x1 % 1 == 0",
    "x2 % 1 == 0",
    "x3 % 1 == 0",
    "x4 % 1 == 0",
    "x5 % 1 == 0"


  ]
}
```

```python
import gurobipy as gp

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

# Create variables
ham_sandwiches = m.addVar(vtype=gp.GRB.INTEGER, name="ham_sandwiches")
kale_salads = m.addVar(vtype=gp.GRB.INTEGER, name="kale_salads")
chicken_drumsticks = m.addVar(vtype=gp.GRB.INTEGER, name="chicken_drumsticks")
bowls_of_cereal = m.addVar(vtype=gp.GRB.INTEGER, name="bowls_of_cereal")
hot_dogs = m.addVar(vtype=gp.GRB.INTEGER, name="hot_dogs")
cantaloupes = m.addVar(vtype=gp.GRB.INTEGER, name="cantaloupes")


# Set objective function
m.setObjective(6.16*ham_sandwiches*kale_salads + 3.17*ham_sandwiches*hot_dogs + 8.01*kale_salads**2 + 5.61*kale_salads*bowls_of_cereal + 9.03*kale_salads*hot_dogs + 4.95*chicken_drumsticks*hot_dogs + 9.57*chicken_drumsticks*cantaloupes + 6.49*bowls_of_cereal**2 + 7.91*ham_sandwiches + 6.47*kale_salads + 5.53*bowls_of_cereal + 9.15*hot_dogs + 5.29*cantaloupes, gp.GRB.MINIMIZE)

# Add constraints
m.addConstr(3.21*ham_sandwiches + 0.05*bowls_of_cereal >= 18)
m.addConstr(0.05*bowls_of_cereal**2 + 1.57*cantaloupes**2 >= 10)
# ... (add all other constraints similarly)
m.addConstr(3.21 * ham_sandwiches <= 109)
# ... (add all other resource constraints similarly)


# Optimize model
m.optimize()

# Print results
if m.status == gp.GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    print('ham_sandwiches:', ham_sandwiches.x)
    print('kale_salads:', kale_salads.x)
    print('chicken_drumsticks:', chicken_drumsticks.x)
    print('bowls_of_cereal:', bowls_of_cereal.x)
    print('hot_dogs:', hot_dogs.x)
    print('cantaloupes:', cantaloupes.x)

elif m.status == gp.GRB.INFEASIBLE:
    print("The model is infeasible.")
else:
    print("Optimization ended with status:", m.status)

```