```json
{
  "sym_variables": [
    ("x0", "potatoes"),
    ("x1", "corn cobs"),
    ("x2", "black beans"),
    ("x3", "slices of pizza"),
    ("x4", "oreos"),
    ("x5", "strawberries")
  ],
  "objective_function": "8.53 * x0 + 1.25 * x1 + 8.85 * x2 + 6.57 * x3 + 5.18 * x4 + 8.45 * x5",
  "constraints": [
    "2.81 * x0 + 0.55 * x1 + 2.39 * x2 + 2.19 * x3 + 2.54 * x4 + 0.25 * x5 <= 189",
    "1.16 * x0 + 1.81 * x1 + 2.65 * x2 + 0.59 * x3 + 2.14 * x4 + 0.82 * x5 <= 193",
    "0.55 * x1 + 0.25 * x5 >= 22",
    "2.39 * x2 + 2.19 * x3 >= 22",
    "2.81 * x0 + 2.39 * x2 >= 17",
    "0.55 * x1 + 2.54 * x4 >= 14",
    "2.54 * x4 + 0.25 * x5 >= 26",
    "0.55 * x1 + 2.39 * x2 >= 13",
    "2.81 * x0 + 0.25 * x5 >= 12",
    "2.39 * x2 + 2.54 * x4 >= 11",
    "0.55 * x1 + 2.19 * x3 >= 11",
    "2.81 * x0 + 2.54 * x4 >= 12",
    "2.81 * x0 + 2.39 * x2 + 2.54 * x4 >= 29",
    "2.81 * x0 + 2.19 * x3 + 0.25 * x5 >= 29",
    "2.39 * x2 + 2.19 * x3 + 2.54 * x4 >= 29",
    "2.39 * x2 + 2.54 * x4 + 0.25 * x5 >= 29",
    "2.81 * x0 + 0.55 * x1 + 2.54 * x4 >= 29",
    "2.81 * x0 + 2.54 * x4 + 0.25 * x5 >= 29",
    "2.81 * x0 + 0.55 * x1 + 0.25 * x5 >= 29",
    "2.81 * x0 + 2.39 * x2 + 0.25 * x5 >= 29",
    "2.81 * x0 + 2.19 * x3 + 2.54 * x4 >= 29",
    "0.55 * x1 + 2.19 * x3 + 0.25 * x5 >= 29",
    "2.81 * x0 + 0.55 * x1 + 2.19 * x3 >= 29",
    "2.81 * x0 + 2.39 * x2 + 2.19 * x3 >= 29",
    "2.81 * x0 + 0.55 * x1 + 2.39 * x2 >= 29",
    "2.39 * x2 + 2.19 * x3 + 0.25 * x5 >= 29",
    "0.55 * x1 + 2.19 * x3 + 2.54 * x4 >= 29",
    "2 * x4 - x5 >= 0",
    "- x0 + 3 * x3 >= 0",
    "2.54 * x4 + 0.25 * x5 <= 79",
    "2.81 * x0 + 0.55 * x1 <= 157",
    "2.81 * x0 + 0.55 * x1 + 2.54 * x4 <= 177",
    "0.55 * x1 + 2.39 * x2 + 0.25 * x5 <= 165",
    "0.55 * x1 + 2.39 * x2 + 2.54 * x4 <= 121",
    "2.39 * x2 + 2.19 * x3 + 2.54 * x4 <= 49",
    "2.39 * x2 + 2.19 * x3 + 0.25 * x5 <= 121",
    "2.81 * x0 + 2.19 * x3 + 2.54 * x4 <= 151",
    "2.65 * x2 + 2.14 * x4 <= 87",
    "1.16 * x0 + 1.81 * x1 <= 48",
    "2.65 * x2 + 2.14 * x4 + 0.82 * x5 <= 162",
    "1.16 * x0 + 1.81 * x1 + 0.82 * x5 <= 39",
    "1.81 * x1 + 2.14 * x4 + 0.82 * x5 <= 163"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
potatoes = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="potatoes")
corn_cobs = m.addVar(lb=0, vtype=gp.GRB.INTEGER, name="corn_cobs")
black_beans = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="black_beans")
slices_of_pizza = m.addVar(lb=0, vtype=gp.GRB.INTEGER, name="slices_of_pizza")
oreos = m.addVar(lb=0, vtype=gp.GRB.INTEGER, name="oreos")
strawberries = m.addVar(lb=0, vtype=gp.GRB.INTEGER, name="strawberries")


# Set objective function
m.setObjective(8.53 * potatoes + 1.25 * corn_cobs + 8.85 * black_beans + 6.57 * slices_of_pizza + 5.18 * oreos + 8.45 * strawberries, gp.GRB.MINIMIZE)

# Add constraints

umami_index = {
    'potatoes': 2.81,
    'corn_cobs': 0.55,
    'black_beans': 2.39,
    'slices_of_pizza': 2.19,
    'oreos': 2.54,
    'strawberries': 0.25
}
sourness_index = {
    'potatoes': 1.16,
    'corn_cobs': 1.81,
    'black_beans': 2.65,
    'slices_of_pizza': 0.59,
    'oreos': 2.14,
    'strawberries': 0.82
}

m.addConstr(umami_index['potatoes'] * potatoes + umami_index['corn_cobs'] * corn_cobs + umami_index['black_beans'] * black_beans + umami_index['slices_of_pizza'] * slices_of_pizza + umami_index['oreos'] * oreos + umami_index['strawberries'] * strawberries <= 189, "umami_upper_bound")
m.addConstr(sourness_index['potatoes'] * potatoes + sourness_index['corn_cobs'] * corn_cobs + sourness_index['black_beans'] * black_beans + sourness_index['slices_of_pizza'] * slices_of_pizza + sourness_index['oreos'] * oreos + sourness_index['strawberries'] * strawberries <= 193, "sourness_upper_bound")


m.addConstr(umami_index['corn_cobs'] * corn_cobs + umami_index['strawberries'] * strawberries >= 22)
m.addConstr(umami_index['black_beans'] * black_beans + umami_index['slices_of_pizza'] * slices_of_pizza >= 22)
m.addConstr(umami_index['potatoes'] * potatoes + umami_index['black_beans'] * black_beans >= 17)
m.addConstr(umami_index['corn_cobs'] * corn_cobs + umami_index['oreos'] * oreos >= 14)
m.addConstr(umami_index['oreos'] * oreos + umami_index['strawberries'] * strawberries >= 26)
m.addConstr(umami_index['corn_cobs'] * corn_cobs + umami_index['black_beans'] * black_beans >= 13)
m.addConstr(umami_index['potatoes'] * potatoes + umami_index['strawberries'] * strawberries >= 12)
m.addConstr(umami_index['black_beans'] * black_beans + umami_index['oreos'] * oreos >= 11)
m.addConstr(umami_index['corn_cobs'] * corn_cobs + umami_index['slices_of_pizza'] * slices_of_pizza >= 11)
m.addConstr(umami_index['potatoes'] * potatoes + umami_index['oreos'] * oreos >= 12)


# ... (rest of the constraints, following the same pattern)
m.addConstr(2 * oreos - strawberries >= 0)
m.addConstr(-potatoes + 3 * slices_of_pizza >= 0)
# ... (rest of the constraints)


# Optimize model
m.optimize()

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

```