## Problem Description and Formulation

The pet store needs to mix two bags, A and B, to feed their dogs. The nutritional content of each bag is as follows:
- Bag A: 3 units of protein, 4 units of calcium
- Bag B: 4 units of protein, 2 units of calcium

The mixture must meet the following nutritional requirements:
- At least 30 units of protein
- At least 35 units of calcium

The costs of the bags are:
- Bag A: $3.50 per bag
- Bag B: $2.50 per bag

The goal is to minimize the cost of the mixture while meeting the nutritional requirements.

## Mathematical Formulation

Let's denote the number of bags of type A and B to be used as \(x_A\) and \(x_B\), respectively.

The objective function to minimize the total cost is:
\[ \text{Minimize:} \quad 3.50x_A + 2.50x_B \]

Subject to the constraints:
\[ 3x_A + 4x_B \geq 30 \] (protein requirement)
\[ 4x_A + 2x_B \geq 35 \] (calcium requirement)
\[ x_A \geq 0, x_B \geq 0 \] (non-negativity constraints)

## Gurobi Code

```python
import gurobi

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

    # Define the variables
    x_A = model.addVar(name="x_A", lb=0, vtype=gurobi.GRB.CONTINUOUS)
    x_B = model.addVar(name="x_B", lb=0, vtype=gurobi.GRB.CONTINUOUS)

    # Define the objective function
    model.setObjective(3.50 * x_A + 2.50 * x_B, gurobi.GRB.MINIMIZE)

    # Add constraints
    model.addConstr(3 * x_A + 4 * x_B >= 30, name="protein_requirement")
    model.addConstr(4 * x_A + 2 * x_B >= 35, name="calcium_requirement")

    # Optimize the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal Solution:")
        print(f"Bag A: {x_A.varValue} bags")
        print(f"Bag B: {x_B.varValue} bags")
        print(f"Total Cost: ${model.objVal:.2f}")
    else:
        print("The problem is infeasible.")

solve_pet_store_mixture_problem()
```