## Problem Description and Formulation

The steel shop produces two products: fences and doors, using two resources: stainless steel and aluminum. The goal is to maximize profit given the resource constraints.

### Variables
- Let \(F\) be the number of fences produced.
- Let \(D\) be the number of doors produced.

### Objective Function
The profit per fence is $200, and the profit per door is $100. The objective is to maximize the total profit \(P\):
\[ P = 200F + 100D \]

### Constraints
1. **Stainless Steel Constraint**: Each fence requires 2 units of stainless steel, and each door requires 5 units. There are 400 units of stainless steel available.
\[ 2F + 5D \leq 400 \]

2. **Aluminum Constraint**: Each fence requires 10 units of aluminum, and each door requires 1 unit. There are 500 units of aluminum available.
\[ 10F + D \leq 500 \]

3. **Non-Negativity Constraints**: The number of fences and doors produced cannot be negative.
\[ F \geq 0, D \geq 0 \]

### Gurobi Code

```python
import gurobi

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

    # Define variables
    F = model.addVar(lb=0, name="Fences")
    D = model.addVar(lb=0, name="Doors")

    # Objective function: Maximize profit
    model.setObjective(200 * F + 100 * D, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(2 * F + 5 * D <= 400, name="StainlessSteel")
    model.addConstr(10 * F + D <= 500, name="Aluminum")

    # Optimize
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution: Fences = {F.varValue}, Doors = {D.varValue}")
        print(f"Max Profit: ${model.objVal:.2f}")
    else:
        print("No optimal solution found.")

if __name__ == "__main__":
    solve_steel_shop_problem()
```