```json
{
  "sym_variables": [
    ("x0", "oreos"),
    ("x1", "strips of bacon"),
    ("x2", "cheeseburgers"),
    ("x3", "cherry pies")
  ],
  "objective_function": "9.32 * x0 + 7.86 * x1 + 6.97 * x2 + 5.41 * x3",
  "constraints": [
    "1.37 * x0 + 0.58 * x1 + 2.62 * x2 + 1.27 * x3 <= 193",
    "2.7 * x0 + 2.19 * x1 + 1.36 * x2 + 1.67 * x3 <= 399",
    "1.37 * x0 + 0.58 * x1 >= 18",
    "0.58 * x1 + 1.27 * x3 >= 40",
    "1.37 * x0 + 2.62 * x2 >= 31",
    "1.37 * x0 + 1.27 * x3 >= 23",
    "0.58 * x1 + 2.62 * x2 >= 39",
    "1.37 * x0 + 0.58 * x1 + 2.62 * x2 + 1.27 * x3 >= 39",
    "2.19 * x1 + 1.36 * x2 >= 33",
    "2.7 * x0 + 1.67 * x3 >= 98",
    "2.7 * x0 + 1.36 * x2 >= 61",
    "1.36 * x2 + 1.67 * x3 >= 44",
    "2.7 * x0 + 2.19 * x1 + 1.36 * x2 + 1.67 * x3 >= 44",
    "10 * x0 - 6 * x2 >= 0",
    "-8 * x0 + 9 * x1 >= 0",
    "2.62 * x2 + 1.27 * x3 <= 161",
    "2.7 * x0 + 2.19 * x1 + 1.67 * x3 <= 227",
    "2.7 * x0 + 2.19 * x1 + 1.36 * x2 <= 305",
    "2.7 * x0 + 1.36 * x2 + 1.67 * x3 <= 384",
    "2.19 * x1 + 1.36 * x2 + 1.67 * x3 <= 200"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
oreos = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="oreos")
bacon = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="bacon")
cheeseburgers = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="cheeseburgers")
cherry_pies = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="cherry_pies")


# Set objective function
m.setObjective(9.32 * oreos + 7.86 * bacon + 6.97 * cheeseburgers + 5.41 * cherry_pies, gp.GRB.MINIMIZE)

# Add constraints
m.addConstr(1.37 * oreos + 0.58 * bacon + 2.62 * cheeseburgers + 1.27 * cherry_pies <= 193, "c0")
m.addConstr(2.7 * oreos + 2.19 * bacon + 1.36 * cheeseburgers + 1.67 * cherry_pies <= 399, "c1")
m.addConstr(1.37 * oreos + 0.58 * bacon >= 18, "c2")
m.addConstr(0.58 * bacon + 1.27 * cherry_pies >= 40, "c3")
m.addConstr(1.37 * oreos + 2.62 * cheeseburgers >= 31, "c4")
m.addConstr(1.37 * oreos + 1.27 * cherry_pies >= 23, "c5")
m.addConstr(0.58 * bacon + 2.62 * cheeseburgers >= 39, "c6")
m.addConstr(1.37 * oreos + 0.58 * bacon + 2.62 * cheeseburgers + 1.27 * cherry_pies >= 39, "c7")
m.addConstr(2.19 * bacon + 1.36 * cheeseburgers >= 33, "c8")
m.addConstr(2.7 * oreos + 1.67 * cherry_pies >= 98, "c9")
m.addConstr(2.7 * oreos + 1.36 * cheeseburgers >= 61, "c10")
m.addConstr(1.36 * cheeseburgers + 1.67 * cherry_pies >= 44, "c11")
m.addConstr(2.7 * oreos + 2.19 * bacon + 1.36 * cheeseburgers + 1.67 * cherry_pies >= 44, "c12")
m.addConstr(10 * oreos - 6 * cheeseburgers >= 0, "c13")
m.addConstr(-8 * oreos + 9 * bacon >= 0, "c14")
m.addConstr(2.62 * cheeseburgers + 1.27 * cherry_pies <= 161, "c15")
m.addConstr(2.7 * oreos + 2.19 * bacon + 1.67 * cherry_pies <= 227, "c16")
m.addConstr(2.7 * oreos + 2.19 * bacon + 1.36 * cheeseburgers <= 305, "c17")
m.addConstr(2.7 * oreos + 1.36 * cheeseburgers + 1.67 * cherry_pies <= 384, "c18")
m.addConstr(2.19 * bacon + 1.36 * cheeseburgers + 1.67 * cherry_pies <= 200, "c19")


# Optimize model
m.optimize()

# Print results
if m.status == gp.GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    for v in m.getVars():
        print('%s %g' % (v.varName, v.x))
elif m.status == gp.GRB.INFEASIBLE:
    print("The problem is infeasible.")
else:
    print("The problem could not be solved to optimality.")

```
