## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to minimize the cost of tuna salad sandwiches and chicken salad sandwiches while meeting the daily requirements of protein (at least 100 units) and fat (at least 150 units).

## Decision Variables

Let \(T\) be the number of tuna salad sandwiches and \(C\) be the number of chicken salad sandwiches.

## Objective Function

The objective is to minimize the total cost: \(5T + 7C\).

## Constraints

1. Protein constraint: \(20T + 25C \geq 100\)
2. Fat constraint: \(25T + 15C \geq 150\)
3. Non-negativity constraints: \(T \geq 0, C \geq 0\)
4. Since we cannot have a fraction of a sandwich, \(T\) and \(C\) should be integers.

## Gurobi Code

```python
import gurobi

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

    # Define variables
    T = model.addVar(lb=0, vtype=gurobi.GRB.INTEGER, name="Tuna")
    C = model.addVar(lb=0, vtype=gurobi.GRB.INTEGER, name="Chicken")

    # Objective function: minimize cost
    model.setObjective(5*T + 7*C, gurobi.GRB.MINIMIZE)

    # Constraints
    model.addConstr(20*T + 25*C >= 100, name="Protein")
    model.addConstr(25*T + 15*C >= 150, name="Fat")

    # Solve the model
    model.optimize()

    # Check if the model is optimized
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution: Tuna = {T.varValue}, Chicken = {C.varValue}")
        print(f"Minimum cost: ${model.objVal:.2f}")
    elif model.status == gurobi.GRB.INFEASIBLE:
        print("The model is infeasible.")
    else:
        print("The model has a non-optimal status.")

solve_sandwich_problem()
```