## Step 1: Define the symbolic representation of the variables
The variables are ['hours worked by George', 'hours worked by Dale', 'hours worked by Ringo', 'hours worked by Laura', 'hours worked by Paul', 'hours worked by Hank']. Let's denote them as $x_0, x_1, x_2, x_3, x_4, x_5$ respectively.

## Step 2: Define the objective function in symbolic notation
The objective function to minimize is $5x_0 + 9x_1 + 7x_2 + 8x_3 + 5x_4 + 6x_5$.

## Step 3: List all the constraints in symbolic notation
1. $2x_0 \leq 306$
2. $25x_0 \leq 175$
3. $20x_1 \leq 306$
4. $6x_1 \leq 175$
5. $11x_2 \leq 306$
6. $18x_2 \leq 175$
7. $10x_3 \leq 306$
8. $9x_3 \leq 175$
9. $23x_4 \leq 306$
10. $25x_4 \leq 175$
11. $22x_5 \leq 306$
12. $8x_5 \leq 175$
13. $11x_2 + 23x_4 \geq 23$
14. $20x_1 + 10x_3 \geq 37$
15. $10x_3 + 22x_5 \geq 51$
16. $2x_0 + 20x_1 \geq 33$
17. $20x_1 + 23x_4 + 22x_5 \geq 35$
18. $2x_0 + 20x_1 + 22x_5 \geq 35$
19. $2x_0 + 20x_1 + 10x_3 \geq 35$
20. $20x_1 + 23x_4 + 22x_5 \geq 30$
21. $2x_0 + 20x_1 + 22x_5 \geq 30$
22. $2x_0 + 20x_1 + 10x_3 \geq 30$
23. $20x_1 + 23x_4 + 22x_5 \geq 48$
24. $2x_0 + 20x_1 + 22x_5 \geq 48$
25. $2x_0 + 20x_1 + 10x_3 \geq 48$
26. $2x_0 + 20x_1 + 7x_2 + 10x_3 + 23x_4 + 22x_5 \geq 48$
27. $6x_1 + 18x_2 \geq 28$
28. $9x_3 + 25x_4 \geq 22$
29. $6x_1 + 25x_4 \geq 25$
30. $6x_1 + 9x_3 \geq 21$
31. $25x_4 + 8x_5 \geq 17$
32. $25x_0 + 6x_1 + 18x_2 + 9x_3 + 25x_4 + 8x_5 \geq 17$
33. $10x_0 - 10x_1 \geq 0$
34. $10x_3 + 23x_4 \leq 118$
35. $10x_3 + 22x_5 \leq 74$
36. $20x_1 + 22x_5 \leq 147$
37. $2x_0 + 10x_3 + 23x_4 \leq 131$
38. $2x_0 + 11x_2 + 10x_3 \leq 146$
39. $2x_0 + 10x_3 + 22x_5 \leq 215$
40. $2x_0 + 20x_1 + 22x_5 \leq 252$
41. $9x_3 + 25x_4 \leq 42$
42. $25x_0 + 6x_1 \leq 140$
43. $6x_1 + 9x_3 + 25x_4 \leq 64$
44. $9x_3 + 25x_4 + 8x_5 \leq 68$
45. $25x_0 + 9x_3 + 25x_4 \leq 155$

## Step 4: Create the symbolic representation of the problem
```json
{
    'sym_variables': [
        ('x0', 'hours worked by George'),
        ('x1', 'hours worked by Dale'),
        ('x2', 'hours worked by Ringo'),
        ('x3', 'hours worked by Laura'),
        ('x4', 'hours worked by Paul'),
        ('x5', 'hours worked by Hank')
    ],
    'objective_function': '5*x0 + 9*x1 + 7*x2 + 8*x3 + 5*x4 + 6*x5',
    'constraints': [
        '2*x0 <= 306',
        '25*x0 <= 175',
        '20*x1 <= 306',
        '6*x1 <= 175',
        '11*x2 <= 306',
        '18*x2 <= 175',
        '10*x3 <= 306',
        '9*x3 <= 175',
        '23*x4 <= 306',
        '25*x4 <= 175',
        '22*x5 <= 306',
        '8*x5 <= 175',
        '11*x2 + 23*x4 >= 23',
        '20*x1 + 10*x3 >= 37',
        '10*x3 + 22*x5 >= 51',
        '2*x0 + 20*x1 >= 33',
        '20*x1 + 23*x4 + 22*x5 >= 35',
        '2*x0 + 20*x1 + 22*x5 >= 35',
        '2*x0 + 20*x1 + 10*x3 >= 35',
        '20*x1 + 23*x4 + 22*x5 >= 30',
        '2*x0 + 20*x1 + 22*x5 >= 30',
        '2*x0 + 20*x1 + 10*x3 >= 30',
        '20*x1 + 23*x4 + 22*x5 >= 48',
        '2*x0 + 20*x1 + 22*x5 >= 48',
        '2*x0 + 20*x1 + 10*x3 >= 48',
        '2*x0 + 20*x1 + 7*x2 + 10*x3 + 23*x4 + 22*x5 >= 48',
        '6*x1 + 18*x2 >= 28',
        '9*x3 + 25*x4 >= 22',
        '6*x1 + 25*x4 >= 25',
        '6*x1 + 9*x3 >= 21',
        '25*x4 + 8*x5 >= 17',
        '25*x0 + 6*x1 + 18*x2 + 9*x3 + 25*x4 + 8*x5 >= 17',
        '10*x0 - 10*x1 >= 0',
        '10*x3 + 23*x4 <= 118',
        '10*x3 + 22*x5 <= 74',
        '20*x1 + 22*x5 <= 147',
        '2*x0 + 10*x3 + 23*x4 <= 131',
        '2*x0 + 11*x2 + 10*x3 <= 146',
        '2*x0 + 10*x3 + 22*x5 <= 215',
        '2*x0 + 20*x1 + 22*x5 <= 252',
        '9*x3 + 25*x4 <= 42',
        '25*x0 + 6*x1 <= 140',
        '6*x1 + 9*x3 + 25*x4 <= 64',
        '9*x3 + 25*x4 + 8*x5 <= 68',
        '25*x0 + 9*x3 + 25*x4 <= 155'
    ]
}
```

## Step 5: Write the Gurobi code
```python
import gurobi

def solve_optimization_problem():
    # Create a new Gurobi model
    model = gurobi.Model()

    # Define the variables
    x0 = model.addVar(lb=-gurobi.GRB.INFINITY, ub=gurobi.GRB.INFINITY, name="x0")
    x1 = model.addVar(lb=-gurobi.GRB.INFINITY, ub=gurobi.GRB.INFINITY, name="x1")
    x2 = model.addVar(lb=-gurobi.GRB.INFINITY, ub=gurobi.GRB.INFINITY, name="x2")
    x3 = model.addVar(lb=-gurobi.GRB.INFINITY, ub=gurobi.GRB.INFINITY, name="x3")
    x4 = model.addVar(lb=-gurobi.GRB.INFINITY, ub=gurobi.GRB.INFINITY, name="x4")
    x5 = model.addVar(lb=-gurobi.GRB.INFINITY, ub=gurobi.GRB.INFINITY, name="x5")

    # Define the objective function
    model.setObjective(5*x0 + 9*x1 + 7*x2 + 8*x3 + 5*x4 + 6*x5, gurobi.GRB.MINIMIZE)

    # Add constraints
    model.addConstr(2*x0 <= 306)
    model.addConstr(25*x0 <= 175)
    model.addConstr(20*x1 <= 306)
    model.addConstr(6*x1 <= 175)
    model.addConstr(11*x2 <= 306)
    model.addConstr(18*x2 <= 175)
    model.addConstr(10*x3 <= 306)
    model.addConstr(9*x3 <= 175)
    model.addConstr(23*x4 <= 306)
    model.addConstr(25*x4 <= 175)
    model.addConstr(22*x5 <= 306)
    model.addConstr(8*x5 <= 175)
    model.addConstr(11*x2 + 23*x4 >= 23)
    model.addConstr(20*x1 + 10*x3 >= 37)
    model.addConstr(10*x3 + 22*x5 >= 51)
    model.addConstr(2*x0 + 20*x1 >= 33)
    model.addConstr(20*x1 + 23*x4 + 22*x5 >= 35)
    model.addConstr(2*x0 + 20*x1 + 22*x5 >= 35)
    model.addConstr(2*x0 + 20*x1 + 10*x3 >= 35)
    model.addConstr(20*x1 + 23*x4 + 22*x5 >= 30)
    model.addConstr(2*x0 + 20*x1 + 22*x5 >= 30)
    model.addConstr(2*x0 + 20*x1 + 10*x3 >= 30)
    model.addConstr(20*x1 + 23*x4 + 22*x5 >= 48)
    model.addConstr(2*x0 + 20*x1 + 22*x5 >= 48)
    model.addConstr(2*x0 + 20*x1 + 10*x3 >= 48)
    model.addConstr(2*x0 + 20*x1 + 7*x2 + 10*x3 + 23*x4 + 22*x5 >= 48)
    model.addConstr(6*x1 + 18*x2 >= 28)
    model.addConstr(9*x3 + 25*x4 >= 22)
    model.addConstr(6*x1 + 25*x4 >= 25)
    model.addConstr(6*x1 + 9*x3 >= 21)
    model.addConstr(25*x4 + 8*x5 >= 17)
    model.addConstr(25*x0 + 6*x1 + 18*x2 + 9*x3 + 25*x4 + 8*x5 >= 17)
    model.addConstr(10*x0 - 10*x1 >= 0)
    model.addConstr(10*x3 + 23*x4 <= 118)
    model.addConstr(10*x3 + 22*x5 <= 74)
    model.addConstr(20*x1 + 22*x5 <= 147)
    model.addConstr(2*x0 + 10*x3 + 23*x4 <= 131)
    model.addConstr(2*x0 + 11*x2 + 10*x3 <= 146)
    model.addConstr(2*x0 + 10*x3 + 22*x5 <= 215)
    model.addConstr(2*x0 + 20*x1 + 22*x5 <= 252)
    model.addConstr(9*x3 + 25*x4 <= 42)
    model.addConstr(25*x0 + 6*x1 <= 140)
    model.addConstr(6*x1 + 9*x3 + 25*x4 <= 64)
    model.addConstr(9*x3 + 25*x4 + 8*x5 <= 68)
    model.addConstr(25*x0 + 9*x3 + 25*x4 <= 155)

    # Solve the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print("Objective: ", model.objval)
        print("x0: ", x0.varValue)
        print("x1: ", x1.varValue)
        print("x2: ", x2.varValue)
        print("x3: ", x3.varValue)
        print("x4: ", x4.varValue)
        print("x5: ", x5.varValue)
    else:
        print("The model is infeasible")

solve_optimization_problem()
```