## Problem Description and Symbolic Representation

The problem involves maximizing revenue by determining the number of ice cream cones and cups to sell, given constraints on available scoops of ice cream and grams of toppings.

### Symbolic Variables:
- $x_1$ : Number of ice cream cones
- $x_2$ : Number of ice cream cups

### Objective Function:
Maximize revenue $R = 3x_1 + 3.50x_2$

### Constraints:
1. **Scoops of Ice Cream Constraint**: $3x_1 + 4x_2 \leq 500$
2. **Grams of Toppings Constraint**: $5x_1 + 6x_2 \leq 1000$
3. **Non-Negativity Constraints**: $x_1 \geq 0, x_2 \geq 0$

## Symbolic Representation in JSON Format
```json
{
    'sym_variables': [('x1', 'ice cream cones'), ('x2', 'ice cream cups')],
    'objective_function': '3*x1 + 3.50*x2',
    'constraints': [
        '3*x1 + 4*x2 <= 500',
        '5*x1 + 6*x2 <= 1000',
        'x1 >= 0',
        'x2 >= 0'
    ]
}
```

## Gurobi Code in Python
```python
import gurobi

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

    # Define variables
    x1 = model.addVar(name="ice_cream_cones", lb=0, vtype=gurobi.GRB.CONTINUOUS)
    x2 = model.addVar(name="ice_cream_cups", lb=0, vtype=gurobi.GRB.CONTINUOUS)

    # Objective function: Maximize 3*x1 + 3.50*x2
    model.setObjective(3*x1 + 3.50*x2, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(3*x1 + 4*x2 <= 500, name="scoops_constraint")
    model.addConstr(5*x1 + 6*x2 <= 1000, name="toppings_constraint")

    # Solve the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Solution: x1 = {x1.varValue}, x2 = {x2.varValue}")
        print(f"Maximum Revenue: ${model.objVal:.2f}")
    else:
        print("The model is infeasible")

solve_ice_cream_truck_problem()
```