```json
{
  "sym_variables": [
    ("x0", "hours worked by Peggy"),
    ("x1", "hours worked by John"),
    ("x2", "hours worked by Paul"),
    ("x3", "hours worked by Hank"),
    ("x4", "hours worked by Dale"),
    ("x5", "hours worked by Bobby")
  ],
  "objective_function": "5*x0 + 6*x1 + 7*x2 + 8*x3 + 8*x4 + 3*x5",
  "constraints": [
    "18.4*x1 + 8.96*x2 + 15.24*x4 >= 43",
    "18.4*x1 + 8.96*x2 + 7.28*x3 >= 43",
    "1.32*x0 + 18.4*x1 + 8.96*x2 >= 43",
    "18.4*x1 + 8.96*x2 + 15.24*x4 >= 35",
    "18.4*x1 + 8.96*x2 + 7.28*x3 >= 35",
    "1.32*x0 + 18.4*x1 + 8.96*x2 >= 35",
    "18.4*x1 + 8.96*x2 + 15.24*x4 >= 38",
    "18.4*x1 + 8.96*x2 + 7.28*x3 >= 38",
    "1.32*x0 + 18.4*x1 + 8.96*x2 >= 38",
    "13.77*x0 + 16.56*x2 >= 44",
    "3.56*x3 + 14.04*x4 >= 30",
    "16.56*x2 + 9.72*x5 >= 47",
    "13.77*x0 + 7.27*x1 >= 57",
    "3.56*x3 + 9.72*x5 >= 61",
    "14.04*x4 + 9.72*x5 >= 34",
    "13.77*x0 + 3.56*x3 >= 49",
    "7.27*x1 + 3.56*x3 >= 28",
    "7.27*x1 + 16.56*x2 >= 36",
    "16.56*x2 + 14.04*x4 >= 60",
    "7.27*x1 + 9.72*x5 >= 36",
    "1.32*x0 + 18.4*x1 <= 50",
    "7.28*x3 + 5.93*x5 <= 234",
    "15.24*x4 + 5.93*x5 <= 148",
    "18.4*x1 + 8.96*x2 + 15.24*x4 <= 259",
    "7.28*x3 + 15.24*x4 + 5.93*x5 <= 213",
    "1.32*x0 + 18.4*x1 + 8.96*x2 + 7.28*x3 + 15.24*x4 + 5.93*x5 <= 213",
    "13.77*x0 + 16.56*x2 <= 64",
    "13.77*x0 + 9.72*x5 <= 337",
    "16.56*x2 + 3.56*x3 <= 71",
    "7.27*x1 + 9.72*x5 <= 289",
    "7.27*x1 + 14.04*x4 <= 221",
    "16.56*x2 + 9.72*x5 <= 289",
    "3.56*x3 + 14.04*x4 <= 363",
    "3.56*x3 + 9.72*x5 <= 85",
    "13.77*x0 + 7.27*x1 <= 271",
    "13.77*x0 + 3.56*x3 <= 98",
    "16.56*x2 + 14.04*x4 <= 115",
    "13.77*x0 + 16.56*x2 + 9.72*x5 <= 262",
    "13.77*x0 + 14.04*x4 + 9.72*x5 <= 186",
    "13.77*x0 + 16.56*x2 + 14.04*x4 <= 306",
    "16.56*x2 + 3.56*x3 + 14.04*x4 <= 278",
    "7.27*x1 + 16.56*x2 + 14.04*x4 <= 293",
    "3.56*x3 + 14.04*x4 + 9.72*x5 <= 298",
    "13.77*x0 + 7.27*x1 + 16.56*x2 + 3.56*x3 + 14.04*x4 + 9.72*x5 <= 298"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
peggy = m.addVar(vtype=gp.GRB.INTEGER, name="peggy")
john = m.addVar(vtype=gp.GRB.CONTINUOUS, name="john")
paul = m.addVar(vtype=gp.GRB.CONTINUOUS, name="paul")
hank = m.addVar(vtype=gp.GRB.CONTINUOUS, name="hank")
dale = m.addVar(vtype=gp.GRB.CONTINUOUS, name="dale")
bobby = m.addVar(vtype=gp.GRB.INTEGER, name="bobby")


# Set objective function
m.setObjective(5*peggy + 6*john + 7*paul + 8*hank + 8*dale + 3*bobby, gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(18.4*john + 8.96*paul + 15.24*dale >= 43)
m.addConstr(18.4*john + 8.96*paul + 7.28*hank >= 43)
m.addConstr(1.32*peggy + 18.4*john + 8.96*paul >= 43)
m.addConstr(18.4*john + 8.96*paul + 15.24*dale >= 35)
m.addConstr(18.4*john + 8.96*paul + 7.28*hank >= 35)
m.addConstr(1.32*peggy + 18.4*john + 8.96*paul >= 35)
m.addConstr(18.4*john + 8.96*paul + 15.24*dale >= 38)
m.addConstr(18.4*john + 8.96*paul + 7.28*hank >= 38)
m.addConstr(1.32*peggy + 18.4*john + 8.96*paul >= 38)
m.addConstr(13.77*peggy + 16.56*paul >= 44)
m.addConstr(3.56*hank + 14.04*dale >= 30)
m.addConstr(16.56*paul + 9.72*bobby >= 47)
m.addConstr(13.77*peggy + 7.27*john >= 57)
m.addConstr(3.56*hank + 9.72*bobby >= 61)
m.addConstr(14.04*dale + 9.72*bobby >= 34)
m.addConstr(13.77*peggy + 3.56*hank >= 49)
m.addConstr(7.27*john + 3.56*hank >= 28)
m.addConstr(7.27*john + 16.56*paul >= 36)
m.addConstr(16.56*paul + 14.04*dale >= 60)
m.addConstr(7.27*john + 9.72*bobby >= 36)
m.addConstr(1.32*peggy + 18.4*john <= 50)
m.addConstr(7.28*hank + 5.93*bobby <= 234)
m.addConstr(15.24*dale + 5.93*bobby <= 148)
m.addConstr(18.4*john + 8.96*paul + 15.24*dale <= 259)
m.addConstr(7.28*hank + 15.24*dale + 5.93*bobby <= 213)
m.addConstr(1.32*peggy + 18.4*john + 8.96*paul + 7.28*hank + 15.24*dale + 5.93*bobby <= 213)
m.addConstr(13.77*peggy + 16.56*paul <= 64)
m.addConstr(13.77*peggy + 9.72*bobby <= 337)
m.addConstr(16.56*paul + 3.56*hank <= 71)
m.addConstr(7.27*john + 9.72*bobby <= 289)
m.addConstr(7.27*john + 14.04*dale <= 221)
m.addConstr(16.56*paul + 9.72*bobby <= 289)
m.addConstr(3.56*hank + 14.04*dale <= 363)
m.addConstr(3.56*hank + 9.72*bobby <= 85)
m.addConstr(13.77*peggy + 7.27*john <= 271)
m.addConstr(13.77*peggy + 3.56*hank <= 98)
m.addConstr(16.56*paul + 14.04*dale <= 115)
m.addConstr(13.77*peggy + 16.56*paul + 9.72*bobby <= 262)
m.addConstr(13.77*peggy + 14.04*dale + 9.72*bobby <= 186)
m.addConstr(13.77*peggy + 16.56*paul + 14.04*dale <= 306)
m.addConstr(16.56*paul + 3.56*hank + 14.04*dale <= 278)
m.addConstr(7.27*john + 16.56*paul + 14.04*dale <= 293)
m.addConstr(3.56*hank + 14.04*dale + 9.72*bobby <= 298)
m.addConstr(13.77*peggy + 7.27*john + 16.56*paul + 3.56*hank + 14.04*dale + 9.72*bobby <= 298)


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

```