## Problem Description and Formulation

The problem is an optimization problem with a quadratic objective function and linear constraints. The goal is to maximize the objective function subject to the given constraints.

### Variables

* `hours worked by Laura` (continuous)
* `hours worked by Peggy` (continuous)
* `hours worked by Bill` (integer)

### Objective Function

Maximize:
\[ 9 \times (\text{hours worked by Laura})^2 + 2 \times (\text{hours worked by Laura}) \times (\text{hours worked by Peggy}) + 3 \times (\text{hours worked by Laura}) \times (\text{hours worked by Bill}) + 9 \times (\text{hours worked by Peggy})^2 + 8 \times (\text{hours worked by Peggy}) \times (\text{hours worked by Bill}) + 9 \times (\text{hours worked by Bill})^2 + 3 \times (\text{hours worked by Laura}) + 2 \times (\text{hours worked by Peggy}) + 9 \times (\text{hours worked by Bill}) \]

### Constraints

* `6 * hours worked by Laura = 6` (paperwork competence rating for Laura)
* `7 * hours worked by Laura = 7` (likelihood to quit index for Laura)
* `3 * hours worked by Peggy = 3` (paperwork competence rating for Peggy)
* `6 * hours worked by Peggy = 6` (likelihood to quit index for Peggy)
* `2 * hours worked by Bill = 2` (paperwork competence rating for Bill)
* `14 * hours worked by Bill = 14` (likelihood to quit index for Bill)
* `7 * hours worked by Laura + 14 * hours worked by Bill >= 20` (combined likelihood to quit index for Laura and Bill)
* `7 * hours worked by Laura + 6 * hours worked by Peggy + 14 * hours worked by Bill >= 30` (combined likelihood to quit index for Laura, Peggy, and Bill)
* `3 * hours worked by Peggy + 2 * hours worked by Bill <= 92` (combined paperwork competence rating for Peggy and Bill)
* `6 * hours worked by Laura + 3 * hours worked by Peggy <= 100` (combined paperwork competence rating for Laura and Peggy)
* `6 * hours worked by Laura + 3 * hours worked by Peggy + 2 * hours worked by Bill <= 100` (combined paperwork competence rating for Laura, Peggy, and Bill)
* `6 * hours worked by Peggy + 14 * hours worked by Bill <= 121` (combined likelihood to quit index for Peggy and Bill)
* `7 * hours worked by Laura + 6 * hours worked by Peggy + 14 * hours worked by Bill <= 76` (combined likelihood to quit index for Laura, Peggy, and Bill)

## Gurobi Code

```python
import gurobi

# Create a new Gurobi model
m = gurobi.Model()

# Define variables
laura_hours = m.addVar(lb=0, ub=gurobi.GRB.INFINITY, name="laura_hours")
peggy_hours = m.addVar(lb=0, ub=gurobi.GRB.INFINITY, name="peggy_hours")
bill_hours = m.addVar(lb=0, type=gurobi.GRB.INTEGER, name="bill_hours")

# Objective function
m.setObjective(9 * laura_hours ** 2 + 2 * laura_hours * peggy_hours + 3 * laura_hours * bill_hours +
               9 * peggy_hours ** 2 + 8 * peggy_hours * bill_hours + 9 * bill_hours ** 2 +
               3 * laura_hours + 2 * peggy_hours + 9 * bill_hours, gurobi.GRB.MAXIMIZE)

# Constraints
m.addConstr(6 * laura_hours == 6, name="laura_paperwork")
m.addConstr(7 * laura_hours == 7, name="laura_quit")
m.addConstr(3 * peggy_hours == 3, name="peggy_paperwork")
m.addConstr(6 * peggy_hours == 6, name="peggy_quit")
m.addConstr(2 * bill_hours == 2, name="bill_paperwork")
m.addConstr(14 * bill_hours == 14, name="bill_quit")

m.addConstr(7 * laura_hours + 14 * bill_hours >= 20, name="laura_bill_quit")
m.addConstr(7 * laura_hours + 6 * peggy_hours + 14 * bill_hours >= 30, name="all_quit")
m.addConstr(3 * peggy_hours + 2 * bill_hours <= 92, name="peggy_bill_paperwork")
m.addConstr(6 * laura_hours + 3 * peggy_hours <= 100, name="laura_peggy_paperwork")
m.addConstr(6 * laura_hours + 3 * peggy_hours + 2 * bill_hours <= 100, name="all_paperwork")
m.addConstr(6 * peggy_hours + 14 * bill_hours <= 121, name="peggy_bill_quit")
m.addConstr(7 * laura_hours + 6 * peggy_hours + 14 * bill_hours <= 76, name="all_quit_max")

# Optimize the model
m.optimize()

# Print the solution
if m.status == gurobi.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Hours worked by Laura: {laura_hours.varValue}")
    print(f"Hours worked by Peggy: {peggy_hours.varValue}")
    print(f"Hours worked by Bill: {bill_hours.varValue}")
else:
    print("No optimal solution found.")
```