```json
{
  "sym_variables": [
    ("x0", "slices of pizza"),
    ("x1", "kiwis"),
    ("x2", "ravioli"),
    ("x3", "potatoes"),
    ("x4", "strips of bacon"),
    ("x5", "knishes")
  ],
  "objective_function": "4*x0 + 3*x1 + 7*x2 + 2*x3 + 8*x4 + 5*x5",
  "constraints": [
    "17*x0 + 3*x3 >= 24",
    "3*x3 + 23*x4 + 12*x5 >= 24",
    "17*x0 + 3*x3 + 12*x5 >= 24",
    "20*x2 + 23*x4 + 12*x5 >= 24",
    "17*x0 + 3*x3 + 23*x4 >= 24",
    "17*x0 + 20*x2 + 12*x5 >= 24",
    "17*x0 + 3*x1 + 12*x5 >= 24",
    "3*x3 + 23*x4 + 12*x5 >= 23",
    "17*x0 + 3*x3 + 12*x5 >= 23",
    "20*x2 + 23*x4 + 12*x5 >= 23",
    "17*x0 + 3*x3 + 23*x4 >= 23",
    "17*x0 + 20*x2 + 12*x5 >= 23",
    "17*x0 + 3*x1 + 12*x5 >= 23",
    "3*x3 + 23*x4 + 12*x5 >= 31",
    "17*x0 + 3*x3 + 12*x5 >= 31",
    "20*x2 + 23*x4 + 12*x5 >= 31",
    "17*x0 + 3*x3 + 23*x4 >= 31",
    "17*x0 + 20*x2 + 12*x5 >= 31",
    "17*x0 + 3*x1 + 12*x5 >= 31",
    "3*x3 + 23*x4 + 12*x5 >= 24",
    "17*x0 + 3*x3 + 12*x5 >= 24",
    "20*x2 + 23*x4 + 12*x5 >= 24",
    "17*x0 + 3*x3 + 23*x4 >= 24",
    "17*x0 + 20*x2 + 12*x5 >= 24",
    "17*x0 + 3*x1 + 12*x5 >= 24",
    "3*x3 + 23*x4 + 12*x5 >= 19",
    "17*x0 + 3*x3 + 12*x5 >= 19",
    "20*x2 + 23*x4 + 12*x5 >= 19",
    "17*x0 + 3*x3 + 23*x4 >= 19",
    "17*x0 + 20*x2 + 12*x5 >= 19",
    "17*x0 + 3*x1 + 12*x5 >= 19",
    "3*x3 + 23*x4 + 12*x5 >= 31",
    "17*x0 + 3*x3 + 12*x5 >= 31",
    "20*x2 + 23*x4 + 12*x5 >= 31",
    "17*x0 + 3*x3 + 23*x4 >= 31",
    "17*x0 + 20*x2 + 12*x5 >= 31",
    "17*x0 + 3*x1 + 12*x5 >= 31",
    "-9*x2 + 4*x3 >= 0",
    "20*x2 + 3*x3 <= 106",
    "20*x2 + 12*x5 <= 106",
    "3*x1 + 20*x2 <= 182",
    "3*x1 + 3*x3 <= 167",
    "17*x0 + 20*x2 <= 178",
    "17*x0 + 12*x5 <= 109",
    "17*x0 + 23*x4 <= 123",
    "20*x2 + 23*x4 <= 111",
    "3*x1 + 12*x5 <= 133",
    "3*x1 + 23*x4 <= 144",
    "17*x0 + 3*x1 + 12*x5 <= 132",
    "3*x1 + 23*x4 + 12*x5 <= 116",
    "17*x0 + 3*x3 + 23*x4 <= 176",
    "17*x0 + 3*x1 + 23*x4 <= 53",
    "3*x1 + 3*x3 + 23*x4 <= 115",
    "3*x1 + 20*x2 + 12*x5 <= 42",
    "17*x0 + 3*x1 + 20*x2 + 3*x3 + 23*x4 + 12*x5 <= 42",
    "17*x0 + 3*x1 + 20*x2 + 3*x3 + 23*x4 + 12*x5 <= 188" 
  ]
}
```

```python
from gurobipy import Model, GRB

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

# Create variables
pizza = m.addVar(vtype=GRB.INTEGER, name="pizza")
kiwis = m.addVar(vtype=GRB.INTEGER, name="kiwis")
ravioli = m.addVar(vtype=GRB.INTEGER, name="ravioli")
potatoes = m.addVar(vtype=GRB.CONTINUOUS, name="potatoes")
bacon = m.addVar(vtype=GRB.INTEGER, name="bacon")
knishes = m.addVar(vtype=GRB.CONTINUOUS, name="knishes")


# Set objective function
m.setObjective(4 * pizza + 3 * kiwis + 7 * ravioli + 2 * potatoes + 8 * bacon + 5 * knishes, GRB.MAXIMIZE)

# Add constraints
m.addConstr(17 * pizza + 3 * potatoes >= 24)
m.addConstr(3 * potatoes + 23 * bacon + 12 * knishes >= 24)
m.addConstr(17 * pizza + 3 * potatoes + 12 * knishes >= 24)
m.addConstr(20 * ravioli + 23 * bacon + 12 * knishes >= 24)
m.addConstr(17 * pizza + 3 * potatoes + 23 * bacon >= 24)
m.addConstr(17 * pizza + 20 * ravioli + 12 * knishes >= 24)
m.addConstr(17 * pizza + 3 * kiwis + 12 * knishes >= 24)
m.addConstr(3 * potatoes + 23 * bacon + 12 * knishes >= 23)
m.addConstr(17 * pizza + 3 * potatoes + 12 * knishes >= 23)
m.addConstr(20 * ravioli + 23 * bacon + 12 * knishes >= 23)
m.addConstr(17 * pizza + 3 * potatoes + 23 * bacon >= 23)
m.addConstr(17 * pizza + 20 * ravioli + 12 * knishes >= 23)
m.addConstr(17 * pizza + 3 * kiwis + 12 * knishes >= 23)
m.addConstr(3 * potatoes + 23 * bacon + 12 * knishes >= 31)
m.addConstr(17 * pizza + 3 * potatoes + 12 * knishes >= 31)
m.addConstr(20 * ravioli + 23 * bacon + 12 * knishes >= 31)
m.addConstr(17 * pizza + 3 * potatoes + 23 * bacon >= 31)
m.addConstr(17 * pizza + 20 * ravioli + 12 * knishes >= 31)
m.addConstr(17 * pizza + 3 * kiwis + 12 * knishes >= 31)
m.addConstr(-9 * ravioli + 4 * potatoes >= 0)
m.addConstr(20 * ravioli + 3 * potatoes <= 106)
m.addConstr(20 * ravioli + 12 * knishes <= 106)
m.addConstr(3 * kiwis + 20 * ravioli <= 182)
m.addConstr(3 * kiwis + 3 * potatoes <= 167)
m.addConstr(17 * pizza + 20 * ravioli <= 178)
m.addConstr(17 * pizza + 12 * knishes <= 109)
m.addConstr(17 * pizza + 23 * bacon <= 123)
m.addConstr(20 * ravioli + 23 * bacon <= 111)
m.addConstr(3 * kiwis + 12 * knishes <= 133)
m.addConstr(3 * kiwis + 23 * bacon <= 144)
m.addConstr(17 * pizza + 3 * kiwis + 12 * knishes <= 132)
m.addConstr(3 * kiwis + 23 * bacon + 12 * knishes <= 116)
m.addConstr(17 * pizza + 3 * potatoes + 23 * bacon <= 176)
m.addConstr(17 * pizza + 3 * kiwis + 23 * bacon <= 53)
m.addConstr(3 * kiwis + 3 * potatoes + 23 * bacon <= 115)
m.addConstr(3 * kiwis + 20 * ravioli + 12 * knishes <= 42)
m.addConstr(17 * pizza + 3 * kiwis + 20 * ravioli + 3 * potatoes + 23 * bacon + 12 * knishes <= 42)
m.addConstr(17 * pizza + 3 * kiwis + 20 * ravioli + 3 * potatoes + 23 * bacon + 12 * knishes <= 188)


# 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)

```