## Problem Description and Formulation

The problem is an optimization problem with three variables: 'bowls of instant ramen', 'corn cobs', and 'bowls of cereal'. The objective is to minimize the function:

\[ 2.11 \times \text{bowls of instant ramen} + 9.07 \times \text{corn cobs} + 3.76 \times \text{bowls of cereal} \]

subject to several constraints related to the milligrams of calcium from each food item.

## Constraints

1. Milligrams of calcium in each item: 
   - Bowls of instant ramen: 16 mg
   - Corn cobs: 30 mg
   - Bowls of cereal: 28 mg

2. Minimum calcium requirements:
   - From bowls of instant ramen and bowls of cereal: 73 mg
   - From corn cobs and bowls of cereal: 30 mg
   - From all three: 30 mg

3. Additional constraints:
   - \(-9 \times \text{bowls of instant ramen} + 6 \times \text{bowls of cereal} \geq 0\)
   - \(-2 \times \text{bowls of instant ramen} + 8 \times \text{corn cobs} \geq 0\)
   - Total calcium from all three: \(\leq 113\) mg

4. Variable constraints:
   - Bowls of instant ramen: integer, whole number
   - Corn cobs: integer, whole number
   - Bowls of cereal: can be fractional

## Gurobi Code Formulation

```python
import gurobipy as gp

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

# Define variables
bowls_ramen = m.addVar(name="bowls_ramen", lowBound=0, vtype=gp.GRB.INTEGER)
corn_cobs = m.addVar(name="corn_cobs", lowBound=0, vtype=gp.GRB.INTEGER)
bowls_cereal = m.addVar(name="bowls_cereal", lowBound=0)

# Objective function
m.setObjective(2.11 * bowls_ramen + 9.07 * corn_cobs + 3.76 * bowls_cereal, gp.GRB.MINIMIZE)

# Constraints
m.addConstr(16 * bowls_ramen + 28 * bowls_cereal >= 73, name="min_calcium_ramen_cereal")
m.addConstr(30 * corn_cobs + 28 * bowls_cereal >= 30, name="min_calcium_corn_cereal")
m.addConstr(16 * bowls_ramen + 30 * corn_cobs + 28 * bowls_cereal >= 30, name="min_calcium_all")
m.addConstr(-9 * bowls_ramen + 6 * bowls_cereal >= 0, name="constraint_ramen_cereal")
m.addConstr(-2 * bowls_ramen + 8 * corn_cobs >= 0, name="constraint_ramen_corn")
m.addConstr(16 * bowls_ramen + 30 * corn_cobs + 28 * bowls_cereal <= 113, name="max_calcium_all")

# Solve the model
m.optimize()

# Print solution
if m.status == gp.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Bowls of instant ramen: {bowls_ramen.varValue}")
    print(f"Corn cobs: {corn_cobs.varValue}")
    print(f"Bowls of cereal: {bowls_cereal.varValue}")
    print(f"Objective: {m.objVal}")
else:
    print("No optimal solution found.")
```