## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The goal is to maximize the profit of a small business that produces soccer balls and basket balls, given the constraints on sewing and quality checking time.

Let's define the decision variables:

* $x$: number of soccer balls produced
* $y$: number of basket balls produced

The objective function is to maximize the profit:

* Profit per soccer ball: $5
* Profit per basket ball: $8
* Total profit: $5x + 8y$

The constraints are:

* Sewing time: 20 minutes per soccer ball, 15 minutes per basket ball, and 5000 minutes available in a month
* Quality checking time: 10 minutes per soccer ball, 12 minutes per basket ball, and 4500 minutes available in a month
* Non-negativity constraints: $x \geq 0, y \geq 0$

The constraints can be formulated as:

* $20x + 15y \leq 5000$ (sewing time constraint)
* $10x + 12y \leq 4500$ (quality checking time constraint)
* $x \geq 0, y \geq 0$ (non-negativity constraints)

## Gurobi Code

```python
import gurobipy as gp

# Create a new model
model = gp.Model("Soccer_Basket_Balls")

# Define the decision variables
x = model.addVar(name="Soccer_Balls", lb=0, vtype=gp.GRB.CONTINUOUS)
y = model.addVar(name="Basket_Balls", lb=0, vtype=gp.GRB.CONTINUOUS)

# Define the objective function
model.setObjective(5 * x + 8 * y, gp.GRB.MAXIMIZE)

# Define the constraints
model.addConstr(20 * x + 15 * y <= 5000, name="Sewing_Time_Constraint")
model.addConstr(10 * x + 12 * y <= 4500, name="Quality_Checking_Time_Constraint")

# Solve the model
model.optimize()

# Print the solution
if model.status == gp.GRB.OPTIMAL:
    print(f"Optimal solution: Soccer Balls = {x.varValue:.2f}, Basket Balls = {y.varValue:.2f}")
    print(f"Maximum profit: ${model.objVal:.2f}")
else:
    print("No optimal solution found")
```