```json
{
  "sym_variables": [
    ("x0", "cantaloupes"),
    ("x1", "lemons"),
    ("x2", "ham sandwiches"),
    ("x3", "strawberries")
  ],
  "objective_function": "7.05 * x0 + 1.79 * x1 + 9.61 * x2 + 3.42 * x3",
  "constraints": [
    "29 * x0 + 19 * x3 >= 62",
    "1 * x1 + 23 * x2 >= 62",
    "23 * x2 + 19 * x3 >= 80",
    "1 * x1 + 23 * x2 + 19 * x3 >= 104",
    "29 * x0 + 1 * x1 + 23 * x2 >= 104",
    "29 * x0 + 1 * x1 + 19 * x3 >= 104",
    "29 * x0 + 23 * x2 + 19 * x3 >= 104",
    "1 * x1 + 23 * x2 + 19 * x3 >= 95",
    "29 * x0 + 1 * x1 + 23 * x2 >= 95",
    "29 * x0 + 1 * x1 + 19 * x3 >= 95",
    "29 * x0 + 23 * x2 + 19 * x3 >= 95",
    "1 * x1 + 23 * x2 + 19 * x3 >= 57",
    "29 * x0 + 1 * x1 + 23 * x2 >= 57",
    "29 * x0 + 1 * x1 + 19 * x3 >= 57",
    "29 * x0 + 23 * x2 + 19 * x3 >= 57",
    "1 * x1 + 23 * x2 + 19 * x3 >= 108",
    "29 * x0 + 1 * x1 + 23 * x2 >= 108",
    "29 * x0 + 1 * x1 + 19 * x3 >= 108",
    "29 * x0 + 23 * x2 + 19 * x3 >= 108",
    "29 * x0 + 1 * x1 + 23 * x2 + 19 * x3 >= 108",
    "7 * x0 + 6 * x2 >= 45",
    "7 * x1 + 6 * x2 >= 24",
    "7 * x0 + 26 * x3 >= 30",
    "7 * x0 + 7 * x1 + 26 * x3 >= 40",
    "7 * x0 + 6 * x2 + 26 * x3 >= 40",
    "7 * x1 + 6 * x2 + 26 * x3 >= 40",
    "7 * x0 + 7 * x1 + 26 * x3 >= 41",
    "7 * x0 + 6 * x2 + 26 * x3 >= 41",
    "7 * x1 + 6 * x2 + 26 * x3 >= 41",
    "7 * x0 + 7 * x1 + 26 * x3 >= 31",
    "7 * x0 + 6 * x2 + 26 * x3 >= 31",
    "7 * x1 + 6 * x2 + 26 * x3 >= 31",
    "7 * x0 + 7 * x1 + 6 * x2 + 26 * x3 >= 31",
    "9 * x0 - 2 * x3 >= 0",
    "-3 * x2 + 9 * x3 >= 0"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
cantaloupes = m.addVar(lb=0, name="cantaloupes")
lemons = m.addVar(lb=0, name="lemons")
ham_sandwiches = m.addVar(lb=0, name="ham_sandwiches")
strawberries = m.addVar(lb=0, name="strawberries")


# Set objective function
m.setObjective(7.05 * cantaloupes + 1.79 * lemons + 9.61 * ham_sandwiches + 3.42 * strawberries, gp.GRB.MINIMIZE)

# Add constraints
m.addConstr(29 * cantaloupes + 19 * strawberries >= 62)
m.addConstr(1 * lemons + 23 * ham_sandwiches >= 62)
m.addConstr(23 * ham_sandwiches + 19 * strawberries >= 80)
m.addConstr(1 * lemons + 23 * ham_sandwiches + 19 * strawberries >= 104)
m.addConstr(29 * cantaloupes + 1 * lemons + 23 * ham_sandwiches >= 104)
m.addConstr(29 * cantaloupes + 1 * lemons + 19 * strawberries >= 104)
m.addConstr(29 * cantaloupes + 23 * ham_sandwiches + 19 * strawberries >= 104)
m.addConstr(1 * lemons + 23 * ham_sandwiches + 19 * strawberries >= 95)
m.addConstr(29 * cantaloupes + 1 * lemons + 23 * ham_sandwiches >= 95)
m.addConstr(29 * cantaloupes + 1 * lemons + 19 * strawberries >= 95)
m.addConstr(29 * cantaloupes + 23 * ham_sandwiches + 19 * strawberries >= 95)
m.addConstr(1 * lemons + 23 * ham_sandwiches + 19 * strawberries >= 57)
m.addConstr(29 * cantaloupes + 1 * lemons + 23 * ham_sandwiches >= 57)
m.addConstr(29 * cantaloupes + 1 * lemons + 19 * strawberries >= 57)
m.addConstr(29 * cantaloupes + 23 * ham_sandwiches + 19 * strawberries >= 57)
m.addConstr(1 * lemons + 23 * ham_sandwiches + 19 * strawberries >= 108)
m.addConstr(29 * cantaloupes + 1 * lemons + 23 * ham_sandwiches >= 108)
m.addConstr(29 * cantaloupes + 1 * lemons + 19 * strawberries >= 108)
m.addConstr(29 * cantaloupes + 23 * ham_sandwiches + 19 * strawberries >= 108)
m.addConstr(29 * cantaloupes + 1 * lemons + 23 * ham_sandwiches + 19 * strawberries >= 108)
m.addConstr(7 * cantaloupes + 6 * ham_sandwiches >= 45)
m.addConstr(7 * lemons + 6 * ham_sandwiches >= 24)
m.addConstr(7 * cantaloupes + 26 * strawberries >= 30)
m.addConstr(7 * cantaloupes + 7 * lemons + 26 * strawberries >= 40)
m.addConstr(7 * cantaloupes + 6 * ham_sandwiches + 26 * strawberries >= 40)
m.addConstr(7 * lemons + 6 * ham_sandwiches + 26 * strawberries >= 40)
m.addConstr(7 * cantaloupes + 7 * lemons + 26 * strawberries >= 41)
m.addConstr(7 * cantaloupes + 6 * ham_sandwiches + 26 * strawberries >= 41)
m.addConstr(7 * lemons + 6 * ham_sandwiches + 26 * strawberries >= 41)
m.addConstr(7 * cantaloupes + 7 * lemons + 26 * strawberries >= 31)
m.addConstr(7 * cantaloupes + 6 * ham_sandwiches + 26 * strawberries >= 31)
m.addConstr(7 * lemons + 6 * ham_sandwiches + 26 * strawberries >= 31)
m.addConstr(7 * cantaloupes + 7 * lemons + 6 * ham_sandwiches + 26 * strawberries >= 31)
m.addConstr(9 * cantaloupes - 2 * strawberries >= 0)
m.addConstr(-3 * ham_sandwiches + 9 * strawberries >= 0)


# 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('Problem is infeasible.')
```
