## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to maximize the profit of a wood factory that produces lumbers and plywood using workers and machines. The factory has limited worker-hours and machine-hours available.

### Decision Variables

* Let \(L\) be the number of lumbers produced.
* Let \(P\) be the number of plywood produced.

### Objective Function

The profit per lumber is $10, and the profit per plywood is $35. The objective is to maximize the total profit:

\[ \text{Maximize:} \quad 10L + 35P \]

### Constraints

1. **Worker-hours constraint:** Each lumber takes 3 worker-hours, and each plywood requires 2 worker-hours. The factory has 2500 worker-hours available.

\[ 3L + 2P \leq 2500 \]

2. **Machine-hours constraint:** Each lumber takes 8 machine-hours, and each plywood requires 12 machine-hours. The factory has 4000 machine-hours available.

\[ 8L + 12P \leq 4000 \]

3. **Minimum production requirements:**
   - The factory must make at least 200 lumbers.

\[ L \geq 200 \]

   - The factory must make at least 300 plywood.

\[ P \geq 300 \]

4. **Non-negativity constraints:** The number of lumbers and plywood produced cannot be negative.

\[ L \geq 0, P \geq 0 \]

However, given the minimum production requirements, the non-negativity constraints are implicitly satisfied.

## Gurobi Code

```python
import gurobipy as gp

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

# Define the decision variables with minimum production requirements
L = model.addVar(lb=200, name="Lumbers")
P = model.addVar(lb=300, name="Plywood")

# Objective function: Maximize profit
model.setObjective(10*L + 35*P, gp.GRB.MAXIMIZE)

# Constraints
model.addConstr(3*L + 2*P <= 2500, name="Worker_hours")
model.addConstr(8*L + 12*P <= 4000, name="Machine_hours")

# Solve the model
model.solve()

# Output the solution
if model.status == gp.GRB.OPTIMAL:
    print(f"Optimal solution found: L = {L.varValue}, P = {P.varValue}")
    print(f"Maximum profit: ${10*L.varValue + 35*P.varValue}")
else:
    print("No optimal solution found.")
```