## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The goal is to maximize the profit of a breakfast diner by determining the optimal number of pancakes and waffles to produce, given the available resources (flour and butter) and the profit per item.

Let's define the decision variables:

* `P`: number of pancakes to produce
* `W`: number of waffles to produce

The objective function is to maximize the total profit:

* `Profit = 5P + 7W`

The constraints are:

* `30P + 50W <= 5000` (flour constraint: 5000 grams available)
* `10P + 15W <= 2000` (butter constraint: 2000 grams available)
* `P >= 0` and `W >= 0` (non-negativity constraints: cannot produce a negative number of pancakes or waffles)

## Gurobi Code

```python
import gurobi

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

# Define the decision variables
P = model.addVar(lb=0, name="Pancakes")
W = model.addVar(lb=0, name="Waffles")

# Define the objective function
model.setObjective(5 * P + 7 * W, gurobi.GRB.MAXIMIZE)

# Define the constraints
model.addConstr(30 * P + 50 * W <= 5000, name="Flour_Constraint")
model.addConstr(10 * P + 15 * W <= 2000, name="Butter_Constraint")

# Optimize the model
model.optimize()

# Print the solution
if model.status == gurobi.GRB.OPTIMAL:
    print(f"Optimal solution: Pancakes = {P.varValue}, Waffles = {W.varValue}")
    print(f"Maximum profit: ${model.objVal:.2f}")
else:
    print("No optimal solution found")
```