## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The store sells two types of tropical fruit bowls: small and large. Each bowl contains a specific amount of kiwi, mango, and pineapple. The store has a limited amount of each fruit available. The goal is to determine how many of each bowl to sell in order to maximize profit.

Let's define the decision variables:

* `x`: number of small bowls to sell
* `y`: number of large bowls to sell

The objective function is to maximize profit:

* Profit per small bowl: $5
* Profit per large bowl: $8
* Total profit: `5x + 8y`

The constraints are:

* Kiwi: 3 units per small bowl, 5 units per large bowl, 100 units available: `3x + 5y <= 100`
* Mango: 2 units per small bowl, 4 units per large bowl, 120 units available: `2x + 4y <= 120`
* Pineapple: 5 units per small bowl, 8 units per large bowl, 150 units available: `5x + 8y <= 150`
* Non-negativity: `x >= 0`, `y >= 0`

## Gurobi Code

```python
import gurobi

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

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

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

# Define the constraints
model.addConstr(3 * x + 5 * y <= 100, name="kiwi_constraint")
model.addConstr(2 * x + 4 * y <= 120, name="mango_constraint")
model.addConstr(5 * x + 8 * y <= 150, name="pineapple_constraint")

# Optimize the model
model.optimize()

# Print the solution
if model.status == gurobi.GRB.OPTIMAL:
    print("Optimal solution:")
    print(f"Small bowls: {x.varValue}")
    print(f"Large bowls: {y.varValue}")
    print(f"Max profit: {model.objVal}")
else:
    print("No optimal solution found")
```