## Problem Description and Formulation

The fast-food restaurant needs to determine the optimal number of burgers and sandwiches to sell in order to maximize profit, given certain constraints. Let's denote the number of burgers to be sold as \(B\) and the number of sandwiches as \(S\).

### Constraints:

1. **Minimum Sales Requirements:**
   - \(B \geq 100\)
   - \(S \geq 80\)

2. **Supply Limitations:**
   - \(B \leq 120\)
   - \(S \leq 100\)

3. **Total Items Limitation:**
   - \(B + S \leq 200\)

4. **Non-Negativity Constraints:**
   - \(B \geq 0\)
   - \(S \geq 0\)

However, given that there are minimum requirements already specified, the non-negativity constraints are implicitly satisfied.

### Objective Function:

The profit per burger is $4.5, and the profit per sandwich is $5. The objective is to maximize the total profit \(P\), which can be represented as:
\[ P = 4.5B + 5S \]

## Gurobi Code Formulation

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

```python
import gurobi

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

    # Define variables
    B = model.addVar(lb=100, ub=120, name="Burgers")
    S = model.addVar(lb=80, ub=100, name="Sandwiches")

    # Objective function: Maximize profit
    model.setObjective(4.5 * B + 5 * S, gurobi.GRB.MAXIMIZE)

    # Additional constraint: Total items
    model.addConstr(B + S <= 200, name="Total_Items")

    # Solve the model
    model.optimize()

    # Print the results
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal Solution:")
        print(f"Burgers: {B.varValue}")
        print(f"Sandwiches: {S.varValue}")
        print(f"Max Profit: {model.objVal}")
    else:
        print("No optimal solution found.")

maximize_profit()
```

This code defines the problem in Gurobi, solving for the optimal number of burgers and sandwiches to sell in order to maximize profit under the given constraints.