```json
{
  "sym_variables": [
    ("x0", "hours worked by Ringo"),
    ("x1", "hours worked by Bobby"),
    ("x2", "hours worked by Dale"),
    ("x3", "hours worked by Paul"),
    ("x4", "hours worked by Jean"),
    ("x5", "hours worked by Laura"),
    ("x6", "hours worked by Mary")
  ],
  "objective_function": "3.28*x0 + 1.11*x1 + 8.98*x2 + 7.8*x3 + 1.77*x4 + 2.5*x5 + 3.07*x6",
  "constraints": [
    "12*x0 + 3*x2 + 9*x4 >= 23",
    "3*x1 + 3*x2 + 11*x5 >= 23",
    "12*x0 + 3*x1 + 7*x3 >= 23",
    "3*x1 + 7*x3 + 9*x4 >= 23",
    "12*x0 + 3*x2 + 9*x4 >= 21",
    "3*x1 + 3*x2 + 11*x5 >= 21",
    "12*x0 + 3*x1 + 7*x3 >= 21",
    "3*x1 + 7*x3 + 9*x4 >= 21",
    "12*x0 + 3*x2 + 9*x4 >= 26",
    "3*x1 + 3*x2 + 11*x5 >= 26",
    "12*x0 + 3*x1 + 7*x3 >= 26",
    "3*x1 + 7*x3 + 9*x4 >= 26",
    "12*x0 + 3*x2 + 9*x4 >= 37",
    "3*x1 + 3*x2 + 11*x5 >= 37",
    "12*x0 + 3*x1 + 7*x3 >= 37",
    "3*x1 + 7*x3 + 9*x4 >= 37",
    "6*x1 + 2*x4 >= 16",
    "12*x0 + 1*x6 >= 22",
    "12*x3 + 14*x5 >= 20",
    "2*x4 + 14*x5 >= 11",
    "12*x0 + 12*x3 >= 11",
    "12*x3 + 2*x4 >= 24",
    "6*x1 + 10*x2 + 1*x6 >= 20",
    "12*x0 + 14*x5 + 1*x6 >= 20",
    "12*x3 + 14*x5 + 1*x6 >= 20",
    "6*x1 + 10*x2 + 2*x4 >= 20",
    "6*x1 + 2*x4 + 1*x6 >= 20",
    "12*x0 + 2*x4 + 14*x5 >= 20",
    "12*x0 + 10*x2 + 14*x5 >= 20",
    "10*x2 + 12*x3 + 1*x6 >= 20",
    "14*x0 + 5*x1 <= 110",
    "12*x0 + 3*x2 <= 294",
    "3*x1 + 11*x5 <= 230",
    "12*x0 + 14*x6 <= 62",
    "12*x0 + 11*x5 <= 237",
    "7*x3 + 14*x6 <= 227",
    "7*x3 + 11*x5 <= 213",
    "x0 >= 0",
    "x1 >= 0",
    "x2 >= 0",
    "x3 >= 0",
    "x4 >= 0",
    "x5 >= 0",
    "x6 >= 0"
    
    
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
ringo = model.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="ringo")
bobby = model.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="bobby")
dale = model.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="dale")
paul = model.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="paul")
jean = model.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="jean")
laura = model.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="laura")
mary = model.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="mary")


# Set objective function
model.setObjective(3.28 * ringo + 1.11 * bobby + 8.98 * dale + 7.8 * paul + 1.77 * jean + 2.5 * laura + 3.07 * mary, gp.GRB.MAXIMIZE)

# Add constraints

model.addConstr(12*ringo + 3*dale + 9*jean >= 23)
model.addConstr(3*bobby + 3*dale + 11*laura >= 23)
model.addConstr(12*ringo + 3*bobby + 7*paul >= 23)
model.addConstr(3*bobby + 7*paul + 9*jean >= 23)

model.addConstr(12*ringo + 3*dale + 9*jean >= 21)
model.addConstr(3*bobby + 3*dale + 11*laura >= 21)
model.addConstr(12*ringo + 3*bobby + 7*paul >= 21)
model.addConstr(3*bobby + 7*paul + 9*jean >= 21)

model.addConstr(12*ringo + 3*dale + 9*jean >= 26)
model.addConstr(3*bobby + 3*dale + 11*laura >= 26)
model.addConstr(12*ringo + 3*bobby + 7*paul >= 26)
model.addConstr(3*bobby + 7*paul + 9*jean >= 26)

model.addConstr(12*ringo + 3*dale + 9*jean >= 37)
model.addConstr(3*bobby + 3*dale + 11*laura >= 37)
model.addConstr(12*ringo + 3*bobby + 7*paul >= 37)
model.addConstr(3*bobby + 7*paul + 9*jean >= 37)


model.addConstr(6 * bobby + 2 * jean >= 16)
model.addConstr(12 * ringo + 1 * mary >= 22)
model.addConstr(12 * paul + 14 * laura >= 20)
model.addConstr(2 * jean + 14 * laura >= 11)
model.addConstr(12 * ringo + 12 * paul >= 11)
model.addConstr(12 * paul + 2 * jean >= 24)


model.addConstr(14*ringo + 5*bobby <= 110)
model.addConstr(12*ringo + 3*dale <= 294)


# Optimize model
model.optimize()

# Print results
if model.status == gp.GRB.OPTIMAL:
    print('Obj: %g' % model.objVal)
    for v in model.getVars():
        print('%s %g' % (v.varName, v.x))
elif model.status == gp.GRB.INFEASIBLE:
    print("Model is infeasible")
else:
    print("Model status:", model.status)

```