## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The goal is to maximize the profit of a tea shop by determining the optimal number of bottles of oolong tea (`x1`) and green tea (`x2`) to produce daily.

### Objective Function

The profit per bottle of oolong tea is $30, and the profit per bottle of green tea is $20. The objective function to maximize the total profit (`P`) is:

`P = 30x1 + 20x2`

### Constraints

1. **Non-Negativity Constraints**: The number of bottles of each tea type produced must be greater than or equal to 0.
   - `x1 >= 0`
   - `x2 >= 0`

2. **Demand Constraints**: The current demand for tea is at most 100 bottles of oolong tea per day and at most 80 bottles of green tea per day.
   - `x1 <= 100`
   - `x2 <= 80`

3. **Supply Constraint**: The shop only has enough supply to make 150 bottles of either type each day. This implies that the total production of both teas cannot exceed 150 bottles.
   - `x1 + x2 <= 150`

## 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:

```bash
pip install gurobi
```

Here's the Gurobi code to solve the problem:

```python
import gurobi as gp

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

# Define variables
x1 = m.addVar(lb=0, name="Oolong_Tea")  # Bottles of oolong tea
x2 = m.addVar(lb=0, name="Green_Tea")   # Bottles of green tea

# Objective function: Maximize profit
m.setObjective(30*x1 + 20*x2, gp.GRB.MAXIMIZE)

# Demand constraints
m.addConstr(x1 <= 100, name="Oolong_Demand_Constraint")
m.addConstr(x2 <= 80, name="Green_Demand_Constraint")

# Supply constraint
m.addConstr(x1 + x2 <= 150, name="Supply_Constraint")

# Optimize the model
m.optimize()

# Print the results
if m.status == gp.GRB.OPTIMAL:
    print("Optimal Solution:")
    print(f"Oolong Tea: {x1.varValue} bottles")
    print(f"Green Tea: {x2.varValue} bottles")
    print(f"Max Profit: ${30*x1.varValue + 20*x2.varValue}")
else:
    print("No optimal solution found.")
```