## Problem Description and Formulation

The problem requires formulating a linear programming (LP) model to minimize the weekly wages for a company that employs engineers and interns. The given constraints are:

- The project requires at least 100 workers.
- At least 20 of the workers must be interns.
- The number of interns must be at least a third of the number of engineers.
- The company wants to keep the weekly payroll at most $200,000.
- Engineers earn $3000 per week, and interns earn $750 per week.

## Symbolic Representation

Let's denote:
- \(E\) as the number of engineers,
- \(I\) as the number of interns,
- \(W\) as the total weekly wages.

The objective is to minimize \(W = 3000E + 750I\).

Subject to:
1. \(E + I \geq 100\)
2. \(I \geq 20\)
3. \(I \geq \frac{1}{3}E\)
4. \(3000E + 750I \leq 200000\)

## Gurobi Code

```python
import gurobi

def solve_optimization_problem():
    # Create a new model
    model = gurobi.Model()

    # Define variables
    E = model.addVar(lb=0, name="Engineers", vtype=gurobi.GRB.INTEGER)
    I = model.addVar(lb=0, name="Interns", vtype=gurobi.GRB.INTEGER)

    # Objective: Minimize wages
    model.setObjective(3000*E + 750*I, gurobi.GRB.MINIMIZE)

    # Constraints
    model.addConstr(E + I >= 100, name="Total_Workers")
    model.addConstr(I >= 20, name="Min_Interns")
    model.addConstr(I >= E/3, name="Intern_to_Engineer_Ratio")
    model.addConstr(3000*E + 750*I <= 200000, name="Max_Payroll")

    # Solve the model
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal Solution:")
        print(f"Engineers: {E.varValue}")
        print(f"Interns: {I.varValue}")
        print(f"Total Wages: ${3000*E.varValue + 750*I.varValue}")
    else:
        print("No optimal solution found.")

solve_optimization_problem()
```