## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The sandwich store wants to maximize its profit by producing the optimal number of subs and flatbreads given the constraints on preparation and toasting time.

Let's define the decision variables:

- \(x\): the number of subs to produce
- \(y\): the number of flatbreads to produce

The objective function to maximize profit is:
\[ \text{Maximize:} \quad 3x + 2.5y \]

Subject to the constraints:
1. Preparation time: \( 3x + 4y \leq 2000 \)
2. Toasting time: \( 2x + y \leq 2200 \)
3. Non-negativity: \( x \geq 0, y \geq 0 \)

## Gurobi Code

To solve this problem using Gurobi in Python, we will use the Gurobi Python API. 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 for the problem:

```python
import gurobi as gp

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

# Define the decision variables
x = m.addVar(name="subs", lb=0, vtype=gp.GRB.CONTINUOUS)  # Number of subs
y = m.addVar(name="flatbreads", lb=0, vtype=gp.GRB.CONTINUOUS)  # Number of flatbreads

# Objective function: Maximize profit
m.setObjective(3*x + 2.5*y, gp.GRB.MAXIMIZE)

# Constraints
m.addConstr(3*x + 4*y <= 2000, name="prep_time")  # Preparation time constraint
m.addConstr(2*x + y <= 2200, name="toast_time")  # Toasting time constraint

# Solve the model
m.optimize()

# Check if the model is optimized
if m.status == gp.GRB.OPTIMAL:
    print(f"Optimal solution found. Number of subs: {x.varValue}, Number of flatbreads: {y.varValue}")
    print(f"Max Profit: ${3*x.varValue + 2.5*y.varValue:.2f}")
else:
    print("The model is infeasible or no solution exists.")
```