## Problem Description and Formulation

The problem is an optimization problem with the goal to maximize the objective function:

\[ 8 \times \text{oreos} + 9 \times \text{cheeseburgers} + 9 \times \text{lemons} \]

subject to several constraints related to the sourness index and grams of fiber from each variable.

## Constraints

1. **Sourness Index Constraints:**
   - Total sourness index from oreos and lemons: \( 9 \times \text{oreos} + 19 \times \text{lemons} \geq 23 \)
   - Total sourness index from cheeseburgers and lemons: \( 7 \times \text{cheeseburgers} + 19 \times \text{lemons} \leq 79 \)
   - Total sourness index from oreos and cheeseburgers: \( 9 \times \text{oreos} + 7 \times \text{cheeseburgers} \leq 120 \)
   - Total sourness index from all: \( 9 \times \text{oreos} + 7 \times \text{cheeseburgers} + 19 \times \text{lemons} \leq 120 \)

2. **Grams of Fiber Constraints:**
   - Grams of fiber from cheeseburgers and lemons: \( 7 \times \text{cheeseburgers} + 1 \times \text{lemons} \geq 15 \)
   - Grams of fiber from oreos and cheeseburgers: \( 1 \times \text{oreos} + 7 \times \text{cheeseburgers} \leq 95 \)
   - Grams of fiber from cheeseburgers and lemons: \( 7 \times \text{cheeseburgers} + 1 \times \text{lemons} \leq 35 \)
   - Total grams of fiber: \( 1 \times \text{oreos} + 7 \times \text{cheeseburgers} + 1 \times \text{lemons} \leq 35 \)

## Gurobi Code Formulation

```python
import gurobipy as gp

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

# Define variables
oreos = m.addVar(name="oreos", lb=0)  # Non-negative
cheeseburgers = m.addVar(name="cheeseburgers", lb=0)  # Non-negative
lemons = m.addVar(name="lemons", lb=0)  # Non-negative

# Objective function
m.setObjective(8 * oreos + 9 * cheeseburgers + 9 * lemons, gp.GRB.MAXIMIZE)

# Constraints
# 1. Sourness index from oreos and lemons >= 23
m.addConstraint(9 * oreos + 19 * lemons >= 23, name="sourness_oreos_lemons")

# 2. Sourness index from cheeseburgers and lemons <= 79
m.addConstraint(7 * cheeseburgers + 19 * lemons <= 79, name="sourness_cheeseburgers_lemons")

# 3. Sourness index from oreos and cheeseburgers <= 120
m.addConstraint(9 * oreos + 7 * cheeseburgers <= 120, name="sourness_oreos_cheeseburgers")

# 4. Total sourness index <= 120
m.addConstraint(9 * oreos + 7 * cheeseburgers + 19 * lemons <= 120, name="total_sourness")

# 5. Grams of fiber from cheeseburgers and lemons >= 15
m.addConstraint(7 * cheeseburgers + lemons >= 15, name="fiber_cheeseburgers_lemons")

# 6. Grams of fiber from oreos and cheeseburgers <= 95
m.addConstraint(oreos + 7 * cheeseburgers <= 95, name="fiber_oreos_cheeseburgers")

# 7. Grams of fiber from cheeseburgers and lemons <= 35
m.addConstraint(7 * cheeseburgers + lemons <= 35, name="fiber_cheeseburgers_lemons_max")

# 8. Total grams of fiber <= 35
m.addConstraint(oreos + 7 * cheeseburgers + lemons <= 35, name="total_fiber")

# Solve the model
m.optimize()

# Print the solution
if m.status == gp.GRB.OPTIMAL:
    print("Objective: ", m.objVal)
    print("Oreos: ", oreos.varValue)
    print("Cheeseburgers: ", cheeseburgers.varValue)
    print("Lemons: ", lemons.varValue)
else:
    print("The model is infeasible")
```