## Problem Description and Formulation

The company produces two types of desks: regular desks and standing desks. The goal is to maximize profit given the constraints on wood and packaging time.

### Variables
- Let \(R\) be the number of regular desks produced.
- Let \(S\) be the number of standing desks produced.

### Objective Function
The profit per regular desk is $200, and the profit per standing desk is $300. The objective is to maximize the total profit \(P\):
\[ P = 200R + 300S \]

### Constraints
1. **Wood Constraint**: Regular desks require 20 units of wood, and standing desks require 15 units of wood. The company has 4000 units of wood available:
\[ 20R + 15S \leq 4000 \]

2. **Packaging Time Constraint**: Regular desks take 10 minutes to package, and standing desks take 20 minutes to package. The company has 1500 minutes of packaging time available:
\[ 10R + 20S \leq 1500 \]

3. **Non-Negativity Constraint**: The number of desks cannot be negative:
\[ R \geq 0, S \geq 0 \]

## Gurobi Code

To solve this linear programming problem, we will use the Gurobi library in Python.

```python
import gurobi

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

    # Define variables
    R = model.addVar(vtype=gurobi.GRB.CONTINUOUS, name="Regular_Desks")
    S = model.addVar(vtype=gurobi.GRB.CONTINUOUS, name="Standing_Desks")

    # Objective function: Maximize profit
    model.setObjective(200*R + 300*S, gurobi.GRB.MAXIMIZE)

    # Wood constraint
    model.addConstr(20*R + 15*S <= 4000, name="Wood_Constraint")

    # Packaging time constraint
    model.addConstr(10*R + 20*S <= 1500, name="Packaging_Time_Constraint")

    # Non-negativity constraints
    model.addConstr(R >= 0, name="Non_Negativity_Regular")
    model.addConstr(S >= 0, name="Non_Negativity_Standings")

    # Optimize model
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution found. Number of regular desks: {R.varValue}, Number of standing desks: {S.varValue}")
        print(f"Maximum profit: ${200*R.varValue + 300*S.varValue}")
    else:
        print("No optimal solution found.")

solve_desk_production_problem()
```

This code defines the optimization problem as described, using Gurobi to find the optimal production levels for regular and standing desks that maximize profit under the given constraints.