To solve Cooper's problem, we first need to translate the natural language description into a symbolic representation. Let's denote:

- $x_1$ as the number of potatoes sold,
- $x_2$ as the number of pumpkins sold.

The objective function aims to maximize profit. The profit from selling potatoes is $1.5x_1$ (since each potato is sold for a profit of $1.5), and the profit from selling pumpkins is $2.8x_2$. Therefore, the total profit, which we want to maximize, can be represented as:

\[ \text{Maximize:} \quad 1.5x_1 + 2.8x_2 \]

The constraints are as follows:
1. **Cost Constraint**: The cost of potatoes is $0.50x_1$ and the cost of pumpkins is $0.90x_2$. Cooper can spend at most $1000, so we have:
\[ 0.50x_1 + 0.90x_2 \leq 1000 \]
2. **Pumpkin Sales Constraint**: The number of pumpkins sold is at most a third of the number of potatoes sold:
\[ x_2 \leq \frac{1}{3}x_1 \]
3. **Potato Sales Constraints**: At least 250 potatoes but at most 800 potatoes are sold each month:
\[ 250 \leq x_1 \leq 800 \]

Symbolic representation in JSON format:

```json
{
    'sym_variables': [('x1', 'number of potatoes sold'), ('x2', 'number of pumpkins sold')],
    'objective_function': '1.5*x1 + 2.8*x2',
    'constraints': [
        '0.50*x1 + 0.90*x2 <= 1000',
        'x2 <= (1/3)*x1',
        '250 <= x1 <= 800'
    ]
}
```

To solve this problem using Gurobi in Python, we'll write the following code:

```python
from gurobipy import *

# Create a new model
m = Model("Cooper_Problem")

# Define variables
x1 = m.addVar(lb=250, ub=800, vtype=GRB.INTEGER, name="potatoes")
x2 = m.addVar(vtype=GRB.INTEGER, name="pumpkins")

# Objective function: Maximize profit
m.setObjective(1.5*x1 + 2.8*x2, GRB.MAXIMIZE)

# Constraints
m.addConstr(0.50*x1 + 0.90*x2 <= 1000, "cost_constraint")
m.addConstr(x2 <= (1/3)*x1, "pumpkin_sales_constraint")

# Optimize the model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution: {x1.varName} = {int(x1.x)}, {x2.varName} = {int(x2.x)}")
else:
    print("No optimal solution found")

```
```python
from gurobipy import *

# Create a new model
m = Model("Cooper_Problem")

# Define variables
x1 = m.addVar(lb=250, ub=800, vtype=GRB.INTEGER, name="potatoes")
x2 = m.addVar(vtype=GRB.INTEGER, name="pumpkins")

# Objective function: Maximize profit
m.setObjective(1.5*x1 + 2.8*x2, GRB.MAXIMIZE)

# Constraints
m.addConstr(0.50*x1 + 0.90*x2 <= 1000, "cost_constraint")
m.addConstr(x2 <= (1/3)*x1, "pumpkin_sales_constraint")

# Optimize the model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution: {x1.varName} = {int(x1.x)}, {x2.varName} = {int(x2.x)}")
else:
    print("No optimal solution found")
```