## Problem Description and Formulation

The problem requires maximizing the objective function:

\[ 1 \times \text{hours worked by John} + 7 \times \text{hours worked by Hank} + 1 \times \text{hours worked by Bobby} + 1 \times \text{hours worked by Dale} \]

subject to several constraints related to computer competence ratings.

## Constraints

1. Individual computer competence ratings:
   - John: 8
   - Hank: 6
   - Bobby: 11
   - Dale: 10

2. Combined computer competence rating constraints:
   - \(8 \times \text{hours worked by John} + 10 \times \text{hours worked by Dale} \geq 37\)
   - \(6 \times \text{hours worked by Hank} + 11 \times \text{hours worked by Bobby} \geq 35\)
   - \(8 \times \text{hours worked by John} + 10 \times \text{hours worked by Dale} \leq 158\)
   - \(8 \times \text{hours worked by John} + 6 \times \text{hours worked by Hank} \leq 109\)
   - \(6 \times \text{hours worked by Hank} + 11 \times \text{hours worked by Bobby} \leq 193\)
   - \(6 \times \text{hours worked by Hank} + 10 \times \text{hours worked by Dale} \leq 103\)
   - \(8 \times \text{hours worked by John} + 6 \times \text{hours worked by Hank} + 11 \times \text{hours worked by Bobby} \leq 124\)
   - \(8 \times \text{hours worked by John} + 6 \times \text{hours worked by Hank} + 11 \times \text{hours worked by Bobby} + 10 \times \text{hours worked by Dale} \leq 124\)

3. Variables:
   - \(0 \leq \text{hours worked by John}\)
   - \(0 \leq \text{hours worked by Hank}\) and is an integer
   - \(0 \leq \text{hours worked by Bobby}\)
   - \(0 \leq \text{hours worked by Dale}\)

## Gurobi Code

```python
import gurobipy as gp

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

# Define variables
hours_worked_by_John = m.addVar(lb=0, name="hours_worked_by_John")
hours_worked_by_Hank = m.addVar(lb=0, vtype=gp.GRB.INTEGER, name="hours_worked_by_Hank")
hours_worked_by_Bobby = m.addVar(lb=0, name="hours_worked_by_Bobby")
hours_worked_by_Dale = m.addVar(lb=0, name="hours_worked_by_Dale")

# Objective function
m.setObjective(1 * hours_worked_by_John + 7 * hours_worked_by_Hank + 1 * hours_worked_by_Bobby + 1 * hours_worked_by_Dale, gp.GRB.MAXIMIZE)

# Constraints
m.addConstr(8 * hours_worked_by_John + 10 * hours_worked_by_Dale >= 37, name="constraint_1")
m.addConstr(6 * hours_worked_by_Hank + 11 * hours_worked_by_Bobby >= 35, name="constraint_2")
m.addConstr(8 * hours_worked_by_John + 10 * hours_worked_by_Dale <= 158, name="constraint_3")
m.addConstr(8 * hours_worked_by_John + 6 * hours_worked_by_Hank <= 109, name="constraint_4")
m.addConstr(6 * hours_worked_by_Hank + 11 * hours_worked_by_Bobby <= 193, name="constraint_5")
m.addConstr(6 * hours_worked_by_Hank + 10 * hours_worked_by_Dale <= 103, name="constraint_6")
m.addConstr(8 * hours_worked_by_John + 6 * hours_worked_by_Hank + 11 * hours_worked_by_Bobby <= 124, name="constraint_7")
m.addConstr(8 * hours_worked_by_John + 6 * hours_worked_by_Hank + 11 * hours_worked_by_Bobby + 10 * hours_worked_by_Dale <= 124, name="constraint_8")

# Solve the model
m.optimize()

# Print the solution
if m.status == gp.GRB.OPTIMAL:
    print("Optimal Solution:")
    print(f"Hours worked by John: {hours_worked_by_John.varValue}")
    print(f"Hours worked by Hank: {hours_worked_by_Hank.varValue}")
    print(f"Hours worked by Bobby: {hours_worked_by_Bobby.varValue}")
    print(f"Hours worked by Dale: {hours_worked_by_Dale.varValue}")
    print(f"Objective: {m.objVal}")
else:
    print("The model is infeasible or unbounded.")
```