## Problem Description and Formulation

The problem requires minimizing an objective function subject to several constraints. The objective function to be minimized is:

\[ 8.53 \times \text{hours worked by Bill} + 1.19 \times \text{hours worked by Mary} + 3.23 \times \text{hours worked by Peggy} \]

The constraints are:

1. **Individual Likelihood to Quit Index Constraints:**
   - Bill's likelihood to quit index: 11
   - Mary's likelihood to quit index: 3
   - Peggy's likelihood to quit index: 8

2. **Combined Likelihood to Quit Index Constraints:**
   - \(3 \times \text{hours worked by Mary} + 8 \times \text{hours worked by Peggy} \geq 30\)
   - \(11 \times \text{hours worked by Bill} + 8 \times \text{hours worked by Peggy} \geq 30\)
   - \(11 \times \text{hours worked by Bill} + 3 \times \text{hours worked by Mary} + 8 \times \text{hours worked by Peggy} \geq 30\)

3. **Linear Constraint:**
   - \(6 \times \text{hours worked by Mary} - 2 \times \text{hours worked by Peggy} \geq 0\)

4. **Total Likelihood to Quit Index Constraint:**
   - \(11 \times \text{hours worked by Bill} + 3 \times \text{hours worked by Mary} + 8 \times \text{hours worked by Peggy} \leq 122\)

5. **Variable Bounds and Types:**
   - Hours worked by Bill: Continuous, no upper bound explicitly mentioned but implied by the problem context and the resource attributes.
   - Hours worked by Mary: Continuous, no upper bound explicitly mentioned but implied by the problem context and the resource attributes.
   - Hours worked by Peggy: Integer, no upper bound explicitly mentioned but implied by the problem context and the resource attributes.

## Gurobi Code Formulation

```python
import gurobipy as gp

# Define the model
m = gp.Model("optimization_problem")

# Define variables
hours_worked_by_Bill = m.addVar(name="hours_worked_by_Bill", lb=0, ub=144, vtype=gp.GRB.CONTINUOUS)
hours_worked_by_Mary = m.addVar(name="hours_worked_by_Mary", lb=0, ub=144, vtype=gp.GRB.CONTINUOUS)
hours_worked_by_Peggy = m.addVar(name="hours_worked_by_Peggy", lb=0, ub=144, vtype=gp.GRB.INTEGER)

# Objective function
m.setObjective(8.53 * hours_worked_by_Bill + 1.19 * hours_worked_by_Mary + 3.23 * hours_worked_by_Peggy, gp.GRB.MINIMIZE)

# Constraints
m.addConstr(3 * hours_worked_by_Mary + 8 * hours_worked_by_Peggy >= 30, name="combined_Mary_Peggy")
m.addConstr(11 * hours_worked_by_Bill + 8 * hours_worked_by_Peggy >= 30, name="combined_Bill_Peggy")
m.addConstr(11 * hours_worked_by_Bill + 3 * hours_worked_by_Mary + 8 * hours_worked_by_Peggy >= 30, name="combined_all")
m.addConstr(6 * hours_worked_by_Mary - 2 * hours_worked_by_Peggy >= 0, name="linear_constraint")
m.addConstr(11 * hours_worked_by_Bill + 3 * hours_worked_by_Mary + 8 * hours_worked_by_Peggy <= 122, name="total_likelihood")

# Solve the model
m.optimize()

# Print solution
if m.status == gp.GRB.OPTIMAL:
    print("Optimal Solution:")
    print(f"Hours worked by Bill: {hours_worked_by_Bill.varValue}")
    print(f"Hours worked by Mary: {hours_worked_by_Mary.varValue}")
    print(f"Hours worked by Peggy: {hours_worked_by_Peggy.varValue}")
    print(f"Objective: {m.objVal}")
else:
    print("No optimal solution found.")
```