## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The goal is to minimize the cost of buying bottles of chocolate milk and vegetable juice while ensuring that the total amount of potassium, magnesium, and calcium meets the required minimum levels.

Let's define the decision variables:

* `x`: the number of bottles of chocolate milk to buy
* `y`: the number of bottles of vegetable juice to buy

The objective function is to minimize the total cost:

* Cost of chocolate milk: $3.5 per bottle
* Cost of vegetable juice: $6 per bottle

The constraints are:

* Potassium: at least 20 units
* Magnesium: at least 8 units
* Calcium: at least 12 units

## Mathematical Formulation

The mathematical formulation of the problem is:

Minimize: `3.5x + 6y`

Subject to:

* `6x + 9y >= 20` (potassium constraint)
* `4x + 5y >= 8` (magnesium constraint)
* `5x + 7y >= 12` (calcium constraint)
* `x >= 0` and `y >= 0` (non-negativity constraints)

## Gurobi Code

```python
import gurobi

# Create a new Gurobi model
model = gurobi.Model()

# Define the decision variables
x = model.addVar(name="chocolate_milk", lb=0, ub=float('inf'), obj=3.5)
y = model.addVar(name="vegetable_juice", lb=0, ub=float('inf'), obj=6)

# Define the constraints
potassium_constraint = model.addConstr(x * 6 + y * 9 >= 20, name="potassium_constraint")
magnesium_constraint = model.addConstr(x * 4 + y * 5 >= 8, name="magnesium_constraint")
calcium_constraint = model.addConstr(x * 5 + y * 7 >= 12, name="calcium_constraint")

# Set the objective function
model.setObjective(x * 3.5 + y * 6, gurobi.GRB.MINIMIZE)

# Optimize the model
model.optimize()

# Print the results
if model.status == gurobi.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Number of bottles of chocolate milk: {x.varValue:.2f}")
    print(f"Number of bottles of vegetable juice: {y.varValue:.2f}")
    print(f"Minimum cost: ${model.objVal:.2f}")
else:
    print("No optimal solution found.")
```