```json
{
  "sym_variables": [
    ("x0", "hamburgers"),
    ("x1", "eggs"),
    ("x2", "pickles"),
    ("x3", "cantaloupes"),
    ("x4", "bananas"),
    ("x5", "kiwis"),
    ("x6", "chicken thighs"),
    ("x7", "hot dogs"),
    ("x8", "fruit salads")
  ],
  "objective_function": "4*x0**2 + 9*x0*x1 + 7*x0*x6 + 9*x2*x6 + 6*x3*x6 + 9*x4*x7 + 4*x4*x8 + 8*x5*x8 + 6*x1 + 9*x2",
  "constraints": [
    "9*x2 + 9*x4 >= 23",
    "2*x6 + 7*x8 >= 27",
    "9*x2 + 17*x7 >= 23",
    "13*x1**2 + 9*x4**2 >= 24",
    "6*x3 + 12*x5 >= 27",
    "1*x0 + 9*x4 >= 13",
    "12*x5**2 + 17*x7**2 >= 13",
    "9*x4 + 7*x8 >= 11",
    "9*x4**2 + 17*x7**2 >= 31",
    "6*x3 + 9*x4 >= 14",
    "13*x1**2 + 2*x6**2 >= 11",
    "1*x0**2 + 9*x2**2 >= 13",
    "12*x5 + 2*x6 >= 13",
    "13*x1 + 6*x3 >= 14",
    "1*x0 + 2*x6 >= 28",
    "9*x2 + 12*x5 >= 12",
    "6*x3 + 7*x8 >= 32",
    "9*x4 + 2*x6 >= 14",
    "6*x3 + 17*x7 >= 24",
    "1*x0 + 13*x1 + 9*x2 + 6*x3 + 9*x4 + 12*x5 + 2*x6 + 17*x7 + 7*x8 >= 24",
    "17*x0 + 7*x1 >= 32",
    "17*x0 + 15*x6 >= 52",
    "6*x4 + 2*x5 >= 43",
    "12*x2 + 2*x5 >= 41",
    "12*x2 + 15*x6 >= 20",
    "6*x3 + 15*x6 >= 22",
    "2*x5 + 6*x7 >= 21",
    "17*x0 + 6*x3 >= 33",
    "15*x6 + 13*x8 >= 47",
    "17*x0 + 6*x7 >= 32",
    "6*x3 + 13*x8 >= 19",
    "6*x4 + 13*x8 >= 33",
    "6*x3 + 2*x5 >= 18",
    "6*x7 + 13*x8 >= 42",
    "x0 + x1 <= 307/17 + x2 <= 486/12"

    
  ]
}
```

```python
from gurobipy import *

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

# Create variables
hamburgers = m.addVar(vtype=GRB.INTEGER, name="hamburgers")
eggs = m.addVar(vtype=GRB.INTEGER, name="eggs")
pickles = m.addVar(vtype=GRB.CONTINUOUS, name="pickles")
cantaloupes = m.addVar(vtype=GRB.INTEGER, name="cantaloupes")
bananas = m.addVar(vtype=GRB.CONTINUOUS, name="bananas")
kiwis = m.addVar(vtype=GRB.INTEGER, name="kiwis")
chicken_thighs = m.addVar(vtype=GRB.INTEGER, name="chicken_thighs")
hot_dogs = m.addVar(vtype=GRB.INTEGER, name="hot_dogs")
fruit_salads = m.addVar(vtype=GRB.INTEGER, name="fruit_salads")


# Set objective
m.setObjective(4*hamburgers**2 + 9*hamburgers*eggs + 7*hamburgers*chicken_thighs + 9*pickles*chicken_thighs + 6*cantaloupes*chicken_thighs + 9*bananas*hot_dogs + 4*bananas*fruit_salads + 8*kiwis*fruit_salads + 6*eggs + 9*pickles, GRB.MINIMIZE)

# Add constraints
m.addConstr(pickles * 9 + bananas * 9 >= 23)
m.addConstr(chicken_thighs * 2 + fruit_salads * 7 >= 27)
m.addConstr(pickles * 9 + hot_dogs * 17 >= 23)
m.addConstr(eggs**2 * 13 + bananas**2 * 9 >= 24)
m.addConstr(cantaloupes * 6 + kiwis * 12 >= 27)
m.addConstr(hamburgers * 1 + bananas * 9 >= 13)
m.addConstr(kiwis**2 * 12 + hot_dogs**2 * 17 >= 13)
m.addConstr(bananas * 9 + fruit_salads * 7 >= 11)
m.addConstr(bananas**2 * 9 + hot_dogs**2 * 17 >= 31)
m.addConstr(cantaloupes * 6 + bananas * 9 >= 14)
m.addConstr(eggs**2 * 13 + chicken_thighs**2 * 2 >= 11)
m.addConstr(hamburgers**2 * 1 + pickles**2 * 9 >= 13)
m.addConstr(kiwis * 12 + chicken_thighs * 2 >= 13)
m.addConstr(eggs * 13 + cantaloupes * 6 >= 14)
m.addConstr(hamburgers * 1 + chicken_thighs * 2 >= 28)
m.addConstr(pickles * 9 + kiwis * 12 >= 12)
m.addConstr(cantaloupes * 6 + fruit_salads * 7 >= 32)
m.addConstr(bananas * 9 + chicken_thighs * 2 >= 14)
m.addConstr(cantaloupes * 6 + hot_dogs * 17 >= 24)
m.addConstr(hamburgers * 1 + eggs * 13 + pickles * 9 + cantaloupes * 6 + bananas * 9 + kiwis * 12 + chicken_thighs * 2 + hot_dogs * 17 + fruit_salads * 7 >= 24)
m.addConstr(hamburgers * 17 + eggs * 7 >= 32)
m.addConstr(hamburgers * 17 + chicken_thighs * 15 >= 52)
m.addConstr(bananas * 6 + kiwis * 2 >= 43)
m.addConstr(pickles * 12 + kiwis * 2 >= 41)
m.addConstr(pickles * 12 + chicken_thighs * 15 >= 20)
m.addConstr(cantaloupes * 6 + chicken_thighs * 15 >= 22)
m.addConstr(kiwis * 2 + hot_dogs * 6 >= 21)
m.addConstr(hamburgers * 17 + cantaloupes * 6 >= 33)
m.addConstr(chicken_thighs * 15 + fruit_salads * 13 >= 47)
m.addConstr(hamburgers * 17 + hot_dogs * 6 >= 32)
m.addConstr(cantaloupes * 6 + fruit_salads * 13 >= 19)
m.addConstr(bananas * 6 + fruit_salads * 13 >= 33)
m.addConstr(cantaloupes * 6 + kiwis * 2 >= 18)
m.addConstr(hot_dogs * 6 + fruit_salads * 13 >= 42)


# carbohydrate and fiber upper bounds
m.addConstr(hamburgers * 1 + eggs * 13 + pickles * 9 + cantaloupes * 6 + bananas * 9 + kiwis * 12 + chicken_thighs * 2 + hot_dogs * 17 + fruit_salads * 7 <= 307)
m.addConstr(hamburgers * 17 + eggs * 7 + pickles * 12 + cantaloupes * 6 + bananas * 6 + kiwis * 2 + chicken_thighs * 15 + hot_dogs * 6 + fruit_salads * 13 <= 486)



# Optimize model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    for v in m.getVars():
        print('%s %g' % (v.varName, v.x))
elif m.status == GRB.INFEASIBLE:
    print("The model is infeasible.")
else:
    print("Optimization ended with status:", m.status)

```
