## Problem Description and Symbolic Representation

The problem requires formulating a linear programming (LP) problem to minimize weekly wages for a research lab employing undergraduate and graduate students.

### Symbolic Representation

Let's denote:
- $x_1$ as the number of undergraduate students
- $x_2$ as the number of graduate students

The objective is to minimize the weekly wages, which can be represented as $100x_1 + 300x_2$.

The constraints based on the problem description are:
1. The lab requires at least 50 students: $x_1 + x_2 \geq 50$
2. At least 10 students must be graduate students: $x_2 \geq 10$
3. The number of graduate students should be at least a third of the undergraduate students: $x_2 \geq \frac{1}{3}x_1$

## Symbolic Representation in JSON Format

```json
{
    'sym_variables': [('x1', 'undergraduate students'), ('x2', 'graduate students')],
    'objective_function': '100*x1 + 300*x2',
    'constraints': [
        'x1 + x2 >= 50',
        'x2 >= 10',
        'x2 >= (1/3)*x1'
    ]
}
```

## Gurobi Code in Python

```python
import gurobi

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

    # Define variables
    x1 = model.addVar(name='undergraduate_students', lb=0, vtype=gurobi.GRB.INTEGER)  # Number of undergraduate students
    x2 = model.addVar(name='graduate_students', lb=0, vtype=gurobi.GRB.INTEGER)  # Number of graduate students

    # Objective function: Minimize weekly wages
    model.setObjective(100 * x1 + 300 * x2, gurobi.GRB.MINIMIZE)

    # Constraints
    model.addConstr(x1 + x2 >= 50, name='total_students')  # At least 50 students
    model.addConstr(x2 >= 10, name='graduate_students_min')  # At least 10 graduate students
    model.addConstr(x2 >= (1/3) * x1, name='graduate_to_undergraduate_ratio')  # Graduate students >= 1/3 of undergraduate students

    # Optimize the model
    model.optimize()

    if model.status == gurobi.GRB.Status.OPTIMAL:
        print(f"Optimal Solution: Undergraduate Students = {x1.varValue}, Graduate Students = {x2.varValue}")
        print(f"Minimum Weekly Wages: ${100 * x1.varValue + 300 * x2.varValue}")
    else:
        print("The problem is infeasible.")

solve_lab_employment_problem()
```