## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The goal is to maximize the profit of a brunch restaurant by determining the optimal number of eggs benedicts and hashbrowns to produce, given the available resources (butter and eggs).

Let's define the decision variables:

* \(x\): the number of eggs benedicts to produce
* \(y\): the number of hashbrowns to produce

The objective function to maximize is the total profit:

\[ \text{Maximize:} \quad 4x + 2y \]

Subject to the following constraints:

1. Butter constraint: \( 10x + 5y \leq 5000 \) (total butter used does not exceed 5000 grams)
2. Egg constraint: \( x + 2y \leq 600 \) (total eggs used do not exceed 600)
3. Non-negativity constraints: \( x \geq 0, y \geq 0 \) (number of eggs benedicts and hashbrowns cannot be negative)

## Gurobi Code

```python
import gurobi

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

    # Define the decision variables
    x = model.addVar(lb=0, name="eggs_benedicts")  # Number of eggs benedicts
    y = model.addVar(lb=0, name="hashbrowns")  # Number of hashbrowns

    # Define the objective function (maximize profit)
    model.setObjective(4 * x + 2 * y, gurobi.GRB.MAXIMIZE)

    # Add butter constraint
    model.addConstr(10 * x + 5 * y <= 5000, name="butter_constraint")

    # Add egg constraint
    model.addConstr(x + 2 * y <= 600, name="egg_constraint")

    # Optimize the model
    model.optimize()

    # Check if the model is optimized
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution found: eggs benedicts = {x.varValue}, hashbrowns = {y.varValue}")
        print(f"Maximal profit: ${model.objVal:.2f}")
    else:
        print("No optimal solution found.")

# Run the optimization problem
solve_optimization_problem()
```

This code defines the optimization problem using Gurobi's Python interface, solves it, and prints out the optimal solution and the maximal profit. If no optimal solution is found, it indicates that the problem is infeasible.