## Problem Description and Formulation

The tech company aims to maximize profit by determining the optimal number of laptops and tablets to produce, given certain constraints.

### Variables:
- \(L\): Number of laptops to produce
- \(T\): Number of tablets to produce

### Objective Function:
Maximize profit \(P = 200L + 160T\)

### Constraints:
1. Manufacturing time: \(20L + 15T \leq 1200\)
2. Silicon availability: \(3L + 2T \leq 150\)
3. Minimum laptops: \(L \geq 30\)
4. Non-negativity: \(L \geq 0, T \geq 0\)

## Gurobi Code

```python
import gurobi

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

    # Define variables
    L = model.addVar(lb=30, name="Laptops")  # At least 30 laptops
    T = model.addVar(lb=0, name="Tablets")   # Non-negative number of tablets

    # Objective function: Maximize profit
    model.setObjective(200*L + 160*T, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(20*L + 15*T <= 1200, name="Manufacturing_Time")
    model.addConstr(3*L + 2*T <= 150, name="Silicon_Availability")

    # Solve the model
    model.optimize()

    # Check if the model is optimized
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution found. Laptops: {L.varValue}, Tablets: {T.varValue}")
        return L.varValue, T.varValue
    else:
        print("No optimal solution found.")
        return None

# Execute the function
if __name__ == "__main__":
    solve_optimization_problem()
```

This Gurobi code models the given problem, solving for the optimal number of laptops and tablets to maximize profit under the specified constraints. It sets up the variables, objective function, and constraints as described, then solves the linear programming problem. If an optimal solution is found, it prints out the number of laptops and tablets to produce.