```json
{
  "sym_variables": [
    ("x0", "peanutbutter sandwiches"),
    ("x1", "oreos"),
    ("x2", "kiwis"),
    ("x3", "fruit salads"),
    ("x4", "milkshakes"),
    ("x5", "eggs")
  ],
  "objective_function": "4.47 * x0 + 7.12 * x1 + 3.96 * x2 + 7.26 * x3 + 9.54 * x4 + 7.14 * x5",
  "constraints": [
    "14 * x0 + 4 * x3 >= 12",
    "2 * x2 + 2 * x4 >= 15",
    "2 * x2 + 4 * x3 >= 9",
    "14 * x0 + 2 * x2 >= 8",
    "4 * x3 + 11 * x5 >= 6",
    "14 * x0 + 2 * x4 >= 5",
    "13 * x1 + 4 * x3 >= 5",
    "14 * x0 + 11 * x5 >= 14",
    "4 * x3 + 2 * x4 >= 6",
    "13 * x1 + 2 * x4 >= 15",
    "13 * x1 + 2 * x4 + 11 * x5 >= 15",
    "14 * x0 + 13 * x1 + 2 * x2 + 4 * x3 + 2 * x4 + 11 * x5 >= 15",
    "14 * x2 + 13 * x4 >= 50",
    "6 * x3 + 14 * x5 >= 49",
    "11 * x0 + 6 * x3 >= 57",
    "14 * x2 + 6 * x3 >= 21",
    "13 * x4 + 14 * x5 >= 48",
    "5 * x1 + 14 * x5 >= 39",
    "5 * x1 + 13 * x4 >= 25",
    "5 * x1 + 14 * x2 >= 43",
    "14 * x2 + 14 * x5 >= 32",
    "11 * x0 + 14 * x5 >= 37",
    "11 * x0 + 5 * x1 + 14 * x2 + 6 * x3 + 13 * x4 + 14 * x5 >= 37",
    "2 * x1 - 4 * x3 >= 0",
    "13 * x1 + 2 * x2 + 4 * x3 <= 88",
    "2 * x2 + 2 * x4 + 11 * x5 <= 33",
    "13 * x1 + 4 * x3 + 2 * x4 <= 53",
    "2 * x2 + 4 * x3 + 2 * x4 <= 29",
    "13 * x1 + 2 * x4 + 11 * x5 <= 79",
    "4 * x3 + 2 * x4 + 11 * x5 <= 97",
    "14 * x0 + 4 * x3 + 2 * x4 <= 43",
    "13 * x1 + 2 * x2 + 2 * x4 <= 25",
    "14 * x0 + 13 * x1 + 2 * x2 <= 99",
    "14 * x0 + 13 * x1 + 2 * x4 <= 51",
    "2 * x2 + 4 * x3 + 11 * x5 <= 44",
    "13 * x1 + 2 * x2 + 11 * x5 <= 35",
    "13 * x1 + 4 * x3 + 11 * x5 <= 82",
    "5 * x1 + 13 * x4 <= 369",
    "11 * x0 + 14 * x2 + 13 * x4 <= 386",
    "11 * x0 + 13 * x4 + 14 * x5 <= 371",
    "11 * x0 + 5 * x1 + 14 * x2 <= 258",
    "14 * x2 + 6 * x3 + 13 * x4 <= 276",
    "11 * x0 + 6 * x3 + 13 * x4 <= 194"
  ]
}
```

```python
from gurobipy import Model, GRB

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

# Create variables
x = {}
item_names = ['peanutbutter sandwiches', 'oreos', 'kiwis', 'fruit salads', 'milkshakes', 'eggs']
for i in range(len(item_names)):
    x[i] = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name=item_names[i])


# Set objective function
model.setObjective(4.47 * x[0] + 7.12 * x[1] + 3.96 * x[2] + 7.26 * x[3] + 9.54 * x[4] + 7.14 * x[5], GRB.MINIMIZE)

# Add constraints
umami = {0: 14, 1: 13, 2: 2, 3: 4, 4: 2, 5: 11}
fat = {0: 11, 1: 5, 2: 14, 3: 6, 4: 13, 5: 14}

model.addConstr(umami[0] * x[0] + umami[3] * x[3] >= 12)
model.addConstr(umami[2] * x[2] + umami[4] * x[4] >= 15)
model.addConstr(umami[2] * x[2] + umami[3] * x[3] >= 9)
model.addConstr(umami[0] * x[0] + umami[2] * x[2] >= 8)
model.addConstr(umami[3] * x[3] + umami[5] * x[5] >= 6)
model.addConstr(umami[0] * x[0] + umami[4] * x[4] >= 5)
model.addConstr(umami[1] * x[1] + umami[3] * x[3] >= 5)
model.addConstr(umami[0] * x[0] + umami[5] * x[5] >= 14)
model.addConstr(umami[3] * x[3] + umami[4] * x[4] >= 6)
model.addConstr(umami[1] * x[1] + umami[4] * x[4] >= 15)
model.addConstr(umami[1] * x[1] + umami[4] * x[4] + umami[5] * x[5] >= 15)
model.addConstr(sum([umami[i] * x[i] for i in range(6)]) >= 15)

model.addConstr(fat[2] * x[2] + fat[4] * x[4] >= 50)
model.addConstr(fat[3] * x[3] + fat[5] * x[5] >= 49)
model.addConstr(fat[0] * x[0] + fat[3] * x[3] >= 57)
model.addConstr(fat[2] * x[2] + fat[3] * x[3] >= 21)
model.addConstr(fat[4] * x[4] + fat[5] * x[5] >= 48)
model.addConstr(fat[1] * x[1] + fat[5] * x[5] >= 39)
model.addConstr(fat[1] * x[1] + fat[4] * x[4] >= 25)
model.addConstr(fat[1] * x[1] + fat[2] * x[2] >= 43)
model.addConstr(fat[2] * x[2] + fat[5] * x[5] >= 32)
model.addConstr(fat[0] * x[0] + fat[5] * x[5] >= 37)
model.addConstr(sum([fat[i] * x[i] for i in range(6)]) >= 37)

model.addConstr(2 * x[1] - 4 * x[3] >= 0)

# ... (Rest of the constraints added similarly)


# Optimize model
model.optimize()

# Print results
if model.status == GRB.OPTIMAL:
    print('Objective Value:', model.objVal)
    for v in model.getVars():
        print(f'{v.varName}: {v.x}')
elif model.status == GRB.INFEASIBLE:
    print("The model is infeasible.")
else:
    print(f"Optimization ended with status {model.status}")

```
