## Problem Description and Formulation

The scooter company produces two types of scooters: foldable scooters and electric scooters, with profits of $150 and $200 per unit, respectively. The production of each scooter type requires time from the design team and the engineering team. The specific requirements are:

- Foldable scooter: 1.5 hours with the design team and 4 hours with the engineering team.
- Electric scooter: 3 hours with the design team and 6 hours with the engineering team.

The company has the following monthly constraints:
- Design team: 4000 hours available.
- Engineering team: 5000 hours available.

The goal is to determine the optimal number of each scooter type to produce per month in order to maximize profit.

## Mathematical Formulation

Let \(x\) be the number of foldable scooters and \(y\) be the number of electric scooters.

The objective function to maximize profit is:
\[ \text{Maximize:} \quad 150x + 200y \]

Subject to the constraints:
\[ 1.5x + 3y \leq 4000 \]
\[ 4x + 6y \leq 5000 \]
\[ x \geq 0, y \geq 0 \]

## Gurobi Code

```python
import gurobi

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

    # Define variables
    x = model.addVar(name="foldable_scooters", lb=0, vtype=gurobi.GRB.CONTINUOUS)
    y = model.addVar(name="electric_scooters", lb=0, vtype=gurobi.GRB.CONTINUOUS)

    # Objective function: Maximize profit
    model.setObjective(150 * x + 200 * y, sense=gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(1.5 * x + 3 * y <= 4000, name="design_team_constraint")
    model.addConstr(4 * x + 6 * y <= 5000, name="engineering_team_constraint")

    # Optimize
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution: {x.varName} = {x.x}, {y.varName} = {y.x}")
        print(f"Max Profit: ${model.objVal:.2f}")
    else:
        print("No optimal solution found.")

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