## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to minimize the cost of running two bakeries, Eastside and Westside, to meet the demand for three types of bagels: everything, blueberry, and regular.

### Decision Variables

Let \(x\) be the number of hours the Eastside bakery is run, and \(y\) be the number of hours the Westside bakery is run.

### Objective Function

The objective is to minimize the total cost of running the bakeries. The Eastside bakery costs $300 to run for 1 hour, and the Westside bakery costs $500 to run for 1 hour. Therefore, the objective function is:

\[ \text{Minimize:} \quad 300x + 500y \]

### Constraints

1. **Everything Bagels**: The Eastside bakery yields 100 everything bagels per hour, and the Westside bakery yields 50 everything bagels per hour. The company must produce at least 800 everything bagels.

\[ 100x + 50y \geq 800 \]

2. **Blueberry Bagels**: The Eastside bakery yields 80 blueberry bagels per hour, and the Westside bakery yields 60 blueberry bagels per hour. The company must produce at least 600 blueberry bagels.

\[ 80x + 60y \geq 600 \]

3. **Regular Bagels**: The Eastside bakery yields 30 regular bagels per hour, and the Westside bakery yields 100 regular bagels per hour. The company must produce at least 1000 regular bagels.

\[ 30x + 100y \geq 1000 \]

4. **Non-Negativity**: The number of hours each bakery is run cannot be negative.

\[ x \geq 0, \quad y \geq 0 \]

## Gurobi Code

```python
import gurobi

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

    # Decision variables
    x = model.addVar(name="Eastside_hours", lb=0, obj=300)  # Hours for Eastside bakery
    y = model.addVar(name="Westside_hours", lb=0, obj=500)  # Hours for Westside bakery

    # Constraints
    model.addConstr(x * 100 + y * 50 >= 800, name="Everything_bagels")  # Everything bagels constraint
    model.addConstr(x * 80 + y * 60 >= 600, name="Blueberry_bagels")  # Blueberry bagels constraint
    model.addConstr(x * 30 + y * 100 >= 1000, name="Regular_bagels")  # Regular bagels constraint

    # Solve the model
    model.optimize()

    # Output solution
    if model.status == gurobi.GRB.Status.OPTIMAL:
        print(f"Optimal solution found. Eastside bakery: {x.varValue} hours, Westside bakery: {y.varValue} hours")
        print(f"Minimum cost: ${model.objVal:.2f}")
    else:
        print("No optimal solution found.")

# Run the function
bagel_production_problem()
```