```json
{
  "sym_variables": [
    ("x0", "strawberries"),
    ("x1", "apple pies"),
    ("x2", "apples"),
    ("x3", "peanutbutter sandwiches")
  ],
  "objective_function": "5*x0 + 1*x1 + 2*x2 + 7*x3",
  "constraints": [
    "7*x0 + 7*x3 >= 94",
    "18*x2 + 7*x3 >= 43",
    "7*x0 + 7*x1 + 18*x2 >= 53",
    "7*x0 + 7*x1 + 18*x2 + 7*x3 >= 53",
    "35*x1 + 12*x2 >= 28",
    "35*x1 + 23*x3 >= 16",
    "12*x2 + 23*x3 >= 28",
    "18*x0 + 23*x3 >= 31",
    "18*x0 + 12*x2 >= 38",
    "35*x1 + 12*x2 + 23*x3 >= 35",
    "18*x0 + 35*x1 + 12*x2 >= 35",
    "18*x0 + 35*x1 + 23*x3 >= 35",
    "18*x0 + 12*x2 + 23*x3 >= 35",
    "35*x1 + 12*x2 + 23*x3 >= 26",
    "18*x0 + 35*x1 + 12*x2 >= 26",
    "18*x0 + 35*x1 + 23*x3 >= 26",
    "18*x0 + 12*x2 + 23*x3 >= 26",
    "35*x1 + 12*x2 + 23*x3 >= 23",
    "18*x0 + 35*x1 + 12*x2 >= 23",
    "18*x0 + 35*x1 + 23*x3 >= 23",
    "18*x0 + 12*x2 + 23*x3 >= 23",
    "35*x1 + 12*x2 + 23*x3 >= 38",
    "18*x0 + 35*x1 + 12*x2 >= 38",
    "18*x0 + 35*x1 + 23*x3 >= 38",
    "18*x0 + 12*x2 + 23*x3 >= 38",
    "18*x0 + 35*x1 + 12*x2 + 23*x3 >= 38",
    "-3*x0 + 2*x1 >= 0",
    "-1*x1 + 2*x3 >= 0",
    "18*x2 + 7*x3 <= 113",
    "7*x0 + 18*x2 <= 144",
    "7*x0 + 18*x2 + 7*x3 <= 192",
    "7*x1 + 18*x2 + 7*x3 <= 311",
    "7*x0 + 7*x1 + 18*x2 <= 186",
    "18*x0 + 12*x2 <= 88",
    "7*x0 + 7*x1 + 18*x2 + 7*x3 <= 421",  // umami constraint
    "18*x0 + 35*x1 + 12*x2 + 23*x3 <= 190" // healthiness constraint
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
strawberries = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="strawberries")
apple_pies = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="apple_pies")
apples = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="apples")
peanutbutter_sandwiches = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="peanutbutter_sandwiches")

# Set objective function
m.setObjective(5*strawberries + 1*apple_pies + 2*apples + 7*peanutbutter_sandwiches, gp.GRB.MINIMIZE)

# Add constraints
m.addConstr(7*strawberries + 7*peanutbutter_sandwiches >= 94)
m.addConstr(18*apples + 7*peanutbutter_sandwiches >= 43)
m.addConstr(7*strawberries + 7*apple_pies + 18*apples >= 53)
m.addConstr(7*strawberries + 7*apple_pies + 18*apples + 7*peanutbutter_sandwiches >= 53)
m.addConstr(35*apple_pies + 12*apples >= 28)
m.addConstr(35*apple_pies + 23*peanutbutter_sandwiches >= 16)
m.addConstr(12*apples + 23*peanutbutter_sandwiches >= 28)
m.addConstr(18*strawberries + 23*peanutbutter_sandwiches >= 31)
m.addConstr(18*strawberries + 12*apples >= 38)
m.addConstr(35*apple_pies + 12*apples + 23*peanutbutter_sandwiches >= 35)
m.addConstr(18*strawberries + 35*apple_pies + 12*apples >= 35)
m.addConstr(18*strawberries + 35*apple_pies + 23*peanutbutter_sandwiches >= 35)
m.addConstr(18*strawberries + 12*apples + 23*peanutbutter_sandwiches >= 35)
m.addConstr(35*apple_pies + 12*apples + 23*peanutbutter_sandwiches >= 26)
m.addConstr(18*strawberries + 35*apple_pies + 12*apples >= 26)
m.addConstr(18*strawberries + 35*apple_pies + 23*peanutbutter_sandwiches >= 26)
m.addConstr(18*strawberries + 12*apples + 23*peanutbutter_sandwiches >= 26)
m.addConstr(35*apple_pies + 12*apples + 23*peanutbutter_sandwiches >= 23)
m.addConstr(18*strawberries + 35*apple_pies + 12*apples >= 23)
m.addConstr(18*strawberries + 35*apple_pies + 23*peanutbutter_sandwiches >= 23)
m.addConstr(18*strawberries + 12*apples + 23*peanutbutter_sandwiches >= 23)
m.addConstr(35*apple_pies + 12*apples + 23*peanutbutter_sandwiches >= 38)
m.addConstr(18*strawberries + 35*apple_pies + 12*apples >= 38)
m.addConstr(18*strawberries + 35*apple_pies + 23*peanutbutter_sandwiches >= 38)
m.addConstr(18*strawberries + 12*apples + 23*peanutbutter_sandwiches >= 38)
m.addConstr(18*strawberries + 35*apple_pies + 12*apples + 23*peanutbutter_sandwiches >= 38)
m.addConstr(-3*strawberries + 2*apple_pies >= 0)
m.addConstr(-1*apple_pies + 2*peanutbutter_sandwiches >= 0)
m.addConstr(18*apples + 7*peanutbutter_sandwiches <= 113)
m.addConstr(7*strawberries + 18*apples <= 144)
m.addConstr(7*strawberries + 18*apples + 7*peanutbutter_sandwiches <= 192)
m.addConstr(7*apple_pies + 18*apples + 7*peanutbutter_sandwiches <= 311)
m.addConstr(7*strawberries + 7*apple_pies + 18*apples <= 186)
m.addConstr(18*strawberries + 12*apples <= 88)

m.addConstr(7*strawberries + 7*apple_pies + 18*apples + 7*peanutbutter_sandwiches <= 421)
m.addConstr(18*strawberries + 35*apple_pies + 12*apples + 23*peanutbutter_sandwiches <= 190)


# 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('Optimization ended with status %d' % m.status)

```