## Problem Description and Symbolic Representation

The problem involves maximizing profit by determining the number of touchscreen phones and flip phones to produce, given constraints on hardware setup and software verification times.

### Symbolic Variables:
- $x_1$ = Number of touchscreen phones
- $x_2$ = Number of flip phones

### Objective Function:
Maximize profit $P = 150x_1 + 200x_2$

### Constraints:
1. Hardware setup time: $30x_1 + 80x_2 \leq 5000$
2. Software verification time: $20x_1 + 15x_2 \leq 3750$
3. Non-negativity: $x_1 \geq 0, x_2 \geq 0$

## Symbolic Representation in JSON Format

```json
{
    'sym_variables': [('x1', 'touchscreen phones'), ('x2', 'flip phones')],
    'objective_function': '150*x1 + 200*x2',
    'constraints': [
        '30*x1 + 80*x2 <= 5000',
        '20*x1 + 15*x2 <= 3750',
        'x1 >= 0',
        'x2 >= 0'
    ]
}
```

## Gurobi Code in Python

```python
import gurobipy as gp

# Create a new model
model = gp.Model("Phone_Production")

# Define variables
x1 = model.addVar(name="touchscreen_phones", lb=0, vtype=gp.GRB.CONTINUOUS)
x2 = model.addVar(name="flip_phones", lb=0, vtype=gp.GRB.CONTINUOUS)

# Objective function: Maximize profit
model.setObjective(150*x1 + 200*x2, gp.GRB.MAXIMIZE)

# Constraints
model.addConstr(30*x1 + 80*x2 <= 5000, name="hardware_setup")
model.addConstr(20*x1 + 15*x2 <= 3750, name="software_verification")

# Solve the model
model.optimize()

# Print solution
if model.status == gp.GRB.OPTIMAL:
    print(f"Optimal solution: {x1.varName} = {x1.x}, {x2.varName} = {x2.x}")
    print(f"Max Profit: ${model.objVal:.2f}")
else:
    print("No optimal solution found.")
```