## Problem Description and Formulation

The problem is a linear programming optimization problem. We need to maximize the profit from producing earl grey and English breakfast teabags given certain constraints.

### Variables
- \(x\): Number of earl grey teabags
- \(y\): Number of English breakfast teabags

### Objective Function
Maximize profit \(P = 0.30x + 0.25y\)

### Constraints
1. **Black Tea Availability**: \(25x + 20y \leq 3000\)
2. **Demand for Earl Grey vs English Breakfast**: \(x \geq 4y\)
3. **Minimum English Breakfast Teabags**: \(y \geq 20\)
4. **Non-Negativity**: \(x \geq 0, y \geq 0\)

## Gurobi Code

```python
import gurobi

def solve_tea_bag_problem():
    # Create a new model
    model = gurobi.Model()

    # Define variables
    x = model.addVar(name="earl_grey", obj=0.30)  # Number of earl grey teabags
    y = model.addVar(name="english_breakfast", obj=0.25)  # Number of English breakfast teabags

    # Black tea availability constraint
    model.addConstr(25 * x + 20 * y <= 3000, name="black_tea_availability")

    # Demand constraint for earl grey vs english breakfast
    model.addConstr(x >= 4 * y, name="demand_earl_grey")

    # Minimum English breakfast teabags constraint
    model.addConstr(y >= 20, name="min_english_breakfast")

    # Solve the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Solution: earl grey = {x.varValue}, english breakfast = {y.varValue}")
        print(f"Max Profit: {model.objVal}")
    else:
        print("No optimal solution found")

solve_tea_bag_problem()
```