## Problem Description and Symbolic Representation

The problem involves a glass company that produces sliding doors and windows. The goal is to maximize profit given certain production constraints.

### Symbolic Variables:
- $x_1$ = sliding doors
- $x_2$ = windows

### Objective Function:
Maximize profit $P = 30x_1 + 25x_2$

### Constraints:
1. $x_1 \geq 120$ (at least 120 sliding doors)
2. $x_2 \geq 110$ (at least 110 windows)
3. $x_1 \leq 210$ (at most 210 sliding doors)
4. $x_2 \leq 170$ (at most 170 windows)
5. $x_1 + x_2 \geq 250$ (at least 250 products of either type)

## Symbolic Representation in JSON Format

```json
{
    'sym_variables': [('x1', 'sliding doors'), ('x2', 'windows')],
    'objective_function': '30*x1 + 25*x2',
    'constraints': [
        'x1 >= 120',
        'x2 >= 110',
        'x1 <= 210',
        'x2 <= 170',
        'x1 + x2 >= 250'
    ]
}
```

## Gurobi Code in Python

```python
import gurobipy as gp

# Create a new model
model = gp.Model("Glass Company Production")

# Define variables
x1 = model.addVar(lb=0, name="sliding_doors")  # At least 0
x2 = model.addVar(lb=0, name="windows")      # At least 0

# Set objective function
model.setObjective(30*x1 + 25*x2, gp.GRB.MAXIMIZE)

# Add constraints
model.addConstr(x1 >= 120, name="min_sliding_doors")
model.addConstr(x2 >= 110, name="min_windows")
model.addConstr(x1 <= 210, name="max_sliding_doors")
model.addConstr(x2 <= 170, name="max_windows")
model.addConstr(x1 + x2 >= 250, name="min_total_products")

# Solve the model
model.optimize()

# Print solution
if model.status == gp.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Sliding doors: {x1.varValue}")
    print(f"Windows: {x2.varValue}")
    print(f"Profit: {30*x1.varValue + 25*x2.varValue}")
else:
    print("No optimal solution found.")
```