## Problem Description and Formulation

The bakery shop needs to determine the optimal number of strawberry and caramel brownies to produce daily in order to maximize revenue. The problem can be formulated as a linear programming problem with the following constraints:

- The shop must make at least 50 strawberry brownies.
- The shop must make at least 75 caramel brownies.
- The shop can make at most 100 strawberry brownies.
- The shop can make at most 150 caramel brownies.
- The shop makes at least twice as many strawberry brownies as caramel brownies.

Let \(S\) be the number of strawberry brownies and \(C\) be the number of caramel brownies. The objective function to maximize revenue is:

\[ \text{Maximize:} \quad 1.5S + 2C \]

Subject to:

1. \( S \geq 50 \)
2. \( C \geq 75 \)
3. \( S \leq 100 \)
4. \( C \leq 150 \)
5. \( S \geq 2C \)

## Gurobi Code

To solve this problem using Gurobi in Python, we can use the following code:

```python
import gurobi as gp

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

# Define variables
S = m.addVar(lb=0, ub=100, name="Strawberry_Brownies", vtype=gp.GRB.CONTINUOUS)
C = m.addVar(lb=0, ub=150, name="Caramel_Brownies", vtype=gp.GRB.CONTINUOUS)

# Objective function: Maximize 1.5S + 2C
m.setObjective(1.5*S + 2*C, gp.GRB.MAXIMIZE)

# Constraints
m.addConstr(S >= 50, name="Min_Strawberry")
m.addConstr(C >= 75, name="Min_Caramel")
m.addConstr(S <= 100, name="Max_Strawberry")
m.addConstr(C <= 150, name="Max_Caramel")
m.addConstr(S >= 2*C, name="Strawberry_vs_Caramel")

# Solve the model
m.optimize()

# Print the results
if m.status == gp.GRB.OPTIMAL:
    print("Optimal Solution:")
    print(f"Strawberry Brownies: {S.varValue}")
    print(f"Caramel Brownies: {C.varValue}")
    print(f"Max Revenue: {m.objVal}")
else:
    print("No optimal solution found.")
```