## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The sandwich shop wants to maximize its profit by producing the optimal number of Sandwich A and Sandwich B, given the constraints on the availability of cheddar and American cheese.

Let's define the decision variables:

* `x`: the number of Sandwich A to produce
* `y`: the number of Sandwich B to produce

The objective function is to maximize the total profit:

* Profit per Sandwich A: $5
* Profit per Sandwich B: $6
* Total profit: `5x + 6y`

The constraints are:

* Cheddar cheese availability: `3x + 5y <= 500`
* American cheese availability: `3x + 2y <= 400`
* Non-negativity constraints: `x >= 0`, `y >= 0`

## Gurobi Code

```python
import gurobipy as gp

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

# Define the decision variables
x = m.addVar(name="Sandwich_A", lb=0, ub=None, obj=5)
y = m.addVar(name="Sandwich_B", lb=0, ub=None, obj=6)

# Add constraints
m.addConstr(3*x + 5*y <= 500, name="Cheddar_Cheese")
m.addConstr(3*x + 2*y <= 400, name="American_Cheese")

# Solve the model
m.optimize()

# Print the results
if m.status == gp.GRB_OPTIMAL:
    print(f"Optimal solution: x = {x.varValue}, y = {y.varValue}")
    print(f"Maximum profit: ${5*x.varValue + 6*y.varValue:.2f}")
else:
    print("No optimal solution found")
```