```json
{
  "sym_variables": [
    ("x0", "ham sandwiches"),
    ("x1", "black beans"),
    ("x2", "steaks"),
    ("x3", "apple pies"),
    ("x4", "chicken thighs"),
    ("x5", "cornichons")
  ],
  "objective_function": "6*x0*x1 + 1*x0*x3 + 7*x1**2 + 5*x1*x2 + 8*x1*x5 + 3*x2**2 + 6*x2*x3 + 2*x2*x5 + 9*x3*x4 + 4*x4*x5 + 2*x5**2",
  "constraints": [
    "1.94*x0 + 3.66*x1 + 1.77*x2 + 2.05*x3 + 3.2*x4 + 0.29*x5 <= 44",
    "0.93*x0 + 2.25*x1 + 0.87*x2 + 0.56*x3 + 1.75*x4 + 2.88*x5 <= 110",
    "3.66*x1 + 2.05*x3 >= 5",
    "1.94*x0 + 3.2*x4 >= 2",
    "3.66*x1**2 + 0.29*x5**2 >= 3",
    "1.94*x0 + 0.29*x5 >= 6",
    "2.05*x3 + 3.2*x4 >= 7",
    "3.66*x1 + 3.2*x4 >= 3",
    "1.94*x0 + 3.66*x1 + 1.77*x2 + 2.05*x3 + 3.2*x4 + 0.29*x5 >= 3",
    "2.25*x1 + 0.87*x2 >= 8",
    "2.25*x1**2 + 1.75*x4**2 >= 15",
    "0.87*x2 + 0.56*x3 >= 8",
    "0.56*x3 + 2.88*x5 >= 15",
    "0.93*x0**2 + 0.87*x2**2 >= 7",
    "0.87*x2**2 + 2.88*x5**2 >= 16",
    "0.93*x0**2 + 2.88*x5**2 >= 9",
    "0.93*x0 + 2.25*x1 >= 7",
    "2.25*x1**2 + 2.88*x5**2 >= 12",
    "1.75*x4 + 2.88*x5 >= 13",
    "2.25*x1 + 0.56*x3 >= 10",
    "0.93*x0 + 2.25*x1 + 0.87*x2 + 0.56*x3 + 1.75*x4 + 2.88*x5 >= 10",
    "3*x0 - 9*x4 >= 0",
    "1.94*x0 + 0.29*x5 <= 20",
    "3.66*x1 + 2.05*x3 <= 10",
    "1.94*x0**2 + 1.77*x2**2 <= 15",
    "3.66*x1**2 + 1.77*x2**2 + 3.2*x4**2 <= 13",
    "1.77*x2 + 2.05*x3 + 3.2*x4 <= 19",
    "1.94*x0 + 3.66*x1 + 2.05*x3 <= 11",
    "1.94*x0 + 3.66*x1 + 3.2*x4 <= 13",
    "1.94*x0 + 1.77*x2 + 0.29*x5 <= 18",
    "1.77*x2 + 2.05*x3 + 0.29*x5 <= 11",
    "3.66*x1 + 2.05*x3 + 0.29*x5 <= 24",
    "2.05*x3 + 3.2*x4 + 0.29*x5 <= 38",
    "1.94*x0**2 + 3.2*x4**2 + 0.29*x5**2 <= 41",
    "1.77*x2**2 + 3.2*x4**2 + 0.29*x5**2 <= 35",
    "0.56*x3**2 + 2.88*x5**2 <= 105",
    "2.25*x1 + 0.87*x2 + 2.88*x5 <= 87",
    "2.25*x1 + 0.56*x3 + 2.88*x5 <= 78",
    "2.25*x1 + 0.56*x3 + 1.75*x4 <= 51",
    "0.93*x0**2 + 2.25*x1**2 + 0.56*x3**2 <= 63",
    "0.93*x0 + 0.56*x3 + 1.75*x4 <= 41",
    "0.87*x2 + 0.56*x3 + 2.88*x5 <= 49",
    "0.93*x0 + 0.87*x2 + 0.56*x3 <= 102",
    "0.87*x2**2 + 0.56*x3**2 + 1.75*x4**2 <= 36",
    "0.93*x0**2 + 0.87*x2**2 + 1.75*x4**2 <= 101",
    "0.93*x0 + 2.25*x1 + 1.75*x4 <= 43",
    "0.93*x0**2 + 2.25*x1**2 + 0.87*x2**2 <= 67"
  ]
}
```

```python
import gurobipy as gp
from gurobipy import GRB

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

# Create variables
ham_sandwiches = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="ham_sandwiches")
black_beans = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="black_beans")
steaks = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="steaks")
apple_pies = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="apple_pies")
chicken_thighs = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="chicken_thighs")
cornichons = m.addVar(lb=0, vtype=GRB.INTEGER, name="cornichons")


# Set objective function
m.setObjective(6*ham_sandwiches*black_beans + 1*ham_sandwiches*apple_pies + 7*black_beans**2 + 5*black_beans*steaks + 8*black_beans*cornichons + 3*steaks**2 + 6*steaks*apple_pies + 2*steaks*cornichons + 9*apple_pies*chicken_thighs + 4*chicken_thighs*cornichons + 2*cornichons**2, GRB.MINIMIZE)

# Add constraints
m.addConstr(1.94*ham_sandwiches + 3.66*black_beans + 1.77*steaks + 2.05*apple_pies + 3.2*chicken_thighs + 0.29*cornichons <= 44, "c0")
m.addConstr(0.93*ham_sandwiches + 2.25*black_beans + 0.87*steaks + 0.56*apple_pies + 1.75*chicken_thighs + 2.88*cornichons <= 110, "c1")
m.addConstr(3.66*black_beans + 2.05*apple_pies >= 5, "c2")
m.addConstr(1.94*ham_sandwiches + 3.2*chicken_thighs >= 2, "c3")
m.addConstr(3.66*black_beans**2 + 0.29*cornichons**2 >= 3, "c4")
m.addConstr(1.94*ham_sandwiches + 0.29*cornichons >= 6, "c5")
m.addConstr(2.05*apple_pies + 3.2*chicken_thighs >= 7, "c6")
m.addConstr(3.66*black_beans + 3.2*chicken_thighs >= 3, "c7")
m.addConstr(1.94*ham_sandwiches + 3.66*black_beans + 1.77*steaks + 2.05*apple_pies + 3.2*chicken_thighs + 0.29*cornichons >= 3, "c8")
# ... (rest of the constraints)


# 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('Optimization problem is infeasible.')
else:
    print('Optimization ended with status %d' % m.status)

```