## Problem Description and Formulation

The company aims to maximize profit by determining the optimal number of kayaks and canoes to produce given the available assembly and quality checking times. Let's denote the number of kayaks to be produced as \(K\) and the number of canoes as \(C\).

### Constraints

1. **Assembly Time Constraint**: Each kayak takes 60 minutes, and each canoe takes 80 minutes. The total available assembly time is 8000 minutes. Therefore, the assembly time constraint can be expressed as:
\[ 60K + 80C \leq 8000 \]

2. **Quality Checking Time Constraint**: Each kayak takes 15 minutes, and each canoe takes 25 minutes. The total available quality checking time is 4000 minutes. Therefore, the quality checking time constraint can be expressed as:
\[ 15K + 25C \leq 4000 \]

3. **Non-Negativity Constraint**: The number of kayaks and canoes cannot be negative:
\[ K \geq 0, C \geq 0 \]

### Objective Function

The profit per kayak is $300, and the profit per canoe is $450. The objective is to maximize the total profit \(P\):
\[ P = 300K + 450C \]

## Gurobi Code

To solve this linear programming problem using Gurobi, we will use the Gurobi Python interface. First, ensure you have Gurobi installed in your Python environment. You can install it via pip if you have the Gurobi license:

```bash
pip install gurobi
```

Here's the Gurobi code for the problem:

```python
import gurobi as gp

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

# Define variables
K = m.addVar(name="Kayaks", lb=0, vtype=gp.GRB.CONTINUOUS)  # Number of kayaks
C = m.addVar(name="Canoes", lb=0, vtype=gp.GRB.CONTINUOUS)  # Number of canoes

# Objective function: Maximize profit
m.setObjective(300*K + 450*C, gp.GRB.MAXIMIZE)

# Assembly time constraint
m.addConstr(60*K + 80*C <= 8000, name="Assembly_Time")

# Quality checking time constraint
m.addConstr(15*K + 25*C <= 4000, name="Quality_Checking_Time")

# Solve the model
m.optimize()

# Print solution
if m.status == gp.GRB.OPTIMAL:
    print(f"Optimal solution found. Production levels: Kayaks = {K.varValue}, Canoes = {C.varValue}")
    print(f"Maximum profit: ${300*K.varValue + 450*C.varValue:.2f}")
else:
    print("No optimal solution found.")
```