## Problem Description and Formulation

The problem is an optimization problem with two variables: 'corn cobs' and 'cherry pies'. The goal is to maximize the objective function: $7.91 \times \text{corn cobs} + 4.62 \times \text{cherry pies}$, subject to various constraints related to grams of fat, sourness index, and milligrams of calcium.

## Constraints

1. **Grams of Fat from Corn Cobs and Cherry Pies**: 
   - Each corn cob contains 20 grams of fat ($r0_{x0} = 20$).
   - Each cherry pie contains 16 grams of fat ($r0_{x1} = 16$).
   - The total fat from both must be at least 56 grams and at most 101 grams.

2. **Sourness Index from Corn Cobs and Cherry Pies**:
   - The sourness index of corn cobs is 15 ($r1_{x0} = 15$).
   - The sourness index of cherry pies is 16 ($r1_{x1} = 16$).
   - The total sourness index must be at least 39 and at most 47.

3. **Milligrams of Calcium from Corn Cobs and Cherry Pies**:
   - Corn cobs contain 16 milligrams of calcium ($r2_{x0} = 16$).
   - Cherry pies contain 15 milligrams of calcium ($r2_{x1} = 15$).
   - The total calcium must be at least 25 milligrams and at most 97 milligrams.

4. **Additional Constraints**:
   - $-3 \times \text{corn cobs} + 9 \times \text{cherry pies} \geq 0$.
   - Corn cobs can be a non-integer number, but cherry pies must be a whole number.

## Gurobi Code Formulation

```python
import gurobi

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

    # Define variables
    corn_cobs = model.addVar(name="corn_cobs", lb=0)  # Non-integer
    cherry_pies = model.addVar(name="cherry_pies", lb=0, integrality=gurobi.GRB.INTEGER)  # Integer

    # Objective function
    model.setObjective(7.91 * corn_cobs + 4.62 * cherry_pies, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(20 * corn_cobs + 16 * cherry_pies >= 56, name="fat_min")
    model.addConstr(20 * corn_cobs + 16 * cherry_pies <= 101, name="fat_max")

    model.addConstr(15 * corn_cobs + 16 * cherry_pies >= 39, name="sourness_min")
    model.addConstr(15 * corn_cobs + 16 * cherry_pies <= 47, name="sourness_max")

    model.addConstr(16 * corn_cobs + 15 * cherry_pies >= 25, name="calcium_min")
    model.addConstr(16 * corn_cobs + 15 * cherry_pies <= 97, name="calcium_max")

    model.addConstr(-3 * corn_cobs + 9 * cherry_pies >= 0, name="additional_constraint")

    # Optimize
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal Solution:")
        print(f"Corn Cobs: {corn_cobs.varValue}")
        print(f"Cherry Pies: {cherry_pies.varValue}")
        print(f"Objective: {model.objVal}")
    else:
        print("No optimal solution found.")

solve_optimization_problem()
```