## Step 1: Define the optimization problem
The goal is to maximize the objective function: $6 \times \text{milkshakes} + 2 \times \text{chicken thighs} + 8 \times \text{oreos} + 6 \times \text{granola bars}$.

## Step 2: List all the constraints
1. $\text{Protein from milkshakes} = 4 \times \text{milkshakes}$
2. $\text{Cost of milkshakes} = 9 \times \text{milkshakes}$
3. $\text{Protein from chicken thighs} = 6 \times \text{chicken thighs}$
4. $\text{Cost of chicken thighs} = 7 \times \text{chicken thighs}$
5. $\text{Protein from oreos} = 7 \times \text{oreos}$
6. $\text{Cost of oreos} = 2 \times \text{oreos}$
7. $\text{Protein from granola bars} = 6 \times \text{granola bars}$
8. $\text{Cost of granola bars} = 10 \times \text{granola bars}$

## 3: Translate given constraints into mathematical expressions
- $6 \times \text{chicken thighs} + 6 \times \text{granola bars} \geq 36$
- $7 \times \text{oreos} + 6 \times \text{granola bars} \geq 36$
- $4 \times \text{milkshakes} + 6 \times \text{chicken thighs} + 6 \times \text{granola bars} \geq 18$
- $9 \times \text{milkshakes} + 10 \times \text{granola bars} \geq 25$
- $7 \times \text{oreos} + 6 \times \text{granola bars} \leq 88$
- $4 \times \text{milkshakes} + 6 \times \text{granola bars} \leq 131$
- $4 \times \text{milkshakes} + 6 \times \text{chicken thighs} \leq 116$
- $6 \times \text{chicken thighs} + 6 \times \text{granola bars} \leq 137$
- $4 \times \text{milkshakes} + 6 \times \text{chicken thighs} + 7 \times \text{oreos} \leq 49$
- $4 \times \text{milkshakes} + 7 \times \text{oreos} + 6 \times \text{granola bars} \leq 105$
- $4 \times \text{milkshakes} + 6 \times \text{chicken thighs} + 7 \times \text{oreos} + 6 \times \text{granola bars} \leq 105$
- $9 \times \text{milkshakes} + 10 \times \text{granola bars} \leq 40$
- $7 \times \text{chicken thighs} + 10 \times \text{granola bars} \leq 45$
- $9 \times \text{milkshakes} + 2 \times \text{oreos} \leq 87$
- $9 \times \text{milkshakes} + 2 \times \text{oreos} + 10 \times \text{granola bars} \leq 47$
- $9 \times \text{milkshakes} + 7 \times \text{chicken thighs} + 2 \times \text{oreos} + 10 \times \text{granola bars} \leq 47$

## 4: Implement the optimization problem using Gurobi
```python
import gurobi

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

# Define the variables
milkshakes = model.addVar(name="milkshakes", lb=0)
chicken_thighs = model.addVar(name="chicken_thighs", lb=0)
oreos = model.addVar(name="oreos", lb=0)
granola_bars = model.addVar(name="granola_bars", lb=0)

# Objective function
model.setObjective(6 * milkshakes + 2 * chicken_thighs + 8 * oreos + 6 * granola_bars, gurobi.GRB.MAXIMIZE)

# Constraints
model.addConstr(6 * chicken_thighs + 6 * granola_bars >= 36)
model.addConstr(7 * oreos + 6 * granola_bars >= 36)
model.addConstr(4 * milkshakes + 6 * chicken_thighs + 6 * granola_bars >= 18)
model.addConstr(9 * milkshakes + 10 * granola_bars >= 25)
model.addConstr(7 * oreos + 6 * granola_bars <= 88)
model.addConstr(4 * milkshakes + 6 * granola_bars <= 131)
model.addConstr(4 * milkshakes + 6 * chicken_thighs <= 116)
model.addConstr(6 * chicken_thighs + 6 * granola_bars <= 137)
model.addConstr(4 * milkshakes + 6 * chicken_thighs + 7 * oreos <= 49)
model.addConstr(4 * milkshakes + 7 * oreos + 6 * granola_bars <= 105)
model.addConstr(4 * milkshakes + 6 * chicken_thighs + 7 * oreos + 6 * granola_bars <= 105)
model.addConstr(9 * milkshakes + 10 * granola_bars <= 40)
model.addConstr(7 * chicken_thighs + 10 * granola_bars <= 45)
model.addConstr(9 * milkshakes + 2 * oreos <= 87)
model.addConstr(9 * milkshakes + 2 * oreos + 10 * granola_bars <= 47)
model.addConstr(9 * milkshakes + 7 * chicken_thighs + 2 * oreos + 10 * granola_bars <= 47)

# Allow for non-integer solutions
milkshakes.Integrality = 0
chicken_thighs.Integrality = 0
oreos.Integrality = 0
granola_bars.Integrality = 0

# Optimize the model
model.optimize()

# Print the solution
if model.status == gurobi.GRB.Status.OPTIMAL:
    print("Objective: ", model.objVal)
    print("Milkshakes: ", milkshakes.x)
    print("Chicken Thighs: ", chicken_thighs.x)
    print("Oreos: ", oreos.x)
    print("Granola Bars: ", granola_bars.x)
else:
    print("The model is infeasible")
```