## Problem Description and Formulation

The problem is a linear programming (LP) optimization problem that aims to minimize the weekly wage bill of a large fast-food restaurant. The restaurant employs waiters and managers, with waiters earning $1200 per week and managers earning $2000 per week. The restaurant has several constraints:

1. A minimum of 50 workers are required.
2. At least 15 of the workers must be managers.
3. The number of managers should be at least a third of the number of waiters.
4. The weekly wage bill should be below $500,000.

## Symbolic Representation

Let's denote the number of waiters as \(W\) and the number of managers as \(M\). The objective is to minimize the total weekly wage bill, which can be represented as \(1200W + 2000M\).

The constraints can be represented as follows:

1. \(W + M \geq 50\)
2. \(M \geq 15\)
3. \(M \geq \frac{1}{3}W\)
4. \(1200W + 2000M \leq 500000\)

## Gurobi Code

To solve this LP problem using Gurobi, we will use the Gurobi Python interface. First, ensure you have Gurobi installed and a valid license.

```python
import gurobi as gp

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

# Define the variables
W = m.addVar(name="waiters", lb=0, vtype=gp.GRB.INTEGER)  # Number of waiters
M = m.addVar(name="managers", lb=0, vtype=gp.GRB.INTEGER)  # Number of managers

# Objective: Minimize the total wage bill
m.setObjective(1200 * W + 2000 * M, gp.GRB.MINIMIZE)

# Constraints
m.addConstr(W + M >= 50, name="total_workers")
m.addConstr(M >= 15, name="min_managers")
m.addConstr(M >= W / 3, name="manager_to_waiter_ratio")
m.addConstr(1200 * W + 2000 * M <= 500000, name="wage_bill")

# Solve the model
m.optimize()

# Print the results
if m.status == gp.GRB.OPTIMAL:
    print(f"Optimal Solution: Waiters = {W.varValue}, Managers = {M.varValue}")
    print(f"Minimum Wage Bill: ${1200 * W.varValue + 2000 * M.varValue}")
else:
    print("No optimal solution found")
```