```json
{
  "sym_variables": [
    ("x0", "green beans"),
    ("x1", "eggs"),
    ("x2", "granola bars"),
    ("x3", "steaks")
  ],
  "objective_function": "1.95 * x0 + 9.65 * x1 + 1.72 * x2 + 4.64 * x3",
  "constraints": [
    "4 * x1 + 6 * x2 >= 10",
    "4 * x0 + 4 * x1 >= 5",
    "4 * x1 + 3 * x3 >= 15",
    "4 * x0 + 4 * x1 + 6 * x2 + 3 * x3 >= 15",
    "7 * x0 + 2 * x2 >= 23",
    "7 * x0 + 7 * x1 + 5 * x3 >= 23",
    "7 * x0 + 7 * x1 + 2 * x2 >= 23",
    "7 * x0 + 7 * x1 + 5 * x3 >= 14",
    "7 * x0 + 7 * x1 + 2 * x2 >= 14",
    "7 * x0 + 7 * x1 + 2 * x2 + 5 * x3 >= 14",
    "4 * x2 + 3 * x3 >= 16",
    "2 * x1 + 4 * x2 >= 6",
    "4 * x0 + 4 * x2 >= 13",
    "2 * x1 + 3 * x3 >= 9",
    "4 * x0 + 2 * x1 + 4 * x2 + 3 * x3 >= 9",
    "4 * x0 + 5 * x1 >= 7",
    "4 * x0 + 6 * x2 >= 7",
    "5 * x1 + 6 * x3 >= 7",
    "5 * x1 + 6 * x2 >= 20",
    "4 * x0 + 5 * x1 + 6 * x3 >= 13",
    "4 * x0 + 5 * x1 + 6 * x2 + 6 * x3 >= 13",
    "8 * x0 + 8 * x3 >= 7",
    "8 * x0 + 6 * x2 >= 7",
    "6 * x2 + 8 * x3 >= 14",
    "8 * x0 + 5 * x1 + 6 * x2 >= 12",
    "8 * x0 + 5 * x1 + 8 * x3 >= 12",
    "5 * x1 + 6 * x2 + 8 * x3 >= 12",
    "8 * x0 + 5 * x1 + 6 * x2 >= 10",
    "8 * x0 + 5 * x1 + 8 * x3 >= 10",
    "5 * x1 + 6 * x2 + 8 * x3 >= 10",
    "8 * x0 + 5 * x1 + 6 * x2 >= 9",
    "8 * x0 + 5 * x1 + 8 * x3 >= 9",
    "5 * x1 + 6 * x2 + 8 * x3 >= 9",
    "8 * x0 + 5 * x1 + 6 * x2 + 8 * x3 >= 9",
    "-3 * x0 + 6 * x1 >= 0",
    "8 * x0 - 4 * x2 >= 0",
    "4 * x0 + 4 * x1 <= 63",
    "7 * x0 + 5 * x3 <= 95",
    "2 * x2 + 5 * x3 <= 32",
    "7 * x0 + 2 * x2 <= 26",
    "7 * x0 + 7 * x1 <= 94",
    "7 * x0 + 7 * x1 + 2 * x2 <= 74",
    "2 * x1 + 3 * x3 <= 26",
    "4 * x0 + 3 * x3 <= 67",
    "2 * x1 + 4 * x2 <= 43",
    "4 * x0 + 2 * x1 <= 57",
    "4 * x2 + 3 * x3 <= 20",
    "2 * x1 + 4 * x2 + 3 * x3 <= 56",
    "5 * x1 + 6 * x3 <= 38",
    "5 * x1 + 6 * x2 <= 22",
    "6 * x2 + 6 * x3 <= 25",
    "5 * x1 + 6 * x2 + 6 * x3 <= 28",
    "4 * x0 + 6 * x2 + 6 * x3 <= 58",
    "8 * x0 + 6 * x2 + 8 * x3 <= 29",
    "8 * x0 + 5 * x1 + 6 * x2 <= 46"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
green_beans = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="green_beans")
eggs = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="eggs")
granola_bars = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="granola_bars")
steaks = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="steaks")

# Set objective function
m.setObjective(1.95 * green_beans + 9.65 * eggs + 1.72 * granola_bars + 4.64 * steaks, gp.GRB.MINIMIZE)

# Add constraints
m.addConstr(4 * eggs + 6 * granola_bars >= 10)
m.addConstr(4 * green_beans + 4 * eggs >= 5)
m.addConstr(4 * eggs + 3 * steaks >= 15)
m.addConstr(4 * green_beans + 4 * eggs + 6 * granola_bars + 3 * steaks >= 15)
m.addConstr(7 * green_beans + 2 * granola_bars >= 23)
m.addConstr(7 * green_beans + 7 * eggs + 5 * steaks >= 23)
m.addConstr(7 * green_beans + 7 * eggs + 2 * granola_bars >= 23)
m.addConstr(7 * green_beans + 7 * eggs + 5 * steaks >= 14)
m.addConstr(7 * green_beans + 7 * eggs + 2 * granola_bars >= 14)
m.addConstr(7 * green_beans + 7 * eggs + 2 * granola_bars + 5 * steaks >= 14)
m.addConstr(4 * granola_bars + 3 * steaks >= 16)
m.addConstr(2 * eggs + 4 * granola_bars >= 6)
m.addConstr(4 * green_beans + 4 * granola_bars >= 13)
m.addConstr(2 * eggs + 3 * steaks >= 9)
m.addConstr(4 * green_beans + 2 * eggs + 4 * granola_bars + 3 * steaks >= 9)
m.addConstr(4 * green_beans + 5 * eggs >= 7)
m.addConstr(4 * green_beans + 6 * granola_bars >= 7)
m.addConstr(5 * eggs + 6 * steaks >= 7)
m.addConstr(5 * eggs + 6 * granola_bars >= 20)
m.addConstr(4 * green_beans + 5 * eggs + 6 * steaks >= 13)
m.addConstr(4 * green_beans + 5 * eggs + 6 * granola_bars + 6 * steaks >= 13)
m.addConstr(8 * green_beans + 8 * steaks >= 7)
m.addConstr(8 * green_beans + 6 * granola_bars >= 7)
m.addConstr(6 * granola_bars + 8 * steaks >= 14)
m.addConstr(8 * green_beans + 5 * eggs + 6 * granola_bars >= 12)
m.addConstr(8 * green_beans + 5 * eggs + 8 * steaks >= 12)
m.addConstr(5 * eggs + 6 * granola_bars + 8 * steaks >= 12)
m.addConstr(8 * green_beans + 5 * eggs + 6 * granola_bars >= 10)
m.addConstr(8 * green_beans + 5 * eggs + 8 * steaks >= 10)
m.addConstr(5 * eggs + 6 * granola_bars + 8 * steaks >= 10)
m.addConstr(8 * green_beans + 5 * eggs + 6 * granola_bars >= 9)
m.addConstr(8 * green_beans + 5 * eggs + 8 * steaks >= 9)
m.addConstr(5 * eggs + 6 * granola_bars + 8 * steaks >= 9)
m.addConstr(8 * green_beans + 5 * eggs + 6 * granola_bars + 8 * steaks >= 9)
m.addConstr(-3 * green_beans + 6 * eggs >= 0)
m.addConstr(8 * green_beans - 4 * granola_bars >= 0)
m.addConstr(4 * green_beans + 4 * eggs <= 63)
m.addConstr(7 * green_beans + 5 * steaks <= 95)
m.addConstr(2 * granola_bars + 5 * steaks <= 32)
m.addConstr(7 * green_beans + 2 * granola_bars <= 26)
m.addConstr(7 * green_beans + 7 * eggs <= 94)
m.addConstr(7 * green_beans + 7 * eggs + 2 * granola_bars <= 74)
m.addConstr(2 * eggs + 3 * steaks <= 26)
m.addConstr(4 * green_beans + 3 * steaks <= 67)
m.addConstr(2 * eggs + 4 * granola_bars <= 43)
m.addConstr(4 * green_beans + 2 * eggs <= 57)
m.addConstr(4 * granola_bars + 3 * steaks <= 20)
m.addConstr(2 * eggs + 4 * granola_bars + 3 * steaks <= 56)
m.addConstr(5 * eggs + 6 * steaks <= 38)
m.addConstr(5 * eggs + 6 * granola_bars <= 22)
m.addConstr(6 * granola_bars + 6 * steaks <= 25)
m.addConstr(5 * eggs + 6 * granola_bars + 6 * steaks <= 28)
m.addConstr(4 * green_beans + 6 * granola_bars + 6 * steaks <= 58)
m.addConstr(8 * green_beans + 6 * granola_bars + 8 * steaks <= 29)
m.addConstr(8 * green_beans + 5 * eggs + 6 * granola_bars <= 46)


# 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)

```