## Problem Description and Formulation

The problem requires minimizing the objective function: $3 \times \text{hours worked by John} + 2 \times \text{hours worked by Bobby}$, subject to several constraints.

### Constraints

1. **John's organization score**: $5$ (given)
2. **John's computer competence rating**: $13$ (given)
3. **Bobby's organization score**: $8$ (given)
4. **Bobby's computer competence rating**: $1$ (given)
5. **Total combined organization score**: $\geq 7$ and $\leq 37$
6. **Total combined computer competence rating**: $\geq 8$ and $\leq 16$
7. **Linear constraint**: $4 \times \text{hours worked by John} - 8 \times \text{hours worked by Bobby} \geq 0$

### Gurobi Code Formulation

Given the attributes:
- $r0$: organization score with $x0 = 5$, $x1 = 8$, and upper bound $47$
- $r1$: computer competence rating with $x0 = 13$, $x1 = 1$, and upper bound $29$

And variables:
- $hours$ worked by John: $x$
- $hours$ worked by Bobby: $y$

The objective function to minimize is: $3x + 2y$

Constraints:
- $5x + 8y \geq 7$
- $5x + 8y \leq 37$
- $13x + y \geq 8$
- $13x + y \leq 16$
- $4x - 8y \geq 0$

```python
import gurobipy as gp

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

# Define variables
x = m.addVar(name="hours_worked_by_John", lb=0)  # Assuming hours cannot be negative
y = m.addVar(name="hours_worked_by_Bobby", lb=0)  # Assuming hours cannot be negative

# Objective function: Minimize 3x + 2y
m.setObjective(3*x + 2*y, gp.GRB.MINIMIZE)

# Constraints
m.addConstr(5*x + 8*y >= 7, name="total_organization_score_min")
m.addConstr(5*x + 8*y <= 37, name="total_organization_score_max")
m.addConstr(13*x + y >= 8, name="total_computer_competence_min")
m.addConstr(13*x + y <= 16, name="total_computer_competence_max")
m.addConstr(4*x - 8*y >= 0, name="linear_constraint")

# Solve the model
m.optimize()

# Print solution
if m.status == gp.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Hours worked by John: {x.varValue}")
    print(f"Hours worked by Bobby: {y.varValue}")
    print(f"Objective: {m.objVal}")
else:
    print("No optimal solution found.")
```