## Problem Description and Formulation

The problem is a classic example of a linear programming problem. Eric wants to maximize his profit by selling two types of combos: Combo X and Combo Y, given the constraints of his inventory.

Let's define the decision variables:
- \(x\): The number of Combo X to prepare.
- \(y\): The number of Combo Y to prepare.

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

The constraints based on the inventory are:
1. Wireless keyboards: \( 2x + y \leq 25 \)
2. Wired earbuds: \( 3y \leq 13 \)
3. USB hubs: \( 2x + y \leq 19 \)

Additionally, \( x \geq 0 \) and \( y \geq 0 \) because the number of combos cannot be negative.

## Gurobi Code

```python
import gurobi

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

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

    # Objective function: Maximize profit
    model.setObjective(12*x + 15*y, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(2*x + y <= 25, name="Wireless_Keyboard_Constraint")
    model.addConstr(3*y <= 13, name="Wired_Earbuds_Constraint")
    model.addConstr(2*x + y <= 19, name="USB_Hubs_Constraint")

    # Optimize the model
    model.optimize()

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

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

This code defines the problem in Gurobi, solves it, and prints out the optimal values for \(x\) and \(y\), which represent the number of Combo X and Combo Y Eric should prepare to maximize his profit, along with the maximum profit achievable.