## Problem Description and Formulation

The problem is a linear programming optimization problem. Jason needs to consume at least 10 units of calcium, 15 units of potassium, and 13 units of magnesium. He can achieve this by drinking either sports drinks or coconut water, each with different nutritional contents and costs.

- Sports drink: $5 per bottle, 1 calcium, 2 potassium, 3 magnesium
- Coconut water: $3 per bottle, 4 calcium, 1 potassium, 2 magnesium

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

## Mathematical Formulation

Let \(x\) be the number of sports drinks and \(y\) be the number of coconut waters.

The objective function to minimize is: \(5x + 3y\)

Subject to the constraints:
1. Calcium: \(x + 4y \geq 10\)
2. Potassium: \(2x + y \geq 15\)
3. Magnesium: \(3x + 2y \geq 13\)
4. Non-negativity: \(x \geq 0, y \geq 0\)

## Gurobi Code

```python
import gurobi

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

    # Define variables
    x = model.addVar(name="sports_drink", lb=0, vtype=gurobi.GRB.CONTINUOUS)
    y = model.addVar(name="coconut_water", lb=0, vtype=gurobi.GRB.CONTINUOUS)

    # Objective function: Minimize 5x + 3y
    model.setObjective(5 * x + 3 * y, sense=gurobi.GRB.MINIMIZE)

    # Constraints
    model.addConstr(x + 4 * y >= 10, name="calcium_requirement")
    model.addConstr(2 * x + y >= 15, name="potassium_requirement")
    model.addConstr(3 * x + 2 * y >= 13, name="magnesium_requirement")

    # Optimize
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal cost: ${model.objval:.2f}")
        print(f"Sports drinks: {x.varValue:.2f} bottles")
        print(f"Coconut waters: {y.varValue:.2f} bottles")
    else:
        print("No optimal solution found.")

if __name__ == "__main__":
    jason_nutrition_problem()
```