Here's the formulation and the Gurobi code:

**Decision Variables:**

* `e`: Number of days per week the eastern location operates.
* `w`: Number of days per week the western location operates.

**Objective Function:**

Minimize total cost: `1000e + 2000w`

**Constraints:**

* Cheap caviar production: `5e + 2w >= 25`
* Regular caviar production: `7e + 6w >= 35`
* Expensive caviar production: `1e + 4w >= 15`
* Non-negativity: `e >= 0`, `w >= 0`


```python
import gurobipy as gp

# Create a new model
model = gp.Model("CaviarProduction")

# Create variables
e = model.addVar(lb=0, name="Eastern_Days")
w = model.addVar(lb=0, name="Western_Days")

# Set objective function
model.setObjective(1000*e + 2000*w, gp.GRB.MINIMIZE)

# Add constraints
model.addConstr(5*e + 2*w >= 25, "Cheap_Caviar")
model.addConstr(7*e + 6*w >= 35, "Regular_Caviar")
model.addConstr(1*e + 4*w >= 15, "Expensive_Caviar")


# Optimize model
model.optimize()

# Print results
if model.status == gp.GRB.OPTIMAL:
    print(f"Eastern Location Days: {e.x}")
    print(f"Western Location Days: {w.x}")
    print(f"Total Cost: ${model.objVal}")
else:
    print("Infeasible or unbounded")

```
