## Problem Description and Formulation

The problem is a linear programming optimization problem. The goal is to minimize the operating costs of two caviar production locations, an eastern location and a western location, while meeting the weekly demand for three types of caviar: cheap, regular, and expensive.

### Decision Variables

Let \(x_e\) be the number of days per week the eastern location operates, and \(x_w\) be the number of days per week the western location operates.

### Objective Function

The objective is to minimize the total operating cost per week. The eastern location costs $1000 to operate per day, and the western location costs $2000 to operate per day. Therefore, the objective function is:

\[ \text{Minimize:} \quad 1000x_e + 2000x_w \]

### Constraints

1. **Cheap Caviar Constraint:** The eastern location produces 5 tons of cheap caviar per day, and the western location produces 2 tons of cheap caviar per day. The company must provide 25 tons of cheap caviar per week.

\[ 5x_e + 2x_w \geq 25 \]

2. **Regular Caviar Constraint:** The eastern location produces 7 tons of regular caviar per day, and the western location produces 6 tons of regular caviar per day. The company must provide 35 tons of regular caviar per week.

\[ 7x_e + 6x_w \geq 35 \]

3. **Expensive Caviar Constraint:** The eastern location produces 1 ton of expensive caviar per day, and the western location produces 4 tons of expensive caviar per day. The company must provide 15 tons of expensive caviar per week.

\[ x_e + 4x_w \geq 15 \]

4. **Non-Negativity Constraints:** The number of days per week each location operates cannot be negative.

\[ x_e \geq 0, \quad x_w \geq 0 \]

5. **Integer Constraints:** Since the number of days must be a whole number, \(x_e\) and \(x_w\) should be integers. However, Gurobi can handle this by setting the variable types appropriately.

## Gurobi Code

```python
import gurobi

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

    # Define the decision variables
    x_e = model.addVar(name="Eastern_Days", lb=0, vtype=gurobi.GRB.INTEGER)
    x_w = model.addVar(name="Western_Days", lb=0, vtype=gurobi.GRB.INTEGER)

    # Objective function: Minimize operating costs
    model.setObjective(1000 * x_e + 2000 * x_w, gurobi.GRB.MINIMIZE)

    # Constraints
    model.addConstr(5 * x_e + 2 * x_w >= 25, name="Cheap_Caviar_Constraint")
    model.addConstr(7 * x_e + 6 * x_w >= 35, name="Regular_Caviar_Constraint")
    model.addConstr(x_e + 4 * x_w >= 15, name="Expensive_Caviar_Constraint")

    # Solve the model
    model.optimize()

    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Solution: Eastern location operates {x_e.varValue} days, Western location operates {x_w.varValue} days")
        print(f"Minimum Cost: ${model.objVal}")
    else:
        print("The problem is infeasible")

solve_caviar_problem()
```