## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The goal is to maximize the profit of a vacuum repair company by determining the optimal number of home vacuums and shop vacuums to repair, given the available hours for disassembly and repair.

Let's define the decision variables:

* $x$: number of home vacuums to repair
* $y$: number of shop vacuums to repair

The objective function is to maximize the profit:

* Profit per home vacuum: $20
* Profit per shop vacuum: $35
* Total profit: $20x + 35y$

The constraints are:

* Disassembly time: $0.5x + y \leq 300$ (available 300 hours)
* Repair time: $x + 2y \leq 400$ (available 400 hours)
* Non-negativity: $x \geq 0, y \geq 0$ (cannot repair negative number of vacuums)

## Gurobi Code

```python
import gurobi

# Create a new Gurobi model
model = gurobi.Model()

# Define the decision variables
x = model.addVar(lb=0, name="home_vacuums")
y = model.addVar(lb=0, name="shop_vacuums")

# Define the objective function
model.setObjective(20 * x + 35 * y, gurobi.GRB.MAXIMIZE)

# Define the constraints
model.addConstr(0.5 * x + y <= 300, name="disassembly_time")
model.addConstr(x + 2 * y <= 400, name="repair_time")

# Optimize the model
model.optimize()

# Print the solution
if model.status == gurobi.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Home vacuums to repair: {x.varValue}")
    print(f"Shop vacuums to repair: {y.varValue}")
    print(f"Maximum profit: ${model.objVal:.2f}")
else:
    print("No optimal solution found.")
```

This code defines the decision variables, objective function, and constraints, and then solves the model using Gurobi's optimization algorithm. If an optimal solution is found, it prints the number of home and shop vacuums to repair and the maximum profit. Otherwise, it indicates that no optimal solution was found.