To solve this optimization problem, we will first define the decision variables and the objective function. Let's denote the number of washing machines to be installed as \(W\) and the number of dryers as \(D\).

The profit per washing machine installation is $200, and per dryer installation is $150. Therefore, the total profit can be represented by the equation:
\[ \text{Total Profit} = 200W + 150D \]

This will be our objective function, which we aim to maximize.

Next, we consider the constraints based on the available time for plumbers and electricians:

1. **Plumber Time Constraint**: Each washing machine requires 20 minutes of plumber time, and each dryer requires 10 minutes. The total available plumber time is 2000 minutes. This gives us the constraint:
\[ 20W + 10D \leq 2000 \]

2. **Electrician Time Constraint**: Each washing machine requires 15 minutes of electrician time, and each dryer requires 25 minutes. The total available electrician time is 3000 minutes. This leads to the constraint:
\[ 15W + 25D \leq 3000 \]

Additionally, we have non-negativity constraints since the number of washing machines and dryers cannot be negative:
\[ W \geq 0 \]
\[ D \geq 0 \]

And because we are dealing with whole units (you can't install half a machine), both \(W\) and \(D\) should be integers.

Now, let's translate this problem into Gurobi code in Python:

```python
from gurobipy import *

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

# Define the decision variables
W = m.addVar(vtype=GRB.INTEGER, name="Washing_Machines")
D = m.addVar(vtype=GRB.INTEGER, name="Dryers")

# Objective function: Maximize profit
m.setObjective(200*W + 150*D, GRB.MAXIMIZE)

# Constraints
m.addConstr(20*W + 10*D <= 2000, "Plumber_Time")
m.addConstr(15*W + 25*D <= 3000, "Electrician_Time")

# Non-negativity constraints (automatically handled by addVar for integer types)

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Install {W.x} washing machines")
    print(f"Install {D.x} dryers")
    print(f"Total Profit: ${200*W.x + 150*D.x}")
else:
    print("No optimal solution found")
```