## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The smoothie shop wants to maximize its profit by producing the optimal number of peanut butter and almond butter smoothies given the available ingredients.

Let's define the decision variables:

* $x$: number of peanut butter smoothies
* $y$: number of almond butter smoothies

The objective function is to maximize the profit:

* Profit per peanut butter smoothie: $3
* Profit per almond butter smoothie: $5
* Total profit: $3x + 5y

The constraints are:

* Peanut butter availability: 2 units per peanut butter smoothie, 80 units available
* Almond butter availability: 3 units per almond butter smoothie, 90 units available
* Milk availability: 3 units per smoothie (both types), 100 units available
* Non-negativity: $x \geq 0, y \geq 0$

## Mathematical Formulation

The mathematical formulation of the problem is:

Maximize: $3x + 5y$

Subject to:

* $2x \leq 80$
* $3y \leq 90$
* $3x + 3y \leq 100$
* $x \geq 0, y \geq 0$

## Gurobi Code

```python
import gurobi

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

# Define the decision variables
x = m.addVar(lb=0, name="peanut_butter_smoothies")
y = m.addVar(lb=0, name="almond_butter_smoothies")

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

# Define the constraints
m.addConstr(2*x <= 80, name="peanut_butter_availability")
m.addConstr(3*y <= 90, name="almond_butter_availability")
m.addConstr(3*x + 3*y <= 100, name="milk_availability")

# Optimize the model
m.optimize()

# Print the solution
if m.status == gurobi.GRB.OPTIMAL:
    print("Optimal solution:")
    print(f"Peanut butter smoothies: {x.varValue}")
    print(f"Almond butter smoothies: {y.varValue}")
    print(f"Max profit: {m.objVal}")
else:
    print("No optimal solution found")
```

This code defines the decision variables, objective function, and constraints, and then solves the model using Gurobi's optimization algorithm. If an optimal solution is found, it prints the values of the decision variables and the maximum profit. Otherwise, it indicates that no optimal solution was found.