## Problem Description and Symbolic Representation

The problem involves a lighting company that produces glass and brass chandeliers. The goal is to maximize profit given the constraints on crafting and installation hours.

### Symbolic Variables:
- $x_1$ = Number of glass chandeliers
- $x_2$ = Number of brass chandeliers

### Objective Function:
The profit per glass chandelier is $400, and the profit per brass chandelier is $300. The objective function to maximize profit ($P$) is:
\[ P = 400x_1 + 300x_2 \]

### Constraints:
1. Crafting hours: Each glass chandelier takes 2 hours, and each brass chandelier takes 1.5 hours. The company has 750 hours available for crafting.
\[ 2x_1 + 1.5x_2 \leq 750 \]

2. Installation hours: Each glass chandelier takes 1 hour, and each brass chandelier takes 0.75 hours. The company has 500 hours available for installation.
\[ x_1 + 0.75x_2 \leq 500 \]

3. Non-negativity constraints:
\[ x_1 \geq 0, x_2 \geq 0 \]

## Symbolic Representation in JSON Format
```json
{
  'sym_variables': [('x1', 'glass chandeliers'), ('x2', 'brass chandeliers')],
  'objective_function': '400*x1 + 300*x2',
  'constraints': [
    '2*x1 + 1.5*x2 <= 750',
    'x1 + 0.75*x2 <= 500',
    'x1 >= 0',
    'x2 >= 0'
  ]
}
```

## Gurobi Code in Python
```python
import gurobi

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

    # Define variables
    x1 = model.addVar(name="glass_chandeliers", lb=0, vtype=gurobi.GRB.CONTINUOUS)
    x2 = model.addVar(name="brass_chandeliers", lb=0, vtype=gurobi.GRB.CONTINUOUS)

    # Objective function: Maximize profit
    model.setObjective(400 * x1 + 300 * x2, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(2 * x1 + 1.5 * x2 <= 750, name="crafting_hours")
    model.addConstr(x1 + 0.75 * x2 <= 500, name="installation_hours")

    # Solve the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution: {x1.varName} = {x1.x}, {x2.varName} = {x2.x}")
        print(f"Max Profit: {model.objVal}")
    else:
        print("The model is infeasible")

solve_chandelier_problem()
```