## Symbolic Representation

To solve the given optimization problem, we first need to convert the natural language description into a symbolic representation.

Let's define the symbolic variables as follows:

- $x_1$ represents the number of vanilla ice cream cones.
- $x_2$ represents the number of chocolate ice cream cones.

The objective is to maximize profit. Given that the profit per cone of vanilla ice cream is $2 and the profit per cone of chocolate ice cream is $3, the objective function can be represented as:

Maximize: $2x_1 + 3x_2$

The constraints based on the problem description are:

1. $x_1 \geq 20$ (at least 20 cones of vanilla ice cream)
2. $x_1 \leq 50$ (not more than 50 cones of vanilla ice cream)
3. $x_2 \geq 25$ (at least 25 cones of chocolate ice cream)
4. $x_2 \leq 60$ (not more than 60 cones of chocolate ice cream)
5. $x_1 + x_2 \leq 80$ (in total, at most 80 cones)

## Symbolic Representation in JSON Format

```json
{
    'sym_variables': [('x1', 'vanilla ice cream cones'), ('x2', 'chocolate ice cream cones')],
    'objective_function': '2*x1 + 3*x2',
    'constraints': [
        'x1 >= 20',
        'x1 <= 50',
        'x2 >= 25',
        'x2 <= 60',
        'x1 + x2 <= 80'
    ]
}
```

## Gurobi Code in Python

```python
import gurobipy as gp

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

# Define the variables
x1 = model.addVar(lb=20, ub=50, name="vanilla_cones")  # vanilla ice cream cones
x2 = model.addVar(lb=25, ub=60, name="chocolate_cones")  # chocolate ice cream cones

# Objective function: maximize profit
model.setObjective(2*x1 + 3*x2, gp.GRB.MAXIMIZE)

# Additional constraint: total cones not exceeding 80
model.addConstraint(x1 + x2 <= 80)

# Solve the model
model.solve()

# Check if the model is solved successfully
if model.status == gp.GRB.Status.OPTIMAL:
    print("Optimal Solution:")
    print(f"Vanilla ice cream cones: {x1.varValue}")
    print(f"Chocolate ice cream cones: {x2.varValue}")
    print(f"Max Profit: {model.objVal}")
else:
    print("The model is infeasible or has no solution.")
```