To solve the optimization problem described, we first need to define the decision variables and the objective function. Let's denote:

- \(x_1\) as the number of minivans produced,
- \(x_2\) as the number of SUVs produced.

The objective is to maximize profit. Given that each minivan nets $5500 in profit and each SUV nets $4000 in profit, the objective function can be written as:

\[ \text{Maximize:} \quad 5500x_1 + 4000x_2 \]

Next, we need to consider the constraints:

1. **Engineering Time Constraint**: Minivans require 9 hours of engineering time, and SUVs require 7 hours. The total available engineering time is 450 hours.
   
   \[ 9x_1 + 7x_2 \leq 450 \]

2. **Steel Constraint**: Both vehicles require 25 kg of steel, and the company receives 1200 kg of steel each week.
   
   \[ 25x_1 + 25x_2 \leq 1200 \]

3. **Non-Negativity Constraints**: The number of vehicles produced cannot be negative.
   
   \[ x_1 \geq 0, \quad x_2 \geq 0 \]

Given these constraints and the objective function, we can formulate the linear programming problem.

Now, let's implement this in Gurobi using Python:

```python
from gurobipy import *

# Create a new model
m = Model("Vehicle_Production")

# Define variables
x1 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="minivans")
x2 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="SUVs")

# Set the objective function
m.setObjective(5500*x1 + 4000*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(9*x1 + 7*x2 <= 450, "engineering_time")
m.addConstr(25*x1 + 25*x2 <= 1200, "steel")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Minivans: {x1.x}")
    print(f"SUVs: {x2.x}")
    print(f"Maximum Profit: {m.objVal}")
else:
    print("No optimal solution found")
```