## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The goal is to minimize the cost of creating a final cheese product by mixing two different cheese mixes, Pizza mix and Mac and cheese mix, while meeting the minimum requirements of mozzarella, cheddar, and salt.

Let's define the decision variables:

- $x_1$: The amount of Pizza mix to use.
- $x_2$: The amount of Mac and cheese mix to use.

The objective function to minimize is the total cost:

- The cost per Pizza mix is $3.
- The cost per Mac and cheese mix is $3.25.

So, the objective function is: $3x_1 + 3.25x_2$.

The constraints are based on the minimum requirements of the new product:

- Mozzarella: $4x_1 + x_2 \geq 30$
- Cheddar: $2x_1 + 5x_2 \geq 25$
- Salt: $x_1 + 2x_2 \geq 5$

Also, $x_1 \geq 0$ and $x_2 \geq 0$ because the amount of each mix cannot be negative.

## Gurobi Code

```python
import gurobipy as gp

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

# Define the decision variables
x1 = m.addVar(name="pizza_mix", lb=0)  # Amount of Pizza mix
x2 = m.addVar(name="mac_and_cheese_mix", lb=0)  # Amount of Mac and cheese mix

# Objective function: Minimize the total cost
m.setObjective(3*x1 + 3.25*x2, gp.GRB.MINIMIZE)

# Constraints
m.addConstr(4*x1 + x2 >= 30, name="mozzarella_req")  # Mozzarella requirement
m.addConstr(2*x1 + 5*x2 >= 25, name="cheddar_req")  # Cheddar requirement
m.addConstr(x1 + 2*x2 >= 5, name="salt_req")  # Salt requirement

# Solve the model
m.optimize()

# Print the results
if m.status == gp.GRB.OPTIMAL:
    print(f"Optimal solution found.")
    print(f"Amount of Pizza mix: {x1.varValue}")
    print(f"Amount of Mac and cheese mix: {x2.varValue}")
    print(f"Total cost: {m.objVal}")
else:
    print("No optimal solution found.")
```