## Problem Description and Symbolic Representation

The problem requires formulating a linear programming (LP) model to minimize the weekly wage bill for a company with international and local employees. The goal is to determine the optimal number of international and local employees while satisfying given constraints.

### Symbolic Representation:

Let's define the symbolic variables as follows:
- $x_1$ = Number of international employees
- $x_2$ = Number of local employees

The objective is to minimize the total weekly wage bill. The weekly wages for international and local employees are $500 and $1200, respectively. Thus, the objective function can be represented as:

Minimize: $500x_1 + 1200x_2$

The constraints based on the problem description are:
1. Total employees should be at least 50: $x_1 + x_2 \geq 50$
2. At least 12 employees should be local: $x_2 \geq 12$
3. The number of local employees should be at least a third of the number of international employees: $x_2 \geq \frac{1}{3}x_1$
4. The weekly wage bill should be below $40,000: $500x_1 + 1200x_2 \leq 40000$

## Symbolic Representation in JSON Format

```json
{
    'sym_variables': [('x1', 'international employees'), ('x2', 'local employees')],
    'objective_function': '500*x1 + 1200*x2',
    'constraints': [
        'x1 + x2 >= 50',
        'x2 >= 12',
        'x2 >= (1/3)*x1',
        '500*x1 + 1200*x2 <= 40000'
    ]
}
```

## Gurobi Code in Python

```python
import gurobi

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

    # Define variables
    x1 = model.addVar(lb=0, vtype=gurobi.GRB.INTEGER, name="international_employees")
    x2 = model.addVar(lb=0, vtype=gurobi.GRB.INTEGER, name="local_employees")

    # Objective function: Minimize 500*x1 + 1200*x2
    model.setObjective(500*x1 + 1200*x2, gurobi.GRB.MINIMIZE)

    # Constraints
    model.addConstr(x1 + x2 >= 50, name="total_employees")
    model.addConstr(x2 >= 12, name="local_employees_min")
    model.addConstr(x2 >= (1/3)*x1, name="local_to_international_ratio")
    model.addConstr(500*x1 + 1200*x2 <= 40000, name="wage_bill")

    # Optimize the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal Solution:")
        print(f"International Employees: {x1.varValue}")
        print(f"Local Employees: {x2.varValue}")
        print(f"Minimum Wage Bill: {model.objVal}")
    else:
        print("The model is infeasible.")

solve_optimization_problem()
```