```json
{
  "sym_variables": [
    ("x0", "hours worked by Ringo"),
    ("x1", "hours worked by Mary"),
    ("x2", "hours worked by Jean"),
    ("x3", "hours worked by Dale"),
    ("x4", "hours worked by John"),
    ("x5", "hours worked by Bill")
  ],
  "objective_function": "4.87*x0 + 3.0*x1 + 9.03*x2 + 7.73*x3 + 8.75*x4 + 7.94*x5",
  "constraints": [
    "7*x3 + 6*x4 >= 18",
    "11*x1 + 6*x3 >= 17",
    "11*x1 + 6*x4 >= 13",
    "7*x0 + 5*x2 >= 19",
    "7*x0 + 6*x3 >= 15",
    "11*x1 + 9*x5 >= 9",
    "6*x4 + 9*x5 >= 8",
    "6*x3 + 9*x5 >= 10",
    "7*x0 + 9*x5 >= 8",
    "7*x0 + 5*x2 + 6*x4 >= 15",
    "7*x0 + 11*x1 + 9*x5 >= 15",
    "7*x0 + 6*x4 + 9*x5 >= 15",
    "7*x0 + 5*x2 + 6*x4 >= 16",
    "7*x0 + 11*x1 + 9*x5 >= 16",
    "7*x0 + 6*x4 + 9*x5 >= 16",
    "7*x0 + 5*x2 + 6*x4 >= 20",
    "7*x0 + 11*x1 + 9*x5 >= 20",
    "7*x0 + 6*x4 + 9*x5 >= 20",
    "5*x0 + 9*x1 >= 25",
    "9*x1 + 8*x5 >= 14",
    "9*x2 + 10*x4 >= 18",
    "11*x1 + 6*x3 <= 33",
    "11*x1 + 6*x4 <= 50",
    "7*x0 + 6*x3 + 6*x4 <= 87",
    "7*x0 + 5*x2 + 6*x4 <= 55",
    "7*x0 + 11*x1 + 6*x3 <= 119",
    "7*x0 + 11*x1 + 5*x2 <= 116",
    "11*x1 + 6*x3 + 6*x4 <= 67",
    "7*x0 + 6*x4 + 9*x5 <= 91",
    "5*x2 + 6*x3 + 6*x4 <= 30",
    "5*x2 + 6*x3 + 9*x5 <= 91",
    "7*x0 + 5*x2 + 9*x5 <= 52",
    "11*x1 + 5*x2 + 9*x5 <= 65",
    "6*x3 + 6*x4 + 9*x5 <= 110",
    "11*x1 + 6*x3 + 9*x5 <= 21",
    "7*x0 + 11*x1 + 5*x2 + 6*x3 + 6*x4 + 9*x5 <= 21"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
ringo = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="ringo")
mary = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="mary")
jean = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="jean")
dale = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="dale")
john = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="john")
bill = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="bill")


# Set objective
m.setObjective(4.87 * ringo + 3.0 * mary + 9.03 * jean + 7.73 * dale + 8.75 * john + 7.94 * bill, gp.GRB.MAXIMIZE)

# Add constraints

m.addConstr(7 * dale + 6 * john >= 18)
m.addConstr(11 * mary + 6 * dale >= 17)
m.addConstr(11 * mary + 6 * john >= 13)
m.addConstr(7 * ringo + 5 * jean >= 19)
m.addConstr(7 * ringo + 6 * dale >= 15)
m.addConstr(11 * mary + 9 * bill >= 9)
m.addConstr(6 * john + 9 * bill >= 8)
m.addConstr(6 * dale + 9 * bill >= 10)
m.addConstr(7 * ringo + 9 * bill >= 8)
m.addConstr(7 * ringo + 5 * jean + 6 * john >= 15)
m.addConstr(7 * ringo + 11 * mary + 9 * bill >= 15)
m.addConstr(7 * ringo + 6 * john + 9 * bill >= 15)
m.addConstr(7 * ringo + 5 * jean + 6 * john >= 16)
m.addConstr(7 * ringo + 11 * mary + 9 * bill >= 16)
m.addConstr(7 * ringo + 6 * john + 9 * bill >= 16)
m.addConstr(7 * ringo + 5 * jean + 6 * john >= 20)
m.addConstr(7 * ringo + 11 * mary + 9 * bill >= 20)
m.addConstr(7 * ringo + 6 * john + 9 * bill >= 20)
m.addConstr(5 * ringo + 9 * mary >= 25)
m.addConstr(9 * mary + 8 * bill >= 14)
m.addConstr(9 * jean + 10 * john >= 18)


m.addConstr(11 * mary + 6 * dale <= 33)
m.addConstr(11 * mary + 6 * john <= 50)
m.addConstr(7 * ringo + 6 * dale + 6 * john <= 87)
m.addConstr(7 * ringo + 5 * jean + 6 * john <= 55)
m.addConstr(7 * ringo + 11 * mary + 6 * dale <= 119)
m.addConstr(7 * ringo + 11 * mary + 5 * jean <= 116)
m.addConstr(11 * mary + 6 * dale + 6 * john <= 67)
m.addConstr(7 * ringo + 6 * john + 9 * bill <= 91)
m.addConstr(5 * jean + 6 * dale + 6 * john <= 30)
m.addConstr(5 * jean + 6 * dale + 9 * bill <= 91)
m.addConstr(7 * ringo + 5 * jean + 9 * bill <= 52)
m.addConstr(11 * mary + 5 * jean + 9 * bill <= 65)
m.addConstr(6 * dale + 6 * john + 9 * bill <= 110)
m.addConstr(11 * mary + 6 * dale + 9 * bill <= 21)
m.addConstr(7 * ringo + 11 * mary + 5 * jean + 6 * dale + 6 * john + 9 * bill <= 21)



# Optimize model
m.optimize()

#print solution
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.")
```