## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The goal is to maximize profit by determining the optimal number of rafts and kayaks to stock in a warehouse, given constraints on space, budget, and product mix.

Let's define the decision variables:

* `R`: number of rafts to stock
* `K`: number of kayaks to stock

The objective function is to maximize profit:

* Profit per raft: $45
* Profit per kayak: $55

The constraints are:

* Space: 10 sq ft per raft, 12 sq ft per kayak, and 400 sq ft available
* Budget: $200 per raft, $250 per kayak, and $10,000 available
* Product mix: at least 55% of all items in stock must be rafts

## Mathematical Formulation

The mathematical formulation of the problem is:

Maximize: 45R + 55K

Subject to:

* 10R + 12K ≤ 400 (space constraint)
* 200R + 250K ≤ 10000 (budget constraint)
* R ≥ 0.55(R + K) (product mix constraint)
* R, K ≥ 0 (non-negativity constraint)

## Gurobi Code

```python
import gurobi

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

# Define the decision variables
R = m.addVar(name="Rafts", lb=0, vtype=gurobi.GRB.INTEGER)
K = m.addVar(name="Kayaks", lb=0, vtype=gurobi.GRB.INTEGER)

# Define the objective function
m.setObjective(45*R + 55*K, gurobi.GRB.MAXIMIZE)

# Add constraints
m.addConstr(10*R + 12*K <= 400, name="Space_Constraint")
m.addConstr(200*R + 250*K <= 10000, name="Budget_Constraint")
m.addConstr(R >= 0.55*(R + K), name="Product_Mix_Constraint")

# Optimize the model
m.optimize()

# Print the solution
if m.status == gurobi.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Rafts: {R.varValue:.0f}")
    print(f"Kayaks: {K.varValue:.0f}")
    print(f"Max Profit: {m.objVal:.2f}")
else:
    print("No optimal solution found.")
```