## Step 1: Define the symbolic representation of the problem
First, let's define the symbolic variables and the objective function based on the given problem description.

## Step 2: Identify the variables and their corresponding symbolic representations
The variables are 'oreos', 'peanutbutter sandwiches', and 'cheeseburgers', which can be represented symbolically as $x_0$, $x_1$, and $x_2$ respectively.

## 3: Formulate the objective function
The objective function to maximize is $4x_0 + 5x_1 + 2x_2$.

## 4: List the constraints
The constraints given are:
1. $7x_1 + 3x_2 \geq 31$
2. $5x_0 + 3x_2 \geq 41$
3. $5x_0 + 7x_1 \leq 164$
4. $7x_1 + 3x_2 \leq 165$
5. $5x_0 + 7x_1 + 3x_2 \leq 165$
6. $11x_1 + 8x_2 \leq 93$
7. $4x_0 + 11x_1 \leq 79$
8. $4x_0 + 8x_2 \leq 64$
9. $4x_0 + 11x_1 + 8x_2 \leq 64$
10. $9x_1 + x_2 \leq 77$
11. $11x_0 + 9x_1 \leq 83$
12. $11x_0 + 9x_1 + x_2 \leq 83$
13. $x_0$ is an integer
14. $x_1$ and $x_2$ can be non-integer

## 5: Create the symbolic representation
The symbolic representation of the problem is:
```json
{
'sym_variables': [('x0', 'oreos'), ('x1', 'peanutbutter sandwiches'), ('x2', 'cheeseburgers')],
'objective_function': '4*x0 + 5*x1 + 2*x2',
'constraints': [
'7*x1 + 3*x2 >= 31',
'5*x0 + 3*x2 >= 41',
'5*x0 + 7*x1 <= 164',
'7*x1 + 3*x2 <= 165',
'5*x0 + 7*x1 + 3*x2 <= 165',
'11*x1 + 8*x2 <= 93',
'4*x0 + 11*x1 <= 79',
'4*x0 + 8*x2 <= 64',
'4*x0 + 11*x1 + 8*x2 <= 64',
'9*x1 + x2 <= 77',
'11*x0 + 9*x1 <= 83',
'11*x0 + 9*x1 + x2 <= 83'
]
}
```

## Step 6: Write the Gurobi code
Now, let's write the Gurobi code to solve this optimization problem.

```python
import gurobi

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

    # Define the variables
    x0 = model.addVar(name='oreos', vtype=gurobi.GRB.INTEGER)
    x1 = model.addVar(name='peanutbutter sandwiches')
    x2 = model.addVar(name='cheeseburgers')

    # Define the objective function
    model.setObjective(4*x0 + 5*x1 + 2*x2, gurobi.GRB.MAXIMIZE)

    # Add constraints
    model.addConstr(7*x1 + 3*x2 >= 31)
    model.addConstr(5*x0 + 3*x2 >= 41)
    model.addConstr(5*x0 + 7*x1 <= 164)
    model.addConstr(7*x1 + 3*x2 <= 165)
    model.addConstr(5*x0 + 7*x1 + 3*x2 <= 165)
    model.addConstr(11*x1 + 8*x2 <= 93)
    model.addConstr(4*x0 + 11*x1 <= 79)
    model.addConstr(4*x0 + 8*x2 <= 64)
    model.addConstr(4*x0 + 11*x1 + 8*x2 <= 64)
    model.addConstr(9*x1 + x2 <= 77)
    model.addConstr(11*x0 + 9*x1 <= 83)
    model.addConstr(11*x0 + 9*x1 + x2 <= 83)

    # Optimize the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print('Objective: ', model.objVal)
        print('oreos: ', x0.varValue)
        print('peanutbutter sandwiches: ', x1.varValue)
        print('cheeseburgers: ', x2.varValue)
    else:
        print('The model is infeasible')

solve_optimization_problem()
```